Перегляди: 164 Автор: Грейс Час публікації: 26.07.2021 Походження: Сайт
The Ультразвуковий датчик HC-SR04 є одним з найпопулярніших модулів вимірювання відстані для проектів Arduino. Він широко використовується в роботах для уникнення перешкод, датчиках паркування, системі визначення рівня, розумних сміттєвих баках, вимірювачах відстані та інших програмах безконтактного вимірювання.
Модуль випромінює ультразвукові хвилі 40 кГц через передавач. Коли звукова хвиля зустрічається з предметом, вона відбивається назад до приймача. Вимірюючи час відлуння та використовуючи швидкість звуку, Arduino може обчислити відстань між датчиком і об’єктом.
| Параметр | Значення |
| Типова робоча напруга | 5 В постійного струму |
| Статичний робочий струм | Менше 5 мА на деяких версіях модуля |
| Робоча частота | Ультразвукова хвиля 40 кГц |
| Відстань виявлення | Загальний діапазон: від 2 см до 400 см; деякі версії з коригуванням посилення можуть підтримувати довший діапазон. |
| Кут виявлення | Зазвичай в межах 15 градусів; деякі версії з вищим посиленням можуть досягати приблизно 30 градусів. |
| Точність | Приблизно до 0,3 см за відповідних умов тестування |
| Сліпа зона | Мінімальна відстань для вимірювання приблизно 2 см |
Ультразвуковий модуль HC-SR04 має чотири контакти: VCC, TRIG, ECHO і GND. Arduino надсилає короткий імпульс запуску на висновок TRIG, а потім зчитує зворотний імпульс із виводу ECHO.
| Штифт HC-SR04 | Підключення Arduino | функція |
| VCC | 5В | Блок живлення ультразвукового модуля. |
| ТРИГ | Цифровий контакт 9 | Тригерний вхід. Arduino застосовує імпульс 10 мкс, щоб почати визначення дальності. |
| ЛУНА | Цифровий контакт 10 | Ехо вихід. Arduino зчитує ширину імпульсу для розрахунку відстані. |
| GND | GND | Заземлення. |
HC-SR04 працює за допомогою вимірювання часу прольоту. Arduino надсилає тригерний сигнал високого рівня тривалістю щонайменше 10 мікросекунд на висновок TRIG. Потім модуль автоматично надсилає вісім ультразвукових імпульсів із частотою 40 кГц і чекає відбитої луни.
Коли виявляється відбитий ультразвуковий сигнал, висновок ECHO видає імпульс високого рівня. Тривалість цього імпульсу є часом проходження ультразвукової хвилі туди й назад.
Відстань = час відлуння високого рівня × швидкість звуку / 2
У коді Arduino загальна спрощена формула така:
Відстань у см = тривалість × 0,0343 / 2
Процес синхронізації простий: Arduino ненадовго підтримує низький рівень TRIG, надсилає високий імпульс 10 мкс, а потім повертає TRIG на низький рівень. HC-SR04 надсилає ультразвуковий сплеск і встановлює високий рівень ECHO, доки відбитий сигнал не повернеться або поки не закінчиться вимірювання.
Щоб уникнути нестабільності показань, залишайте невелику затримку між вимірюваннями. Зазвичай використовується цикл вимірювання приблизно 60 мс, щоб попереднє ультразвукове відлуння встигло зникнути до наступного запуску.
Функція Arduino pulseIn() використовується для вимірювання того, як довго цифровий контакт залишається ВИСОКИМ або НИЗЬКИМ. Для HC-SR04 Arduino використовує pulseIn(echoPin, HIGH) для зчитування ширини імпульсу високого рівня з виводу ECHO.
| Синтаксис | Значення |
| pulseIn(пін, значення) | Зчитує тривалість імпульсу HIGH або LOW. |
| pulseIn(pin, значення, тайм-аут) | Зчитує імпульс із значенням тайм-ауту в мікросекундах. |
Рекомендовано використовувати тайм-аут. Якщо відлуння не повертається, функція може припинити очікування та повернути 0 замість блокування програми на надто довгий час.
Електропроводка проста. Підключіть VCC до 5 В, GND до GND, TRIG до контакту цифрового виходу Arduino та ECHO до контакту цифрового входу Arduino. У наступному прикладі використовуються Arduino Uno, TRIG на контакті 9 і ECHO на контакті 10.
Наступна типова програма Arduino надсилає імпульс запуску 10 мкс, зчитує ширину імпульсу ECHO, обчислює відстань у сантиметрах і друкує результат на моніторі послідовного порту.
const int trigPin = 9; const int echoPin = 10; велика тривалість; float distanceCm; void setup() { pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); Serial.begin(9600); } void loop() { digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); тривалість = pulseIn(echoPin, HIGH, 30000); if (тривалість == 0) { Serial.println('Поза діапазоном'); } else { distanceCm = тривалість * 0,0343 / 2; Serial.print('Відстань: '); Serial.print(distanceCm); Serial.println(' cm'); } затримка (60); }
Якщо ви бачите значення відстані на моніторі послідовного порту, ультразвуковий датчик HC-SR04 і проводка Arduino працюють правильно. Потім ви можете використовувати дані про відстань для виявлення перешкод, контролю руху робота, автоматичних дверей, нагадувань про паркування або проектів рівня рідини.
Тримайте вимірюваний об’єкт у рекомендованому діапазоні відстані та поза сліпою зоною 2 см.
Для кращого відбиття ультразвуку використовуйте плоску тверду поверхню мішені.
Уникайте вимірювання м’яких, кутових, пористих або звукопоглинальних матеріалів.
Використовуйте стабільне джерело живлення 5 В і тримайте проводку короткою та надійною.
Додайте тайм-аут до pulseIn(), щоб запобігти тривалому блокуванню, коли відлуння не повертається.
Усередніть або відфільтруйте медіану кількох показань, щоб зменшити шум.
Для більшої точності компенсуйте температуру, оскільки швидкість звуку змінюється залежно від температури повітря.
| застосування | Як використовується HC-SR04 |
| Робот для уникнення перешкод | Виявляє предмети поблизу та допомагає роботу змінити напрямок. |
| Датчик дистанції паркування | Вимірює відстань між транспортним засобом і перешкодою. |
| Виявлення рівня рідини | Безконтактно вимірює відстань від датчика до поверхні рідини. |
| Розумний бак для сміття | Виявляє руку або предмет поблизу та запускає автоматичне відкриття кришки. |
Щоб використовувати ультразвуковий датчик HC-SR04 з Arduino, підключіть VCC до 5 В, GND до GND, TRIG до контакту цифрового виходу та ECHO до контакту цифрового входу. Надішліть тригерний імпульс 10 мкс, зчитайте тривалість відлуння за допомогою pulseIn() і обчисліть відстань за формулою часу прольоту.
HC-SR04 недорогий, простий у використанні та підходить для багатьох проектів вимірювання відстані Arduino. Щоб отримати найкращі результати, зверніть увагу на цільову поверхню, кут вимірювання, сліпу зону, стабільну потужність, обробку тайм-ауту та вплив температури.
Arduino надсилає імпульс 10 мкс на висновок TRIG. HC-SR04 випромінює вісім ультразвукових імпульсів з частотою 40 кГц і встановлює високий рівень ECHO, доки відбитий звук не повернеться. Arduino вимірює цей час імпульсу та обчислює відстань.
Формула така: відстань = тривалість × швидкість звуку / 2. У сантиметрах поширеною формулою Arduino є відстань Cm = тривалість × 0,0343 / 2, де тривалість вимірюється в мікросекундах.
Виміряний час відлуння – це час проходження від датчика до об’єкта та назад до датчика. Ділення на 2 дає односторонню відстань між датчиком і об’єктом.
Ви можете використовувати більшість цифрових контактів Arduino. У багатьох прикладах TRIG підключається до цифрового контакту 9, а ECHO – до цифрового контакту 10. Код має збігатися з контактами, які використовуються у вашій проводці.
Поширені причини включають ослаблену проводку, нестабільне живлення 5 В, неправильні номери контактів TRIG або ECHO, відсутність об’єктів у діапазоні, кутові поверхні цілей, м’які матеріали, заблоковані головки датчиків або відсутність часу очікування у функції pulseIn().
Сліпа зона — це мінімальна відстань, на якій модуль не може надійно вимірювати. Для HC-SR04 сліпа зона зазвичай становить близько 2 см. Об’єкти ближче, ніж це, можуть давати нестабільні показання.
Так, HC-SR04 можна використовувати для простих безконтактних проектів рівня води, якщо датчик захищений від вологи та встановлений над поверхнею рідини. Для вологих, зовнішніх або промислових резервуарів рекомендується водонепроникний ультразвуковий датчик.
Використовуйте стабільне джерело живлення, тримайте датчик перпендикулярно до цілі, уникайте м’яких або кутових поверхонь, додайте тайм-аут pulseIn, зробіть кілька показань, використовуйте медіанну фільтрацію та дайте приблизно 60 мс між вимірюваннями.