Ультразвуковой дальномер HC-SR04 - предназначен для измерения расстояний от 2 до 400 см, причем предел точности может достигать до 3 мм. Модуль включает ультразвуковой передатчик, приёмник и узел контроля. Основной принцип работы:
Расстояние вычисляется по формуле: Расстояние = Время высокого уровня * Скорость звука (340 м/с) / 2 или Расстояние в сантиметрах = Время в мс / 58.
Примечание: Иногда при измерении может происходить «зависание» датчика. Датчик периодически выводит 0. Связано это с использованием функции pulseIn при измерении расстояния, которая ждет сигнала HIGH, не учитывая что он там уже может быть.
В примере рассматривается измерение расстояния с помощью датчика и вывод расстояния в монитор Serial-порта. Для тестирования примера использовался контроллер Smart UNO.
Что нужно | Кол-во, шт |
---|---|
Контроллер Smart UNO | 1 |
Ультразвуковой дальномер HC-SR04 | 1 |
Провода папа-мама | 4 |
Скетч для загрузки:
const int Trig = 8; //пин для вывода датчика Trig
const int Echo = 9; //пин для вывода датчика Echo
unsigned int time_us = 0; //переменнная для хранения времени отклика
unsigned int distance_cm = 0; //переменнная для хранения расстояния
void setup() {
pinMode(Trig, OUTPUT); //установка режима пина
pinMode(Echo, INPUT); //установка режима пина
Serial.begin(9600); //инициализация Serial-порта
}
void loop() {
digitalWrite(Trig, HIGH); //подается ультразвуковой сигнал с датчика
delayMicroseconds(10); //продолжается передача 10 микросекунд
digitalWrite(Trig, LOW); //подача сигнала прекращается
time_us = pulseIn(Echo, HIGH); //замер длины импульса
distance_cm = time_us/58; //пересчет в сантиметры. Для данного датчика постоянная для перевода - 58
//если произошло зависание, попытаться сбросить пин подключения Echo
if(distance_cm == 0)
{
pinMode(Echo, OUTPUT);
digitalWrite(Echo, LOW);
pinMode(Echo, INPUT);
return;
}
//Вывод данных в монитор порта
Serial.print("The distance is ");
Serial.print(distance_cm);
Serial.println(" sm.");
delay(100); //задержка
}