Arduino + датчик HC-SR04 (ультразвуковой дальномер)

В данной статье рассмотрим принцип работы ультразвукового дальномера HC-SR04 (рисунок 1).

500_HC_SR04_main
Рисунок 1 – Датчик HC-SR04

Датчик имеет 4 вывода (стандарта 2.54 мм):

VCC: “+” питание.
TRIG (T): вывод входного сигнала.
ECHO (R): вывод выходного сигнала (Длина сигнала зависит от расстояния объекта до датчика).
GND: “-” питание (земля).

Принцип работы датчика можна условно разделить на 4 етапа

1. Подаем импульс продолжительностью 10 мкс, на вывод Trig.
2. Внутри дальномера входной импульс преобразуется в 8 импульсов частотой 40 КГц и посылается вперед через “T бочечка”
3. Дойдя до препятствия, посланные импульсы отражаются и принимаются “R бочечка”. Получаем выходной сигнал на выводе Echo.



4. Непосредственно на стороне контроллера переводим полученный сигнал в расстояние по формуле:

ширина импульса(мкс)/58= дистанция (см)
ширина импульса(мкс)/148= дистанция (дюйм)

Подключение датчика к Arduino:

VCC на +5 вольт Arduino.
TRIG на 9 пин Arduino.
ECHO на 8 пин Arduino.
GND на любой из GND пинов­­­ Arduino.

hc-sr04

В приведенном ниже скетче мы будем отсылать дистанцию в порт компьютера, а также при дистанции менее 30 сантиметров зажигать светодиод подключенный к 13 пину.

#define Trig 9
#define Echo 8
#define ledPin 13

void setup()
{
pinMode(Trig, OUTPUT); //инициируем как выход
pinMode(Echo, INPUT); //инициируем как вход
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
/* задаем скорость общения. В нашем случае с компьютером */
}
unsigned int impulseTime=0;
unsigned int distance_sm=0;

void loop()
{
digitalWrite(Trig, HIGH);
/* Подаем импульс на вход trig дальномера */
delayMicroseconds(10); // равный 10 микросекундам
digitalWrite(Trig, LOW); // Отключаем
impulseTime=pulseIn(Echo, HIGH); // Замеряем длину импульса
distance_sm=impulseTime/58; // Пересчитываем в сантиметры
Serial.println(distance_sm); // Выводим на порт
if (distance_sm<30) // Если расстояние менее 30 сантиметром
{
digitalWrite(ledPin, HIGH); // Светодиод горит
}
else
{
digitalWrite(ledPin, LOW); // иначе не горит
}
delay(100);
/* ждем 0.1 секунды, Следующий импульс может быть излучён, только после исчезновения эха от предыдущего.
Это время называется периодом цикла (cycle period).
Рекомендованный период между импульсами должен быть не менее 50 мс. */
}



Оставить ответ

Обязательные поля помечены*

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.