Дальномір HC-SR04 підключення до Arduino. Дальномір за допомогою датчика HC SR04 та Arduino Ультразвуковий далекомір hc sr04 опис

терморегулятор W1209 DC, Релейний модуль, датчик руху HC-SR501, Модуль Wi-Fi ESP8266-12E, датчик руху HC-SR501, Блок живлення, Мікросхема контролера колекторного електродвигуна, ІЧ-пульт дистанційного керування, Радіомодуль NRF24L01, OKI 120A2, SD Card Module, Мікросхема контролера колекторного електродвигуна, Модем M590E GSM GPRS, Годинник реального часу DS 3231/DS 1307, Mini 360 на схемі LM2596, L2 Інфрачервоні датчикивідстані, Годинник реального часу, HC-SR501, блок живлення Mini 360 на схемі LM2596, Контролер L298N, HC-SR501, GSM GPRS, Модем M590E GSM GPRS, Годинник реального часу DS 3231/DS 1307, Модуль Wi-Fi ESP Card Module, Блок живлення, Mini 360, L293D, блок живлення Mini 360 на схемі LM2596, Радіомодуль, ІЧ-пульт дистанційного керування, ІЧ-пульт, Ethernet shield, Мікросхема контролера колекторного електродвигуна, Мікросхема контролера колекторного електродвигуна SD Card Module, Радіомодуль NRF24L01, двигун OKI, L293D, Кроковий двигун, Блок живлення, L293D, блок живлення Mini 360 на схемі LM2596, Карта пам'яті SD, Ethernet shield, датчик руху HC-SR501, Модуль Wi-Fi ESP8266-12E, Кроковий двигун OKI 120A2, Кроковий двигун,

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

Познайомимося з датчиками відстані, які стануть у нагоді в проектах, що розглядаються в наступних розділах. Ультразвуковий далекомір HC-SR04 - це поміщені на одну плату приймач та передавач ультразвукового сигналу. Крім самих приймача та передавача на платі знаходиться ще й необхідна обв'язка, щоб зробити роботу з цим датчиком простим і невимушеним.



Датчик має низьке енергоспоживання, що також є важливою перевагою у випадку з мобільними роботами, не прив'язаними до розетки. Живиться датчик HC-SR04 від 5, що теж зручно при підключенні його до Arduino.

Характеристики ультразвукового далекоміра HC-SR04:

Вимірюваний діапазон - від 2-х до 500 см;

Точність – 0,3 см;

Кут огляду -< 15 °;

Напруга живлення – 5 В.

Датчик має 4 виводи стандарту 2,54 мм:

VCC – харчування +5 В;

Trig(T) - виведення вхідного сигналу;

Echo (R) - виведення вихідного сигналу;

GND – земля.

Перевірка роботи датчика

Залити програму

Sketch code

/* Скетч з бібліотекою NewPing, яка може використовуватись і для датчика HC-SR04

наведеного тут SRF06 і дозволяє підключати ультразвукові датчики

за допомогою одного піна на Arduino. Можна додатково підключити конденсатор на 0.1 мкФ до пін Ехо та Тригер на датчику.*/

#include

#define TRIGGER_PIN 12 / / Arduino pin необхідний trigger pin на ultrasonic sensor.
#define ECHO_PIN 11 / / Arduino pin необхідний echo pin на ultrasonic sensor.
#define MAX_DISTANCE 200 // Максимальна відстань, яку ми контролюємо (в сантиметрах). Максимальна відстань подібних датчиківзнаходиться у діапазоні 400-500см.

NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // Налаштування пінів та максимальної відстані

void setup() (
Serial.begin(115200); // Відкриття серійного протоколу з частотою передачі 115200 біт/сек.
}

void loop() (
delay(500); // Затримка 500 мілісекунд між генерацією хвиль. 29 мілісекунд – мінімально припустима затримка.
unsigned int uS = sonar.ping(); // Генерація сигналу, отримання часу мікросекундах (uS).
Serial.print("Ping:");
Serial.print(us/US_ROUNDTRIP_CM); // Перетворення часу на відстань та відображення результату (0 відповідає виходу за допустимий діапазон)
Serial.println("cm");
}

Відкрити монітор порту

Принцип роботи ультразвукового далекоміра HC-SR04

У складі далекоміра є два п'єзоелементи: один працює як випромінювач сигналу, інший - як приймач. Випромінювач генерує сигнал, який, відбившись від перешкоди, потрапляє на приймач. Вимірявши час, за який сигнал проходить до об'єкта та назад, можна оцінити відстань.

