Obsah:

The Butter Robot: the Arduino Robot With Existential Crisis: 6 Steps (with Pictures)
The Butter Robot: the Arduino Robot With Existential Crisis: 6 Steps (with Pictures)

Video: The Butter Robot: the Arduino Robot With Existential Crisis: 6 Steps (with Pictures)

Video: The Butter Robot: the Arduino Robot With Existential Crisis: 6 Steps (with Pictures)
Video: Rick and Morty - You pass Butter 2024, Červenec
Anonim
Image
Image

Tento projekt je založen na animovaném seriálu „Rick a Morty“. V jedné z epizod Rick dělá robota, jehož jediným účelem je přinést máslo. Jako studenti z Bruface (bruselská fakulta strojírenství) máme úkol pro projekt mechatroniky, kterým je postavit robota na základě navrhovaného tématu. Zadání tohoto projektu zní: Vyrobte robota, který podává pouze máslo. Může to mít existenční krizi. Samozřejmě, že robot v epizodě Ricka a Mortyho je docela složitý robot a je třeba provést určitá zjednodušení:

Protože jediným účelem je přinést máslo, existují jednodušší alternativy. Místo toho, aby robot vypadal a chytil máslo, než ho přinese správnému člověku, může máslo stále nosit. Hlavní myšlenkou je tedy vyrobit vozík, který dopraví máslo tam, kde má být.

Kromě přepravy másla musí robot vědět, kam potřebuje máslo dovézt. V epizodě Rick pomocí svého hlasu volá a velí robotovi. To vyžaduje nákladný systém rozpoznávání hlasu a bylo by to komplikované. Místo toho každý u stolu dostane tlačítko: jakmile je toto tlačítko aktivováno, robot toto tlačítko najde a pohne se směrem k němu.

Abychom to shrnuli, musí robot splnit následující požadavky:

  • Musí být bezpečný: musí se vyhýbat překážkám a zabránit pádu ze stolu;
  • Robot musí být malý: prostor na stole je omezený a nikdo by nechtěl robota, který podává máslo, ale má poloviční velikost než samotný stůl;
  • Práce robota nemůže záviset na velikosti nebo tvaru stolu, takže jej lze použít na různých stolech;
  • Je třeba přivést máslo ke správné osobě u stolu.

Krok 1: Hlavní koncept

Předchozí zmíněné požadavky lze splnit pomocí různých technik. V tomto kroku jsou vysvětlena rozhodnutí o hlavním návrhu, která byla provedena. Podrobnosti o tom, jak jsou tyto nápady implementovány, najdete v následujících krocích.

Aby robot splnil svou povinnost, musí se pohybovat, dokud není dosaženo cíle. Vzhledem k aplikaci robota je jednoduché, že je lepší pohybovat se pomocí koleček místo „chůze“. Vzhledem k tomu, že stůl je plochý povrch a robot nedosáhne příliš vysokých rychlostí, jsou nejjednodušším a snadno ovladatelným řešením dvě poháněná kola a jedna otočná koule. Poháněná kola musí být poháněna dvěma motory. Motory musí mít velký točivý moment, ale nemusí dosahovat vysokých otáček, proto budou použity kontinuální servomotory. Další výhodou servomotorů je jednoduchost použití s Arduinem.

Detekci překážek lze provést pomocí ultrazvukového senzoru, který měří vzdálenost, připevněného k servomotoru a volit směr měření. Hrany lze detekovat pomocí senzorů LDR. Použití snímačů LDR bude vyžadovat konstrukci zařízení, které obsahuje jak LED světlo, tak snímač LDR. Senzor LDR měří odražené světlo a lze jej považovat za jakýsi snímač vzdálenosti. Stejný princip existuje s infračerveným světlem. Existuje několik infračervených snímačů přiblížení, které mají digitální výstup: zavřít nebo nezavřít. To je přesně to, co robot potřebuje k detekci hran. Kombinací 2 okrajových senzorů umístěných jako dvě hmyzí antény a jednoho aktivovaného ultrazvukového senzoru by robot měl být schopen vyhýbat se překážkám a hranám.

