Ультразвуковой дальномер HC-SR04

Содержание:


Обзор ультразвукового дальномера HC-SR04

Датчики расстояния являются неотъемлемой частью любого робота.

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

Кроме приемника и передатчика на плате находится необходимая обвязка.

Модуль имеет 4 вывода стандарта 2,54 мм:

  • VCC — питание +5 В;
  • Trig (T) — вывод входного сигнала;
  • Echo (R) — вывод выходного сигнала;
  • GND — земля.

ultrazvukovoj-dalnomer

Последовательность действий по измерению расстояния следующая:

  • подаем импульс продолжительностью 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 динамик, но не напрямую, а через транзистор.

Для проекта нам понадобятся следующие детали:

Соберем схему, показанную на рисунке.

 

shema-podkljuchenija-dalnomera

Запустим Arduino IDE. Создадим новый скетч и внесем в него следующее содержимое:

// Ультразвуковой дальномер
// makerplus.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);

Далее ждем пока объект не выйдет из зоны. Затем отключаем динамик и продолжаем вращение платформы. Для контроля текущие показания расстояния выводятся в последовательный порт.

ultrazvukovoj-dalnomer-podkljuchenie

ultrazvukovoj-dalnomer-primenenie

 


Часто задаваемые вопросы FAQ

  • Платформа не вращается
  1. Проверьте наличие и полярность подаваемого на сервопривод внешнего питания 5 В);
  2. Проверьте соединение «земли» Arduino и «земли» внешнего питания.
  • При приближении на заданное расстояние не срабатывает динамик
  1. Проверьте подсоединение модуля HC SR-04;
  2. Проверьте правильность показаний модуля HC SR-04 в мониторе последовательного порта;
  3. Проверьте правильность подсоединения динамика.