Ультразвуковий датчик відстані Arduino HC SR04

Загальні відомості

Ультразвуковий датчик відстані HC-SR04 - призначений для вимірювання відстаней від 2 до 400 см, причому межа точності може досягати до 3 мм. Модуль включає ультразвуковий передавач, приймач і вузол контролю. На покази датчика практично не впливають сонячне випромінювання і електромагнітні шуми. На передній частині HC-SR04 розташовано два ультрозвукових датчика, перший з написом T (Transmiter) - це передавач ультрозвукових хвиль (TCT40-16T), а другий з написом R (Receive) - це приймач відбитих ультрозвукових хвиль (TCT40-16R), по центру розташований вивідний кварцовий генератор на 27 МГц.

                   8ZIpmB1FPlQ.jpg
                               Рис.1 Загальний вигляд модуля HC SR04

Характеристики датчика HC SR04

- діапазон вимірювання відстані 0,03м-4м

- частота ультразвуку 40kHz

- кут зору 30град.

- інтерфейс 2 логічні TTL лінії

- вихідна інформація імпульс 0,15..25mS

- напруга живлення "Vcc" 5V

- струм споживання в активному режимі 15мA

- розмір модуля 45х20х15mm

Принцип роботи

1. На вихід trig (тригер) посилаємо високий рівень протягом як мінімум 10мкс.

2. Модуль починає посилати ультразвукові імпульси з частотою 40 кГц і приймає їх назад, якщо в зоні видимості є будь-які перешкоди.

3. Якщо сигнал повертається, модуль встановлює низький рівень на виході echo на 150мс. За часом, який минув з п.1 до низького рівня на виході echo можна розрахувати відстань до перешкоди за формулою:

відстань = (time * sound velocity) / 2

де time - виміряне час імпульсу, sound velocity - швидкість звуку (340 м / с)

Точність вимірювання відстані датчиком HC SR04

Точність датчика залежить від декількох факторів:

- температури і вологості повітря;

- відстані до об'єкта;

- розташування щодо датчика (згідно діаграми випромінювання);

- якості виконання елементів модуля датчика.

В основу принципу дії будь-якого ультразвукового датчика закладено явище відображення акустичних хвиль, що поширюються в повітрі. Як відомо з курсу фізики, швидкість поширення звуку в повітрі залежить від властивостей цього самого повітря (в першу чергу від температури). Датчик ж, випускаючи хвилі і заміряючи час до їх повернення, не здогадується, в якому саме середовищі вони будуть поширюватися і бере для розрахунків деяку середню величину. В реальних умовах через фактор температури повітря HC-SR04 може помилятися від 1 до 3-5 см. Фактор відстані до об'єкта важливий, тому що росте ймовірність відбиття від сусідніх предметів, до того ж і сам сигнал загасає з відстанню.

Також для підвищення точності треба правильно направити датчик: зробити так, щоб предмет був в рамках конуса діаграми спрямованості. Простіше кажучи, «очі» HC-SR04 повинні дивитися прямо на предмет. Діаграма спрямованості HC-SR04:

                               OLvbeuqZwFY.jpg
                               Рис.2 Діаграма спрямованості HC SR04

Для зменшення помилок і похибки вимірювань зазвичай виконуються наступні дії:

- усереднюються значення (кілька разів заміряємо, прибираємо сплески, потім знаходимо середнє);

- за допомогою датчиків (наприклад, DHT11 або DHT22) визначається температура і вносяться поправочні коефіцієнти;

- датчик встановлюється на серводвигун, за допомогою якого ми «повертаємо голову», переміщаючи діаграму спрямованості вліво або вправо.

Підключення до Arduino

Пристрої, які потрібні для підключення:

- ультразвуковий далекомір HC-SR04

- Arduino Uno (Mega, Leonardo, Nano, тощо)

- з'єднувальні дроти (4 штучки)

                                         Erwgrh.png
                              
                              Рис.3 Підключення модуля HC SR04 до Arduino

Модуль підключається чотирма проводами. Контакти VCC і GND служать для підключення живлення, а Trig і Echo- для відправки і прийому сигналів далекоміра. Підключаємо їх до пінів 10 і 11 відповідно.

Після підключення потрібно завантажити скетч.

Принципова схема

                     Rwhreq.png
                       Рис.4 Принципова схема підключення модуля HC SR04 до Arduino

Приклад (під)програми

const int trigPin = 12; const int echoPin = 11;

void setup() {

 pinMode(trigPin, OUTPUT); // триггер - выходной пин
 pinMode(echoPin, INPUT); // эхо - входной
 Serial.begin(9600); // инициализация послед. порта

}

void loop() {

 long distance = getDistance(); // получаем дистанцию с датчика
 Serial.println(distance); // выводим в последовательный порт
 delay(100);

}

// Определение дистанции до объекта в см long getDistance() {

 long distacne_cm = getEchoTiming() * 1.7 * 0.01;
 return distacne_cm;

}

// Определение времени задержки long getEchoTiming() {

 digitalWrite(trigPin, LOW);
 delayMicroseconds(2);
 digitalWrite(trigPin, HIGH); // генерируем импульс запуска
 delayMicroseconds(10);  
 digitalWrite(trigPin, LOW);
 // определение на пине echoPin длительности уровня HIGH, мксек:
 long duration = pulseIn(echoPin, HIGH); 
 return duration;

}

Список використаних джерел

[1] ArduinoMaster

[2] ARDUINO.UA

[3] AMPERKA.RU

[4] ARDUINO-DIY

Sus Roman