Найти тему
ТехноБобёр

Работа с датчиками. Ультразвуковой датчик расстояния.

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

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

По характеру физического явления, положенного в основу работы датчиков, они делятся на несколько видов. Бывают ультразвуковые, инфракрасные и даже лазерные. Перечислены они в порядке возрастания стоимости. В этом уроке мы рассмотрим самый доступный и поэтому самый распространенный ультразвуковой датчик. Его популярность связана еще и с харизматичным внешним видом. Рабочие элементы его конструкции действительно похожи на некое подобие двух механических глаз. Его внешний вид показан на схеме.

Внешний вид ультразвукового датчика.
Внешний вид ультразвукового датчика.

Датчик оснащен ультразвуковым излучателем и приемником (отсюда и два цилиндра похожих на глаза). При работе дальномер излучает короткий ультразвуковой импульс, который отражается от объекта и улавливается приемником. При этом фиксируется время, за которое ультразвук ушел и вернулся. Поскольку скорость звука в воздухе известна (при нормальных условиях приблизительно равна 331 м/с), исходя из измеренного времени до получения обратного сигнала (эха), рассчитывается расстояние. Ультразвуковой датчик обладает следующими характеристиками: питается постоянным током напряжением 5 вольт;

эффективный угол: <15°;

может измерять расстояния от 2 до 400 см; разрешение или, другими словами, точность - 0.3 см. Подключается дальномер при помощи 4 ножек (контактов). Все ножки подписаны, их маркировка приведена на рисунке выше. Если повернуть датчик к себе сенсорами, то слева направо функции контактов будут следующими:

1. Vcc - питание со знаком «плюс»;

2. Trig - подача импульса;

3. Echo - контакт, отвечающий за обратный импульс;

4. Gnd - «земля» или нулевой контакт.

Соберите схему измерителя расстояния в соответствии с рисунком.

Схема измерителя расстояния на Arduino.
Схема измерителя расстояния на Arduino.

Для того чтобы работа устройства была более наглядной, используем в устройстве световую сигнализацию с помощью 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.

Загружайте в контроллер Ардуино описанный программный код, открывайте монитор порта и проверяйте работу датчика. Можно просто подносить руку, можно линейку или любой другой средних размеров предмет на экране монитора порта будет показываться текущее расстояние до предмета в сантиметрах, а светодиод будет менять цвет свечения между красным, желтым и зеленым в зависимости от этого расстояния.

Внимание! Для удобства использования ультразвукового датчика рекомендуем самостоятельно перевернуть его «глазами» в противоположную сторону, чтобы провода не мешали измерениям. Главное, убедитесь в правильности переподключения его контактов.