- Materiály potřebné k výrobě robota na čištění podlah založeného na Arduinu
- Přenosný vysavač
- Modul ultrazvukového senzoru HC-SR04
- Podlahový senzor (IR senzor) pro detekci schodů
- Schéma zapojení robota na čištění podlah založené na Arduinu
- Budování obvodu pro robot na čištění podlah na bázi Arduina
- Arduino
V současném scénáři jsme všichni natolik zaneprázdněni prací, že nemáme čas na správné čištění domu. Řešení problému je velmi jednoduché, stačí si koupit domácí robotický vysavač, jako je irobot roomba, který vyčistí váš dům stisknutím tlačítka. Ale takové komerční produkty jsou běžnou záležitostí, kterou jsou náklady. Dnes jsme se tedy rozhodli vyrobit jednoduchý robot na čištění podlah, který se nejen snadno vyrábí, ale stojí mnohem méně ve srovnání s komerčními produkty dostupnými na trhu. Častí čtenáři si možná pamatují našeho vysavače Arduino, který jsme postavili už dávno, ale ten byl velmi objemný a pro pohyb potřeboval velkou olověnou baterii. Nový vysavač Arduino budeme stavět zde bude kompaktní a praktičtější. Kromě toho bude mít tento robot ultrazvukové senzory a infračervený senzor přiblížení. Ultrazvukový snímač umožní robotovi vyhýbat se překážkám, aby se mohl volně pohybovat, dokud nebude místnost řádně vyčištěna, a snímač přiblížení mu pomůže vyhnout se pádu ze schodů. Všechny tyto funkce zní zajímavě, že? Pojďme tedy začít.
V jednom z našich předchozích článků jsme vyrobili mnoho robotů, jako je Self Balancing Robot, Automated Surface Desinfection Robot a Obstacle Avoiding Robot. Podívejte se, jestli vám to zní zajímavě.
Materiály potřebné k výrobě robota na čištění podlah založeného na Arduinu
Protože jsme k výrobě hardwarové části robota vysavače použili velmi obecné komponenty, měli byste být schopni najít všechny v místním hobby obchodě. Zde je kompletní seznam požadovaného materiálu spolu s obrázkem všech komponent.
- Arduino Pro Mini - 1
- Ultrazvukový modul HC-SR04 - 3
- Driver motoru L293D - 1
- Motory 5Volt N20 a montážní konzoly - 2
- Kola motoru N20 - 2
- Přepínač - 1
- Regulátor napětí LM7805 - 1
- 7.4V lithium-iontová baterie - 1
- IR modul - 1
- Perfboard - 1
- Kolečko - 1
- MDF
- Obecný přenosný vysavač
Přenosný vysavač
V části s požadavky na komponenty jsme hovořili o přenosném vysavači, obrázky níže to přesně ukazují. Jedná se o přenosný vysavač od Amazonu. To přichází s velmi jednoduchým mechanismem. Ve spodní části má tři části (malou komoru pro ukládání prachu, střední část obsahuje motor, ventilátor a zdířku pro baterii nahoře (na baterii je kryt nebo víčko). Má stejnosměrný motor a ventilátor. Tento motor je přímo připojen k 3 V (2 x 1,5 V AA baterie) pomocí jednoduchého spínače. Protože napájíme našeho robota baterií 7,4 V, přerušíme připojení z interní baterie a napájíme jej z 5 V napájecí zdroj. Takže jsme odstranili všechny nepotřebné části a pouze motor se dvěma vodiči zůstává. To vidíte na obrázku níže.
Modul ultrazvukového senzoru HC-SR04
K detekci překážek používáme oblíbený ultrazvukový senzor vzdálenosti HC-SR04 nebo jej můžeme nazvat senzory vyhýbání se překážkám. Práce je velmi jednoduchá, nejprve vysílačový modul vysílá ultrazvukovou vlnu, která cestuje vzduchem, narazí na překážku a odrazí se zpět a přijímač tuto vlnu přijme. Výpočtem času pomocí Arduina můžeme určit vzdálenost. V předchozím článku projektu Arduino Ultrazvukový senzor vzdálenosti jsme velmi důkladně diskutovali princip fungování tohoto senzoru. Můžete si to ověřit, pokud se chcete dozvědět více o modulu ultrazvukového snímače vzdálenosti HC-SR04.
Podlahový senzor (IR senzor) pro detekci schodů
V části Vlastnosti jsme hovořili o funkci, při které robot dokáže detekovat schodiště a zabránit pádu. K tomu používáme IR senzor. Uděláme rozhraní mezi IR senzorem a Arduinem. Práce infračerveného senzoru přiblížení je velmi jednoduchá, má infračervenou LED a fotodiodu, infračervená LED vyzařuje infračervené světlo a pokud před toto vyzařované světlo přijde nějaká překážka, odráží se a odražené světlo bude detekováno fotodiodou. Ale generované napětí z odrazu bude velmi nízké. Abychom to zvýšili, můžeme použít komparátor operačních zesilovačů, můžeme zesílit a získat výstup. IR modulmá tři piny - Vcc, zem a výstup. Výstup obvykle klesá, když před senzor přijde překážka. Můžeme to tedy použít k detekci podlahy. Pokud za zlomek vteřiny zjistíme ze snímače vysokou hladinu, můžeme zastavit robota, otočit ho zpět nebo udělat cokoli, abychom zabránili jeho pádu ze schodiště. V předchozím článku jsme vytvořili verzi infračerveného senzoru přiblížení k desce a podrobně vysvětlili princip fungování. Pokud se chcete o tomto senzoru dozvědět více, můžete si to ověřit.
Schéma zapojení robota na čištění podlah založené na Arduinu
Máme tři ultrazvukové senzory, které detekují překážky. Musíme tedy připojit všechny uzemnění ultrazvukových senzorů a připojit je na společnou zem. Také připojíme všechny tři Vcc snímače a připojíme to ke společnému kolíku VCC. Dále připojíme spoušť a echo piny k PWM pinům Arduina. Také připojíme VCC IR modulu na 5V a zem na zemnící pin Arduina, výstupní pin modulu IR senzoru jde na digitální pin D2 Arduina. Pro ovladač motoru připojíme dva uvolňovací kolíky na 5V a také kolík napětí ovladače na 5V, protože používáme 5voltové motory. V předchozím článku jsme vytvořili Arduino Motor Driver Shield, můžete si to ověřit a dozvědět se více o IC L293D Motor Driver ICa jeho operace. Arduino, ultrazvukové moduly, ovladač motoru a motory pracují na 5 voltech, vyšší napětí to zabije a my používáme 7,4 voltovou baterii, abychom ji převedli na 5 voltů, použije se regulátor napětí LM7805. Připojte vysavač přímo k hlavnímu okruhu.
Budování obvodu pro robot na čištění podlah na bázi Arduina
Abych získal nějaké představy o mém robotu, hledal jsem roboty vysavačů online a získal několik obrázků robotů kulatého tvaru. Takže jsem se rozhodl postavit robota kulatého tvaru. K vytvoření chase a těla robota mám spoustu možností, jako je pěnový plech, MDF, lepenka atd. Ale zvolil jsem MDF, protože je tvrdý a má některé vlastnosti odolné proti vodě. Pokud to děláte, můžete se rozhodnout, který materiál pro svého robota vyberete.
Abych postavil robota, vzal jsem list MDF, pak nakreslil dva kruhy s poloměrem 8 CM a uvnitř tohoto kruhu jsem také nakreslil další kruh s poloměrem 4 CMpro montáž vysavače. Pak jsem vyřízl kruhy. Také jsem vyřízl a odstranil vhodné kousky pro cestu kola (pro lepší pochopení viz obrázky). Nakonec jsem udělal tři malé otvory pro otočné kolo. Dalším krokem je namontování motorů na základnu pomocí jeho držáků, také umístěte a připevněte kolečko do jeho polohy. Poté umístěte ultrazvukové senzory doleva, doprava a do středu robota. Připojte také infračervený modul ke spodní straně robota. Nezapomeňte přidat přepínač na vnější straně. To je vše o stavbě robota, pokud jste v tomto okamžiku zmatení, můžete se podívat na následující obrázky.
Pro horní část jsem také nakreslil kruh o poloměru 11 CM na pěnový plech a rozřezal ho. Pro rozestup mezi horní a spodní částí jsem vyřízl tři 4 cm dlouhé kusy plastové trubky. Poté jsem na spodní část nalepil plastové distanční prvky a poté nalepil horní část. Pokud chcete, můžete boční části robota zakrýt plastem nebo podobnými materiály.
Arduino
Celý kód tohoto projektu je uveden na konci dokumentu. Tento kód Arduino je podobný kódu ultrazvukového snímače vzdálenosti založeného na Arduinu, jedinou změnou je detekce podlahy. V následujících řádcích vysvětluji, jak kód funguje. V tomto případě nepoužíváme žádné další knihovny. Níže jsme popsali kód krok za krokem. K dekódování údajů o vzdálenosti ze snímače HC-SR04 nepoužíváme žádné další knihovny, protože je to velmi jednoduché. V následujících řádcích jsme popsali jak. Nejprve musíme definovat Trigger Pin a Echo Pin pro všechny tři ultrazvukové senzory vzdálenosti, které jsou připojeny k desce Arduino. V tomto projektu máme tři piny Echo a tři piny Trigger. Všimněte si, že 1 je levý senzor, 2 je přední senzor a 3 je pravý senzor.
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;
Poté jsme definovali proměnné pro vzdálenost, kterou jsou všechny proměnné typu (int), a po dobu trvání jsme se rozhodli použít (long). Opět máme od každého tři. Také jsem definoval celé číslo pro uložení stavu pohybu, o kterém budeme hovořit později v této části.
dlouhé trvání1; dlouhé trvání2; dlouhé trvání3; int distanceleft; int distanční; int distanceright; int a = 0;
Dále v sekci nastavení musíme vytvořit všechny perspektivní piny jako vstup nebo výstup pomocí funkce pinModes () . Chcete-li odeslat ultrazvukové vlny z modulu, musíme povolit spouštěcí kolík na vysokou hodnotu, tj. Všechny spouštěcí kolíky by měly být definovány jako VÝSTUP. A abychom obdrželi echo, musíme si přečíst stav echo pinů, takže všechny echo piny by se měly definovat jako INPUT. Povolujeme také sériový monitor pro řešení problémů. Pro čtení stavu IR modulů jsem definoval irpin jako vstup.
pinMode (trigPin1, VÝSTUP); pinMode (trigPin2, VÝSTUP); pinMode (trigPin3, VÝSTUP); pinMode (echoPin1, INPUT); pinMode (echoPin2, INPUT); pinMode (echoPin3, INPUT); pinMode (irpin, INPUT);
A tyto digitální piny jsou definovány jako VÝSTUP pro vstup ovladače motoru.
pinMode (4, VÝSTUP); pinMode (7, VÝSTUP); pinMode (8, VÝSTUP); pinMode (12, VÝSTUP);
V hlavní smyčce máme tři sekce pro tři senzory. Všechny sekce fungují stejně, ale každá pro různé senzory. V této části načteme vzdálenost překážky od každého senzoru a uložíme ji do každého definovaného celého čísla. Chcete-li přečíst vzdálenost, nejprve se musíme ujistit, že spouštěcí kolíky jsou jasné, proto musíme nastavit spouštěcí kolík na LOW na 2 µs. Nyní, pro generování ultrazvukové vlny, musíme otočit spouštěcí kolík HIGH na 10 µs. Tím odešlete ultrazvukový zvuk a pomocí funkce pulseIn () můžeme načíst cestovní čas a uložit tuto hodnotu do proměnné „ doba trvání “. Tato funkce má 2 parametry, první je název echo pinu a pro druhý můžete psát buďVYSOKÝ nebo NÍZKÝ. HIGH znamená, že funkce pulseIn () počká, až pin přejde na HIGH způsobený odrazenou zvukovou vlnou, a začne počítat, poté počká, až pin přejde na LOW, když zvuková vlna skončí, což zastaví počítání. Tato funkce udává délku pulsu v mikrosekundách. Pro výpočet vzdálenosti vynásobíme dobu trvání 0,034 (rychlost zvuku ve vzduchu je 340 m / s) a vydělíme ji 2 (je to způsobeno pohybem zvukové vlny tam a zpět). Nakonec uložíme vzdálenost každého senzoru do odpovídajících celých čísel.
digitalWrite (trigPin1, LOW); delayMicroseconds (2); digitalWrite (trigPin1, HIGH); delayMicroseconds (10); digitalWrite (trigPin1, LOW); duration1 = pulseIn (echoPin1, HIGH); distanceleft = duration1 * 0,034 / 2;
Po získání vzdálenosti od každého senzoru můžeme ovládat motory pomocí příkazu if, tedy ovládáme pohyb robota. To je velmi jednoduché, nejprve jsme zadali hodnotu vzdálenosti překážky, v tomto případě je to 15 cm (změňte tuto hodnotu podle svého přání). Potom jsme dali podmínky podle této hodnoty. Například, když překážka přijde před levý senzor (to znamená, že vzdálenost levého senzoru by měla být pod nebo rovna 15 cm) a další dvě vzdálenosti jsou vysoké (to znamená, že žádná překážka není před senzory), pak pomocí funkce digitálního zápisu můžeme řídit motory doprava. Později jsem zkontroloval stav IR senzoru. Pokud je robot na podlaze, bude hodnota infračerveného kolíku NÍZKÁ, a pokud ne, bude tato hodnotaVYSOKÁ. Pak jsem tuto hodnotu uložil do proměnné int s . Podle tohoto stavu budeme robota řídit.
Tato část kódu se používá k pohybu robota vpřed a vzad :
if (s == HIGH) { digitalWrite (4, LOW); digitalWrite (7, HIGH); digitalWrite (8, LOW); digitalWrite (12, HIGH); zpoždění (1000); a = 1; }
Ale s touto metodou je problém, když se motor pohybuje dozadu, podlaha se vrátí a bot se bude pohybovat dopředu a bude se opakovat, aby se bot zasekl. Abychom to překonali, uložíme hodnotu (1) do int po pochopení, že podlaha není k dispozici. Tuto podmínku také kontrolujeme pro další pohyby.
Po zjištění nepřítomnosti podlahy se robot nepohne dopředu. Místo toho se bude pohybovat doleva, tímto způsobem se můžeme vyhnout problému.
if ((a == 0) && (s == LOW) && (distanceleft <= 15 && distancefront> 15 && distanceright <= 15) - (a == 0) && (s == LOW) && (distanceleft> 15 && distancefront> 15 && distanceright> 15))
Ve výše uvedeném stavu. Nejprve robot zkontroluje stav podlahy a celočíselnou hodnotu. Robot se pohne vpřed, pouze pokud jsou splněny všechny podmínky.
Nyní můžeme psát příkazy pro ovladač motoru. Tím se pohne pravý motor dozadu a levý motor dopředu, čímž se robot otočí doprava.
Tato část kódu se používá k přesunutí robota doprava:
digitalWrite (4, HIGH); digitalWrite (7, LOW); digitalWrite (8, HIGH); digitalWrite (12, LOW);
Pokud robot zjistí, že podlaha chybí, hodnota se změní na 1 a robot se přesune doleva. Po otočení doleva se hodnota 'a' změní na 0 z 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 && distanceright> 15 && distanceright> 15)) { digitalWrite (4, HIGH); digitalWrite (7, LOW); digitalWrite (8, LOW); digitalWrite (12, HIGH); zpoždění (100); a = 0; }
Tato část kódu se používá k přesunutí robota doleva:
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); }
To je vše pro stavění inteligentního vysavače robota založeného na Arduinu. Kompletní fungování projektu najdete ve videu, na které odkazujete ve spodní části této stránky. Pokud máte nějaké dotazy, komentujte níže.