- Материали, необходими за изграждане на робот за почистване на пода на базата на Arduino
- Преносима прахосмукачка
- Ултразвуков сензорен модул HC-SR04
- Подов сензор (IR сензор) за откриване на стълбище
- Електрическа схема на робот за почистване на пода на базата на Arduino
- Изграждане на верига за робот за почистване на пода на базата на Arduino
- Arduino
В днешния сценарий всички сме толкова заети с работата си, че нямаме време да почистим дома си правилно. Решението на проблема е много просто, просто трябва да си купите домашен робот за прахосмукачка като irobot roomba, който ще почисти дома ви с натискане на бутон. Но такива търговски продукти са често срещан проблем, който е разходите. Затова днес решихме да направим обикновен робот за почистване на подове, който не само е лесен за изработка, но струва много по-малко в сравнение с търговските продукти, предлагани на пазара. Честите читатели може да си спомнят нашия робот за прахосмукачки Arduino, който построихме отдавна, но този беше много обемист и се нуждаеше от голяма оловно-киселинна батерия, за да се придвижва. Новата прахосмукачка Arduino ще строим тук ще бъде компактен и по-практичен. На всичкото отгоре този робот ще има ултразвукови сензори и IR сензор за близост. Ултразвуковият сензор ще позволи на робота да избягва препятствия, така че да може да се движи свободно, докато стаята бъде правилно почистена, а сензорът за близост ще му помогне да избегне падане от стълби. Всички тези функции звучат интересно, нали? И така, нека започнем.
В една от предишните ни статии направихме много ботове като Самобалансиращ се робот, Автоматизиран дезинфекциращ повърхностен робот и Робот за избягване на препятствия. Проверете тези, ако това ви звучи интересно.
Материали, необходими за изграждане на робот за почистване на пода на базата на Arduino
Тъй като използвахме много общи компоненти за изграждането на хардуерната секция на робота на прахосмукачката, трябва да можете да намерите всички тези в местния магазин за хоби. Ето пълния списък на необходимия материал заедно с изображението на всички компоненти.
- Arduino Pro Mini - 1
- Ултразвуков модул HC-SR04 - 3
- L293D Двигател - 1
- 5Volt N20 двигатели и монтажни скоби - 2
- N20 моторни колела - 2
- Превключвател - 1
- LM7805 Регулатор на напрежение - 1
- 7.4V литиево-йонна батерия - 1
- IR модул - 1
- Перфборд - 1
- Касторово колело - 1
- MDF
- Обща портативна прахосмукачка
Преносима прахосмукачка
В раздела за изискванията за компоненти говорихме за преносима прахосмукачка, снимките по-долу показват точно това. Това е преносима прахосмукачка от Amazon. Това идва с много прост механизъм. Отдолу има три части (малка камера за съхранение на прах, средната част включва двигателя, вентилатора и гнездото за батерията отгоре (има капак или капачка за батерията). Има DC двигател и вентилатор. Този двигател е свързан директно към 3V (2 * 1,5 волта AA батерии) чрез обикновен превключвател. Тъй като захранваме робота си с батерия 7,4 V, ще прекъснем връзката от вътрешната батерия и ще я захранваме от 5V Захранване. И така, премахнахме всички ненужни части и само двигателят с двупроводна стойка може да видите на изображението по-долу.
Ултразвуков сензорен модул HC-SR04
За да открием препятствията, използваме популярния ултразвуков сензор за разстояние HC-SR04 или можем да го наречем сензори за избягване на препятствия. Работата е много проста, първо, модулът на предавателя изпраща ултразвукова вълна, която пътува във въздуха, удря препятствие и отскача назад и приемникът получава тази вълна. Чрез изчисляване на времето с Arduino можем да определим разстоянието. В предишна статия за Arduino базиран проект за ултразвуков сензор за разстояние, ние обсъдихме много задълбочено принципа на работа на този сензор. Можете да проверите това, ако искате да научите повече за ултразвуковия модул за сензор за разстояние HC-SR04.
Подов сензор (IR сензор) за откриване на стълбище
В раздела за функции говорихме за функция, при която роботът може да открива стълбища и може да предотврати падането си. За целта използваме IR сензор. Ще направим интерфейс между IR сензора и Arduino. Работата на IR сензора за близост е много проста, той има IR LED и фотодиод, IR LED излъчва IR светлина и ако някакво препятствие се появи пред тази излъчена светлина, тя ще бъде отразена и отразената светлина ще бъде открита от фотодиода. Но генерираното напрежение от отражението ще бъде много ниско. За да увеличим това, можем да използваме компаратор с оп-усилвател, можем да усилим и да получим изход. Един IR модулима три щифта - Vcc, земя и изход. Обикновено изходът намалява, когато препятствие се появи пред сензора. Така че, можем да използваме това, за да открием пода. Ако за частица от секундата засечем висок сигнал от сензора, можем да спрем робота, да го върнем обратно или да направим каквото искаме, за да предотвратим падането му от стълбището. В предишна статия направихме Breadboard версия на IR сензора за близост и обяснихме подробно принципа на работа, можете да проверите това, ако искате да научите повече за този сензор.
Електрическа схема на робот за почистване на пода на базата на Arduino
Разполагаме с три ултразвукови сензора, които откриват препятствия. И така, трябва да свържем всички основания на ултразвукови сензори и да ги свържем към общата земя. Също така свързваме и трите Vcc на сензора и свързваме това с общия VCC щифт. След това свързваме щифтовете на спусъка и ехото с PWM щифтовете на Arduino. Също така свързваме VCC на IR модула към 5V и заземен към заземяващия щифт на Arduino, изходният щифт на IR сензорния модул отива към цифровия пин D2 на Arduino. За моторния драйвер свързваме двата разрешаващи щифта към 5v, а също и щифта за напрежение на драйвера към 5V, защото използваме 5волтови двигатели. В предишна статия направихме Arduino Motor Driver Shield, можете да проверите това, за да научите повече за L293D IC Driver ICи нейните операции. Arduino, ултразвуковите модули, двигателят и двигателите работят на 5 волта, по-високото напрежение ще го убие и ние използваме 7,4-волтовата батерия, за да го преобразуваме в 5 волта, използва се регулаторът на напрежението LM7805. Свържете прахосмукачката директно към основната верига.
Изграждане на верига за робот за почистване на пода на базата на Arduino
За да получа някои идеи за моя робот, потърсих роботи за прахосмукачки онлайн и взех няколко изображения на роботи с кръгла форма. И така, реших да изградя робот с кръгла форма. За да изградя преследването и тялото на робота, имам много опции като лист от пяна, MDF, картон и др. Но аз избирам MDF, защото е твърд и има някои водоустойчиви свойства. Ако правите това, можете да решите кой материал ще изберете за вашия бот.
За да изградя робота, взех листа от MDF, след това нарисувах два кръга с радиус 8 CM и вътре в този кръг нарисувах и друг кръг с радиус 4 CMза поставяне на прахосмукачката. След това изрязах кръговете. Също така съм изрязал и премахнал подходящи парчета за пътя на колелото (вижте изображенията за по-добро разбиране). Накрая направих три малки дупки за колелото на колелото. Следващата стъпка е монтирането на двигателите на основата с помощта на скобите, също поставете и фиксирайте колелото на колелото в неговото положение. След това поставете ултразвуковите сензори вляво, вдясно и в средата на робота. Също така свържете IR модула към долната страна на робота. Не забравяйте да добавите превключвателя отвън. Това е всичко за изграждането на робота, ако в този момент се объркате, можете да се обърнете към следните изображения.
За горната част също съм нарисувал кръг от 11 см в радиус върху листа от пяна и го изрязах. За разстоянието между горната и долната част бях изрязал три парчета пластмасова тръба с дължина 4 CM. След това залепих пластмасовите дистанционни елементи на долната част и след това залепих горната част. Можете да покриете страничните части на бота с пластмаса или подобни материали, ако искате.
Arduino
Пълният код за този проект е даден в края на документа. Този код на Arduino е подобен на кода на ултразвуковия сензор за разстояние на базата на Arduino, единствената промяна е в откриването на пода. В следващите редове обяснявам как работи кодът. В този случай не използваме допълнителни библиотеки. По-долу сме описали кода стъпка по стъпка. Не използваме допълнителни библиотеки за декодиране на данните за разстоянието от сензора HC-SR04, защото е много просто. В следващите редове описахме как. Първо, трябва да дефинираме Trigger Pin и Echo Pin за всичките три ултразвукови сензора за разстояние, които са свързани към платката Arduino. В този проект имаме три щифта Echo и три щифта Trigger. Имайте предвид, че 1 е левият сензор, 2 е предният и 3 е десният сензор.
const int trigPin1 = 3; const int echoPin1 = 5; const int trigPin2 = 6; const int echoPin2 = 9; const int trigPin3 = 10; const int echoPin3 = 11; int irpin = 2;
След това дефинирахме променливи за разстоянието, което всички са променливи от тип (int), а за продължителността избрахме да използваме (long). Отново имаме по три от всеки. Също така, определих цяло число за съхраняване на статуса на движението, за което ще говорим по-късно в този раздел.
голяма продължителност1; голяма продължителност2; голяма продължителност3; int distanceleft; int distancefront; int дистанционно; int a = 0;
След това, в раздела за настройка, трябва да направим всички перспективни щифтове като вход или изход с помощта на функцията pinModes () . За да изпратим ултразвукови вълни от модула, трябва да активираме височината на спусъка, т.е. всички щифтове на спусъка трябва да се определят като ИЗХОД. И за да получим ехото, трябва да прочетем състоянието на ехо пиновете, така че всички ехо пинове да се определят като ВХОД. Също така активираме серийния монитор за отстраняване на неизправности. За да прочета състоянието на IR модулите, определих irpin като вход.
pinMode (trigPin1, OUTPUT); pinMode (trigPin2, OUTPUT); pinMode (trigPin3, OUTPUT); pinMode (echoPin1, INPUT); pinMode (echoPin2, INPUT); pinMode (echoPin3, INPUT); pinMode (irpin, INPUT);
И тези цифрови щифтове са дефинирани като ИЗХОД за входа на драйвера на двигателя.
pinMode (4, ИЗХОД); pinMode (7, ИЗХОД); pinMode (8, ИЗХОД); pinMode (12, ИЗХОД);
В основния контур имаме три секции за три сензора. Всички секции работят еднакво, но всяка за различни сензори. В този раздел четем разстоянието от препятствия от всеки сензор и го съхраняваме във всяко дефинирано цяло число. За да разчетем разстоянието, първо трябва да се уверим, че щифтовете на спусъка са ясни, за това трябва да настроим щифта на спусъка на LOW за 2 µs. Сега, за генериране на ултразвукова вълна, трябва да завъртим щифта на спусъка HIGH за 10 µs. Това ще изпрати ултразвуковия звук и с помощта на функцията pulseIn () можем да отчитаме времето за пътуване и да съхраняваме тази стойност в променливата „ продължителност “. Тази функция има 2 параметъра, първият е името на ехо-щифта, а за втория можете да напишете илиHIGH или LOW. HIGH означава, че функцията pulseIn () ще изчака ПИНът да отиде HIGH, причинен от отскочилата звукова вълна и ще започне да брои, след което ще изчака ПИНът да отиде НИСКО, когато звуковата вълна приключи, което ще спре броенето. Тази функция дава дължината на импулса в микросекунди. За изчисляване на разстоянието ще умножим продължителността по 0,034 (скоростта на звука във въздуха е 340m / s) и ще я разделим на 2 (това се дължи на движението назад и напред на звуковата вълна). Накрая съхраняваме разстоянието на всеки сензор в съответстващи цели числа.
digitalWrite (trigPin1, LOW); delayMicroseconds (2); digitalWrite (trigPin1, HIGH); delayMicroseconds (10); digitalWrite (trigPin1, LOW); duration1 = pulseIn (echoPin1, HIGH); distanceleft = продължителност1 * 0,034 / 2;
След като получим разстоянието от всеки сензор, можем да управляваме двигателите с помощта на оператор if, като по този начин контролираме движението на робота. Това е много просто, първо, дадохме стойност на разстоянието на препятствие, в този случай тя е 15 см (променете тази стойност по ваше желание). Тогава дадохме условия според тази стойност. Например, когато препятствие идва пред левия сензор (това означава, че разстоянието на левия сензор трябва да е под или равно на 15 см), а другите две разстояния са големи (това означава, че няма препятствие пред това сензори), след това с помощта на функцията за цифрово записване можем да задвижваме двигателите надясно. По-късно проверих състоянието на IR сензора. Ако роботът е на пода, стойността на IR щифта ще бъде НИСКА, а ако не, тогава стойността ще бъдеВИСОКО. След това съхраних тази стойност в променливата int s . Ще контролираме робота според този статус.
Този раздел на кода се използва за придвижване на робота напред и назад :
if (s == HIGH) { digitalWrite (4, LOW); digitalWrite (7, HIGH); digitalWrite (8, LOW); digitalWrite (12, HIGH); забавяне (1000); a = 1; }
Но има проблем с този метод, когато двигателят се движи назад, подът се връща и ботът ще се придвижва напред, и той ще повтаря, задържайки бота. За да се преодолеем това, ние съхраняваме стойност (1) в int, след като не разбираме етаж. Проверяваме това условие и за други движения.
След като открие липсата на пода, роботът няма да се придвижи напред. Вместо това ще се премести наляво, по този начин можем да избегнем проблема.
if ((a == 0) && (s == LOW) && (distanceleft <= 15 && distancefront> 15 && distanceright <= 15) - (a == 0) && (s == LOW) && (distanceleft> 15 && distancefront> 15 && distanceright> 15))
В горното състояние. Първо, роботът ще провери състоянието на пода и целочислената стойност. Ботът ще продължи напред само ако са изпълнени всички условия.
Сега можем да напишем командите за водача на двигателя. Това ще задвижва десния мотор назад и левия мотор напред, като по този начин ще завърти робота надясно.
Този раздел на кода се използва за преместване на робота надясно:
digitalWrite (4, HIGH); digitalWrite (7, LOW); digitalWrite (8, HIGH); digitalWrite (12, LOW);
Ако ботът открие, че пода липсва, стойността се променя на 1 и ботът ще се премести вляво. След завиване наляво стойността на 'a' се променя на 0 от 1.
if ((a == 1) && (s == LOW) - (s == LOW) && (distanceleft <= 15 && distancefront <= 15 && distanceright> 15) - (s == LOW) && (distanceleft <= 15 && distancefront <= 15 && distanceright> 15) - (s == LOW) && (distanceleft <= 15 && distancefront> 15 && distanceright> 15) - (distanceleft <= 15 && distancefront> 15 && distanceright> 15)) { digitalWrite (4, HIGH); digitalWrite (7, LOW); digitalWrite (8, LOW); digitalWrite (12, HIGH); забавяне (100); a = 0; }
Този раздел на кода се използва за преместване на робота наляво:
if ((s == LOW) && (distanceleft> 15 && distancefront <= 15 && distanceright <= 15) - (s == LOW) && (distanceleft> 15 && distancefront> 15 && distanceright <= 15) - (s == LOW) && (distanceleft> 15 && distancefront <= 15 && distanceright> 15)) { digitalWrite (4, LOW); digitalWrite (7, HIGH); digitalWrite (8, HIGH); digitalWrite (12, LOW); }
Това е всичко за изграждането на базиран на Arduino интелигентен робот за прахосмукачки. Цялостната работа на проекта може да бъде намерена във видеото, свързано в долната част на тази страница. Ако имате някакви въпроси, коментирайте отдолу.