Detekci tlačítek lze také provést pomocí IR senzorů a LED diod. Výhodou IR je, že je neviditelný, což činí jeho používání nerušivým pro lidi u stolu. Mohly by být použity také lasery, ale pak by bylo světlo viditelné a také nebezpečné, když někdo namíří laser do oka jiné osoby. Také by uživatel potřeboval zaměřit senzory na robotu pouze tenkým laserovým paprskem, což by bylo docela nepříjemné. Vybavením robota dvěma infračervenými senzory a konstrukcí tlačítka pomocí infračervené LED diody robot podle intenzity infračerveného světla ví, kterým směrem se má vydat. Když není tlačítko, robot se může otáčet, dokud jedna z diod nezachytí signál z jednoho z tlačítek.

Máslo je vloženo do přihrádky v horní části robota. Toto oddělení se může skládat z krabice a ovládaného víka k otevření krabice. K otevření víka a pohybu ultrazvukového senzoru ke skenování a detekci překážek potřebujeme dva motory, a proto jsou nespojité servomotory lépe přizpůsobeny, protože motory musí jít do určité polohy a udržovat tuto pozici.

Další funkcí projektu byla interakce s vnějším prostředím pomocí hlasu robota. Bzučák je jednoduchý a přizpůsobený k tomuto účelu, ale nelze jej použít kdykoli, protože aktuální tah je vysoký.

Hlavní potíže projektu spočívají v kódování, protože mechanická část je velmi jednoduchá. Je třeba vzít v úvahu mnoho případů, aby se robot nezasekl nebo neudělal něco nechtěného. Hlavní problémy, které musíme vyřešit, jsou ztráta signálu IR kvůli překážce a zastavení, když dorazí na tlačítko!

Krok 2: Materiály

Mechanické části

  • 3D tiskárna a laserový řezací stroj

    • PLA bude použit pro 3D tisk, ale můžete také použít ABS
    • K řezání laserem bude použita deska z 3 mm březové překližky, protože to umožňuje snadné pozdější úpravy, lze také použít plexisklo, ale je obtížnější jej upravit, jakmile je řezáno laserem, aniž by došlo k jeho zničení
  • Šrouby, matice, podložky

    Většina součástí je držena pohromadě pomocí šroubů, podložek a matic s hlavou M3, ale některé z nich vyžadují sadu šroubů M2 nebo M4. Délka šroubů je v rozmezí 8-12 mm

  • Rozpěrky desky plošných spojů, 25 mm a 15 mm
  • 2 servomotory s kompatibilními koly
  • Nějaký tlustý kovový drát o průměru 1-2 mm

Elektronické součástky

  • Mikrokontrolér

    1 deska arduino UNO

  • Servomotory

    • 2 Velké servomotory: Feetech kontinuální 6 kg 360 stupňů
    • 2 mikro servomotory: Feetech FS90
  • Senzory

    • 1 Ultrazvukový senzor
    • 2 IR senzory přiblížení
    • 2 IR fotodiody
  • Baterie

    • 1 9V držák baterie + baterie
    • 1 držák baterií 4AA + baterie
    • 1 9V bateriový box + baterie
  • Další komponenty

    • Některé přeskakovací dráty, dráty a pájecí desky
    • Nějaké odpory
    • 1 IR LED
    • 3 spínače
    • 1 bzučák
    • 1 tlačítko
    • 1 konektor baterie Arduino na 9V

Krok 3: Testování elektroniky

Testování elektroniky
Testování elektroniky
Testování elektroniky
Testování elektroniky

Vytvoření tlačítka:

Tlačítko je jednoduše vyrobeno spínačem, infračervenou LED a odporem 220 Ohm v sérii, napájeno 9V baterií. To je vloženo do 9V baterie pro kompaktní a čistý design.

