Содержание
Обзор ультразвукового дальномера HC-SR04
Датчики расстояния являются неотъемлемой частью любого робота. Ультразвуковой дальномер модуль HC-SR04 для Arduino— это помещенные на одну плату приемник и передатчик ультразвукового сигнала. Принцип действия HC-SR04 основан на хорошо известном явлении эхолокации. Излучатель формирует акустический сигнал, который отразившись от преграды, возвращается к датчику и регистрируется приемником. Зная скорость распространения ультразвука в воздухе и время запаздывания между излученным и принятым сигналом, легко рассчитать расстояние до акустической преграды. В отличие от инфракрасных дальномеров на ультразвуковой датчик HC-SR04 не влияют источники света или цвет препятствия. Могут возникнуть затруднения при определении расстояния до пушистых или тонких объектов. Кроме приемника и передатчика на плате находится необходимая обвязка. Модуль имеет 4 вывода стандарта 2,54 мм:- VCC — питание +5 В;
- Trig (T) — вывод входного сигнала;
- Echo (R) — вывод выходного сигнала;
- GND — земля.
- подаем импульс продолжительностью 10 мкс на вывод Trig;
- на плате модуля входной импульс преобразуется в 8 импульсов частотой 40 кГц и посылается через излучатель T;
- дойдя до препятствия, посланные импульсы отражаются и принимаются приемником R, в результате получаем выходной сигнал на выводе Echo.
- На стороне контроллера переводим полученный сигнал в расстояние по формуле:
- ширина импульса (мкс) / 58 = дистанция (см);
- ширина импульса (мкс) / 148 = дистанция (дюйм).
Технические характеристики ультразвукового дальномера HC-SR04
- измеряемый диапазон — от 2 до 500 см;
- точность — 0,3 см;
- эффективный рабочий угол — < 15 °;
- угол измерений: 30 градусов;
- напряжение питания — 5 В.
- Сила тока покоя: < 2 мА;
- Рабочая сила тока: 15 мА;: < 15°;
- ширина импульса триггера: 10 микросекунд;
- размеры: 45 мм x 20 мм x 15 мм.
Пример использования
Типичными областями применения ультразвуковых дальномеров являются парковочные датчики, контроллеры уровня, устройства мониторинга местности. Очень часто используют данные модули в любительской робототехнике. Рассмотрим подключение модуля HC SR-04 к Ардуино. Создадим проект звуковой сигнализации при обнаружении объекта, находящегося на расстоянии меньше 1 м от нашего датчика. Модуль HC SR-04 находится на вращающейся в горизонтальной плоскости платформе (вращение платформы помощью сервопривода) и измеряет расстояние до преграды. При обнаружении объекта, находящегося на расстоянии менее 1 м от модуля, платформа останавливается и подает звуковой сигнал на динамик до тех пор, пока объект не удалится на большее расстояние. затопления помещения. При погружении датчика в воду, сигнализация издает три вида звуковых сигналов (небольшое затопление, средний уровень, критический уровень), соответствующий трем уровням воды. Для воспроизведения звуковых можно к цифровому выводу подключить пьезоизлучатель - электроакустическое устройства воспроизведения звука. Но при этом звук получается очень тихий. Чтобы получить громкость более приличного уровня, к цифровому выводу Arduino динамик, но не напрямую, а через транзистор. Для проекта нам понадобятся следующие детали:- плата Arduino
- ультразвуковой модуль HC SR-04
- сервопривод
- платформа для крепления сервопривода и модуля HC SR-04
- динамик 8 Ом
- резистор 500 Ом
- транзистор КТ503е
- источник внешнего питания 5В (для питания сервопривода)
- соединительные провода
// 3d-diy.ru // константы для выводов #define PIN_TRIG 12 #define PIN_ECHO 13 #define PIN_SERVO 9 #define PIN_SPEAKER 8 // расстояние обнаружения см #define DIST_DETECT 100 // частота звукового сигнала #define FREQ 546 // подключение библиотеки для HC SR04 #include "Ultrasonic.h" // создание объекта Ultrasonic // Trig - 12, Echo - 13 Ultrasonic ultrasonic(PIN_TRIG, PIN_ECHO); // переменная для хранения измеренного расстояния float dist_cm=0; // подключение библиотеки для серво #include <Servo.h> // создание объекта Servo Servo myservo; // переменная для хранения позиции сервопривода int pos = 0; // переменная направления перемещения сервопривода int dir=1; void setup() { // запуск последовательного порта Serial.begin(9600); // запуск серво на выходе PIN_SERVO myservo.attach(PIN_SERVO); } void loop() { // вычисление следующей позиции сервопривода pos=pos+dir; // установить сервопривод в позицию pos myservo.write(pos); // при достижении крайних позиций изменить // направление dir if(pos==180) dir=-1; else if(pos==0) dir=1; else ; // получить данные с дальномера dist_cm = ultrasonic.Ranging(CM); Serial.println(dist_cm); // обнаружение объекта в зоне if(dist_cm>0 && dist_cm<DIST_DETECT) { // звуковой сигнал tone(PIN_SPEAKER,FREQ); } // пока в зоне обнаружения while(dist_cm>0 && dist_cm<DIST_DETECT){ dist_cm = ultrasonic.Ranging(CM); Serial.println(dist_cm); } // отключить звуковой сигнал noTone(PIN_SPEAKER); // пауза перед сменой позиции сервопривода delay(50); }
Сервопривод вращает платформу с датчиком от 0 до 180 градусов и обратно. На каждом шаге проверяем показания модуля расстояния HS SR04. Если объект нарушает границу (значение DIST_DETECT равное 100 см) на динамик подается звуковой сигнал tone(PIN_SPEAKER,FREQ); Далее ждем пока объект не выйдет из зоны. Затем отключаем динамик и продолжаем вращение платформы. Для контроля текущие показания расстояния выводятся в последовательный порт. Часто задаваемые вопросы FAQ
1. Платформа не вращается
- Проверьте наличие и полярность подаваемого на сервопривод внешнего питания 5 В).
- Проверьте соединение "земли" Arduino и "земли" внешнего питания.
- Проверьте подсоединение модуля HC SR-04.
- Проверьте правильность показаний модуля HC SR-04 в мониторе последовательного порта.
- Проверьте правильность подсоединения динамика.