- Как да изградите робот, избягващ препятствия, използвайки ултразвуков сензор
- Необходими компоненти
- Електрическа схема
- Избягване на препятствия Робот с помощта на Arduino - Код
Robot за избягване на препятствия е интелигентно устройство, което може автоматично да усети препятствието пред себе си и да ги избегне, като се завърти в друга посока. Този дизайн позволява на робота да се движи в неизвестна среда, като избягва сблъсъци, което е основно изискване за всеки автономен мобилен робот. Приложението на робота за избягване на препятствия не е ограничено и той се използва в повечето военни организации, което сега помага за извършването на много рискови задачи, които не могат да бъдат изпълнявани от никой войник.
Преди това изградихме робота, който избягва препятствия, използвайки Raspberry Pi и използвайки PIC Microcontroller. Този път ще изградим робот за избягване на препятствия с помощта на ултразвуков сензор и Arduino. Тук се използва ултразвуков сензор за засичане на препятствията по пътя чрез изчисляване на разстоянието между робота и препятствието. Ако роботът намери някакво препятствие, той променя посоката и продължава да се движи.
Как да изградите робот, избягващ препятствия, използвайки ултразвуков сензор
Преди да започнете да изграждате робота, е важно да разберете как работи ултразвуковият сензор, защото този сензор ще има важна роля при откриването на препятствие. Основният принцип зад работата на ултразвуковия сензор е да се запише времето, необходимо на сензора за предаване на ултразвукови лъчи и получаване на ултразвукови лъчи след удряне на повърхността. След това разстоянието се изчислява по формулата. В този проект се използва широко достъпният ултразвуков сензор HC-SR04. За да използвате този сензор, ще се следва подобен подход, обяснен по-горе.
И така, Trig щифтът на HC-SR04 е направен високо за поне 10 us. Излъчва се звуков лъч с 8 импулса по 40KHz всеки.
След това сигналът попада на повърхността и се връща обратно и уловен от приемника Echo pin на HC-SR04. По време на изпращането на височината Echo щифтът вече е бил висок
Времето, необходимо на лъча да се върне обратно, се запазва в променлива и се преобразува в разстояние, като се използват подходящи изчисления като по-долу
Разстояние = (Време x Скорост на звука във въздуха (343 m / s)) / 2
Използвахме ултразвуков сензор в много проекти, за да научим повече за ултразвуков сензор, проверихме други проекти, свързани с ултразвуков сензор.
Компонентите за този робот, който избягва препятствия, могат да бъдат намерени лесно. За да се направи шаси, може да се използва всяко шаси за играчки или да се изработи по поръчка.
Необходими компоненти
- Arduino NANO или Uno (всяка версия)
- HC-SR04 ултразвуков сензор
- LM298N Моторен драйвер модул
- 5V DC двигатели
- Батерия
- Колела
- Шаси
- Джъмперни проводници
Електрическа схема
Пълната схема на схемата за този проект е дадена по-долу, тъй като можете да видите, че използва Arduino nano. Но също така можем да изградим препятствие, избягващо робот, използвайки Arduino UNO със същата верига (следвайте същия пиноут) и код.
След като веригата е готова, ние трябва да изградим нашата кола, избягваща препятствия, като сглобим веригата на върха на роботизирано шаси, както е показано по-долу.
Избягване на препятствия Робот с помощта на Arduino - Код
Пълната програма с демонстрационно видео е дадена в края на този проект. Програмата ще включва настройка на модул 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 движение на десния мотор
Във функцията setup () дефинирайте посоката на данните на използваните GPIO щифтове. Четирите моторни щифта и Trig щифта са зададени като OUTPUT, а Echo Pin е зададен като Input.
pinMode (revleft4, OUTPUT); // задаване на щифтове на двигателя като изход pinMode (fwdleft5, OUTPUT); pinMode (revright6, OUTPUT); pinMode (fwdright7, OUTPUT); 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); }
Така че по този начин роботът може да избягва препятствия по пътя си, без да засяда никъде. Намерете пълния код и видео по-долу.