Skip to content

2. Дальномер

dmashine edited this page Oct 28, 2016 · 6 revisions

Датчик расстояния.

Ультразвуковой дальномер HC-SR04 На иллюстрации - Ультразвуковой дальномер HC-SR04. Часто конструкторы робота обыгрывают его форму, устанавливая его таким образом, что он находится "где глаза". И они правы - это устройство может оценивать расстояние до окружающих объектов, "видеть" их. Когда контроллер подаёт сигнал на контакт Trig - дальномер издает звук на частоте 40 кГц и слушает, когда придёт "Эхо" - выводит сигнал, соответствующий паузе между изданным и отраженным звуком на контакт echo. Контакты Vcc и Gnd соответственно - для питания/ с подключением практически нет проблем.

Люди не слышат частоту, на которой работает дальномер. А вот домашние питомцы могут отреагировать на него - собаки на этой частоте сигналы дальномера услышат.

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

Тестирование датчика:

Была собрана простейшая схема, загружен в Ардуино проверочный скетч (доступен по https://github.com/dmashine/robotroma/tree/master/test_sketches/sketch_test_NewPing). Открыл в Ардуино IDE графопостроитель по ком-порту и получил график сигнала, соответствующего расстоянию.

У датчика достаточно узкий диапазон определения расстояния: он "видит" очень узкую (4-5 см) полосу прямо перед "собой", без рассеивания сигнала. Датчик реагирует даже на тонкий лист бумаги перед собой. Диапазон измерений - от 5 до 50 см проверен, паспортный больше. В общем, этот датчик вполне подходит для определения положения робота в пространстве. Из минусов - На графике видны пики/провалы, когда датчик терял сигнал. Но они кратковременные, и от них легко избавиться программным фильтром.

Существенно упрощает работу с датчиком библиотека NewPing.

Бывают случаи, когда библиотека NewPing конфликтует с другой используемой библиотекой. При компиляции в таком случае выдается ошибка (symbol from plugin): In function __vector_41': (.text+0x0): multiple definition of __vector_41' В данном случае, следует в файле NewPing.h заменить одну строку (подробнее):

 #define TIMER_ENABLED false
 //#define TIMER_ENABLED true      // Set to "false" to disable the timer ISR (if getting "__vector_7" compile errors set this to false). Default=true

На РОМАНа планируется установка двух таких датчиков. В качестве крепежных элементов используется детский конструктор. Место и угол расположения будут установлены экспериментально, важно учесть чтоб сигнал одного эхом не попадал на другой. Также, следует рассчитывать временные интервалы - за те миллисекунды, пока датчик получает значение, обстановка вокруг может измениться.

Без датчиков робот глух и слеп - а дальномер расскажет нам о ближайших объектах, и позволит избежать столкновения, главное правильно его запрограммировать.