Ультразвуковой датчик HC SR04

Заслуженной популярностью, среди всех микроконтроллеров, пользуются Arduino. Сфера их применения невероятна широка, а конструкция доступна к интеграции в системы любого уровня, от самодельных, до промышленных. Одним из приятных бонусов названого контроллера служит наполненность рынка готовыми сборками подключаемых к нему датчиков. Есть сенсоры, определяющие температуру, давление, расстояние. К последним и относится ультразвуковой датчик hc sr04, о котором будет рассказано далее.

Ультразвуковой датчик
Основная ниша применения сонара — определение наличия предмета или поверхности в сканируемом поле. Принцип действия достаточно прост — датчик посылает ультразвуковой, неслышимый ухом человека, импульс, который в свою очередь или отражается обратно от чего-либо, или же просто уходит в «молоко» при отсутствии препятствия. Именно получение эха изначального сигнала и служит причиной срабатывания детектора. Это еще не все функциональные возможности устройств такого типа. Зная скорость распространения звука, время посылки и получения ответа — можно без труда узнать расстояние до предмета попавшего в поле зрения сонара. Зачастую эхо-датчики уже возвращают значения таймера между отправкой и принятием сигнала.

Практическое использование связки микроконтроллер — ультразвуковой сенсор можно увидеть в строительных измерителях расстояний, аварийных системах транспорта, автомобильных парктрониках, псевдо-зрительных элементов роботов, предназначенных для ориентировки их в пространстве.

набор ультразвуковых сенсоров

Применяется сонар также в авиа и гидроаппаратуре, лифтах, охранных комплексах, устройствах автоматического контроля. Если брать в общем, то ниш использования — множество и ограничены они только двумя факторами: расстоянием действия и некоторыми объектами, поглощающими или рассеивающими звуковые волны. Что касается первого — к сожалению, ультразвук не распространяется на большую дальность и достаточно легко глушится при их мощностях, применяемых по стандарту. Второй фактор даже интереснее. Существуют поверхности способные поглощать звуковые колебания, практически не создавая «эха». Примером тут может стать обычная вата. Дождаться от распушенного комка отражения довольно сложно. Для этого нужны куда более мощные излучатели и приемники, чем использующиеся в быту или самодельных конструкциях. Посудите сами: звуковые волны попадут в своеобразный лабиринт, создаваемый миниатюрными усиками ваты, выйдя из которого они или будут сильно ослаблены, или отражены не в ту сторону, а соответственно и датчик HC SR04 их не «ощутит».

волокна ваты

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

Характеристики HC SR04

После общего представления о датчиках расстояния стоит остановиться на конкретных характеристиках HC SR04 непосредственно созданного для подключения к Arduino.

ультразвуковой датчик

Как видно по изображению — сонар сделан в виде меленькой платы с четырьмя контактами и двумя активными ультразвуковыми модулями. Последние попеременно могут работать, как излучателем сигнала, так и его приемником. Что касается шин, — две из них питание(VCC) с землей(GND), а остальные — Trig (T) и Echo(R). Последние названые — соответственно триггер подачи сигнала(T) и индикатор получения ответа(R) подключаемые от HC SR04 к Arduino.

Технические характеристики устройства:

  • Напряжение питания: 3.3–5 В/15 мА.
  • Потребление в пассивном состоянии: < 2 мА.
  • Угол расхождения ультразвука от излучателя: 15°.
  • Угол получения ответа: 30°.
  • Минимальный размер объекта наблюдения: 3 мм.
  • Длина импульса: 10–6Е с.

Алгоритм работы

Здесь все очень просто:

  1. Arduino производит инициализацию сонара HC SR04 отправкой сигнала LOW в течение определенного времени на шину триггера (T). Кроме перезапуска режима работы датчика, в зависимости от длины импульса устанавливается точность измерения. Рекомендуемое время — 5 мс.
  2. Следом, на триггер отсылается импульс HIGH, длительностью 10 мс.
  3. Сонар генерирует на ультразвуковом излучателе 8 сигналов частотой в 40 мГц.
  4. В случае получения детектором отраженного от предмета или препятствия эха, на шине ECHO (R) генерируется импульс по длительности соответствующий расстоянию до объекта.

схема

Конечно, само расстояние вычисляется в зависимости от полученного значения и выводится по формуле. Для выяснения сантиметров до объекта, длину импульса R нужно разделить на константу 58.2. Если требуются дюймы, берут — 148.

Подключение к ардуино

Как описано ранее, всего у датчика четыре контакта. Два для питания, а остальные концевики триггера и ответа. Схема подключения к Arduino элементарна:

подключение

Шины питания присоединяются на предназначенные для них контакты платы. T и R к цифровым входам контроллера. На представленной схеме пины 8 — Trig и 7 — Echo. Можно объединить их, подключив R ультразвукового датчика через резистор 2.2 кОм к тому же входу Arduino, что и T.

Скетч и работа

Общение с ультразвуковым дальномером hc sr04 еще проще, чем электрическое подключение. Достаточно помнить алгоритм действий. Вот управляющий скетч для Arduino IDE в целях загрузки микроконтроллера:

// Укажем, что к каким пинам подключено

