СОДЕРЖАНИЕ ►
Ультразвуковой датчик расстояния Ардуино HC-SR04 рассмотрим на этом занятии. Расскажем, как подключить ультразвуковой дальномер HC-SR04. Разберем скетч для датчика, который может прекрасно служить для робота при определении расстояния до объектов или обнаружения препятствия. Также рассмотрим самую популярную библиотеку для ультразвуковых дальномеров на Arduino — Ultrasonic.h.

Ультразвуковой дальномер Arduino HC-SR04
Ультразвуковой датчик (ещё его часто называют сонаром или ультразвуковым дальномером) определяет расстояние до объекта так же, как это делают летучие мыши или дельфины. Датчик HC-SR04 генерирует узконаправленный сигнал на частоте 40 кГц и ловит отраженный сигнал (эхо). По времени распространения звука до объекта и обратно можно достаточно точно определить расстояние до него.
По этому же принципу работает множество приборов для исследования пространства — эхолот, сонар, радиолокатор и даже полицейский радар для определения скорости автомобиля. Все эти приборы излучают узконаправленный ультразвуковой сигнал и получают обратно отраженный сигнал. В отличии от инфракрасных дальномеров (IR), на показания ультразвукового датчика (сонара) не влияет цвет объекта.

Но при настройке ультразвукового датчика на Ардуино могут возникнуть трудности с определением расстояния до звукопоглощающих объектов, поскольку они способны полностью погасить излучаемый сигнал. Для идеальной точности измерения расстояния, поверхность изучаемого объекта должна быть ровной и гладкой. Принцип работы ультразвукового датчика hc-sr04 показан на рисунке выше.
Как подключить ультразвуковой датчик к Ардуино
Для этого занятия потребуется:
- Arduino Uno / Arduino Nano / Arduino Mega;
- макетная плата;
- УЗ дальномер HC-SR04;
- 1 светодиод и резистор 220 Ом;
- провода «папа-папа» и «папа-мама».

Схема подключения указана на рисунке выше. Отметим, что ультразвуковой дальномер HC-SR04 имеет диапазон измерения от 2 см до 400 см, работает при температурах от 0° до 60° С. Точность измерения составляет ± 1 см, рабочее напряжение датчика до 5,5 В. Для начала мы используем простой скетч, без использования библиотеки Ultrasonic. После подключения к Arduino дальномера HC-SR04 загрузите следующий скетч:
Скетч для подключения датчика hc-sr04 к Arduino
int trigPin = 9; // назначаем имя для Pin8 int echoPin = 8; // назначаем имя для Pin9 void setup() { Serial.begin (9600); // подключаем монитор порта pinMode(trigPin, OUTPUT); // назначаем trigPin, как выход pinMode(echoPin, INPUT); // назначаем echoPin, как вход } void loop() { int duration, cm; // назначаем переменную "cm" и "duration" для показаний датчика digitalWrite(trigPin, LOW); // изначально датчик не посылает сигнал delayMicroseconds(2); // ставим задержку в 2 ммикросекунд digitalWrite(trigPin, HIGH); // посылаем сигнал delayMicroseconds(10); // ставим задержку в 10 микросекунд digitalWrite(trigPin, LOW); // выключаем сигнал duration = pulseIn(echoPin, HIGH); // включаем прием сигнала cm = duration / 58; // вычисляем расстояние в сантиметрах Serial.print(cm); // выводим расстояние в сантиметрах Serial.println(" cm"); delay(1000); // ставим паузу в 1 секунду }
Пояснения к коду:
- для подключения выходов Trig и Echo на датчике сонара Ардуино можно использовать любые цифровые входы на микроконтроллере;
- чтобы получить значение датчика в миллиметрах следует использовать следующую формулу для расчета:
cm = duration / 5,8;.
Ультразвуковой дальномер и светодиод Ардуино
Представленный скетч работает без библиотеки, поэтому в коде многовато строчек. Мы воспользуемся библиотекой для ультразвуковых дальномеров, что позволит нам значительно упростить скетч. Для начала установите библиотеку Ultrasonic (инструкция по установке библиотек в Arduino IDE) и загрузите следующую программу в Ардуино. Ссылка на скачивание архива со скетчами и библиотекой Ultrasonic.h — здесь.
Подключите дополнительно к плате RGB светодиод или несколько светодиодов, для создания мини проекта. Цвета светодиода будут переключаться, в зависимости от расстояния от датчика расстояния до предмета. Для управления светодиодами от УЗ датчика в программе используется условные операторы if. После сборки схемы, как на картинке выше, загрузите в микроконтроллер следующую программу.
Скетч с использованием библиотеки Ultrasonic.h
#include "Ultrasonic.h" // подключаем библиотеку Ultrasonic Ultrasonic ultrasonic(9, 8); // назначаем выходы для Trig и Echo void setup() { Serial.begin(9600); // подключаем монитор порта pinMode (11, OUTPUT); // подключаем к пину светодиод pinMode (12, OUTPUT); // подключаем к пину светодиод } void loop () { int dist = ultrasonic.Ranging(CM); Serial.print(dist); // выводим расстояние в сантиметрах Serial.println(" cm"); // переключаем цвета светодиода if (dist < 50) {digitalWrite(12,0); digitalWrite(11,1);} if (dist > 50) {digitalWrite(12,1); digitalWrite(11,0);} delay(100); }
Пояснения к коду:
- команда
Ultrasonic ultrasonic(9, 8);назначает имя для нашего датчика «ultrasonic» и назначаем выходы на Ардуино для Trig и Echo. - расстояние при котором будут переключаться светодиоды можно изменить.