Послідовність дій така:

  1. Подаємо імпульс тривалістю 10 мкс на виведення Trig.
  2. Всередині далекоміра вхідний імпульс перетворюється на 8 імпульсів частотою 40 кГц і посилається вперед через випромінювач T .
  3. Дійшовши до перешкоди, надіслані імпульси відбиваються і приймаються приймачем R , в результаті отримуємо вихідний сигнал на виведенні Echo.
  4. Безпосередньо на стороні контролера переводимо отриманий сигнал у відстань за формулою:

Ширина імпульсу (мкс)/58 = дистанція (см);

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

Бібліотека Ultrasonic

Для роботи Arduinoз датчиком HC-SR04 є готова бібліотека – Ultrasonic. Конструктор Ultrasonic приймає два параметри: номери пінів, до яких підключені висновки Trig та Echo відповідно:

Ultrasonic ultrasonic(12,13);

тут виведення датчика Trig підключений до 12-го піну Arduino, а Echo - до 13-го.

Бібліотека має один метод Ranging, як параметр якого задається, у що перераховувати відстань до об'єкта: сантиметри або дюйми:

#define CM 1

#define INC 0

Таким чином рядок ultrasonic.Randing (CM) поверне відстань до об'єкта (типу long) в сантиметрах.

Файли бібліотеки ви можете знайти в папці libraries/Ultrasonic електронного архіву, що супроводжує книгу. Для використання бібліотеки у своїх проектах помістимо її в папку libraries каталогу установки Arduino.

Скетч, що видає відстань до послідовного порту до об'єкта в сантиметрах, представлений у прикладі.

Sketch code

#include "Ultrasonic.h"

// sensor connected to:

// Trig - 12, Echo - 13 Ultrasonic ultrasonic (12, 13);

Serial.begin(9600);

float dist_cm = ultrasonic.Ranging(CM); Serial.println(dist_cm);

Підключення датчика HC-SR04 до Arduino

Ультразвуковий датчик HC–SR04 визначає відстань та виводить отримані значення у вікно серійного монітора у середовищі Arduino IDE.

Невелика примітка: вільному доступііснує відмінна бібліотека NewPing, яка ще більше полегшує використання HC-SR04, приклад її використання також наведено нижче.// Генеруємо короткий LOW імпульс, щоб забезпечити чистий імпульс HIGH:

digitalWrite(trigPin, LOW);

delayMicroseconds(5);

digitalWrite(trigPin, HIGH);

delayMicroseconds(10);

digitalWrite(trigPin, LOW);

// Зчитуємо дані з ультразвукового датчика: значення HIGH, яке

// залежить від тривалості (у мікросекундах) між відправкою

// акустичної хвилі та її зворотному прийомі на ехолокаторі.

pinMode(echoPin, INPUT);

duration = pulseIn(echoPin, HIGH);

// Перетворення часу у відстань

cm = (duration/2)/29.1;

inches=(duration/2)/74;

Serial.print(inches);

Serial.print("in, ");

Serial.print(cm);

Serial.print("cm");

Serial.println();

Sketch code

#include

#define TRIGGER_PIN 12

#define ECHO_PIN 11

#define MAX_DISTANCE 200

NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // Налаштування пінів та максимальної відстані.

Serial.begin(9600);

unsigned int uS = sonar.ping_cm();

Serial.print(uS);

Serial.println("cm");

Якщо HC-SR04 не зчитує сигнал відлуння, вихідний сигнал ніколи не перетворюється на LOW. Датчики Devantec та Parallax забезпечують час затримки 36 мілісекунд 28 мілісекунд відповідно. Якщо ви використовуєте наведений вище скетч, програма «зависне» на 1 секунду. Тому бажано вказувати параметр затримки.

Датчик HC-SR04 погано працює при вимірі відстаней понад 10 футів. Час повернення імпульсу становить близько 20 мілісекунд, так що рекомендується в таких випадках виставляти час затримки більше 20, наприклад, 25 або 30 мілісекунд.

