Зачем нужен ультразвуковой датчик Arduino

Ультразвуковой датчик «Ардуино» работает по принципу измерения времени задержки отраженного сигнала. Разница с радиолокатором состоит в применении звуковых волн вместо электромагнитных и более низкой частоте излучения.

Зачем нужен ультразвуковой датчик Arduino

Описание дальномера

Ультразвуковой датчик HC SR04 точно измеряет расстояния бесконтактным методом на дистанциях от 0,02 до 4 м. Прибор не чувствителен к воздействию солнечного света, электромагнитного излучения. Также, в противоположность инфракрасным дальномерам, не создает препятствий в работе сильная тепловая засветка в любой части ИК-диапазона. В комплект поставки включаются:

  • модуль измерительный HC SR04;
  • управляющий модуль Arduino;
  • приемник (receiver);
  • передатчик (transmitter).

Дальномер Arduino HC SR04 относится к дешевым устройствам, предназначенным для образовательных целей и хобби. Однако его электрические и эксплуатационные характеристики достаточны для практического применения в быту, в строительстве в качестве бесконтактной рулетки. Стоимость устройства колеблется в пределах от 150 до 450 руб.

Технические характеристики HC SR04

Электрические и технические характеристики дальномера узы HC SR04 следующие:

  • напряжение питания — 5 В;
  • потребляемый ток в рабочем режиме — 15 мА;
  • в состоянии ожидания потребляется менее 2 мА;
  • угол передачи зондирующего сигнала — 15°;
  • разрешение сенсора — 0,3 см;
  • угол приема отраженных импульсов — 30°;
  • вывод информации на символьный ЖК-дисплей;
  • минимальная длительность измеряемого промежутка — 10 мкс.

На датчике сделано 4 вывода в стандартном исполнении 2,54 мм. Это:

  • вывод питания датчика VCC, входное напряжение — 5 В;
  • Trig (Т) — вывод, принимающий команду начать облучение;
  • Echo (R) — вывод, подающий команду окончания измерений;
  • GND — «земляной» вывод.

Технические характеристики HC SR04

Схема взаимодействия с Arduino

Получение данных производится по команде с «Ардуино» следующим образом:

  • микроконтроллер подает импульс продолжительностью 10 мкс на вывод Trig;
  • Arduino ультразвуковой дальномер по этому сигналу выдает серию импульсов частотой 40 кГц;
  • излучение отразится от препятствия и будет принято датчиком, это событие приведет к появлению напряжения на выводе Echo;
  • программа «Ардуино» пересчитает задержки принятых импульсов в расстояние.

Полученная от ультразвукового датчика расстояния информация и результат расчетов программы микроконтроллера выводятся в окно терминала. Однако имеются некоторые ограничения в использовании этого устройства. Датчик стабильно определяет расстояние до объектов, хорошо отражающих звуковые волны, т. е. с ровной и гладкой поверхностью. Объекты с сильной звукопоглощающей поверхностью не будут возвращать сигнал достаточной мощности, и датчик не сможет его обнаружить.

Подключение датчика

В подключении HC-SR04 участвуют 4 вывода:

  • питание;
  • земля;
  • обеспечивающие начало и окончание процесса.

Trig и Echo (оба являются цифровыми) могут подсоединяться к любым выходам Arduino ультразвукового дальномера.

Название HC-SR04 Arduino Uno
земля GND GND
питание VCC 5 В
прием Echo 2
передача Trig 3

Провода позволяют с помощью схемы осуществить подсоединение своими руками, не прибегая к помощи сторонних специалистов.

Библиотека команд

Работа через Arduino с датчиком HC SR04 облегчена благодаря использованию библиотеки NewPing. Она избавляет от рутинной работы и предоставляет дополнительные функции:

  • перенастройку для работы с другими видами датчиков;
  • обмен данными с датчиком через один пин;
  • при отсутствии эха нет задержек в 1 секунду;
  • цифровые фильтры исправляют простейшие ошибки;
  • повышенная точность измерений.

Библиотека команд

Чтобы воспользоваться библиотекой, ее нужно загрузить отдельно.

Примеры скетчей

В данном скетче с использованием библиотечных функций будет отправлен зондирующий импульс и получено его отражение от препятствия. Эксперимент раскроет схему работы устройства. На выводе Trig сформируется импульс длиной 10 мкс. Датчик передаст пачку импульсов и на выводе Echo установит высокий уровень, сигнализируя о переходе в режим прослушивания.

При обнаружении отраженного сигнала на Echo установится низкий уровень. То есть для полного цикла измерения требуется выставить высокий уровень на Trig и далее измерять длительность импульса на пине Echo. Расстояние до объекта при измеренной длине импульса и скорости звука, взятой из справочника, вычисляется на уровне арифметики.

В скетче используются библиотечные функции. Вызов pulseIn() производит замер продолжительности импульса на контакте echoPin и возвращает значение, выраженное в микросекундах. Оно сохраняется в целочисленной переменной duration. Удаленность объекта вычисляется как произведение скорости звука на продолжительность импульса s=duration*v. Значение скорости звука в воздухе является константой и принимается равной 340 м/с.

Далее приводим все переменные к единой системе измерений и получаем формулу s=duration*0,034 м/мкс Для удобства записи переводим десятичную дробь в обыкновенную, и формула принимает вид s=duration/29. С учетом удвоенного расстояния (туда и обратно) написание формулы незначительно изменится — s=duration/58.

Скетч готов для загрузки в Arduino Uno. В терминале открываем монитор UART для его запуска. Изменяя направление излучения, сверяем расстояния до объектов в живую с показаниями дальномера.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
int Trig_Pin = 2;
int Echo_Pin = 3;
int Led_Pin = 13;
 
void setup() 
{
    Serial.begin (9600);
    pinMode(Trig_Pin, OUTPUT);
    pinMode(Echo_Pin, INPUT);
    pinMode(Led_Pin, OUTPUT);
}
 
void loop() 
{
    int distance, duration;
    digitalWrite(Trig_Pin, HIGH);        // На пин Trig выставляется высокий уровень.
    DelayMicroseconds(10);               // Формируется длина импульса 10 мкс.
    digitalWrite(Trig_Pin, LOW);         // снимается сигнал HIGH, сформирован 10 мкс импульс.
    duration = pulseIn(Echo_Pin, HIGH);  // Значение пина Echo записывается в переменную duration.
    duration = duration/29/2;            // Подсчет расстояния при скорости звука 340 м/с.
 
    Serial.print(duration);
    Serial.println("cm");
 
    if (duration > 50)                   // Если расстояние менее 50 см.
    {
        digitalWrite(Led_Pin, HIGH);     // Светодиод включен.
    }
    else
    {
        digitalWrite(Led_Pin, LOW);      // LED выключен.
    }
 
    delay(1000);
}
Ссылка на основную публикацию