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 мс. */
}


Дивіться також Система безпеки на основі ультразвукового давача.


1 комментарий

  1. Спасибо! Все хорошо! Я сделал парктроник для гаража немного по другому:
    #include

    const int RED = 11;
    const int GR = 12;
    const int YEL = 10;
    const char INP = A0;
    const int Trig = 7;
    const int Echo = 8;

    void setup()
    {
    pinMode(RED, OUTPUT);
    pinMode(YEL, OUTPUT);
    pinMode(GR, OUTPUT);
    pinMode(INP, INPUT);
    Serial.begin(9600);
    pinMode(Trig, OUTPUT);
    pinMode(Echo, INPUT);
    Serial.begin(9600);
    }

    unsigned int time_us = 0;

    unsigned int distance_sm = 0;

    void loop()
    {
    //Меряем сантиметры
    digitalWrite(Trig, HIGH); // Подаем сигнал на выход микроконтроллера
    delayMicroseconds(10); // Удерживаем 10 микросекунд
    digitalWrite(Trig, LOW); // Затем убираем
    time_us = pulseIn(Echo, HIGH); // Замеряем длину импульса
    distance_sm = time_us / 58; // Пересчитываем в сантиметры
    Serial.println(distance_sm); // Выводим на порт
    //———————————————–
    int SEN = analogRead(INP) * 0.0048828125;
    if (SEN == 0)
    {
    digitalWrite(GR, 0);
    digitalWrite(YEL, 0);
    digitalWrite(RED, 0);
    delay(20);
    digitalWrite(RED, 1);
    delay(20);
    digitalWrite(RED, 0);
    }
    else
    {
    digitalWrite(RED, 1);
    }
    if (distance_sm 50)
    {
    digitalWrite(RED, 0);
    digitalWrite(GR, 0);
    digitalWrite(YEL, 1);
    }
    if (distance_sm < 50)
    {
    digitalWrite(RED, 1);
    digitalWrite(GR, 0);
    digitalWrite(YEL, 0);
    }

    delay(500);

    }

    Это пример.Выбранные расстояния можно поменять.

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

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

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