Vytvoření modulů infračerveného přijímače:

Tyto moduly jsou vyrobeny z pájecích desek s průchozími otvory, které budou později připevněny šrouby k robotu. Obvody pro tyto moduly jsou znázorněny v obecných schématech. Principem je měření intenzity infračerveného světla. Ke zlepšení měření lze použít kolimátory (vyrobené ze smršťovacích trubic) k zaostření na určitý směr zájmu.

Různých požadavků projektu je třeba dosáhnout pomocí elektronických zařízení. Počet zařízení by měl být omezen, aby byla zachována relativně nízká složitost. Tento krok obsahuje schémata zapojení a každý kód pro testování všech částí samostatně:

  • Nepřetržité servomotory;
  • Ultrazvukový senzor;
  • Nespojité servomotory;
  • Bzučák;
  • Detekce směru IR tlačítka;
  • Detekce hran pomocí senzorů přiblížení;

Tyto kódy mohou pomoci porozumět komponentám na začátku, ale je také velmi užitečné pro ladění v pozdějších fázích. Pokud dojde k určitému problému, chybu lze snadněji zjistit samostatným testováním všech komponent.

Krok 4: Návrh 3D tištěných a řezaných laserem

3D tisk a laserem řezané kusy
3D tisk a laserem řezané kusy
3D tisk a laserem řezané kusy
3D tisk a laserem řezané kusy
3D tisk a laserem řezané kusy
3D tisk a laserem řezané kusy

Laserem řezané kusy

Sestava je vyrobena ze tří hlavních horizontálních desek držených pohromadě distančními deskami plošných spojů, aby se získal otevřený design poskytující v případě potřeby snadný přístup k elektronice.

Tyto desky musí mít vyřezané potřebné otvory, aby bylo možné přišroubovat rozpěrky a další součásti pro konečnou montáž. Všechny tři desky mají hlavně otvory na stejném místě pro distanční vložky a specifické otvory pro elektroniku upevněné na každé desce. Všimněte si, že střední deska má uprostřed otvor pro průchod vodičů.

Menší kusy jsou nařezány na rozměry velkého serva, aby byly připevněny k sestavě.

3D vytištěné kousky

Kromě řezání laserem budou některé kusy muset být vytištěny 3D:

  • Podpora pro ultrazvukový senzor, který jej spojuje s jedním ramenem mikro servomotoru
  • Podpora kolečka a dvou infračervených senzorů. Konkrétní konstrukce druhu krabicových konců dílu pro IR senzory funguje jako obrazovka, aby se zabránilo interferencím mezi tlačítkem vyzařujícím IR signál a IR senzory, které se musí soustředit na to, co se děje pouze na zemi
  • Podpora pro mikro servomotor otevírající víko
  • A nakonec samotné víko, vyrobené ze dvou kusů, které mají větší pracovní úhel tím, že se vyhnou kolizi s mikro servomotorem otevírajícím víko:

    • Spodní, který bude připevněn k horní desce
    • A horní část, která je spojena se spodní částí pomocí závěsu a ovládána servem pomocí silného kovového drátu. Rozhodli jsme se přidat trochu osobnosti robotu tím, že mu dáme hlavu.

Jakmile jsou všechny kusy navrženy a soubory exportovány ve správném formátu pro použité stroje, mohou být kusy skutečně vyrobeny. Uvědomte si, že 3D tisk zabere hodně času, zejména s rozměry horního dílu víka. Možná budete potřebovat jeden nebo dva dny na vytištění všech kusů. Laserové řezání je však otázkou několika minut.

Všechny soubory SOLIDWORKS lze nalézt ve složce zip.

Krok 5: Montáž a zapojení

Image
Image
Montáž a zapojení
Montáž a zapojení
Montáž a zapojení
Montáž a zapojení
Montáž a zapojení
Montáž a zapojení

