Всем привет! Сегодня я покажу вам как подключить ультразвуковой измеритель расстояния HC-SR04 к Arduino. Для этого понадобятся:
1. Любая плата Arduino(я буду использовать Uno)
2. Компьютер с установленной Arduino IDE и драйверами для плат
3. Соединительные провода
4. Ультразвуковой измеритель расстояния HC-SR04
Описание и принцип работы HC-SR04
HC-SR04 - это ультразвуковой измеритель расстояния. Принцип его работы прост. Ультразвуковой измеритель расстояния(сонар) излучает сигнал и ждёт когда он, отразившись от препятствия, вернётся обратно. Возвращает этот сонар число, но это не расстояние, а время, которое шёл сигнал от сонара до препятствия. Если его разделить на скорость ультразвука мы получим расстояние. Дальность его видимости начинается с 2-3 сантиметров и составляет 4 метра. Но не обошлось и без минусов. Он не видит лохматые препятствия, а если расстояние больше четырёх метров, то он и вовсе может зависнуть. Говорят, что HC-SR04+ лишён таких зависаний. Но не обязательно иметь при себе HC-SR04+. Можно HC-SR04 программно лишить этих зависаний. В интернете я прочитал, что если во время такого зависания подать на контакт ECHO 0, то сонар выйдет из зависания. Давайте же подключим наш сонар к Arduino и напишем для него скетч.
Схема подключения HC-SR04
Схема подключения HC-SR04 к Arduino Uno представлена на фото ниже:
Схема подключения:
VCC(HC-SR04) - 5V(Arduino)
Gnd(HC-SR04) - Gnd(Arduino)
Echo(HC-SR04) - 11(Arduino)
Trig(HC-SR04) - 12(Arduino)
Скетч
Скетч:
int distance; // переменная расстояние
int Sonar_Echo = 11; //пин входа сонара — Echo
int Sonar_Trig = 12; //пин выхода сонара — Trig
void setup()
{
Serial.begin(9600); // включаем скорость обмена данными 9600 бод
pinMode (Sonar_Echo, INPUT); // пин вход сонара
pinMode (Sonar_Trig, OUTPUT); // пин выхода сонара
}
int distance_measurement() // функция измерения расстояния сонаром
{
digitalWrite (Sonar_Trig, LOW); // подаём LOW на Trig
delayMicroseconds (2); //задержка 2 Мс
digitalWrite (Sonar_Trig, HIGH); // подаём HIGH на Trig
delayMicroseconds (10); // задержка 10 Мс
digitalWrite (Sonar_Trig, LOW); // подаём LOW на Trig
int distance = pulseIn(Sonar_Echo, HIGH, 30000); // считываем данные с Сонара
if (distance == 0) // если расстояние 0 дальность измерения выше
//максимальной или сонар завис
{ //перезагрузка сонара
pinMode(Sonar_Echo, OUTPUT);
digitalWrite(Sonar_Echo, 0);
pinMode(Sonar_Echo, INPUT);
// приравниваем расстояние к максимальной дальности измерения
distance = 400;
}
else
{
distance = distance / 58; // рассчитываем расстояние
}
{
return (distance); // возвращаем расстояние
}
}
void loop()
{
distance = distance_measurement();
{
Serial.print(distance); // выводим в серийный порт расстояние в см
Serial.println(" CM");
}
delay(100); // задержка между измерениями
}
Вывод расстояния в монитор порта:
На этот раз всё, всем спасибо за внимание!