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

Ультразвуковой датчик расстояния HC-SR04 - позволяет определять расстояние до препятствий находящихся в зоне от 2 мм до 4 м.

Общие сведения:

Если подать положительный импульс на вход датчика TRIG длительностью 10 мкс, то датчик отправит звуковую волну (8 импульсов на частоте 40 кГц - ультразвук) и установит уровень логической «1» на выходе ECHO. Звуковая волна отразится от препятствия и вернётся на приёмник датчика, после чего он сбросит уровень на выходе ECHO в логический «0» (то же самое датчик сделает, если звуковая волна не вернётся в течении 38 мс.) В результате время наличия логической «1» на выходе ECHO равно времени прохождения ультразвуковой волны от датчика до препятствия и обратно. Зная скорость распространения звуковой волны в воздухе и время наличия логической «1» на выводе ECHO, можно рассчитать расстояние до препятствия.

Принцип действия ультразвукового датчика расстояния HC-SR04

Расстояние вычисляется умножением скорости на время (в данном случае скорости распространения звуковой волны V, на время ожидания эха Echo). Но так звуковая волна проходит расстояние от датчика до объекта и обратно, а нам нужно только до объекта, то результат делим на 2:

L = V * Echo / 2

  • L – расстояние (м);
  • V – скорость звука в воздухе (м/с);
  • Echo – время ожидания эха (с).

Скорость звука в воздухе, в отличии от скорости света, величина не постоянная и сильно зависит от температуры:

V2 = γ R T / M

  • V – скорость звука в воздухе (м/с)
  • γ – показатель адиабаты воздуха (ед.) = 7/5
  • R – универсальная газовая постоянная (Дж/моль*K) = 8,3144598(48)
  • T – абсолютная температура воздуха (°К) = t°C + 273,15
  • M – молекулярная масса воздуха (г/моль) = 28,98

Подставив в формулу известные значения γ, R, M, получим:

V ≈ 20,042 √T

  • T – абсолютная температура воздуха (°К) = t°C + 273,15

Осталось объединить формулы вычисления V и L, и перевести L из м в см, Echo из с в мкс, T из °К в °C, получим:

L ≈ Echo √(t+273,15) / 1000

  • L – расстояние (см)
  • Echo – время ожидания эха (мкс)
  • t – температура воздуха (°C)

Для работы с датчиком, нами разработаны две библиотеки iarduino_HC_SR04 и iarduino_HC_SR04_int, синтаксис обеих библиотек одинаков. Они сами рассчитывают все значения и возвращают только расстояние в см. Температура по умолчанию установлена в 23°C, но её можно указывать. Работа с библиотеками и их функции описаны ниже.

Спецификация:

  • Входное напряжение: 5 В
  • Потребляемый ток в режиме ожидания: до 2 мА
  • Потребляемый ток в режиме измерений: до 15 мА
  • Частота ультразвука: 40 кГц
  • Измеряемая дальность: 2 … 400 см
  • Точность измерения: до 0,3 мм
  • Угол измерения: до 15°
  • Рабочая температура: -30 … 80 °С
  • Габариты: 45x20x15 мм

Подключение:

  • При работе с библиотекой iarduino_HC_SR04, выводы TRIG и ECHO датчика можно подключать к любым выводам Arduino.
  • При работе с библиотекой iarduino_HC_SR04_int, вывод TRIG датчика подключается к любому выводу Arduino, а вывод ECHO датчика нужно подключить только к тому выводу Arduino, который использует внешнее прерывание.

Подключение ультразвукового датчика расстояния HC-SR04 к Arduino

Вы можете узнать, какие выводы Вашей Arduino используют внешние прерывания, воспользовавшись скетчем описанным в разделе Wiki - определение аппаратных выводов Arduino.

Питание:

Входное напряжение 5 В постоянного тока, подаётся на выводы Vcc и GND датчика.

Работа с датчиком расстояния:

Для работы с датчиком, нами разработаны две библиотеки iarduino_HC_SR04 и iarduino_HC_SR04_int, синтаксис обеих библиотек одинаков.

  • Преимуществом библиотеки iarduino_HC_SR04 является то, что датчики можно подключать к любым выводам Arduino, а недостаток заключается в том, что библиотека ждёт ответа от датчика, который может длиться до 38 мс.
  • Преимуществом библиотеки iarduino_HC_SR04_int является то, что она не ждёт ответа от датчиков (не приостанавливает выполнение скетча), но выводы ECHO датчиков нужно подключать только к тем выводам Arduino, которые используют внешние прерывания.

Примеры:

Определение расстояния с использованием библиотеки iarduino_HC_SR04:
#include <iarduino_HC_SR04.h>           // Подключаем библиотеку
iarduino_HC_SR04 sensor(2,3);           // Объявляем объект sensor, указывая номера arduino подключенные к выводам TRIG и ECHO датчика
                                        // Можно использовать любые выводы Arduino
void setup(){
  Serial.begin(9600);                   // Инициализация передачи данных в монитор последовательного порта
}
void loop(){
  delay(500);                           // Задержка 0,5 сек
  Serial.println(sensor.distance()   ); // Вывод расстояния (см) при температуре воздуха, около +23 °C
  Serial.println(sensor.distance(-20)); // Вывод расстояния (см) при температуре воздуха, около -20 °C
  Serial.println("==================");
}
Определение расстояния с использованием библиотеки iarduino_HC_SR04_int:
#include <iarduino_HC_SR04_int.h>       // Подключаем библиотеку
iarduino_HC_SR04_int sensor(2,3);       // Объявляем объект sensor, указывая номера arduino подключенные к выводам TRIG и ECHO датчика
                                        // (вывод ECHO нужно подключить к выводу Arduino использующему внешнее прерывание)
void setup(){
  Serial.begin(9600);                   // Инициализация передачи данных в монитор последовательного порта
}
void loop(){
  delay(500);                           // Задержка 0,5 сек
  Serial.println(sensor.distance()   ); // Вывод расстояния (см) при температуре воздуха, около +23 °C
  Serial.println(sensor.distance(-20)); // Вывод расстояния (см) при температуре воздуха, около -20 °C
  Serial.println("==================");
}
Результат работы обоих примеров:

Из примера видно, что если во время измерений не учитывать температуру воздуха, то можно получить результаты с высокой погрешностью.

Описание функций библиотек:

Библиотека iarduino_HC_SR04, как и библиотека iarduino_HC_SR04_int, имеет только одну функцию - distance().

Подключение библиотеки iarduino_HC_SR04:
#include <iarduino_HC_SR04.h>                                 // Подключаем библиотеку
iarduino_HC_SR04     sensor( №_ВЫВОДА_TRIG , №_ВЫВОДА_ECHO ); // Создаём объект sensor с указанием выводов TRIG и ECHO датчика.
Подключение библиотеки iarduino_HC_SR04_int:
#include <iarduino_HC_SR04_int.h>                             // Подключаем библиотеку
iarduino_HC_SR04_int sensor( №_ВЫВОДА_TRIG , №_ВЫВОДА_ECHO ); // Создаём объект sensor с указанием выводов TRIG и ECHO датчика.
Функция distance()
  • Назначение: Возвращает расстояние до препятствия в см
  • Синтаксис: distance( [ ТЕМПЕРАТУРА ] )
  • Параметры: ТЕМПЕРАТУРА - необязательный параметр, целое число, от -128 °C до +127 °C, по умолчанию +23 °C
  • Возвращаемые значения: long расстояние в см
  • Пример:
long A = sensor.distance(70); // Присваиваем переменной A расстояние до препятствия при температуре воздуха +70 °C.

Применение:

  • Подвижные механизмы не требующие участие оператора
  • Системы сигнализаций, где невозможно использовать ИК-датчики

Ссылки:

Обсуждение

Присоединяйся

На главную