Ультразвуковые датчики — отличные инструменты для измерения расстояния и обнаружения объектов без какого-либо фактического контакта с физическим миром. Данный датчик используется, например, для измерения уровня жидкости, в автомобилях в системах самостоятельной парковки или для предотвращения столкновений. В предыдущих статьях, мы уже разбирали работу такого датчика, и даже приводили пример программы на Ардуино, чтобы увидеть его возможности.
В этом мини-проекте мы будем использовать ультразвуковой датчик HC-SR04 для определения расстояния до препятствия от датчика. Основной принцип ультразвукового измерения расстояния основан на эхо. Когда звуковые волны распространяются в окружающей среде, волны возвращаются обратно к источнику в виде эхо после столкновения с препятствием. Таким образом, нам нужно будет только рассчитать время прохождения обоих звуков, означающее исходящее время и время возвращения в исходное положение после столкновения с препятствием. Поскольку скорость звука нам известна, то после некоторых вычислений мы сможем вычислить и расстояние. Мы будем использовать специальную формулу в этом мини-проекте для измерения расстояния на Arduino, так что давайте начнем.
Используемые компоненты
- Arduino UNO или Pro mini (можно заказать здесь)
- Ультразвуковой датчик HC-SR04 (можно заказать здесь)
- ЖК-дисплей 16×2 (можно заказать здесь)
- Потенциометр (можно заказать здесь)
- Макетная плата (можно заказать здесь)
- 9 вольтовая батарейка
- Соединительные провода
Ультразвуковой датчик
Существует много типов датчиков расстояния работающих в паре с Arduino, но в нашем мини-проекте мы решили использовать HC-SR04 для измерения расстояния в диапазоне от 2 см до 400 см с точностью до 3 мм. Данный датчик состоит из ультразвукового передатчика, приемника и схемы управления. Принцип работы ультразвукового датчика следующий:
- Сигнал высокого уровня отправляется в течение 10 мкс с использованием триггера.
- Датчик автоматически отправляет восемь сигналов частотой 40 кГц, а затем определяет, получен ли импульс или нет.
- Если сигнал принимается, то он идет через высокий уровень. Время HIGH продолжительности — это временной промежуток между отправкой и получением сигнала.
Вот формула расчета:
Расстояние = (время x скорость звука в воздухе (340 м/с))/2

Работа датчика
Датчик работает на природном явлении эхо звука. Импульс отправляется примерно на 10 мкс, после чего модуль автоматически посылает 8 циклов ультразвукового сигнала частотой 40 кГц. Сигнал после столкновения с препятствием возвращается обратно и улавливается приемником. Таким образом, расстояние препятствия от датчика просто рассчитывается по формуле:
Расстояние = (время х скорость)/2
Здесь мы разделили произведение скорости и времени на 2, т.к. время — это общее время, которое потребовалось, для достижения препятствия и возвращения обратно. Таким образом, время, необходимое для достижения препятствия, составляет лишь половину общего времени.
Схема сборки и объяснение
Принципиальная схема Arduino и ультразвукового датчика для измерения расстояния показана выше. В схемных соединениях контакты «trigger» и «echo» ультразвукового датчика напрямую подключены к контактам 18 (A4) и 19 (A5) платы Arduino. ЖК-дисплей 16×2 подключен к плате Arduino в 4-битном режиме. Управляющие контакты RS, RW и En напрямую подключены к контактам 2, GND и 3 платы Arduino. А контакты данных D4-D7 подключены к контактам 4, 5, 6 и 7 платы Arduino.
Прежде всего, нам нужно запустить ультразвуковой датчик для передачи сигнала с помощью Arduino, а затем дождаться получения сигнала echo. Arduino считывает время между запуском и получением эха. Мы знаем, что скорость звука составляет около 340 м/с, поэтому мы можем рассчитать расстояние, используя данную формулу:
Расстояние = (время в пути/2) * скорость звука
Где, скорость звука около 340 м в секунду.
ЖК-дисплей 16×2 используется для отображения расстояния.
Код программы с использованием ультразвукового датчика и Arduino
Полный код программы для этого мини-проекта приведен внизу этой статьи. В коде мы считываем время с помощью pulseIn(pin). Затем выполняем вычисления и отображаем результат на ЖК-дисплее, используя соответствующие функции.
1 2 3 4 5 6 7 8 9 10 |
digitalWrite(trigger,HIGH); delayMicroseconds(10); digitalWrite(trigger,LOW); delayMicroseconds(2); time=pulseIn(echo,HIGH); distance=time*340/20000; lcd.clear(); lcd.print("Distance:"); lcd.print(distance); lcd.print("cm"); |
Полный код программы на Ардуино для датчика HC-SR04
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 36 37 38 39 40 41 42 43 44 |
#include <LiquidCrystal.h> #define trigger 18 #define echo 19 LiquidCrystal lcd(2,3,4,5,6,7); float time=0,distance=0; void setup() { lcd.begin(16,2); pinMode(trigger,OUTPUT); pinMode(echo,INPUT); lcd.print(" Ultra sonic"); lcd.setCursor(0,1); lcd.print("Distance Meter"); delay(2000); lcd.clear(); lcd.print(" Circuit Digest"); delay(2000); } void loop() { lcd.clear(); digitalWrite(trigger,LOW); delayMicroseconds(2); digitalWrite(trigger,HIGH); delayMicroseconds(10); digitalWrite(trigger,LOW); delayMicroseconds(2); time=pulseIn(echo,HIGH); distance=time*340/20000; lcd.clear(); lcd.print("Distance:"); lcd.print(distance); lcd.print("cm"); lcd.setCursor(0,1); lcd.print("Distance:"); lcd.print(distance/100); lcd.print("m"); delay(1000); } |
С Уважением, МониторБанк