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

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

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

Схема основана на 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 микросхемах, это для тех кто не любит микроконтроллеров и прошивок.

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

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



11- 4,91

НАЖМИТЕ ТУТ И ОТКРОЙТЕ КОММЕНТАРИИ