int Tp = 8;
int Rp = 7;
void setup() {
Serial.begin (9600);
pinMode(Tp, OUTPUT);
pinMode(Rp, INPUT);
}
void init(){
// инициализация и установка точности
digitalWrite(Tp, LOW);
delayMicroseconds(5);
}
void loop() {
int impuls_time, space_cm, space_dm, space_m;
init();
// в сущности работа -- даем высокий сигнал на триггер на 10 мс, переключаем на низкий
digitalWrite(Tp, HIGH);
delayMicroseconds(10);
digitalWrite(Tp, LOW);
// Получаем результат
impuls_time = pulseIn(Rp, HIGH);
// Производим расчет
space_cm = impuls_time / 58;
space_dm = impuls_time / 148;
space_m = space_cm / 100;
// Отправляем в монитор на серийной шине
if (space_cm < 100) {
Serial.print(space_cm);
Serial.println(" cm");
} else {
Serial.print(space_m);
Serial.println(" m");
}
Serial.print(space_dm);
Serial.println(" dm");
delayMicroseconds(250);
}

результат

Замечания по датчику

Нужно помнить, что точность у ультразвукового дальномера hc sr04 все-таки не очень высока, будут небольшие ошибки в пределах нескольких сантиметров. Для ее повышения рекомендуется уменьшить период последней паузы на цикле в скетче. Скажем до 25 мс. Или, как вариант, брать четыре показания за 100 мс, вычислять среднее и уже его выдавать в пользовательский монитор. Опять же. При расстояниях свыше трех метров Arduino ультразвуковой датчик HC SR04 практически не работает, или дает такие значения, которые точными назвать язык не поворачивается.

Практическое применение

Практическим применением здесь можно сделать автоматическое открытие дверей. Но, к сожалению, в домашних условиях такая схема не нужна. Будет весьма глупо смотреться двигающая створкой дверь при чьем-то приближении в квартире. Особенно, если есть домашние животные. Остановимся на ручной системе определения расстояния, которую легко получить, присоединив HC SR04 к Arduino. Она весьма пригодится, чтобы отмерить относительно точные промежутки между предметами обихода, стенами или иными поверхностями. Кроме того, устройство в сборе можно использовать как своеобразный парктроник. Оно сигнализирует, при слишком малой дистанции.

схема дальномера с LCD — дисплеем

Что понадобится: сам контроллер Arduino UNO, двухстрочный LCD 1602A, ультразвуковой дальномер HC SR04.

Соединяются компоненты по схеме выше. Далее идет скетч, который будет управлять всей конструкцией в целом:

#include <LiquidCrystal_I2C.h>
#include <Wire.h>
LiquidCrystal_I2C lcd(0x27,16,2);   // Задаем адрес и размерность дисплея
const int TRIGGER = 12; //триггер ультразвукового дальномера HC SR04 на pin 12
const int ECHO_PIN = 11; //эхо датчика на pin 11
const int ALARM_PIN = 13;  // LED индикатор pin 13
void setup()  {
pinMode(TRIGGER, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(ALARM_PIN, OUTPUT);
Serial.begin(9600);
Wire.begin();
lcd.init();
lcd.backlight();
lcd.print("SPACE:");
}
void loop()  {
long SPACE = getSPACE();
Serial.println(SPACE);
lcd.setCursor(10,0);
lcd.print(SPACE);
lcd.print("cm");
lcd.print("   ");
delay(300);
if (SPACE<20) {
digitalWrite(ALARM_PIN, 1);
lcd.setCursor(0,1);
lcd.print("Warning!");
} else {
digitalWrite(ALARM_PIN, 0);
lcd.setCursor(0,1);
lcd.print("Good   ");
}
}
long getSPACE() {
long space_cm = getEchoTiming() / 58.4;
return space_cm;
}
long getEchoTiming() {
digitalWrite(TRIGGER, LOW);
delayMicroseconds(2);
digitalWrite(TRIGGER, HIGH);
delayMicroseconds(10);
digitalWrite(TRIGGER, LOW);
long impuls_time = pulseIn(ECHO_PIN, HIGH);
return impuls_time;
delay(100);
}

результат работы схемы

Альтернативы

Ультразвуковые датчики не единственные, которые позволяют определять расстояние до объекта. Есть более точные лазерные дальномеры Laser Sensor предназначенные для работы в паре с ардуино. К сожалению, и цена у них различается в несколько десятков раз от датчика расстояния HC SR04, который стоит в среднем около 70 рублей. Лазерный же обойдется от суммы в 1200 р. Если же требуется определение только присутствия человека или животного в поле зрения контроллера, то тут лучшим станет инфракрасный сенсор. К примеру, такой, как GP2Y0A21YK0F.

инфракрасный дальномер

Суть проблемы заключается в том, что большая часть ложных срабатываний, ультразвуковых сенсоров связана с попаданием в контролируемое ими поле мелких летящих соринок или насекомых. Не зря в «характеристиках» была сделана пометка о чувствительности к предметам в поле зрения сонара размером от 3 мм. То есть, грубо говоря, использовать их на улице бессмысленно. Снег, дождь, мусор, насекомые — все эти факторы приведут к неверным показаниям прибора. Другое дело инфракрасное устройство. Оно реагирует только на нагретые предметы. Хотя, конечно, все упирается в конкретную сферу жизни. Для сигнализаторов расстояния от багажника автомобиля до стены тепловой детектор подходит мало. Да и на ультразвуковой в таких случаях меркантильный хозяин надеяться не будет. Тут нужен лазерный датчик расстояния из-за своей надежности и точности. Как раз тот случай, когда переплатить стоит того.

лазерный дальномер

Видео по теме

Ссылка на основную публикацию
Adblock
detector