Ультразвуковые дальномеры HC-SR04
Познакомимся с датчиками расстояния, которые пригодятся в проектах, рассматриваемых в следующих главах. Ультразвуковой дальномер HC-SR04 — это помещенные на одну плату приемник и передатчик ультразвукового сигнала. Кроме самих приемника и передатчика на плате находится еще и необходимая обвязка, чтобы сделать работу с этим датчиком простой и непринужденной.
![]() |
![]() |
![]() |
|
Датчик HC-SR04 |
Датчик обладает низким энергопотреблением, что также является немаловажным преимуществом в случае с мобильными роботами, не привязанными к розетке. Питается датчик HC-SR04 от 5 В, что тоже удобно при подключении его к Arduino.
Характеристики ультразвукового дальномера HC-SR04:
измеряемый диапазон — от 2-х до 500 см;
точность — 0,3 см;
угол обзора — < 15 °;
напряжение питания — 5 В.
Датчик имеет 4 вывода стандарта 2,54 мм:
VCC — питание +5 В;
Trig (T) — вывод входного сигнала;
Echo (R) — вывод выходного сигнала;
GND — земля.
Проверка работы датчика
![]() |
Схема подключения HC-SR04 |
Необходимо установить библиотеку по ссылке
Залить программу
Sketch code
/* Скетч с библиотекой NewPing, которая может использоваться и для датчика HC-SR04
приведенного здесь SRF06 и позволяет подключать ульразвуковые датчики
с помощью одного пина на Arduino. Можно дополнительно подключить конденсатор на 0.1 мкФ к пинам Эхо и Триггер на датчике.*/
#include <NewPing.h>
#define TRIGGER_PIN 12 // Arduino pin tied to trigger pin on the ultrasonic sensor.
#define ECHO_PIN 11 // Arduino pin tied to echo pin on the ultrasonic sensor.
#define MAX_DISTANCE 200 // Максимальное расстояние, которое мы контролируем (в сантиметрах). Максимальное расстояние подобных датчиков находится в диапазоне 400-500см.
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // Настройка пинов и максимального расстояния
void setup() {
Serial.begin(115200); // Открытие серийного протокола с частотой передачи данных 115200 бит/сек.
}
void loop() {
delay(500); // Задержка в 500 миллисекунд между генерацией волн. 29 миллисекунд – минимально допустимая задержка.
unsigned int uS = sonar.ping(); // Генерация сигнала, получение времени в микросекундах (uS).
Serial.print("Ping: ");
Serial.print(uS / US_ROUNDTRIP_CM); // Преобразование времени в расстояние и отображение результата (0 соответствует выходу за допустимый диапазон)
Serial.println("cm");
}
Открыть монитор порта
![]() |
Выставляем 115200 бод В окне COM3 видны изменяющиеся растояния |
Принцип работы ультразвукового дальномера HC-SR04
В составе дальномера имеются два пьезоэлемента: один работает как излучатель сигнала, другой — как приемник. Излучатель генерирует сигнал, который, отразившись от препятствия, попадает на приемник. Измерив время, за которое сигнал проходит до объекта и обратно, можно оценить расстояние.
Последовательность действий следующая:
- Подаем импульс продолжительностью 10 мкс на вывод Trig.
- Внутри дальномера входной импульс преобразуется в 8 импульсов частотой 40 кГц и посылается вперед через излучатель T .
- Дойдя до препятствия, посланные импульсы отражаются и принимаются приемником R , в результате получаем выходной сигнал на выводе Echo.
- Непосредственно на стороне контроллера переводим полученный сигнал в расстояние по формуле:
• ширина импульса (мкс) / 58 = дистанция (см);
• ширина импульса (мкс) / 148 = дистанция (дюйм).
Библиотека Ultrasonic
Для работы Arduino с датчиком HC-SR04 имеется готовая библиотека — Ultrasonic. Конструктор Ultrasonic принимает два параметра: номера пинов, к которым подключены выводы Trig и Echo соответственно:
Ultrasonic ultrasonic(12,13);
здесь вывод датчика Trig подключен к 12-му пину Arduino, а Echo — к 13-му.
Библиотека имеет один метод Ranging, в качестве параметра которому задается, во что пересчитывать расстояние до объекта: в сантиметры или в дюймы:
#define CM 1
#define INC 0
Таким образом строчка ultrasonic.Randing(CM)вернет расстояние до объекта (типа long) в сантиметрах.
Файлы библиотеки вы можете найти в папке libraries/Ultrasonic сопровождающего книгу электронного архива. Для использования библиотеки в своих проектах поместим ее в папку libraries каталога установки Arduino.
Скетч, выдающий в последовательный порт расстояние до объекта в сантиметрах, представлен в примере.
Подключение датчика HC–SR04 к Arduino
Ультразвуковой датчик HC–SR04 определяет расстояние и выводит полученные значения в окно серийного монитора в среде Arduino IDE.
Небольшое примечание: в свободном доступе существует отличная библиотека NewPing, которая еще больше облегчает использование HC–SR04, пример ее использование тоже приведен ниже.
![]() |
Подключение к Arduino ультразвукового датчика расстояния |
Sketch code
/*Ультразвуковой датчик расстояния и Arduino
Распиновка ультразвукового датчика расстояния:
VCC: +5V
Trig : Триггер (INPUT) – 11 пин
Echo: Эхо (OUTPUT) – 12 пин
GND: GND
*/
int trigPin = 11; //Триггер – зеленый проводник
int echoPin = 12; //Эхо – желтый проводник
long duration, cm, inches;
void setup() {
//Serial Port begin
Serial.begin (9600);
//Инициализирум входы и выходы
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
}
void loop()
{
// Датчик срабатывает и генерирует импульсы шириной 10 мкс или больше
// Генерируем короткий LOW импульс, чтобы обеспечить «чистый» импульс HIGH:
digitalWrite(trigPin, LOW);
delayMicroseconds(5);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Считываем данные с ультразвукового датчика: значение HIGH, которое
// зависит от длительности (в микросекундах) между отправкой
// акустической волны и ее обратном приеме на эхолокаторе.
pinMode(echoPin, INPUT);
duration = pulseIn(echoPin, HIGH);
// преобразование времени в расстояние
cm = (duration/2) / 29.1;
inches = (duration/2) / 74;
Serial.print(inches);
Serial.print("in, ");
Serial.print(cm);
Serial.print("cm");
Serial.println();
delay(250);
}
Sketch code
#include <NewPing.h>
#define TRIGGER_PIN 12
#define ECHO_PIN 11
#define MAX_DISTANCE 200
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // Настройка пинов и максимального расстояния.
void setup() {
Serial.begin(9600);
}
void loop() {
delay(50);
unsigned int uS = sonar.ping_cm();
Serial.print(uS);
Serial.println(“cm”);
}
Если HC-SR04 не считывает сигнал эхо, выходной сигнал никогда не преобразуется в LOW. Датчики Devantec и Parallax обеспечивают время задержки 36 миллисекунд 28 миллисекунд соответственно. Если вы используете скетч, приведенный выше, программа «зависнет» на 1 секунду. Поэтому желательно указывать параметр задержки.
Датчик HC-SR04 плохо работает при измерении расстояний более 10 футов. Время возврата импульса составляет около 20 миллисекунд, так что рекомендуется в таких случаях выставлять время задержки более 20, напрмер, 25 или 30 миллисекунд.
Можно подключить ультразвуковой датчик расстояния HC-SR04 лишь к одному пину Arduino. Для этого необходимо между пинами Триггера и Эхо установить резистор на 2.2 кОм и подключить к Arduino только пин Триггера.
Скачать программу: HC-SR04_Sketch.zip