roboforum.ru

Технический форум по робототехнике.

ИК Определитель расстояния

Обсуждение и примеры готовых и самосборных компонент для построения роботов.

ИК Определитель расстояния

Сообщение maktep » 14 апр 2007, 19:21

Опять же, почему используете ссопы мне не ясно.
Я использую простую схему ИК светодиод- ИК фотодиод.

Зажигаю ИК светодиод, меряю напр на фотодиоде, выключаю и снова меряю. Если изменения нет, значит и препятствий нет.
Чем больше изменение напр на фотодиоде во время вкл-выкл, тем ближе препятствие. Необходимости в ссоп ваших невижу никакой.
Аватара пользователя
maktep
Правохранитель
 
Сообщения: 197
Зарегистрирован: 23 фев 2007, 02:23
Откуда: Зеленоград

Сообщение maktep » 14 апр 2007, 19:44

Вот примерный код

Светодиод подсоединен на ножку 0 порта А.
Фотодиод подсоединен на ножку 1 порта А. Через резистор притянут к +5В. Анод его - на землю. Резистор к примеру 100к. Зависит от фотодиода.
Подбираю экспериментально.

Код: Выделить всёРазвернуть
int level(){

  int prev_adc,adc;

  PORTA &= ~0x01; //выключаем светодиод, если был вкл.
  prev_adc = read_adc(1);
  PORTA |= 1; //ключаем светодиод
  adc=read_adc(1);

  PORTA &= ~0x01; //выключаем светодиод, чтоб не ел энергию.

  if (adc>prev_adc) return (adc-prev_adc);
  return (prev_adc-adc);
};
Последний раз редактировалось maktep 14 апр 2007, 20:12, всего редактировалось 1 раз.
Аватара пользователя
maktep
Правохранитель
 
Сообщения: 197
Зарегистрирован: 23 фев 2007, 02:23
Откуда: Зеленоград

Сообщение maktep » 14 апр 2007, 19:56

Схема включения:
Вложения
схема.PNG
Аватара пользователя
maktep
Правохранитель
 
Сообщения: 197
Зарегистрирован: 23 фев 2007, 02:23
Откуда: Зеленоград

Сообщение avr123.nm.ru » 14 апр 2007, 20:09

Стабильность сомнительна так как АЦП может при неизменном напряжении на входе давать разный результат.

Наверно в 8-ми битном режиме АЦП эта схема будет лучше работать.
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

Сообщение maktep » 14 апр 2007, 20:10

По результатам опыта шум ацп порядка 6-7 делений АЦП. А реальный сигнал при подносе руки на уровне 100 единиц АЦП.
Аватара пользователя
maktep
Правохранитель
 
Сообщения: 197
Зарегистрирован: 23 фев 2007, 02:23
Откуда: Зеленоград

Сообщение Myp » 14 апр 2007, 20:23

ну прально
вторую лампочку в комнате включил и уже фотодиод чёто принимает....
он вобще всегда чтото принимает, только в полной темноте тока нету


[off]и нафига таие картинки гиганские постить
не судьба уменьшать ато в пол экрана пролистывать замучаешься[/off]
Аватара пользователя
Myp
скрытый хозяин вселенной :)
 
Сообщения: 18018
Зарегистрирован: 18 сен 2006, 12:26
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич

Сообщение Myp » 15 апр 2007, 19:12

maktep писал(а):Схема включения:


а где схема то?
куда потерялась?
Аватара пользователя
Myp
скрытый хозяин вселенной :)
 
Сообщения: 18018
Зарегистрирован: 18 сен 2006, 12:26
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич

Сообщение MegaBIZON » 15 апр 2007, 20:52

Myp писал(а):
maktep писал(а):Схема включения:


а где схема то?
куда потерялась?

Я задел...
Сорри :oops:
Опять хотел уже страницу зделать, и того...
Уже исправил :?
Аватара пользователя
MegaBIZON
 
Сообщения: 6285
Зарегистрирован: 12 янв 2007, 00:34
Откуда: Масква

Сообщение MegaBIZON » 15 апр 2007, 20:53

Myp писал(а):[off]и нафига таие картинки гиганские постить
не судьба уменьшать ато в пол экрана пролистывать замучаешься[/off]

