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

Нові статті

● Проект 23: Ультразвуковий датчик відстані HC-SR04. Принцип роботи, підключення, приклад

У цьому експерименті ми розглянемо ультразвуковий датчик для вимірювання відстані та створимо проект виведення показань датчика на екран РКІ WH1602.

Необхідні компоненти:

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

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

Вимірюваний діапазон - від 2 до 500 см;
. точність – 0,3 см;
. кут огляду -< 15°;
. напруга живлення – 5 В.

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

VCC – харчування +5 В;
. Trig(T) - виведення вхідного сигналу;
. Echo (R) - виведення вихідного сигналу;
. GND – земля.

Послідовність дій для отримання даних така:

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

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

У нашому експерименті ми створимо звукову сигналізацію, яка буде включатися при наближенні до плати Arduino на відстань менше 1 м. Датчик розміщений на кронштейні серви, що обертається, і контролює простір з кутом огляду 180°. Якщо датчик виявляє об'єкт у радіусі 1 м, подається звуковий сигнална пьзоизлучатель, обертання серви припиняється. Схема сполуки елементів представлена ​​на рис. 23.2.

Мал. 23.2. Схема з'єднання елементів для звукової сигналізації

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

Ultrasonic ultrasonic(12,13);

Вміст скетчу показано у лістингу 23.1.

#include // Підключення бібліотеки Servo Servo servo1; const int pinServo=8; // пін для підключення сервоприводу int pos = 0; // Змінна для зберігання позиції сервоприводу int dir = 1; // Напрямок переміщення сервоприводу // Висновки для підключення HC-SR04 Trig – 12, Echo – 13 Ultrasonic ultrasonic ( 12 , 13 ) ; float dist_cm; // Змінна для дистанції, см // Підключити динамік до pin 9 int speakerPin = 9; void setup(){ // підключити змінну servo1 до виводу pinServo1 servo1.attach(pinServo1); pinMode(speakerPin, OUTPUT); ) void loop ()(servo1.write(pos); // Поворот сервоприводів на отриманий кут delay(15); // Пауза для очікування повороту сервоприводів float dist_cm = ultrasonic.Ranging(CM); if (dist_cm<100 && dist_cm>20) tone (speakerPin,); // Включити п'єзозуммер else (tone (speakerPin,0); // відключити п'єзозуммер pos=pos+dir; // Зміна змінної положення сервоприводу if (pos==0 || pos==180) dir=dir*(-1); // Зміна напрямку руху } }
Порядок підключення:

1. Закріплюємо датчик відстані HC-SR04 на сервоприводі.
2. Підключаємо датчик HC-SR04, п'єзозумер і сервопривід до плати Arduino за схемою на рис. 23.2.
3. Завантажуємо в плату Arduinoскетч із лістингу 23.1.
4. Спостерігаємо за циклічним переміщенням сервоприводу, при попаданні об'єкта в поле зору датчика HC-SR04 п'єзозумер видає сигнал, сервопривід зупиняється, при зникненні об'єкта з поля зору датчика сервопривід відновлює рух.

Лістинги програм

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

Це спеціальний датчик, що дозволяє за допомогою ультразвукових хвиль виміряти відстань до об'єкта, на який його направили. Неважко здогадатися, що найпростіше його застосувати для створення простого далекоміра. Розглянемо Arduino hc sr04 та які нюанси у роботі з ним варто враховувати, перш ніж почати збирати проект.

1. Основи складання далекоміра на Ардуїно за допомогою датчика HC SR04

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

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

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

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

Чому усереднене?

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

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

Є ще один нюанс, який вам варто заздалегідь врахувати, збираючи ультразвуковий далекомір Arduino- Не всі поверхні підходять для вимірювання. Справа в тому, що деякі матеріали здатні поглинати звук або надто сильно спотворювати його рух, подібно до того, як чорна сорочка поглинає електромагнітну світлову хвилю.

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

2. Що буде в уроці?

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

Досить простий приклад, у якому ми перевіримо точність виміру відстані далекоміром hc-sr04. Основа перевірки точності стане проста лінійка 🙂

