Для того чтобы человеку выполнить какую-либо физическую работу, ему необходимо видеть. Зрение позволяет понять, куда нам можно идти, чтобы не упереться в стену или не споткнуться, не упасть. Способность видеть предметы и окружающий мир обязательна, чтобы можно было эти предметы определять, брать и переносить, использовать какие-нибудь инструменты. Поэтому логично, что роботу для ориентирования в пространстве тоже необходимо зрение. В применении к машинам оно называется техническим.
Одним из элементов технического зрения является датчик расстояния или, как его часто называют, дальномер. Как следует из названия, датчик определяет расстояния в реальном времени от самого себя до какого-либо предмета или препятствия. Имея в своем распоряжении такие данные, мобильный робот при наличии соответствующего алгоритма в своей программе легко может избегать столкновений с преградами и объезжать их.
По характеру физического явления, положенного в основу работы датчиков, они делятся на несколько видов. Бывают ультразвуковые, инфракрасные и даже лазерные. Перечислены они в порядке возрастания стоимости. В этом уроке мы рассмотрим самый доступный и поэтому самый распространенный ультразвуковой датчик. Его популярность связана еще и с харизматичным внешним видом. Рабочие элементы его конструкции действительно похожи на некое подобие двух механических глаз. Его внешний вид показан на схеме.
Датчик оснащен ультразвуковым излучателем и приемником (отсюда и два цилиндра похожих на глаза). При работе дальномер излучает короткий ультразвуковой импульс, который отражается от объекта и улавливается приемником. При этом фиксируется время, за которое ультразвук ушел и вернулся. Поскольку скорость звука в воздухе известна (при нормальных условиях приблизительно равна 331 м/с), исходя из измеренного времени до получения обратного сигнала (эха), рассчитывается расстояние. Ультразвуковой датчик обладает следующими характеристиками: питается постоянным током напряжением 5 вольт;
эффективный угол: <15°;
может измерять расстояния от 2 до 400 см; разрешение или, другими словами, точность - 0.3 см. Подключается дальномер при помощи 4 ножек (контактов). Все ножки подписаны, их маркировка приведена на рисунке выше. Если повернуть датчик к себе сенсорами, то слева направо функции контактов будут следующими:
1. Vcc - питание со знаком «плюс»;
2. Trig - подача импульса;
3. Echo - контакт, отвечающий за обратный импульс;
4. Gnd - «земля» или нулевой контакт.
Соберите схему измерителя расстояния в соответствии с рисунком.
Для того чтобы работа устройства была более наглядной, используем в устройстве световую сигнализацию с помощью RGB светодиода. Пусть, когда расстояние большое, светодиод светится зеленым цветом, по мере приближения предмета он будет менять цвет на желтый, а в случае если предмет будет совсем близко, изменит цвет на красный. Для реализации этого алгоритма нам необходимо задействовать всего два контакта RGB светодиода - красный и зеленый. При нахождении предмета в средней зоне будут одновременно светить и красный, и зеленый цвет, которые, как известно, при смешении дают желтый цвет.
Для схемы потребуется:
1. Контроллер
2. Макетная плата
3. Провода
4. Резистор 240 Ом
5. Резистор 10 к0м
6. RGB-светодиод
7. Дальномер
8. Бузер
Питание (Vcc ) и «землю» (GND) дальномера подключите к соответствующим выводам платы. Контакт Trig - к 12 выводу контроллера, контакт Echo - к 13 выводу. Общий катод RGB светодиода (самая длинная ножка) подключите к «минусу» на макетной плате. Контакт RGB светодиода, относящийся к красному цвету, подключите через резистор 240 Ом к выводу 9, а контакт, отвечающий за зеленый цвет, - через резистор 10 кОм к выводу 10 контроллера. Из-за различных характеристик светодиодов зеленого и красного свечения в составе RGB светодиода зеленый цвет при равных питающих напряжениях светит гораздо ярче. Поэтому для выравнивание яркости следует использовать разные номиналы резисторов.
Напишем скетч, выполняющий выбранный алгоритм.
Рассмотрим новые функции:
#include "Ultrasonic.h" - подключение библиотеки для работы с датчиком. Если вы используете arduino IDE с нашего DVD, то там эта библиотека уже установлена. Если нет, то её можно найти в интернете и положить в папку «libraries».
Ultrasonic dalnomer(12, 13); - выражение, которое создает объект ультразвукового датчика с наименованием dalnomer. Наименование объекта можно писать любое. При этом мы «сообщаем» контроллеру, куда и как он подключен. Первая цифра в круглых скобках представляет собой номер контакта контроллера, с которым соединена ножка датчика Trig. Вторая цифра указывает на то, к какому выводу подключена ножка Echo.
float dist; - выражение для создания переменной dist типа float. Этот тип используется при работе с датчиками, где значение постоянно меняется и необходимо иметь результат в дробном виде. Этой переменной в программе будет присваиваться измеренное расстояние.
dist = dalnomer.Ranging(CM); - команда присваивания переменной dist pезультата выполнения команды dalnomer.Ranging(CM);
dalnomer.Ranging(CM); - это команда библиотеки Ultrasonic.h, которая возвращает в сантиметрах значение расстояния, измеренного объектом dalnomer.
Обобщим описание работы скетча. В начале программы мы задали переменную predel. Эта переменная определяет предельное расстояние в сантиметрах, при котором светодиод должен светиться зеленым. Если расстояние меньше предельного, то яркость зеленого светодиода должна уменьшаться, а красного - увеличиваться. Так же объявляем переменные RL и GL, в которые будет записываться интенсивность свечения красного и зеленого цвета соответственно. Для изменения интенсивности свечения необходимо использовать режим ШИМ. Диапазон значений ШИМ изменяется от 0 до 255 поэтому, с помощью функции map() мы преобразовываем измеренное расстояние из диапазона от 0 до предельного значения (predel) в диапазон от 0 до 255. Таким образом, при близком расстоянии интенсивность зеленого света будет близка к значению 0. Для изменения интенсивности красного цвета противоположно зеленому мы применили математическое выражение RL = 255-GL;
Очень важно обратить внимание на особенности применения функции map(). В данном случае не все так хорошо. Если переменная dist выйдет за пределы диапазона от 0 до predel, то функция map() также выйдет за пределы диапазона от 0 до 255. Это в свою очередь нарушит работу светодиода. Поэтому нам необходимо ограничить значения переменной dist. Для этого была введена строка
if (dist >predel) {dist = predel;}
выполнение которой ограничивает значение переменной dist значением predel.
Загружайте в контроллер Ардуино описанный программный код, открывайте монитор порта и проверяйте работу датчика. Можно просто подносить руку, можно линейку или любой другой средних размеров предмет на экране монитора порта будет показываться текущее расстояние до предмета в сантиметрах, а светодиод будет менять цвет свечения между красным, желтым и зеленым в зависимости от этого расстояния.
Внимание! Для удобства использования ультразвукового датчика рекомендуем самостоятельно перевернуть его «глазами» в противоположную сторону, чтобы провода не мешали измерениям. Главное, убедитесь в правильности переподключения его контактов.