За тем я туда и полез :evil:
Аватара пользователя
MegaBIZON
 
Сообщения: 6285
Зарегистрирован: 12 янв 2007, 00:34
Откуда: Масква

Сообщение 40inD » 16 апр 2007, 11:20

Самый точный определитель расстояния - УЗ по времени отклика. Лазер не берем.
Аватара пользователя
40inD
 
Сообщения: 265
Зарегистрирован: 17 июн 2005, 08:08
Откуда: Москва

Сообщение Myp » 16 апр 2007, 13:33

кстати если вы посмотрите тему где я тсопы мычал то в конце сможете заметить что для поддержки тсопа реально надо 7-8 строк кода

самая трудность это первый раз въехать как он работает
а дальше сплошное удовольствие=)
Аватара пользователя
Myp
скрытый хозяин вселенной :)
 
Сообщения: 18018
Зарегистрирован: 18 сен 2006, 12:26
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич

Сообщение Виталий » 16 апр 2007, 15:44

В любом случае необходимо ставить фильтр на фотодиод и модулятор на светодиод... иначе огромное количество ошибок, ложных срабатываний, в результате чего робот начинает беситься "по непонятным причинам".
Аватара пользователя
Виталий
 
Сообщения: 2114
Зарегистрирован: 08 окт 2004, 16:43
Откуда: St. Petersburg
Skype: quark-bot
ФИО: Клебан Виталий

Сообщение maktep » 16 апр 2007, 16:40

Фильтр - да. Нужен в любом случае.
Этот - конкретизированный. Работает на 2 уровня, задаваемые заранее.
Уровень сигнала него - выдает  единичку.
Уровень сигнала ниже него - выдает 0.

Это есть фильтр на 4 импульса (4 измерения АЦП).
Если все 4 подряд значения АЦП равносильны состоянию 1, то состояние переходит в 1.
Если 4 подряд состояния - ноль, то состояние переходит в ноль.
Все, что промежуточное - не изменяет состояния.

Переделывайте, как хотите.
Фильтр писал прямо сейчас, и не проверял - поэтому могут быть небольшие ошибки.
Суть фильтра уже выложил. И Цифра вообще может эффективно заменять аналоговые фильтры.

Код: Выделить всёРазвернуть

int levels=0;

// 4 значения АЦП идут на фильтр
#define mask 0x0f

//уровень перехода в состояние 1 из нуля
#define level_1 50

//уровень перехода в состояние 0 их 1
#define level_0 45

//они спецально выбраны так, чтобы не было "дерганья" туда и обратно. можно сделать совпадающими

char result_opto;

int filter(){

//смещаем на 1 бит влево для того, чтобы записать новое значение в крайний бит. эта переменная - место где храним значения для обработки.
levels <<= 1;

if (result_opto)
{
 //пишем по умолчанию текущее значение оптопары, ибо она
 //может попасть в некалиброванный диапазон и
 //тогда должна остаться  такого же значения.
  levels |= 1;
};



if (result_opto)
{
  if (level()<=level_0)  levels &= ~0x01;
};

if (!result_opto)
{
  if (level()>level_1)  levels |= 0x01;
};

if (levels&mask==mask)
{
  result_opto=1;
};
if (levels&mask==0)
{
  result_opto=0;
};

return result_opto;
};
Последний раз редактировалось maktep 17 апр 2007, 04:45, всего редактировалось 1 раз.
Аватара пользователя
maktep
Правохранитель
 
Сообщения: 197
Зарегистрирован: 23 фев 2007, 02:23
Откуда: Зеленоград

Сообщение avr123.nm.ru » 16 апр 2007, 18:23

Я советую if  писать со скобками {}   так как на форуме много начинающих.
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

Сообщение Виталий » 16 апр 2007, 18:37

А теперь поднесите ваше устройство к люминисцентной лампе...

Если уж хочется задавать порог, то можно сделать его адаптивным...
Аватара пользователя
Виталий
 
Сообщения: 2114
Зарегистрирован: 08 окт 2004, 16:43
Откуда: St. Petersburg
Skype: quark-bot
ФИО: Клебан Виталий

След.

Вернуться в Готовые модули

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7