3. Інструменти

Щоб зайвий раз не бігати в магазин прямо посеред процесу складання системи, краще заздалегідь підготувати всі інструменти, що можуть вам стати в нагоді. Так, варто потурбуватися, щоб під рукою були:

  1. Паяльник. Гарним виборомстануть прилади з регульованою потужністю, їх можна пристосувати до будь-якої ситуації.
  2. Провідники. Звичайно, датчик необхідно буде під'єднувати до МК, і для цього не завжди підходять стандартні піни.
  3. Перехідник під USB-порт. Якщо на мікроконтролері немає вбудованого порту, потурбуйтеся про те, щоб його можна було підключити до ПК іншим способом. Адже вам необхідно буде підвантажувати додаткові бібліотеки та нову прошивку у ваш проект.
  4. Припій, каніфоль та інші дрібниці, у тому числі ізольований робочий простір.
  5. Сам чіп та МК, а також, при необхідності, корпус майбутнього пристрою. Найбільш досвідчені інженери вважають за краще роздруковувати оболонку для своїх проектів на 3Д принтері, однак, якщо ви живете в великому місті, Не обов'язково витрачатися. Можете пошукати компанії, що дають принтери в оренду.

Варто розуміти, що далекомір Arduino відноситься до приладів безконтактного типу і здатний забезпечувати точні виміри. Але все ж таки не варто забувати, що професійні пристрої використовують зовсім інші технології і проходять тривале калібрування під всі матеріали, а відповідно, у будь-якому випадку, виявляться краще. Також наш проект має обмежений діапазон вимірювання відстаней, від 0.03 до 4 метрів, що підійде не у всіх випадках.

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

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

4. Комплектуючі

Тому що ми вирішили поки нічого не паяти - оптимальний набірдеталей буде наступним:

  • 1 - Arduino UNO R3 (або аналог)
  • 1 - Ультразвуковий датчик відстані HC-SR04
  • 1 – червоний світлодіод
  • 1 – зелений світлодіод
  • 2 – резистор 560 Ом
  • 1- макетна плата
  • 8 - проводів-перемичок (тато-тато)
  • 1 - лінійка для вимірювання відстані

5. Підключення датчика HC SR04

З підключенням датчика не повинно виникнути жодних проблем. Достатньо за допомогою провідників з'єднати пін на живлення з джерелом або МК, а введення та виведення, відповідно, приєднати безпосередньо до МК. Скористайтеся схемою нижче для збирання схеми:

У самого сенсора SR04 такі характеристики, від яких вам варто відштовхуватися:

  1. Напруга для живлення – 5В.
  2. Працює у ланцюгах із силою струму 15 мА.
  3. Якщо датчик не використовується, для підтримки його в пасивному стані все ще потрібно до 2 мА.
  4. Кут огляду у модуля невеликий, лише 15 градусів.
  5. Роздільна здатність сенсора – 3 десятих див.
  6. А ось кут для вимірів складає вже приємні 30 градусів.

Також на датчику є чотири виводи за стандартом 2.54 мм. У них входить контакт для живлення з позитивною напругою +5В, піни для введення та виведення сигналу та заземлення.

У кінцевому варіанті виглядати пристрій має приблизно таким чином:

6. Код

Код нашого пристрою нижче. Пам'ятайте, що червоний світлодіод повинен загорятися на відстані менше 4 см.