Sestava bude kombinací kabeláže a šroubování součástí k sobě, počínaje zdola nahoru.

Spodní deska

Spodní deska je sestavena z baterie 4AA, servomotorů, tištěné části (připevnění kuličkového kolečka pod desku), dvou okrajových senzorů a 6 distančních prvků mezi mužem a ženou.

Střední deska

Dále může být namontována střední deska, která stlačí servomotory mezi oběma deskami. Tuto desku lze poté upevnit vložením další sady rozpěrek na ni. Některé kabely lze protáhnout středovým otvorem.

Ultrazvukový modul lze připojit k nespojitému servu, které je upevněno na střední desce pomocí Arduina, 9V baterie (napájení arduina) a dvou modulů infračerveného přijímače v přední části robota. Tyto moduly jsou vyrobeny z pájecích desek s průchozími otvory a připevněny šrouby k desce. Obvody pro tyto moduly jsou znázorněny v obecných schématech.

Horní deska

V této části sestavy nejsou přepínače pevné, ale robot již může dělat vše kromě akcí vyžadujících víko, což nám umožňuje provést určitý test k nápravě prahu, přizpůsobení kódu pohybu a snadnému přístup k přístavům arduina.

Když je toho všeho dosaženo, může být horní deska upevněna pomocí rozpěr. Poslední součásti, kterými jsou dva spínače, tlačítko, servo, bzučák a systém víka, lze nakonec připevnit k horní desce a dokončit montáž.

Poslední věcí, kterou je třeba vyzkoušet a opravit, je úhel serva pro správné otevření víka.

Prah okrajových senzorů je třeba přizpůsobit přiloženým potenciometrem (pomocí plochého šroubováku) pro různé povrchy stolu. Například bílý stůl by měl mít nižší práh než hnědý stůl. Také výška senzorů ovlivní potřebný práh.

Na konci tohoto kroku je sestava dokončena a poslední zbývající částí jsou chybějící kódy.

Krok 6: Kódování: Dát vše dohromady

Všechny potřebné kódy, aby robot fungoval, jsou v souboru ZIP, který lze stáhnout. Nejdůležitější je „hlavní“kód, který obsahuje nastavení a funkční smyčku robota. Většina ostatních funkcí je zapsána v dílčích souborech (také ve složce zip). Tyto dílčí soubory by měly být uloženy do stejné složky (která se jmenuje „hlavní“) jako hlavní skript, než ji nahrajete do Arduina

Nejprve je definována obecná rychlost robota společně s proměnnou „připomínat“. Toto „připomenutí“je hodnota, která si pamatuje, kterým směrem se robot otáčel. Pokud „připomenutí = 1“, robot se otáčel/otáčí doleva, pokud „připomínal = 2“, robot se otáčel/otáčel doprava.

int rychlost = 9; // Obecná rychlost robota

int připomenutí = 1; // Počáteční směr

V nastavení robota se inicializují různé dílčí soubory programu. V těchto dílčích souborech jsou napsány základní funkce pro ovládání motorů, senzorů, …. Jejich inicializací v nastavení lze v hlavní smyčce použít funkce, které jsou popsány v každém z těchto souborů. Aktivací funkce r2D2 () bude robot vydávat zvuk jako robot R2D2 z franšízy Star Wars nastartuje to Zde je funkce r2D2 () deaktivována, aby se zabránilo bzučáku odebírat příliš mnoho proudu.

// Nastavení @ reset // ----------------