Спасибо. Полезная статья про УЗ датчик HC-SR04. Было бы хорошо, если вы еще в статье дали ссылку на скачивание библиотеки Ultrasonic.h для УЗ датчика.
Возможно ли при помощи такого датчика поддерживать заданное расстояние от датчика до земли. При удалении от земли включить серводвигатель и опустить датчик до заданного расстояния, а, при приближении к земле ближе заданного расстояния, при помощи этого же сервомотора поднять датчик на заданный уровень.
Возможно
куда подключать светадиод
11 и 12 пин — это все написано в комментариях в скетче Ардуино для ультразвукового датчика
«чтобы получить значение датчика в миллиметрах следует использовать следующую формулу для расчета: cm = duration / 5,8;.»
Но лучше так не делать! На 8-разрядных контроллерах AVR без крайней нужды не следует использовать числа с плавающей точкой.
Со стройной cm = duration / 5,8; «Sketch uses 3122 bytes (9%) of program storage space.»
А если использовать целочисленный эквивалент cm = (10 * duration) / 58; «Sketch uses 2576 bytes (7%) of program storage space.»
546 байт лишними не бывают, да и целочисленные вычисления выполняются значительно быстрее. Береги ресурсы контроллера смолоду! 😉
Замените Ranging на read.
Спасибо большое! На странице нету ссылки на скачивание библиотеки, пришлось через саму Ардуино приложение устонавливать
Можно ли датчик подключить к 2 и 3 пинам, за место 8 и 9?
Можно
Не могу ни в тексте, ни на сайте найти ссылку на библиотеку УЗ дальномера.
согласен с вами.Я начинающий ардуинщик и во всем понемногу разбираюсь.Мне очень важен этот вопрос .
библиотеку вы можете найти в самой программе через управление библиотеками. или скачать вручную через github у дип сика
в 11 строке ошибка, помогите исправить . думаю библиотека не та
заменить надо Ranging на read
А можно ли подключить echo пин к аналоговому порту? И если да, то как?
из-за чего-то вместо сантиметров просто отображаются символы �����, смотрел, собрал правильно по версии без светодиода
В мониторе порта поставь 9600 бод