/* Arduino HC-SR04 ультразвуковий датчик відстані VCC підключається до 5v, GND до GND Echo до 13 пін на Arduino, Trig до 12 пін на Arduino Позитивна нога червоного світлодіода до 11 пін на Arduino Позитивна нога зеленого світлодіода до Ar #define trigPin 13 #define echoPin 12 #define led 11 #define led2 10 void setup() ( Serial.begin (9600); pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); (led2, OUTPUT); ) void loop() ( long duration, distance; digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); pulseIn(echoPin, HIGH); distance = (duration/2) / 29.1;< 4) { // На этом этапе происходит вкл/выкл светодиода digitalWrite(led,HIGH); // когда загорается красный, зеленый обязан выключится digitalWrite(led2,LOW); } else { digitalWrite(led,LOW); digitalWrite(led2,HIGH); } if (distance >= 200 | distance<= 0){ Serial.println("Out of range"); // Вне диапазона } else { Serial.print(distance); Serial.println(" cm"); // тут тоже можно указать " см" } delay(500); }

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

Але значно краще буде вивчити основи програмування та С++, щоб надалі самостійно писати багато речей самому.

7. Запуск та налаштування

При першому запуску пристрою відбувається таке:

  1. Подається імпульс на вхід Trig.
  2. У самому датчику сигнал перетворюється на 8 імпульсів, у яких частота досягає 40 кГц, їх він, відповідно, і посилає вперед.
  3. Доходячи до перешкоди, імпульси відбиваються і повертаються на приймач, відбуваються моментальні розрахунки МК, і вся інформація подається на пристрій виведення. У нашому випадку це консоль ПК, але в майбутньому ми зробимо урок, де дані будуть виводитися на LED-екранчик.

При першому запуску ми використовуємо лінійку, яка дозволить порівняти точність вимірів. Запустивши пристрій, перевірте дані, які будуть виведені у консолі.

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

Вхідна напруга 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 Serial.println("=================") ;)

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


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

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

Висновок

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

У цій статті розглянемо принцип роботи ультразвукового далекоміра HC-SR04.

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

Використовувані компоненти (купити у Китаї):

Принцип роботи датчика можна умовно поділити на 4 етапи:

1. Подаємо імпульс тривалістю 10 мкс, на висновок Trig.

2. Усередині далекоміра вхідний імпульс перетворюється на 8 імпульсів частотою 40 КГц і посилається вперед через "T око"

3. Дійшовши до перешкоди, послані імпульси відбиваються і приймаються "R вічком". Отримуємо вихідний сигнал на виводі Echo.

4. Безпосередньо на стороні контролера переводимо отриманий сигнал у відстань за формулою:

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

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

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

Модуль обладнаний чотири-піновим роз'ємом стандарту 2.54мм

VCC: "+" харчування

TRIG (T): виведення вхідного сигналу

ECHO (R): вихід вихідного сигналу (довжина сигналу залежить від відстані об'єкта до датчика)

GND: "-" харчування

Підключивши датчик Arduino залишається тільки залити скетч для роботи. У наведеному нижче скетчі інформація про відстань надсилатиметься в порт комп'ютера, а також при дистанції менше 30 сантиметрів запалюватиме світлодіод підключений до 13 піну.

приклад програмного коду:

#define Trig 9 #define Echo 8 #define ledPin 13 void setup //ініціюємо як вихід 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 мс. */ }

Додатковий приклад роботи:

Взаємодія далекоміра та сервоприводу. Дистанція, що вимірюється далекоміром перетворюється на кут повороту сервопривода

Приклад програмного коду

//Тестувалося на Arduino IDE 1.0.1#include #define coef 10 //(Коефіцієнт відповідності 10 градусів на 1см)#define dead_zone 4 #define max_value 22 #define Trig 9 #define Echo 8 #define ledPin 13 #define servoPin 11 Servo myservo; void setup() (pinMode (Trig, OUTPUT); //ініціюємо як вихід pinMode (Echo, INPUT); //ініціюємо як вхід pinMode (ledPin, OUTPUT); myservo.attach (servoPin); myservo.write (0); ) 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; // Перераховуємо до сантиметрів if (distance_sm >= dead_zone && distance_sm<= max_value) { myservo.write (coef * (distance_sm - dead_zone)); } else if (distance_sm < dead_zone)// якщо дистанція менше 4 см, серва в положенні нуль градусів( myservo.write (0); ) else ( myservo.write (180); ) delay (100); /* Чекаємо 0.1 секунди, Наступний імпульс може бути випромінюваний лише після зникнення луни від попереднього. Цей час називається періодом циклу (cycle period). Рекомендований період між імпульсами має бути не менше 50 мс. */ }