neplatné nastavení () {initialize_IR_sensors (); initialize_obstacles_and_edges (); initialize_movement (); initialize_lid (); initialize_buzzer (); // r2D2 (); int připomenutí = 1; // počáteční směr Starter (připomenutí); }

Funkce Starter (připomenutí) je nejprve vyvolána v nastavení. Díky této funkci se robot otočí a hledá IR signál jednoho z tlačítek. Jakmile najde tlačítko, program ukončí funkci Starter změnou proměnné „cond“na false. Během otáčení robota si musí být vědom svého prostředí: musí detekovat hrany a překážky. Toto se kontroluje pokaždé, než se to začne znovu otáčet. Jakmile robot detekuje překážku nebo hranu, provede se protokol, jak se těmto překážkám nebo hranám vyhnout. Tyto protokoly budou vysvětleny dále v tomto kroku. Funkce Starter má jednu proměnnou, která je proměnnou připomenutí, která byla diskutována dříve. Tím, že robot připomenou funkci Starter, ví, kterým směrem se musí otočit, aby mohl hledat tlačítko.

// Starter Loop: Otočte se a vyhledejte tlačítko // ------------------------------------ ----------------

void Starter (int připomenutí) {if (isedgeleft () || isedgeright ()) {// Detekuje hrany edgeDetected (připomenutí); } else {bool cond = true; while (cond == true) {if (buttonleft () == false && buttonright () == false && isButtonDetected () == true) {cond = false; } else {if (připomenutí == 1) {// Otáčeli jsme doleva if (isobstacleleft ()) {stoppeed (); Vyhněte se překážce (připomenutí); } else if (isedgeleft () || isedgeright ()) {// Detekuje hrany edgeDetected (připomenutí); } else {turnleft (rychlost); }} else if (připomenutí == 2) {if (isobstacleright ()) {stoppeed (); Vyhněte se překážce (připomenutí); } else if (isedgeleft () || isedgeright ()) {// Detekuje hrany edgeDetected (připomenutí); } else {turnright (rychlost); }}}}}}

Pokud robot tlačítko najde, první startovací smyčka se opustí a začne hlavní funkční smyčka robota. Tato hlavní smyčka je poměrně složitá, protože pokaždé robot potřebuje zjistit, zda je či není před ní překážka nebo hrana. Hlavní myšlenkou je, že robot sleduje tlačítko tím, že jej najde a pokaždé ztratí. Použitím dvou IR senzorů můžeme rozlišit tři situace:

  • rozdíl mezi infračerveným světlem detekovaným levým a pravým senzorem je větší než určitá prahová hodnota a je zde tlačítko.
  • rozdíl v infračerveném světle je menší než prahová hodnota a před robotem je tlačítko.
  • rozdíl v infračerveném světle je menší než prahová hodnota a před robotem není žádné tlačítko.

Rutina stopy funguje následovně: když je tlačítko detekováno, robot se pohybuje směrem k tlačítku otáčením stejným směrem, jakým se otáčel (pomocí proměnné připomenutí), a současně se pohybuje trochu dopředu. Pokud se robot otočí příliš daleko, tlačítko se znovu ztratí a v tomto okamžiku si robot pamatuje, že se musí otočit opačným směrem. To se také děje při malém pohybu vpřed. Robot se tím neustále otáčí doleva a doprava, ale mezitím stále postupuje směrem k tlačítku. Pokaždé, když robot najde tlačítko, stále se otáčí, dokud jej neztratí, v takovém případě se začne pohybovat jiným směrem. Všimněte si rozdílu ve funkcích, které se používají ve startovací smyčce a hlavní smyčce: startovací smyčka používá „turnleft ()“nebo „turnright ()“, zatímco hlavní smyčka používá „moveleft ()“a „moveright ()“. Funkce Moveleft/Right nejen, že se robot otočí, ale také ho současně posouvá vpřed.

/ * Funkční smyčka ---------------------------- Tady je pouze rutina sledování */

int ztraceno = 0; // Pokud je ztraceno = 0, tlačítko je nalezeno, pokud je ztraceno = 1, tlačítko se ztratí neplatná smyčka () {if (isedgeleft () || isedgeright ()) {

if (! isobstacle ()) {

pohyb vpřed (rychlost); zpoždění (5); } else {avoid_obstacle (připomenutí); } else {if (připomenutí == 1 && ztracen == 1) {// Otáčeli jsme levou stoppeed (); if (! isobstacleright ()) {moveright (rychlost); // Otočte se a najděte tlačítko} else {avoid_obstacle (připomenutí); } připomenout = 2; } else if (připomenutí == 2 && ztraceno == 1) {stoppeed (); if (! isobstacleleft ()) {moveleft (rychlost); // Zabočili jsme doprava} else {avoid_obstacle (připomenutí); } připomenout = 1; } else if (ztracené == 0) {if (připomenutí == 1) {// Otáčeli jsme doleva if (! isobstacleleft ()) {moveleft (speed); // Odbočili jsme doprava} else {stoppeed (); Vyhněte se překážce (připomenutí); } //} else if (připomenutí == 2) {if (! isobstacleright ()) {moveright (speed); // Otočte se a najděte tlačítko} else {stoppeed (); Vyhněte se překážce (připomenutí); }}} zpoždění (10); ztracené = 0; }} //}}

Nyní je poskytnuto malé vysvětlení dvou nejsložitějších rutin:

Vyhněte se hranám

Protokol, který se má vyhýbat hranám, je definován funkcí nazvanou "edgeDetection ()", která je zapsána v podsouboru "pohyb". Tento protokol se spoléhá na skutečnost, že robot by se měl setkat s hranou pouze tehdy, když dosáhl svého cíle: tlačítko. Jakmile robot detekuje hranu, první věcí, kterou udělá, je vrátit se o kousek zpět, aby byl v bezpečné vzdálenosti od okraje. Jakmile to bude hotové, robot čeká 2 sekundy. Pokud někdo během těchto dvou sekund stiskne tlačítko na přední straně robota, robot ví, že dosáhl osoby, která chce máslo, otevře přihrádku na máslo a předloží máslo. V tuto chvíli si někdo může vzít z robota máslo. Po několika sekundách bude robot unavený čekáním a zavře víko másla. Jakmile je víko zavřené, robot spustí smyčku Starter a vyhledá další tlačítko. Pokud se stane, že robot narazí na hranu před dosažením svého cíle a tlačítko na přední straně robota není stisknuto, robot neotevře víko másla a okamžitě spustí startovací smyčku.

Vyhněte se překážkám

V podsouboru "pohyb" se nachází také funkce avoid_obstacle (). Nejtěžší na vyhýbání se překážkám je fakt, že robot má dost velké slepé místo. Ultrazvukový senzor je umístěn v přední části robota, což znamená, že dokáže detekovat překážky, ale neví, kdy kolem něj projel. K vyřešení tohoto problému se používá následující zásada: Jakmile robot narazí na překážku, pomocí proměnné reming se otočí opačným směrem. Robot se tak vyhne nárazu na překážku. Robot se otáčí, dokud ultrazvukový senzor již detekuje překážku. Během doby, kdy se robot otáčí, se počítadlo zvyšuje, dokud překážka již není detekována. Tento čítač pak poskytuje přibližnou délku překážky. Pohybem vpřed a současně snížením počitadla lze překážce vyhnout. Jakmile počitadlo dosáhne 0, lze znovu použít funkci Starter k přemístění tlačítka. Robot samozřejmě plní funkci Starter otáčením ve směru, který si pamatoval, že jde, než narazil na překážku (opět pomocí proměnné připomenutí).

Nyní, když kódu plně rozumíte, můžete jej začít používat!

Nezapomeňte přizpůsobit prahové hodnoty vašemu prostředí (IR odraz je například vyšší na bílých tabulkách) a přizpůsobit různé parametry vašim potřebám. Rovněž je třeba věnovat velkou pozornost napájení různých modulů. Je velmi důležité, aby servomotory nebyly napájeny 5V portem Arduino, protože odebírají hodně proudu (to by mohlo poškodit mikrokontrolér). Pokud je pro snímače použit stejný zdroj energie jako pro napájení serva, mohou nastat problémy s měřením.

Doporučuje: