ИК датчик препятствий с определением направления

Недавно начал заниматься сборкой самоходного робота, контролируемого ИК пультом и был вынужден самостоятельно разработать зональный инфракрасный датчик, который может распознавать положение объектов или их движение перед датчиком, происходящее слева направо или наоборот.

Схема ИК датчика с определением направления

ИК датчик препятствий с определением направления

Схема основана на 2 ИК диодах, ИК датчике 36 кГц, МК Tiny13 и нескольких светодиодах. Эти светодиоды используются для регулярной индикации состояния устройства — так что вы можете легко откалибровать его — тут есть такие возможности.

Датчик может обнаружить объект в 3-х различных положениях: ВЛЕВО, СРЕДНИЙ, ВПРАВО

Можно настроить расстояние детектирования в диапазоне от 2 см до 1,5 м потенциометром, который можно увидеть на схеме и на плате. Всякий раз, когда обнаруживается какое-либо изменение в состоянии объекта в поле зрения, сигнал INTERRUPT (IRQ) генерируется на внешние устройства. Благодаря этому процессу в процедуре обработки достаточно, чтобы прочитать состояние входов L и R и знать, что происходит. Возможные ситуации:

LR (левый/правый)

  1. 0 0 — нет объекта в поле зрения
  2. 1 0 — объект находится слева
  3. 0 1 — объект находится справа
  4. 1 1 — объект находится посередине.

Лучше всего ситуация показана на анимированном изображении.

ИК датчик препятствий с определением направления

Несмотря на то, что ИК-диоды работают на несущей частоте 36 кГц, это не мешает работе пульта (тем более этот датчик будет проверять переднюю часть, а у робота второй ИК-приемник для управления сзади).

ИК датчик препятствий с определением направления

Прерывание IRQ генерируется не только тогда, когда что-то появляется в зоне видимости датчика, но и когда оно исчезает из поля зрения. Это значительно облегчает работу процессора. Можно сказать что после чтения прерывания в такой процедуре — состояние просмотра датчика — также можно сразу ввести команды для управления двигателями ведущих колес или другими вещами.

ИК датчик препятствий с определением направления

Сама программа не сложна — она состоит из генерации несущей 36 кГц с помощью Timer0 и подачи ее попеременно к обоим ИК-диодам — после чего приём и анализ того что происходит.

ИК датчик препятствий с определением направления

Также введена буферизация нескольких показаний и только сравнение несколько из тех же самых сигналов запускают сигнал прерывания — он ведь должен быть устойчивым к различным типам помех, включая другие пульты дистанционного управления например телевизора (даже когда один синий LED быстро мигает несколько раз — красный светодиод, сигнализирующий о исходящем сигнале прерывания, срабатывает только один раз). Благодаря этому датчик не будет беспокоить главный процессор нестабильными состояниями когда объект находится на краю чувствительности.

Алгоритм работы программы

  1. Отправляем пакет, то есть несущую на короткое время на левый ИК-диод.
  2. Ждем короткий промежуток времени несколько миллисекунд.
  3. Проверка получает ли ИК-приемник какие-либо отражения.
  4. Если датчик их видит — значит на дороге слева какой-то объект.
  5. Затем делаем те же шаги, но с правым ИК-диодом.

Для суммирования и усреднения времени выполнения всего алгоритма, исправления ошибок и небольшого обобщения — пакеты отправляются в среднем каждые несколько десятков миллисекунд с каждого ИК-диода.

Помехи вообще не проявляются, когда речь идет о каком-либо искусственном освещении, конечно если не приблизить датчик ближе 20 см к люминесцентной лампе, тогда фактически светодиоды иногда будут мигать — хотя прерывание включится только один или два раза. Основной целью создания этого датчика было свести к минимуму влияние таких факторов, и это удалось.

Схема ИК датчика без контроллера

А далее схема аналогичного датчика на TTL микросхемах, это для тех кто не любит микроконтроллеров и прошивок.

ИК датчик препятствий с определением направления

Еще одна приятная особенность этого датчика — возможность корректировать положение ИК-диодов, то есть если они установлены под прямым углом — будет самый широкий диапазон расстояний, если речь идет о видимости датчика по бокам — при увеличении минимального расстояния, с которого объект может быть обнаружен посередине, то есть в области нескольких сантиметров в центре перед датчиком ничего не обнаружено — объект должен быть слегка отодвинут. Но если слегка наклоним их внутрь, то сможем резко изменить условия работы и обнаружить даже тонкие объекты.

Если датчик не обнаруживает никаких отражений после ожидания — это означает что в пределах видимости препятствий нет и можно ехать вперед.

Оцените полезность информации:

0 / 5. Голосов: 0

Расскажите, что надо исправить?