- Як побудувати робота, щоб уникнути перешкод за допомогою ультразвукового датчика
- Потрібні компоненти
- Кругова діаграма
- Уникнення перешкод за допомогою робота Arduino - Code
Робот, який уникає перешкод - це інтелектуальний пристрій, який може автоматично відчувати перешкоду перед собою та уникати їх, повертаючись в інший бік. Ця конструкція дозволяє роботу орієнтуватися в невідомому середовищі, уникаючи зіткнень, що є головною вимогою для будь-якого автономного мобільного робота. Застосування робота, що уникає перешкод, не обмежується, і він використовується зараз у більшості військових організацій, що допомагає виконувати багато ризикованих робіт, які не можуть виконувати жодні солдати.
Раніше ми побудували робота, щоб уникнути перешкод, використовуючи Raspberry Pi та використовуючи мікроконтролер PIC. Цього разу ми побудуємо робота, який уникає перешкод, використовуючи ультразвуковий датчик та Arduino. Тут ультразвуковий датчик використовується для виявлення перешкод на шляху шляхом обчислення відстані між роботом і перешкодою. Якщо робот знаходить будь-яку перешкоду, він змінює напрямок і продовжує рух.
Як побудувати робота, щоб уникнути перешкод за допомогою ультразвукового датчика
Перш ніж будувати робота, важливо зрозуміти, як працює ультразвуковий датчик, оскільки цей датчик відіграватиме важливу роль у виявленні перешкод. Основним принципом роботи ультразвукового датчика є запис часу, який витрачається датчиком на передачу ультразвукових пучків і отримання ультразвукових пучків після удару по поверхні. Потім далі відстань обчислюється за формулою. У цьому проекті використовується широко доступний ультразвуковий датчик HC-SR04. Для використання цього датчика буде застосовано подібний підхід, пояснений вище.
Отже, штифт Trig HC-SR04 зроблений високим щонайменше для 10 с. Звуковий промінь передається з 8 імпульсами по 40 кГц кожен.
Потім сигнал потрапляє на поверхню і повертається назад і захоплюється приймачем Ехо-штифком HC-SR04. На момент надсилання шпилька Echo вже зробила високу.
Час, витрачений променем на повернення назад, зберігається у змінних і перетворюється на відстань за допомогою відповідних розрахунків, як показано нижче
Відстань = (Час х Швидкість звуку в повітрі (343 м / с)) / 2
Ми використовували ультразвуковий датчик у багатьох проектах, щоб дізнатись більше про ультразвуковий датчик, перевірити інші проекти, пов’язані з ультразвуковим датчиком.
Компоненти цього робота, який уникає робота, можна легко знайти. Для виготовлення шасі можна використовувати будь-яке іграшкове шасі або виготовити його на замовлення.
Потрібні компоненти
- Arduino NANO або Uno (будь-яка версія)
- HC-SR04 Ультразвуковий датчик
- Модуль драйвера двигуна LM298N
- Двигуни постійного струму 5 В
- Акумулятор
- Колеса
- Шасі
- Провід перемички
Кругова діаграма
Повна принципова схема цього проекту наведена нижче, як ви бачите, вона використовує нано Arduino. Але ми також можемо створити перешкоду, щоб уникнути робота, використовуючи Arduino UNO з тією ж схемою (слідуйте за тим самим розписом) і кодом.
Після того, як схема готова, ми повинні побудувати наш автомобіль, щоб уникнути перешкод, зібравши схему на робочому шасі, як показано нижче.
Уникнення перешкод за допомогою робота Arduino - Code
Повна програма з демонстраційним відео наведена в кінці цього проекту. Програма включатиме налаштування модуля HC-SR04 та виведення сигналів на шпильки двигуна для відповідного переміщення напрямку двигуна. У цьому проекті не використовуватимуться бібліотеки.
Спочатку визначте триггер та ехо-штир HC-SR04 у програмі. У цьому проекті триггерний штифт підключений до GPIO9, а ехо-штифт - до GPIO10 від Arduino NANO.
int trigPin = 9; // триггерний штифт HC-SR04 int echoPin = 10; // Відлуння HC-SR04
Визначте штифти для введення модуля драйвера двигуна LM298N. LM298N має 4 штифти для введення даних, які використовуються для управління напрямком підключеного до нього двигуна.
int revleft4 = 4; // Зворотній рух лівого двигуна int fwdleft5 = 5; // ForWarD рух лівого двигуна int revright6 = 6; // РЕВЕРСНИЙ рух правого двигуна int fwdright7 = 7; // ForWarD рух правого двигуна
В налаштуваннях () функції, визначити напрямок даних, що використовуються штифтів GPIO. Чотири штифти двигуна та штифт тригера встановлюються як ВИХІД, а Ехо штифт - як вхід.
pinMode (revleft4, OUTPUT); // встановити шпильки двигуна як вихідні pinMode (fwdleft5, OUTPUT); pinMode (revright6, OUTPUT); pinMode (fwdright7, ВИХІД); pinMode (trigPin, OUTPUT); // встановити тригеровий штифт як вихідний pinMode (echoPin, INPUT); // встановити ехо-пін як вхідний сигнал для захоплення відбитих хвиль
В петлі () функції, отримати відстань від HC-SR04 і на основі відстані переміщення напрямку обертання двигуна. Відстань покаже відстань до об'єкта, що йде перед роботом. Відстань приймають, розриваючи ультразвуковий промінь до 10 us і отримуючи його після 10us. Щоб дізнатись більше про вимірювання відстані за допомогою ультразвукового датчика та Arduino, перейдіть за посиланням.
digitalWrite (trigPin, LOW); delayMicroseconds (2); digitalWrite (trigPin, HIGH); // надсилаємо хвилі на 10 us delayMicroseconds (10); тривалість = pulseIn (echoPin, HIGH); // отримуємо відстань відбитих хвиль = тривалість / 58,2; // перетворення в відстань відстані (10);
Якщо відстань перевищує визначену відстань, означає, що на її шляху немає перешкоди, і вона рухатиметься вперед.
if (відстань> 19) { digitalWrite (fwdright7, HIGH); // рух вперед digitalWrite (revright6, LOW); digitalWrite (fwdleft5, HIGH); digitalWrite (revleft4, LOW); }
Якщо відстань менше визначеної відстані, щоб уникнути перешкоди означає, що попереду є якась перешкода. Тож у цій ситуації робот на деякий час зупиниться і після цього знову зупиниться на деякий час, а потім повернеться в інший напрямок.
if (відстань <18) { digitalWrite (fwdright7, LOW); // Зупинити digitalWrite (revright6, LOW); digitalWrite (fwdleft5, LOW); digitalWrite (revleft4, LOW); затримка (500); digitalWrite (fwdright7, LOW); // переміщення зворотного слова digitalWrite (revright6, HIGH); digitalWrite (fwdleft5, LOW); digitalWrite (revleft4, HIGH); затримка (500); digitalWrite (fwdright7, LOW); // Зупинити digitalWrite (revright6, LOW); digitalWrite (fwdleft5, LOW); digitalWrite (revleft4, LOW); затримка (100); digitalWrite (fwdright7, HIGH); digitalWrite (revright6, LOW); digitalWrite (revleft4, LOW); digitalWrite (fwdleft5, LOW); затримка (500); }
Отже, таким чином робот може уникати перешкод на своєму шляху, ніде не застрягаючи. Повний код та відео знайдіть нижче.