Ультразвуковой дальномер HC-SR04: подключение, схема и примеры работы
Ультразвуковой дальномер рассчитан на определение расстояния до объектов в радиусе четырёх метров.
Работа модуля основана на принципе эхолокации. Модуль посылает ультразвуковой сигнал и принимает его отражение от объекта. Измерив время между отправкой и получением импульса, не сложно вычислить расстояние до препятствия.
Подключение ультразвукового дальномера к Arduino
Модуль подключается четырьмя проводами. Контакты VCC
и GND
служат для подключения питания, а Trig
и Echo
— для отправки и приема сигналов дальномера. Подключим их к пинам 10
и 11
соответственно.
Напряжение питания дальномера 5 В. Модуль работает и с платами, напряжение которых 3,3 В — в этом случае подключайте его к пинам группы с P8 по P13. Установите джампер выбора питания V2 на Troyka Shield в положение V2+5V. Пин микроконтроллера, соединённый с пином Echo
должен быть толерантен к 5 В. Приведённая схема подходит для подключения дальномера к Iskra JS.
Пример работы
Рассмотрим как работает дальномер.
- Для того чтобы инициализировать отправку сигнала дальномером, необходимо подать высокий сигнал длительностью 10 μs на пин
Trig
. - После получения высокого сигнала длительностью 10 μs на пин
Trig
, модуль генерирует пучок из восьми сигналов частотой 40 кГц и устанавливает высокий уровень на пинеEcho
. - После получения отраженного сигнала модуль устанавливает на пине
Echo
низкий уровень.
Зная продолжительность высокого сигнала на пине Echo
можем вычислить расстояние, умножив время, которое потратил звуковой импульс, прежде чем вернулся к модулю, на скорость распространения звука в воздухе (340 м/с).
Функция pulseIn
позволяет узнать длительность импульса в μs
. Запишем результат работы этой функции в переменную
duration.
Теперь вычислим расстояние переведя скорость из м/с в см/мкс:
distance = duration * 340 м/с = duration * 0.034 м/мкс
Преобразуем десятичную дробь в обыкновенную
distance = duration * 1/29 = duration / 29
Принимая во внимание то, что звук преодолел расстояние до объекта и обратно, поделим полученный результат на 2
distance = duration / 58
Оформим в код всё вышесказанное и выведем результат в Serial Monitor
- ultrasonic.ino
// Укажем, что к каким пинам подключено int trigPin = 10; int echoPin = 11; void setup() { Serial.begin (9600); pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); } void loop() { int duration, distance; // для большей точности установим значение LOW на пине Trig digitalWrite(trigPin, LOW); delayMicroseconds(2); // Теперь установим высокий уровень на пине Trig digitalWrite(trigPin, HIGH); // Подождем 10 μs delayMicroseconds(10); digitalWrite(trigPin, LOW); // Узнаем длительность высокого сигнала на пине Echo duration = pulseIn(echoPin, HIGH); // Рассчитаем расстояние distance = duration / 58; // Выведем значение в Serial Monitor Serial.print(distance); Serial.println(" cm"); delay(100); }
Работа с библиотекой
Количество строк кода можно существенно уменьшить, используя библиотеку для работы с дальномером.
- ultrasonic_lib.ino
#include <NewPing.h> #define TRIGGER_PIN 10 #define ECHO_PIN 11 #define MAX_DISTANCE 400 NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); void setup() { Serial.begin(9600); } void loop() { delay(50); Serial.print("Ping: "); Serial.print(sonar.ping_cm()); Serial.println("cm"); }
Работа с Iskra JS
var sonic = require('@amperka/ultrasonic') .connect({trigPin: P10, echoPin: P11}); sonic.ping(function(err, value) { if (err) { console.log('An error occurred:', err); } else { console.log('The distance is:', value, 'millimeters'); } }, 'mm');
Характеристики
- Напряжение питания: 5 В
- Потребление в режиме тишины: 2 мА
- Потребление при работе: 15 мА
- Диапазон расстояний: 2–400 см
- Эффективный угол наблюдения: 15°
- Рабочий угол наблюдения: 30°