Как подключить ультразвуковой дальномер HC-SR04 к Arduino
В этой статье мы подключим ультразвуковой дальномер-эхолокатор HC-SR04 к Arduino и научимся с помощью него определять расстояние до цели.
Инструкция по подключению ультразвукового датчика расстояния HC-SR04 к Arduino
Нам понадобится:
- Arduino UNO или иная совместимая плата;
- ультразвуковой датчик HC-SR04;
- соединительные провода (рекомендую вот такой набор);
- макетная плата (breadboard);
- персональный компьютер со средой разработки Arduino IDE.
1 Принцип действияультразвукового дальномера HC-SR04
Действие ультразвукового дальномера HC-SR04 основано на принципе эхолокации. Он излучает звуковые импульсы в пространство и принимает отражённый от препятствия сигнал. По времени распространения звуковой волны к препятствию и обратно определяется расстояние до объекта.
Запуск звуковой волны начинается с подачи положительного импульса длительностью не менее 10 микросекунд на ножку TRIG дальномера. Как только импульс заканчивается, дальномер излучает в пространство перед собой пачку звуковых импульсов частотой 40 кГц. В это же время на ножке ECHO дальномера появляется логическая единица. Как только датчик улавливает отражённый сигнал, на выводе ECHO появляется логический ноль. По длительности логической единицы на ножке ECHO («Задержка эхо» на рисунке) определяется расстояние до препятствия.

Диапазон измерения расстояния дальномера HC-SR04 – до 4 метров с разрешением 0,3 см. Угол наблюдения – 30°, эффективный угол – 15°. Ток потребления в режиме ожидания 2 мА, при работе – 15 мА.
2Схема подключения датчика расстояния
Питание ультразвукового дальномера осуществляется напряжением +5 В. Два других вывода подключаются к любым цифровым портам Arduino, мы подключим к 11 и 12.


3Получение дистанции до объекта с датчика HC-SR04
Теперь напишем скетч, определяющий расстояние до препятствия и выводящий его в последовательный порт. Сначала задаём номера выводов TRIG и ECHO – это 12 и 11 пины. Затем объявляем триггер как выход, а эхо – как вход. Инициализируем последовательный порт на скорости 9600 бод. В каждом повторении цикла loop() считываем дистанцию и выводим в порт.
const int trigPin = 12; const int echoPin = 11; void setup() { pinMode(trigPin, OUTPUT); // триггер - выходной пин pinMode(echoPin, INPUT); // эхо - входной digitalWrite(trigPin, LOW); Serial.begin(9600); // инициализация послед. порта } void loop() { long distance = getDistance(); // получаем дистанцию с датчика Serial.println(distance); // выводим в последовательный порт delay(100); } // Определение дистанции до объекта в см long getDistance() { long distacne_cm = getEchoTiming() * 1.7 * 0.01; return distacne_cm; } // Определение времени задержки long getEchoTiming() { digitalWrite(trigPin, HIGH); // генерируем 10 мкс импульс запуска delayMicroseconds(10); digitalWrite(trigPin, LOW); // определение на пине echoPin длительности уровня HIGH, мкс: long duration = pulseIn(echoPin, HIGH); return duration; }
Функция getEchoTiming() генерирует импульс запуска. Она как раз создаёт тот 10-микросекундный импульс, который является триггером для начала излучения дальномером звукового пакета в пространство. Далее она запоминает время от начала передачи звуковой волны до прихода эха.
Функция getDistance() рассчитывает дистанцию до объекта. Из школьного курса физики мы помним, что расстояние равно скорость умножить на время: S = V×t Скорость звука в воздухе 340 м/сек, время в микросекундах мы знаем (переменная duration). Чтобы получить время duration в секундах, нужно разделить его на 1 000 000. Так как звук проходит двойное расстояние – до объекта и обратно – нужно ещё разделить результат пополам. Вот и получается, что расстояние до объекта S = 34000 см/сек × duration / 1 000 000 сек / 2 = 1,7 см/сек / 100, что мы и написали в скетче.
Операцию умножения микроконтроллер выполняет быстрее, чем операцию деления, поэтому :100 я заменил на эквивалентное ×0,01.
4Библиотека для работы с эхолокатором HC-SR04
Также для работы с ультразвуковым дальномером написано множество библиотек. Например, вот эта библиотека Ultrasonic. Установка библиотеки происходит стандартно: скачать, разархивировать в директорию /libraries/, которая находится в папке с Arduino IDE. После этого библиотекой можно пользоваться.
Установив библиотеку, напишем новый скетч.
#include <Ultrasonic.h> // подключаем библиотеку Ultrasonic ultrasonic(12, 11); // Trig - 12, Echo - 11 void setup() { Serial.begin(9600); // инициализация послед. порта } void loop() { float dist_cm = ultrasonic.Ranging(CM); // дистанция в см Serial.println(dist_cm); // выводим дистанцию в порт delay(100); }
Результат его работы тот же – в мониторе последовательного порта выводится дистанция до объекта в сантиметрах.
Если в скетче написать float dist_cm = ultrasonic.Ranging(INC); – дистанция будет отображаться в дюймах.
5Выводы по работе с сонаром HC-SR04
Итак, мы с вами подключили к Arduino ультразвуковой дальномер HC-SR04 и получили с него данные двумя разными способами: с использованием специальной библиотеки и без.
Преимущество использования библиотеки в том, что количество кода значительно сокращается и улучшается читаемость программы, вам не приходится вникать в тонкости работы устройства и вы сразу же можете его использовать. Но в этом же кроется и недостаток: вы хуже понимаете, как работает устройство и какие в нём происходят процессы. В любом случае, каким способом пользоваться – решать только вам.
Приобрести ультразвуковой дальномер по хорошей цене можно на этом сайте.
Поблагодарить автора:
Поделиться
Related items
2 comments
-
Samurai Понедельник, 24 Февраль 2020 08:01 Ссылка на комментарий
Как можно вывести монитор порта на сайт?
-
aave1 Понедельник, 24 Февраль 2020 17:39 Ссылка на комментарий
Samurai, прошу прощения, я не понял вопроса. Что значит вывести монитор порта на сайт?