Можна підключити ультразвуковий датчик відстані HC-SR04 лише до одного піну Arduino. Для цього необхідно між пінами Тригера та Відлуння встановити резистор на 2.2 кОм і підключити до Arduino тільки пін Тригера.

  • макетна плата (breadboard);
  • персональний комп'ютер із середовищем розробки Arduino IDE.
  • 1 Принцип діїультразвукового далекоміра HC-SR04

    Дія ультразвукового далекоміра HC-SR04 заснована на принципі ехолокації. Він випромінює звукові імпульси у простір і приймає відбитий від перешкоди сигнал. За часом розповсюдження звукової хвилідо перешкоди та назад визначається відстань до об'єкта.

    Запуск звукової хвилі починається з подачі позитивного імпульсутривалістю не менше 10 мікросекунд на ніжку TRIGдалекоміра. Щойно імпульс закінчується, далекомір випромінює у простір собі пачку звукових імпульсів частотою 40 кГц. У цей же час на ніжці ECHOдалекоміра утворюється логічна одиниця. Як тільки датчик вловлює відбитий сигнал, на виведенні ECHO з'являється логічний нуль. По тривалості логічної одиниці на ніжці ECHO («Затримка відлуння» малюнку) визначається відстань до перешкоди.

    Діапазон вимірювання відстані далекоміра HC-SR04 - до 4 метрів з роздільною здатністю 0,3 см. Кут спостереження - 30 °, ефективний кут - 15 °. Струм споживання в режимі очікування 2 мА, при роботі – 15 мА.

    2 Схема підключеннядатчика відстані

    Живлення ультразвукового далекоміра здійснюється напругою +5 В. Два інші висновки підключаються до будь-яких цифрових портів Arduino, ми підключимо до 11 та 12.



    3 Отримання дистанції до об'єктаз датчика HC-SR04

    Тепер напишемо скетч, що визначає відстань до перешкоди та виводить його у послідовний порт. Спочатку задаємо номери висновків TRIG та ECHO - це 12 та 11 піни. Потім оголошуємо тригер як вихід, а луна - як вхід. Ініціалізуємо послідовний порт на швидкості 9600 бод. У кожному повторенні циклу loop()зчитуємо дистанцію та виводимо в порт.

    Const int trigPin = 12; const int echoPin = 11; void setup() ( pinMode(trigPin, OUTPUT); // Тригер - вихідний пін pinMode(echoPin, INPUT); // Відлуння - вхідний digitalWrite(trigPin, LOW); 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, HIGH); // генеруємо 10 мкс імпульс запуску delayMicroseconds(10); digitalWrite(trigPin, LOW); // Визначення на піні echoPin тривалості рівня HIGH, мкс: long duration = pulseIn(echoPin, HIGH); return duration; }

    Функція getEchoTiming()генерує імпульс запуску. Вона створює той 10-микросекундный імпульс, який є тригером для початку випромінювання далекоміром звукового пакета в простір. Далі вона запам'ятовує час від початку передачі звукової хвилі до приходу луни.

    Функція getDistance()розраховує дистанцію до об'єкта. З шкільного курсуфізики ми пам'ятаємо, що відстань дорівнює швидкість помножити на час: S = V×t Швидкість звуку в повітрі 340 м/сек, час у мікросекундах ми знаємо (змінна duration). Щоб отримати час durationв секундах, потрібно розділити його на 1 000 000. Оскільки звук проходить подвійне відстань - до об'єкта і назад - потрібно розділити результат навпіл. Ось і виходить, що відстань до об'єкту S = 34000 см/сек × тривалість / 1 000 000 сек / 2 = 1,7 см/сек / 100,що ми й написали у скетчі.

    Операцію множення мікроконтролер виконує швидше, ніж операцію поділу, тому :100 я замінив на еквівалентне ×0,01.

    4 Бібліотека для роботиз ехолокатором HC-SR04

    Також для роботи з ультразвуковим далекоміром написано безліч бібліотек. Наприклад, ось ця бібліотека Ultrasonic. Установка бібліотеки відбувається стандартно: завантажити, розархівувати у директорію /libraries/яка знаходиться в папці з Arduino IDE. Після цього бібліотекою можна скористатися.

    Встановивши бібліотеку, напишемо новий скетч.

    #include // Підключаємо бібліотеку Ultrasonic ultrasonic (12, 11); // Trig – 12, Echo – 11 void setup() ( Serial.begin(9600); // ініціалізація послід. порту } void loop() ( float dist_cm = ultrasonic.Ranging(CM); // дистанція в см Serial.println(dist_cm); // Виводимо дистанцію в порт delay (100); }

    Результат його роботи той самий – у моніторі послідовного порту виводиться дистанція до об'єкта в сантиметрах.

    Якщо у скетчі написати float dist_cm = ultrasonic.Ranging(INC);- дистанція відображатиметься у дюймах.

    5 Висновки щодо роботиіз сонаром HC-SR04

    Отже, ми з вами підключили Arduino ультразвуковий далекомір HC-SR04 та отримали з нього дані двома у різний спосіб: з використанням спеціальної бібліотеки та без.

    Перевага використання бібліотеки в тому, що кількість коду значно скорочується і покращується читання програми, вам не доводиться вникати в тонкощі роботи пристрою і ви відразу можете його використовувати. Але в цьому криється і недолік: ви гірше розумієте, як працює пристрій і які в ньому відбуваються процеси. У будь-якому випадку, яким способом користуватися вирішувати тільки вам.

    Придбати ультразвуковий далекомір за гарною ціною можна

    Вхідна напруга 5 В постійного струму, подається на висновки Vcc та GND датчика.

    Докладніше про датчик:

    Якщо подати позитивний імпульс на вхід датчика TRIG тривалістю 10 мкс, датчик відправить звукову хвилю (8 імпульсів на частоті 40 кГц - ультразвук) і встановить рівень логічної «1» на виході ECHO. Звукова хвиля відобразиться від перешкоди і повернеться на приймач датчика, після чого він скине рівень на виході ECHO в логічний «0» (те саме датчик зробить, якщо звукова хвиля не повернеться протягом 38 мс.) В результаті час наявності логічної «1» на виході ECHO дорівнює часу проходження ультразвукової хвилі від датчика до перешкоди та назад. Знаючи швидкість розповсюдження звукової хвилі у повітрі та час наявності логічної «1» на виводі ECHO, можна розрахувати відстань до перешкоди.


    Відстаньобчислюється множенням швидкості тимчасово (у разі швидкості поширення звукової хвилі V, на час очікування луна Echo). Але так звукова хвиля проходить відстань від датчика до об'єкта і назад, а нам потрібно тільки до об'єкта, результат ділимо на 2:

    L = V * Echo / 2

    • L- Відстань (м);
    • V– швидкість звуку повітря (м/с);
    • Echo- Час очікування відлуння (с).

    Швидкість звуку у повітрі, На відміну від швидкості світла, величина не постійна і сильно залежить від температури:

    V 2 = γ R T / M

    • V– швидкість звуку у повітрі (м/с)
    • γ - Показник адіабати повітря (од.) = 7/5
    • R- Універсальна газова постійна (Дж/моль*K) = 8,3144598(48)
    • T ° К) = t ° C + 273,15
    • M– молекулярна маса повітря (г/моль) = 28,98

    Підставивши у формулу відомі значення γ , R, M, Отримаємо:

    V ≈ 20,042 √T

    • T- Абсолютна температура повітря ( ° К) = t ° C + 273,15

    Залишилось об'єднати формули обчислення Vі L, та перекласти Lз м в см, Echoз з в мкс, Tз ° До °C, отримаємо:

    L ≈ Echo √(t+273,15) / 1000

    • L- Відстань (см)
    • Echo- Час очікування луна (мкс)
    • t– температура повітря (°C)

    iarduino_HC_SR04 та iarduino_HC_SR04_int , синтаксис обох бібліотек однаковий. Вони самі розраховують усі значення і повертають лише відстань у див. Температура за замовчуванням встановлена ​​на 23°C, але її можна вказувати. Робота з бібліотеками та їхні функції описані нижче.

    Для роботи з датчиком, нами розроблено дві бібліотеки iarduino_HC_SR04 та iarduino_HC_SR04_int , синтаксис обох бібліотек однаковий.

    • Перевагою бібліотеки iarduino_HC_SR04 є те, що датчики можна підключати до будь-яких висновків Arduino, а недолік полягає в тому, що бібліотека чекає на відповідь від датчика, який може тривати до 38 мс.
    • Перевагою бібліотеки iarduino_HC_SR04_int є те, що вона не чекає відповіді від датчиків (не призупиняє виконання скетчу), але висновки датчиків ECHO потрібно підключати тільки до тих висновків Arduino , які використовують зовнішні переривання.

    Докладніше про встановлення бібліотеки читайте в нашій.

    Приклади:

    Визначення відстані за допомогою бібліотеки iarduino_HC_SR04:

    #include // Підключаємо бібліотеку iarduino_HC_SR04 sensor(2,3); // Оголошуємо об'єкт sensor, вказуючи номери arduino підключені до висновків TRIG і ECHO датчика // Можна використовувати будь-які висновки Arduino void setup()( Serial.begin(9600); // Ініціалізація передачі в монітор послідовного порту ) void loop()( delay(500);// Затримка 0,5 сек Serial.println(sensor.distance()); );// Виведення відстані (см) при температурі повітря, близько -20 °C Serial.println("==================");

    Визначення відстані за допомогою бібліотеки iarduino_HC_SR04_int:

    #include // Підключаємо бібліотеку iarduino_HC_SR04_int sensor(2,3); // Оголошуємо об'єкт sensor, вказуючи номери arduino, підключені до висновків TRIG і ECHO датчика // (висновок ECHO потрібно підключити до висновку Arduinoвикористовує зовнішнє переривання) void setup()( Serial.begin(9600); // Ініціалізація передачі даних в монітор послідовного порту ) void loop()( delay(500); // Затримка 0,5 сек Serial.println(sensor.distance ()) // Виведення відстані (см) при температурі повітря, близько +23 °C Serial.println(sensor.distance(-20)); // Виведення відстані (см) при температурі повітря, близько -20 °C .println("==================");

    Результат роботи обох прикладів:


    З прикладу видно, що й під час вимірювань не враховувати температуру повітря, можна отримати результати з високою похибкою.

    Ультразвукові датчики відстані Ардуїно дуже потрібні в робототехнічних проектах через свою відносну простоту, достатню точність і доступність. Вони можуть бути використані як прилади, що допомагають об'їжджати перешкоди, отримувати розміри предметів, моделювати карту приміщення та сигналізувати про наближення або видалення об'єктів. Одним з найпоширеніших варіантів такого пристрою є датчик відстані, в конструкцію якого входить ультразвуковий далекомір HC SR04. У цій статті ми познайомимося з принципом дії датчика відстані, розглянемо кілька варіантів підключення до плат Arduino, схему взаємодії та приклади скетчів.

    Здатність ультразвукового датчика визначати відстань до об'єкта ґрунтується на принципі сонара – посилаючи пучок ультразвуку, і отримуючи його відображення із затримкою, пристрій визначає наявність об'єктів та відстань до них. Ультразвукові сигнали, що генеруються приймачем, відбиваючись від перешкоди, повертаються до нього через певний проміжок часу. Саме цей часовий інтервал стає характеристикою, що допомагає визначити відстань до об'єкта.

    Увага! Так як в основу принципу дії покладено ультразвук, такий датчик не підходить для визначення відстані до звукопоглинаючих об'єктів. Оптимальними для вимірювання є предмети з гладкою гладкою поверхнею.

    Опис датчика HC SR04

    Датчик відстані Ардуїно є приладом безконтактного типу і забезпечує високоточний вимір та стабільність. Діапазон дальності його виміру становить від 2 до 400 см. На його роботу не має суттєвого впливу електромагнітні випромінюванняі сонячна енергія. У комплект модуля з HC SR04 arduino також входять ресівер та трансмітер.

    Ультразвуковий далекомір HC SR04 має такі технічні параметри:

    • Напруга живлення 5В;
    • Робочий параметр сили струму - 15 мА;
    • Сила струму у пасивному стані< 2 мА;
    • Оглядовий кут – 15°;
    • Сенсорна роздільна здатність – 0,3 см;
    • Вимірювальний кут - 30 °;
    • Ширина імпульсу - 10-6 с.

    Датчик оснащений чотирма висновками (стандарт 2, 54 мм):

    • Контакт харчування позитивного типу- +5В;
    • Trig (Т) - вихід сигналу входу;
    • Echo (R) - виведення сигналу виходу;
    • GND - висновок "Земля".

    Де придбати модуль SR04 для Ардуїно

    Датчик відстані – досить поширений компонент і його легко можна знайти в інтернет-магазинах. Найдешевші варіанти (від 40-60 рублів за штуку) традиційно на всьому відомому сайті.

    Модуль датчика відстані HC-SR04 для Ардуїно Ще один варіант ультразвукового сенсора HC-SR04 у надійного постачальника
    Датчики відстані SR05 Ultrasonic HC-SR05 (покращені характеристики) Модуль HC-SR05 HY-SRF05 для UNO R3 MEGA2560 DUE від надійного виробника

    Схема взаємодії з Arduino

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

    • Подати вихід Trig імпульс тривалістю 10 мікросек;
    • В ультразвуковому далекомірі hc sr04 підключеному до arduino відбудеться перетворення сигналу 8 імпульсів з частотою 40 кГц, які через випромінювач будуть послані вперед;
    • Коли імпульси дійдуть перешкоди, вони відіб'ються від нього і будуть прийняті приймачем R, що забезпечить наявність вхідного сигналу на виході Echo;
    • На стороні контролера отриманий сигнал за допомогою формул слід перевести у відстань.

    При розподілі ширини імпульсу на 58.2 отримаємо дані в сантиметрах, при розподілі на 148 - в дюймах.

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

    Виконати підключення ультразвукового датчика відстані до плати Arduino досить легко. Схема підключення показана малюнку.

    Контакт землі підключаємо до виведення GND на платі Arduino, вихід живлення з'єднуємо з 5V. Виходи Trig та Echo приєднуємо до arduino на цифрові піни. Варіант підключення за допомогою макетної плати:

    Бібліотека для роботи з HC SR04

    Для полегшення роботи з датчиком відстані HC SR04 на arduino можна використовувати бібліотеку NewPing. Вона не має проблем із пінговими доступами та додає деякі нові функції.

    До особливостей бібліотеки можна віднести:

    • Можливість роботи з різними ультразвуковими датчиками;
    • Може працювати з датчиком відстані лише через один пін;
    • Відсутність відставання на 1 секунду за відсутності пінгу луни;
    • Для простої корекції помилок є вбудований цифровий фільтр;
    • Максимально точний розрахунок відстані.

    Завантажити бібілотеку NewPing можна

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

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

    • температури та вологості повітря;
    • відстані до об'єкта;
    • розташування щодо датчика (відповідно до діаграми випромінювання);
    • якості виконання елементів модуля датчика

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

    Чинник відстані до об'єкта важливий, т.к. зростає можливість відбиття від сусідніх предметів, до того ж і сам сигнал згасає з відстанню.

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

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

    • усереднюються значення (кілька разів заміряємо, прибираємо сплески, потім знаходимо середнє);
    • за допомогою датчиків (наприклад, ) визначається температура та вносяться поправочні коефіцієнти;
    • Датчик встановлюється на серводвигун, за допомогою якого ми "повертаємо голову", переміщуючи діаграму спрямованості вліво або вправо.

    Приклади використання датчика відстані

    Давайте розглянемо приклад простого проектуз платою Arduino Uno та датчиком відстані HC SR04. У скетчі ми будемо отримувати значення відстані до предметів і виводити їх на монітор порту в середовище Arduino IDE. Ви зможете легко змінити скетч та схему підключення, щоб датчик сигналізував про наближення або віддалення предмета.

    Підключення датчика до ардуїно

    При написанні скетчу використовувався наступний варіант розпинання підключення датчика:

    • VCC: +5V
    • Trig – 12 пін
    • Echo – 11 пін
    • Земля (GND) – Земля (GND)

    Приклад скетчу

    Почнемо роботу з датчиком відразу з відносного складного варіанта- Без використання зовнішніх бібліотек.

    У цьому скетчі ми виконуємо таку послідовність дій:

    • Коротким імпульсом (2-5 мікросекунди) переводимо датчик відстані в режим ехолокації, при якому в навколишній простір надсилаються ультразвукові хвилі з частотою 40 КГц.
    • Чекаємо, поки датчик проаналізує відбиті сигнали і за затримкою визначить відстань.
    • Отримуємо значення відстані. Для цього чекаємо, поки HC SR04 видасть на вході ECHO імпульс, пропорційний відстані. Ми визначаємо тривалість імпульсу за допомогою функції pulseIn, яка поверне нам час, що минув до зміни рівня сигналу (у нашому випадку до появи зворотного фронту імпульсу).
    • Отримавши час, ми переводимо його у відстань у сантиметрах шляхом розподілу значення на константу (для датчика SR04 це 29.1 сигналу «туди», стільки ж сигналу «назад», що у сумі дасть 58.2).

    Якщо датчик відстані не виконує зчитування сигналу, перетворення вихідного сигналу ніколи не прийме значення короткого імпульсу – LOW. Так як у деяких датчиків час затримки варіюється в залежності від виробника, рекомендується при використанні зазначених скетчів виставляти його значення вручну (ми це робимо на початку циклу).

    Якщо відстань більше 3 метрів, у якому HC SR04 починає погано працювати, час затримки краще виставляти понад 20 мс, тобто. 25 чи 30 мс.

    #define PIN_TRIG 12 #define PIN_ECHO 11 long duration, cm; void setup() ( // Ініціалізуємо взаємодію по послідовному порту Serial.begin (9600); // Визначаємо введення та висновки pinMode(PIN_TRIG, OUTPUT); pinMode(PIN_ECHO, INPUT); ) void loop() ( // Спочатку генеруємо короткий імпульс тривалістю 2-5 мікросекунд. високий рівеньсигналу, чекаємо близько 10 мікросекунд. У цей момент датчик надсилатиме сигнали з частотою 40 КГц. delayMicroseconds(10); digitalWrite(PIN_TRIG, LOW); // Час затримки акустичного сигналу на ехолокаторі. duration = pulseIn(PIN_ECHO, HIGH); // Тепер залишилося перетворити час на відстань cm = (duration / 2) / 29.1; Serial.print("Відстань до об'єкта:"); Serial.print(cm); Serial.println("див."); // Затримка між вимірами для коректної роботи скелю delay (250); )

    Скетч із використанням бібліотеки NewPing

    Тепер давайте розглянемо варіант скетчу з використанням бібліотеки NewPing. Код значно спроститься, т.к. всі описані раніше дії заховані всередині бібліотеки. Все, що нам потрібно зробити, – створити об'єкт класу NewPing, вказавши піни, за допомогою яких ми підключаємо датчик відстані та використовувати методи об'єкта. У прикладі для отримання відстані в сантиметрах потрібно використовувати ping_cm().

    #include #define PIN_TRIG 12 #define PIN_ECHO 11 #define MAX_DISTANCE 200 // Константа для визначення максимальної відстані, яку ми вважатимемо коректною. // Створюємо об'єкт, методами якого потім користуватися для отримання відстані. // Як параметри передаємо номери пінів, до яких підключені виходи ECHO і TRIG датчика NewPing sonar (PIN_TRIG, PIN_ECHO, MAX_DISTANCE); void setup() ( // Ініціалізуємо взаємодію по послідовному порту на швидкості 9600 Serial.begin(9600); ) void loop() ( // Стартова затримка, необхідна для коректної роботи. delay(50); // Отримуємо значення від датчика відстані і зберігаємо його в змінну unsigned int distance = sonar.ping_cm();

    Приклад підключення ультразвукового далекоміра HC SR04 з одним піном

    Підключення HC-SR04 до Arduino може бути виконане за допомогою одного піна. Такий варіант стане в нагоді, якщо ви працюєте з великим проектом і вам не вистачає вільних пінів. Для підключення вам потрібно просто встановити між контактами TRIG та ECHO резистор номіналом 2.2K і підключити до ардуїно контакт TRIG.

    #include #define PIN_PING 12 // Пін з Arduino з'єднаний з пінами trigger та echo на датчику відстані #define MAX_DISTANCE 200 // Максимальна відстань, яку ми здатні контролювати (400-500см). NewPing sonar(PIN_PING, PIN_PING, MAX_DISTANCE); // Регулювання пінів та максимальної відстані void setup() ( Serial.begin(9600); // Відкривається протокол з даними та частотою передачі 115200 біт/сек. ) void loop() ( delay(50); // Затримка в 50 мс між генерованими хвилями. / US_ROUNDTRIP_CM); // Перерахунок параметра часу у величину відстані та виведення результату (0 відповідає виходу за допустиму межу) Serial.println("cm");

    Короткі висновки

    Ультразвукові датчики відстані досить універсальні та точні, що дозволяє їх використовувати для більшості аматорських проектів. У статті розглянуто вкрай популярний датчик HC SR04, який легко підключається до плати ардуїно (для цього слід відразу передбачити два вільні піни, але є варіант підключення і з одним піном). Для роботи з датчиком існують декілька безкоштовних бібліотек(У статті розглянута лише одна з них, NewPing), але можна обійтися і без них - алгоритм взаємодії з внутрішнім контролером датчика досить простий, ми показали його у цій статті.

    Виходячи з власного досвіду, можна стверджувати, що датчик HC-SR04 показує точність в межах одного сантиметра на відстанях від 10 см до 2 м. На більш коротких і далеких дистанціях можлива поява сильних перешкод, що залежить від навколишніх предметів і способу використання. Але в більшості випадків HC-SR04 чудово справлявся зі своєю роботою.

    Дальномір— пристрій для вимірювання відстані до деякого предмета. Далекомір допомагає роботам у різних ситуаціях. Простий колісний робот може використовувати цей пристрій для виявлення перешкод. Літаючий дрон використовує далекомір для баражування над землею на заданій висоті. За допомогою далекоміра можна навіть побудувати карту приміщення, застосувавши спеціальний алгоритм SLAM.

    1. Принцип дії

    На цей раз ми розберемо роботу одного з найпопулярніших датчиків – ультразвукового (УЗ) далекоміра. Існує багато різних модифікацій подібних пристроїв, але вони працюють за принципом вимірювання часу проходження відбитого звуку. Тобто датчик відправляє звуковий сигналу заданому напрямку, потім ловить відбите відлуння та обчислює час польоту звуку від датчика до перешкоди та назад. Зі шкільного курсу фізики ми знаємо, що швидкість звуку в певному середовищі величина стала, але залежить від щільності середовища. Знаючи швидкість звуку в повітрі та час польоту звуку до мети, ми можемо розрахувати пройдену звуком відстань за формулою: s = v * tде v – швидкість звуку в м/с, а t – час у секундах. Швидкість звуку повітря, до речі, дорівнює 340.29 м/с. Щоб впоратися зі своїм завданням, далекомір має дві важливі конструктивні особливості. По-перше, щоб звук добре відбивався від перешкод, датчик випромінює ультразвук із частотою 40 кГц. Для цього датчик має п'єзокерамічний випромінювач, який здатний генерувати звук такої високої частоти. По-друге, випромінювач влаштований таким чином, що звук поширюється не на всі боки (як це буває у звичайних динаміків), а у вузькому напрямку. На малюнку представлена ​​діаграма спрямованості типового УЗ далекоміра. Як видно на діаграмі, кут огляду найпростішого УЗ далекоміра становить приблизно 50-60 градусів. Для типового варіанта використання, коли датчик детектує перешкоди, такий кут огляду цілком придатний. Ультразвук може виявити навіть ніжку стільця, тоді як лазерний далекомір, наприклад, може її не помітити. Якщо ж ми вирішимо сканувати навколишній простір, обертаючи далекомір по колу як радар, УЗ далекомір дасть нам дуже неточну і галасливу картину. Для таких цілей краще використовувати якраз лазерний далекомір. Також слід відзначити два серйозні недоліки УЗ далекоміра. Перший полягає в тому, що поверхні, що мають пористу структуру, добре поглинають ультразвук, і датчик не може виміряти відстань до них. Наприклад, якщо ми задумаємо виміряти відстань від мультикоптера до поверхні поля з високою травою, То швидше за все отримаємо дуже нечіткі дані. Такі ж проблеми на нас чекають при вимірі дистанції до стіни покритої поролоном. Другий недолік пов'язаний із швидкістю звукової хвилі. Ця швидкість недостатньо висока, щоб зробити процес вимірювання більш частим. Допустимо, перед роботом є перешкода на видаленні 4 метри. Щоб звук злітав туди й назад, потрібно цілих 24 мс. Слід 7 разів відміряти, перш ніж ставити УЗ далекомір на літаючих роботів.

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

    У цьому уроці ми будемо працювати з датчиком HC-SR04 та контролером Ардуїно Уно. Цей популярний далекомір вміє вимірювати відстань від 1-2 см до 4-6 метрів. При цьому, точність вимірювання становить 0.5 - 1 см. Зустрічаються різні версії одного і того ж HC-SR04. Одні працюють краще, інші гірші. Відрізнити їх можна за малюнком плати на зворотній стороні. Версія, яка працює добре виглядає так:

    А ось версія, яка може давати збої:

    3. Підключення HC-SR04

    Датчик HC-SR04 має чотири виводи. Крім землі (Gnd) та живлення (Vcc) ще є Trig та Echo. Обидва ці висновки цифрові, так що підключаємо до будь-яких висновків Ардуїно Уно:
    HC-SR04 GND VCC Trig Echo
    Arduino Uno GND +5V 3 2
    Принципова схема пристрою Зовнішній вигляд макету

    4. Програма

    Отже, спробуємо наказати датчику відправити ультразвуковий імпульс, що зондує, а потім зафіксуємо його повернення. Подивимося як виглядає часова діаграма роботи HC-SR04.
    На діаграмі видно, що для початку виміру нам необхідно згенерувати на висновку Trigпозитивний імпульс завдовжки 10 мкс. Після цього датчик випустить серію з 8 імпульсів і підніме рівень на виведенні. Echo, перейшовши у режим очікування відбитого сигналу. Як тільки далекомір відчує, що звук повернувся, він завершить позитивний імпульс на Echo. Виходить, що нам потрібно зробити лише дві речі: створити імпульс на Trig для початку вимірювання, і заміряти довжину імпульсу на Echo, щоб потім обчислити дистанцію за нехитрою формулою. Робимо. int echoPin = 2; int trigPin = 3; void setup() ( Serial.begin (9600); pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); ) void loop() ( int duration, cm; digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite (trigPin, HIGH);delayMicroseconds(10); (100); pulseInзаміряє довжину позитивного імпульсу на нозі echoPin у мікросекундах. У програмі записуємо час польоту звуку в змінну duration. Як ми вже з'ясували раніше, нам потрібно помножити час на швидкість звуку: s = тривалість * v = тривалість * 340 м/сПерекладаємо швидкість звуку з м/с см/мкс: s = тривалість * 0.034 м/мксДля зручності перетворюємо десятковий дрібу звичайну: s = тривалість * 1/29 = тривалість / 29А тепер пригадаємо, що звук пройшов дві шукані відстані: до мети і назад. Поділимо все на 2: s = тривалість / 58Тепер ми знаємо звідки взялося число 58 у програмі! Завантажуємо програму на Ардуїно Уно та відкриваємо монітор послідовного порту. Спробуємо тепер наводити датчик на різні предмети та дивитися в моніторі розраховану відстань.

    Завдання

    Тепер коли ми вміємо обчислювати відстань за допомогою далекоміра, зробимо кілька корисних пристроїв.
    1. Будівельний далекомір. Програма кожні 100мс вимірює відстань за допомогою далекоміра та виводить результат на символьний РК-дисплей. Для зручності отриманий пристрій можна помістити у невеликий корпус та запитати від батарейок.
    2. Ультразвукова тростина. Напишемо програму, яка «пищатиме» зумером з різною частотою, залежно від виміряної відстані. Наприклад, якщо відстань до перешкоди більше трьох метрів – зумер видає звук раз на пів секунди. На відстані 1 метр — раз на 100мс. Менш 10см - пищить постійно.

    Висновок

    Ультразвуковий далекомір - простий у використанні, дешевий та точний датчик, який відмінно виконує свою функцію на тисячах роботів. Як ми з'ясували з уроку, датчик має недоліки, які слід враховувати при будівництві робота. Хорошим рішеннямможе стати спільне використання ультразвукового далекоміра в парі з лазерним. У такому разі вони нівелюватимуть недоліки один одного.