Ультразвуковой датчик HC-SR04 использует сонар для измерения расстояния до объекта, аналогично тому, как это делают летучие мыши. Он предлагает отличную возможность бесконтактного измерения дистанции с высокой точностью и стабильными показаниями в удобном для использования корпусе. Он включает в себя передатчик и приемник ультразвуковых сигналов. Датчик HC-SR04 или ультразвуковой датчик используется в широком спектре электронных проектов для создания приложений обнаружения препятствий и измерения расстояния, а также для различных других применений.
Здесь мы предоставляем простой метод измерения расстояния с использованием Arduino и ультразвукового датчика, а также описываем, как использовать ультразвуковой датчик с Arduino.
Технические характеристики:
Рабочее напряжение: +5 В постоянного тока
Покойный ток: <2 мА
Рабочий ток: 15 мА
Угол обзора: <15°
Диапазон измерения: 2 см - 300 см
Точность: 0,3 см
Угол измерения: 30 градусов
Длительность входного импульса триггера: 10 мкс
Принцип работы:
Как показано на рисунке выше, у датчика есть две части - одна является передающей, а другая - приемной. Ультразвуковой модуль выдаст ультразвуковые волны после срабатывания сигнала. Когда ультразвуковые волны сталкиваются с объектом и отражаются, модуль выдает сигнал "эхо", по которому можно определить расстояние до объекта на основе временной разницы между сигналом триггера и сигналом "эхо". Время t - это время, в течение которого сигнал отправляется к препятствию и возвращается. Скорость распространения звука в воздухе составляет около 343 м/с, и расстояние = скорость * время. Однако ультразвуковая волна излучается и возвращается, что составляет 2 раза расстояния. Поэтому его нужно разделить на 2, расстояние, измеренное ультразвуковой волной = (скорость * время) / 2.
Схема подключения:
Подключите VCC, Trig, Echo и Gnd ультразвукового датчика к 5V (V), D12, D13 и Gnd (G).
Тестовый код:
//****************************************************************************
/*
4wd BT Car
lesson 5.1
Ultrasonic sensor
https://alash-electronics.kz/blogs/wiki
*/
int trigPin = 12; // Пин триггера
int echoPin = 13; // Пин эхо
long duration, cm, inches;void setup() {
// Начинаем порт Serial
Serial.begin (9600);
// Определяем входы и выходы
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
}void loop() {
// Датчик срабатывает при высоком уровне сигнала длительностью 10 мкс или больше.
// Для обеспечения чистого высокого уровня сигнала сначала даем короткий LOW-импульс:
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Считываем сигнал с датчика: HIGH-импульс, длительность которого - время (в микросекундах) от отправки пинга до получения его эхо от объекта.
duration = pulseIn(echoPin, HIGH);
// Преобразуем время в расстояние
cm = (duration / 2) / 29.1; // Делим на 29.1 или умножаем на 0.0343
inches = (duration / 2) / 74; // Делим на 74 или умножаем на 0.0135
Serial.print(inches);
Serial.print("in, ");
Serial.print(cm);
Serial.print("cm");
Serial.println();
delay(250);
}
//****************************************************************************
Результат теста:
После успешной загрузки кода на плату подключите компоненты согласно схеме подключения, затем подключите плату к компьютеру с помощью USB-кабеля для питания. После включения откройте последовательный монитор и установите скорость передачи данных на 9600. Определенное расстояние будет отображаться в сантиметрах и дюймах. Если закрыть ультразвуковой датчик рукой (расстояние составляет от 2 до 10 см), то значение расстояния будет уменьшаться.
Объяснение кода:
int trigPin - этот пин определен для передачи ультразвуковых волн, как правило, это выход.
int echoPin - это определено как пин приема, как правило, это вход.
cm = (duration/2) / 29.1 - мы можем рассчитать расстояние, используя следующую формулу: расстояние = (время в пути / 2) x скорость звука. Скорость звука равна: 343 м/с = 0,0343 см/мкс = 1/29,1 см/мкс.
inches = (duration/2) / 74 - это же формула, но в дюймах: 13503,9 дюймов/с = 0,0135 дюйма/мкс = 1/74 дюйма/мкс.
Нам нужно разделить время в пути на 2, так как мы должны учесть, что волна была отправлена, попала в объект и вернулась обратно к датчику.
Практическое расширение:
Мы только что измерили расстояние, отображаемое ультразвуковым датчиком. Как насчет управления светодиодом с учетом измеренного расстояния? Давайте попробуем это и подключим модуль светодиода к пину D9.
//*****************************************************************
/*
4wd BT Car
lesson 5.2
Ultrasonic LED
https://alash-electronics.kz/blogs/wiki
*/
int trigPin = 12; // Пин триггера
int echoPin = 13; // Пин эхо
long duration, cm, inches;
void setup() {
Serial.begin (9600); // Начинаем порт Serial
pinMode(trigPin, OUTPUT); // Определяем входы и выходы
pinMode(echoPin, INPUT);
}
void loop() {
// Датчик срабатывает при высоком уровне сигнала длительностью 10 мкс или больше.
// Для обеспечения чистого высокого уровня сигнала сначала даем короткий LOW-импульс:
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Считываем сигнал с датчика: HIGH-импульс, длительность которого - время (в микросекундах) от отправки пинга до получения его эхо от объекта.
duration = pulseIn(echoPin, HIGH);
// Преобразуем время в расстояние
cm = (duration / 2) / 29.1; // Делим на 29.1 или умножаем на 0.0343
inches = (duration / 2) / 74; // Делим на 74 или умножаем на 0.0135
Serial.print(inches);
Serial.print("in, ");
Serial.print(cm);
Serial.print("cm");
Serial.println();
delay(250);
if (cm >= 2 && cm <= 10) {
Serial.println("HIGH");
digitalWrite(9, HIGH);
} else {
Serial.println("LOW");
digitalWrite(9, LOW);
}
}
//*****************************************************************
После успешной загрузки кода на плату подключите компоненты согласно схеме подключения, затем подключите плату к компьютеру с помощью USB-кабеля для питания. После включения закройте ультразвуковой датчик рукой (расстояние составляет от 2 до 10 см), затем проверьте, включен ли светодиод.