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

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

В этой статье мы узнаем, как работает ультразвуковой датчик HC-SR04 и как использовать его совместно с платой Ардуино.

Как это работает — ультразвуковой датчик HC-SR04

Датчик HC-SR04 излучает ультразвук с частотой 40 000 Гц, который распространяется по воздуху, и, если на его пути есть объект или препятствие, он отражается от этого объекта и возвращается обратно к модулю. Учитывая время прохождения и скорость звука, мы можете рассчитать расстояние до объекта.

Распиновка модуля HC-SR04

Распиновка модуля HC-SR04

Ультразвуковой модуль HC-SR04 имеет 4 контакта: VCC, Trig и Echo, GND. Контакты GND и VCC модуля должны быть подключены к GND и + 5 В на плате Ардуино соответственно, а контакты Trig и Echo — к любым контактам цифрового ввода/вывода на плате Ардуино.

HC-SR04 подключение к ардуино

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

Диаграмма работы HC-SR04

Например, если объект находится на расстоянии 50 см от датчика, а скорость звука составляет 340 м/с, то звуковой волне потребуется пройти около 147 мксек. Но то, что мы получите с вывода Echo, будет вдвое больше, потому что звуковая волна дополнительно отразится от объекта и вернется обратно, проделав такой же путь.

Таким образом, чтобы получить расстояние в сантиметрах, нам нужно умножить полученное время с вывода Echo на 0,034 и разделить его на 2.

Скетч ультразвукового датчика HC-SR04 для Ардуино

// определяет номера выводов
const int trigPin = 9;
const int echoPin = 10;

// определяет переменные
long duration;
int distance;

void setup() {
pinMode(trigPin, OUTPUT); // Устанавливает trigPin как выход
pinMode(echoPin, INPUT); // Устанавливает echoPin как вход
Serial.begin(9600); 
}

void loop() {
// Очищаем trigPin
digitalWrite ( trigPin, LOW ) ;
delayMicroseconds ( 2 ) ;
// Устанавливаем trigPin в HIGH состояние на 10 микросекунд
digitalWrite ( trigPin, HIGH ) ;
delayMicroseconds ( 10 ) ;
digitalWrite ( trigPin, LOW ) ;
// Считываем echoPin, получаем время прохождения звуковой волны в микросекундах
duration = pulseIn(echoPin, HIGH);

// Расчет расстояния
distance= duration*0.034/2;

// Результат в Serial Monitor
Serial.print("Distance: ");
Serial.println(distance);
}

Разберем работу кода подробнее

Сначала нам нужно определить контакты Trig и Echo. В данном случае это контакты 9 и 10 на плате Ардуино, которые называются trigPin и echoPin. Затем нам понадобится переменная типа Long с именем «duration» для сохранения времени прохождения сигнала, которое мы получите от датчика, и целочисленная переменная для расстояния.

// определяет номера выводов
const int trigPin = 9;
const int echoPin = 10;

// определяет переменные
long duration;
int distance;

В настройке мы должны определить trigPin как выход, а echoPin как вход, а также запустить Serial для отображения результатов в мониторе последовательного порта.

void setup() {
pinMode(trigPin, OUTPUT); // Устанавливает trigPin как выход
pinMode(echoPin, INPUT); // Устанавливает echoPin как вход
Serial.begin(9600); 
}

Сначала в цикле мы должны убедиться, что триггерный вывод свободен, поэтому мы должны установить этот вывод в состояние LOW всего на 2 мкс. Теперь для генерации ультразвуковой волны мы должны установить триггер в состояние HIGH на 10 мкс. Используя функцию pulseIn(), мы должны прочитать время прохождения и поместить это значение в переменную «duration». Эта функция имеет 2 параметра, первый — это имя вывода эхо-сигнала, а для второго мы можете указать HIGH или LOW.

// Очищаем trigPin
digitalWrite ( trigPin, LOW ) ;
delayMicroseconds ( 2 ) ;
// Устанавливаем trigPin в HIGH состояние на 10 микросекунд
digitalWrite ( trigPin, HIGH ) ;
delayMicroseconds ( 10 ) ;
digitalWrite ( trigPin, LOW ) ;

В этом случае HIGH означает, что функция pulsIn() будет ждать, пока вывод перейдет в HIGH состояние, вызванное отраженной звуковой волной, и начнет отсчет времени. Затем она будет ждать, пока вывод перейдет в LOW, что приведет к остановки отсчета времени. В конце функция вернет длину импульса в микросекундах.

Чтобы получить расстояние, мы умножим это время на 0,034 и разделим на 2, как мы объясняли это ранее.

// Считываем echoPin, получаем время прохождения звуковой волны в микросекундах
duration = pulseIn(echoPin, HIGH);

// Расчет расстояния
distance= duration*0.034/2;

// Результат в Serial Monitor
Serial.print("Distance: ");
Serial.println(distance);

В конце мы напечатаем значение расстояния в мониторе последовательного порта.

Оставить комментарий

Ваш email нигде не будет показан. Обязательные для заполнения поля помечены *

*