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, Júl
Anonim
Image
Image

Tento projekt je založený na animovanej sérii „Rick a Morty“. V jednej z epizód Rick vyrobí robota, ktorého jediným účelom je priniesť maslo. Ako študenti z Bruface (Bruselská technická fakulta) máme úlohu pre projekt mechatroniky, ktorou je postaviť robota na základe navrhovanej témy. Zadanie pre tento projekt znie: Vyrobte robota, ktorý podáva iba maslo. Môže to mať existenčnú krízu. Samozrejme, robot v epizóde Ricka a Mortyho je dosť zložitý robot a je potrebné urobiť niekoľko zjednodušení:

Pretože je jediným účelom priniesť maslo, existujú jednoduchšie alternatívy. Namiesto toho, aby robot vyzeral a chytil maslo, skôr ako ho prinesie správnej osobe, môže maslo stále nosiť. Hlavnou myšlienkou je teda vyrobiť vozík, ktorý dopraví maslo tam, kde má byť.

Okrem prepravy masla musí robot vedieť, kam potrebuje maslo priniesť. V epizóde Rick používa svojho hlasu na to, aby zavolal a velil robotovi. Vyžaduje si to drahý systém rozpoznávania hlasu a bolo by to komplikované. Namiesto toho každý pri stole dostane tlačidlo: akonáhle je toto tlačidlo aktivované, robot ho dokáže nájsť a pohybovať sa k nemu.

Aby sme to zhrnuli, robot musí spĺňať nasledujúce požiadavky:

  • Musí byť bezpečný: musí sa vyhýbať prekážkam a nesmie spadnúť zo stola;
  • Robot musí byť malý: priestor na stole je obmedzený a nikto by nechcel robota, ktorý podáva maslo, ale je polovičný ako samotný stôl;
  • Práca robota nemôže závisieť od veľkosti alebo tvaru stola, takže ho možno použiť na rôznych stoloch;
  • Potrebuje priniesť maslo k správnej osobe pri stole.

Krok 1: Hlavný koncept

Vyššie uvedené požiadavky je možné splniť rôznymi technikami. V tomto kroku sú vysvetlené rozhodnutia o hlavnom návrhu, ktoré boli vykonané. Podrobnosti o tom, ako sú tieto nápady implementované, nájdete v nasledujúcich krokoch.

Aby robot splnil svoju povinnosť, musí sa pohnúť, kým nedosiahne cieľ. Vzhľadom na aplikáciu robota je jednoduché, že pohybom je lepšie použiť kolesá namiesto „kráčajúceho“pohybu. Pretože stôl je plochý povrch a robot nedosiahne veľmi vysoké rýchlosti, dve ovládané kolesá a jedna kolieska sú najjednoduchším a najľahšie ovládateľným riešením. Ovládané kolesá musia byť poháňané dvoma motormi. Motory musia mať veľký krútiaci moment, ale nemusia dosahovať vysoké otáčky, preto sa budú používať kontinuálne servomotory. Ďalšou výhodou servomotorov je jednoduchosť použitia s Arduinom.

Detekciu prekážok je možné vykonať pomocou ultrazvukového senzora, ktorý meria vzdialenosť, pripevneného k servomotoru a zvoliť smer merania. Hrany je možné detekovať pomocou senzorov LDR. Použitie senzorov LDR bude vyžadovať konštrukciu zariadenia, ktoré obsahuje LED svetlo aj snímač LDR. Senzor LDR meria odrazené svetlo a možno ho vnímať ako určitý druh snímača vzdialenosti. Rovnaký princíp existuje s infračerveným svetlom. Existuje niekoľko infračervených bezdotykových senzorov, ktoré majú digitálny výstup: zatvorenie alebo zatvorenie. To je presne to, čo robot potrebuje na detekciu hrán. Kombináciou dvoch okrajových senzorov umiestnených ako dve antény hmyzu a jedného aktivovaného ultrazvukového senzora by mal robot zvládnuť prekážky a hrany.

Detekciu tlačidiel je možné vykonať aj pomocou IR senzorov a LED diód. Výhodou IR je, že je neviditeľný, čo spôsobuje, že jeho používanie nie je rušivé pre ľudí pri stole. Mohli by sa použiť aj lasery, ale potom by bolo svetlo viditeľné a tiež nebezpečné, keď niekto mieri laserom do oka inej osoby. Užívateľ by tiež potreboval zamerať senzory na robote iba tenkým laserovým lúčom, čo by bolo dosť nepríjemné. Vybavením robota dvoma infračervenými senzormi a zostrojením tlačidla infračervenou diódou robot vie, ktorým smerom sa má vydať, a to podľa intenzity infračerveného svetla. Ak nie je žiadne tlačidlo, robot sa môže otáčať, kým jedna z diód LED nezachytí signál z jedného z tlačidiel.

Maslo sa vloží do priehradky na vrchu robota. Táto priehradka môže pozostávať z krabice a ovládaného veka na otvorenie škatule. Na otvorenie veka a pohyb ultrazvukového senzora na skenovanie a detekciu prekážok potrebujeme dva motory a na tento účel sú nespojité servomotory viac prispôsobené, pretože motory musia ísť do určitej polohy a udržať si túto pozíciu.

Ďalšou črtou projektu bola interakcia s externým prostredím hlasom robota. Bzučiak je jednoduchý a prispôsobený na tento účel, ale nemožno ho použiť kedykoľvek, pretože súčasná kresba je vysoká.

Hlavné ťažkosti projektu závisia od kódovania, pretože mechanická časť je veľmi jednoduchá. Je potrebné vziať do úvahy mnoho prípadov, aby sa robot nelepil alebo nerobil niečo nechcené. Hlavnými problémami, ktoré musíme vyriešiť, je strata infračerveného signálu kvôli prekážke a zastavenie, keď príde na tlačidlo!

Krok 2: Materiály

Mechanické časti

  • 3D tlačiareň a laserový rezací stroj

    • PLA sa bude používať na 3D tlač, ale môžete použiť aj ABS
    • Na rezanie laserom bude použitá doska z 3 mm brezovej preglejky, pretože to dáva možnosť ľahších neskorších úprav, je možné použiť aj plexisklo, ale je ťažšie ho upravovať, keď je rezané laserom, bez toho, aby ste ho zničili.
  • Skrutky, matice, podložky

    Väčšina komponentov je držaná pohromade pomocou skrutiek, podložiek a matíc s hlavou M3, niektoré z nich však vyžadujú súpravu skrutiek M2 alebo M4. Dĺžka skrutiek je v rozmedzí 8-12 mm

  • Rozpery do DPS, 25 mm a 15 mm
  • 2 servomotory s kompatibilnými kolesami
  • Nejaký hrubý kovový drôt s priemerom 1 až 2 mm

Elektronické súčiastky

  • Mikrokontrolér

    1 doska arduino UNO

  • Servomotory

    • 2 Veľké servomotory: Feetech kontinuálne 6 kg 360 stupňov
    • 2 mikro servomotory: Feetech FS90
  • Senzory

    • 1 Ultrazvukový senzor
    • 2 IR senzory priblíženia
    • 2 IR fotodiódy
  • Batérie

    • 1 9V držiak batérie + batéria
    • 1 4AA držiak batérie + batérie
    • 1 9V batériový box + batéria
  • Dodatočné komponenty

    • Niektoré skákacie drôty, drôty a spájkovacie platne
    • Niektorí odporcovia
    • 1 IR LED
    • 3 prepínače
    • 1 bzučiak
    • 1 tlačidlo
    • 1 konektor batérie Arduino na 9V

Krok 3: Testovanie elektroniky

Testovanie elektroniky
Testovanie elektroniky
Testovanie elektroniky
Testovanie elektroniky

Vytvorenie tlačidla:

Tlačidlo je jednoducho vyrobené prepínačom, infračervenou diódou LED a odporom 220 Ohmov v sérii, napájaných 9V batériou. To je vložené do 9V batérie pre kompaktný a čistý dizajn.

Vytvorenie modulov infračerveného prijímača:

Tieto moduly sú vyrobené z spájkovacích dosiek s otvorom, ktoré budú neskôr pripevnené skrutkami k robotovi. Obvody pre tieto moduly sú znázornené vo všeobecných schémach. Princíp spočíva v meraní intenzity infračerveného svetla. Na zlepšenie meraní je možné použiť kolimátory (vyrobené zo zmršťovacích bužírok) na zameranie určitého smeru záujmu.

Rôzne požiadavky projektu je potrebné splniť pomocou elektronických zariadení. Počet zariadení by mal byť obmedzený, aby bola zachovaná relatívne nízka zložitosť. Tento krok obsahuje schémy zapojenia a každý kód na testovanie všetkých častí samostatne:

  • Kontinuálne servomotory;
  • Ultrazvukový senzor;
  • Nespojité servomotory;
  • Bzučiak;
  • Detekcia smeru infračerveného tlačidla;
  • Detekcia hrán senzormi priblíženia;

Tieto kódy môžu pomôcť porozumieť komponentom na začiatku, ale je tiež veľmi užitočné pri ladení v neskorších fázach. Ak sa vyskytne určitý problém, chybu je možné ľahšie odhaliť samostatným testovaním všetkých komponentov.

Krok 4: Návrh 3D tlačených a laserom rezaných dielov

3D tlačený a laserom rezaný kusový dizajn
3D tlačený a laserom rezaný kusový dizajn
3D tlačený a laserom rezaný kusový dizajn
3D tlačený a laserom rezaný kusový dizajn
3D tlačený a laserom rezaný kusový dizajn
3D tlačený a laserom rezaný kusový dizajn

Laserom rezané kusy

Zostava je vyrobená z troch hlavných horizontálnych dosiek držaných pohromade rozperami plošných spojov, aby sa získal otvorený dizajn poskytujúci v prípade potreby ľahký prístup k elektronike.

Na týchto doskách je potrebné vyrezať potrebné otvory, aby bolo možné priskrutkovať rozpery a ďalšie komponenty pre konečnú montáž. Všetky tri dosky majú hlavne otvory na rovnakom mieste pre rozpery a špecifické otvory pre elektroniku upevnené na každej doske. Všimnite si, že stredná doska má v strede otvor na prechádzanie drôtov.

Menšie kusy sú narezané na rozmery veľkého serva, aby boli pripevnené k zostave.

3D tlačené kúsky

Okrem rezania laserom bude potrebné niektoré kusy vytlačiť aj 3D:

  • Podpora pre ultrazvukový senzor, ktorý ho spája s jedným ramenom mikro servomotora
  • Podpora kolieska a dvoch IR okrajových senzorov. Konkrétna konštrukcia druhu škatuľkovitých koncov kusa pre infračervené senzory slúži ako obrazovka, aby sa zabránilo rušeniu medzi tlačidlom vysielajúcim infračervený signál a infračervenými senzormi, ktoré sa musia zamerať iba na to, čo sa deje na zemi.
  • Podpora pre mikro servomotor otvárajúci veko
  • A nakoniec samotné veko, vyrobené z dvoch kusov, ktoré majú väčší pracovný uhol zabránením kolízii s mikro servomotorom otvárajúcim veko:

    • Spodný, ktorý bude pripevnený k hornej doske
    • A vrch, ktorý je spojený so spodkom závesom a ovládaný servom pomocou hrubého kovového drôtu. Rozhodli sme sa pridať trochu osobnosti robotu tým, že mu dáme hlavu.

Akonáhle sú všetky diely navrhnuté a súbory exportované v správnom formáte pre použité stroje, môžu byť figúrky skutočne vyrobené. Uvedomte si, že 3D tlač trvá veľa času, najmä pri rozmeroch horného dielu veka. Na vytlačenie všetkých kusov môžete potrebovať jeden alebo dva dni. Laserové rezanie je však otázkou niekoľkých minút.

Všetky súbory SOLIDWORKS sa nachádzajú v priečinku so zipsom.

Krok 5: Montáž a zapojenie

Image
Image
Montáž a zapojenie
Montáž a zapojenie
Montáž a zapojenie
Montáž a zapojenie
Montáž a zapojenie
Montáž a zapojenie

Zostava bude kombináciou zapojenia a skrutkovania komponentov k sebe, začínajúc zdola nahor.

Spodná doska

Spodná doska je zostavená z batérie 4AA, servomotorov, tlačenej časti (pripevnenie kolieska pod dosku), dvoch okrajových senzorov a 6 rozperiek medzi mužskou a ženskou stranou.

Stredný tanier

Ďalej je možné namontovať strednú dosku a stlačiť servomotory medzi týmito dvoma doskami. Táto doska môže byť potom upevnená umiestnením ďalšej sady rozperiek na ňu. Niektoré káble môžu byť vedené stredovým otvorom.

Ultrazvukový modul je možné pripojiť k nesúvislému servu, ktoré je pripevnené k strednej doske pomocou Arduina, 9V batérie (napájajúcej arduino) a dvoch modulov infračerveného prijímača v prednej časti robota. Tieto moduly sú vyrobené s spájkovacími doskami s otvorom a pripevnené skrutkami k doske. Obvody pre tieto moduly sú znázornené vo všeobecných schémach.

Horná doska

V tejto časti zostavy nie sú prepínače pevné, ale robot už dokáže všetko, iba činnosti, ktoré vyžadujú veko, a tak nám umožňuje vykonať určitý test na opravu prahu, prispôsobenie kódu pohybu a jednoduchú prácu. prístup k prístavom arduina.

Keď je toto všetko dosiahnuté, hornú dosku je možné upevniť pomocou rozperiek. Posledné komponenty, ktorými sú dva spínače, tlačidlo, servo, bzučiak a systém veka, môžu byť nakoniec pripevnené k hornej doske, aby sa montáž dokončila.

Posledná vec, ktorú treba vyskúšať a opraviť, je uhol serva na správne otvorenie veka.

Prah okrajových senzorov je potrebné prispôsobiť priloženým potenciometrom (pomocou plochého skrutkovača) pre rôzne povrchy stola. Napríklad biely stôl by mal mať nižší prah ako hnedý stôl. Potrebný prah ovplyvní aj výška senzorov.

Na konci tohto kroku je montáž dokončená a poslednou zostávajúcou časťou sú chýbajúce kódy.

Krok 6: Kódovanie: Dajte všetko dohromady

Všetky potrebné kódy na to, aby robot fungoval, sú v zip súbore, ktorý je možné stiahnuť. Najdôležitejším z nich je „hlavný“kód, ktorý obsahuje inštalačnú a funkčnú slučku robota. Väčšina ostatných funkcií je zapísaná v čiastkových súboroch (tiež v priečinku so zipsom). Tieto čiastkové súbory by mali byť uložené do rovnakého priečinka (ktorý sa nazýva „hlavný“) ako hlavný skript pred jeho odoslaním do Arduino

Najprv je definovaná všeobecná rýchlosť robota spolu s premennou „pripomienka“. Toto „pripomenutie“je hodnota, ktorá si pamätá, akým smerom sa robot otáčal. Ak „pripomienka = 1“, robot sa otáčal/otáča doľava, ak „pripomína = 2“, robot sa otáčal/otáčal doprava.

vnútorná rýchlosť = 9; // Všeobecná rýchlosť robota

int pripomenutie = 1; // Počiatočný smer

Pri inštalácii robota sa inicializujú rôzne čiastkové súbory programu. V týchto čiastkových súboroch sú zapísané základné funkcie ovládania motorov, senzorov, …. Ich inicializáciou v nastavení je možné v hlavnej slučke použiť funkcie, ktoré sú popísané v každom z týchto súborov. Aktiváciou funkcie r2D2 () bude robot vydávať hluk ako robot R2D2 z filmovej série Star Wars, keď spustí sa to Tu je funkcia r2D2 () deaktivovaná, aby sa zabránilo bzučiaku čerpať príliš veľa prúdu.

// Nastavenie @ reset // ----------------

neplatné nastavenie () {initialize_IR_sensors (); initialize_obstacles_and_edges (); initialize_movement (); initialize_lid (); initialize_buzzer (); // r2D2 (); int pripomenutie = 1; // počiatočný smer Štartér (pripomenúť); }

Funkciu štartéra (pripomenutie) najskôr vyvoláte v nastavení. Vďaka tejto funkcii sa robot otočí a hľadá infračervený signál jedného z tlačidiel. Akonáhle nájde tlačidlo, program ukončí funkciu štartéra zmenou premennej „cond“na false. Počas otáčania robota si musí byť vedomý svojho prostredia: musí detekovať hrany a prekážky. Toto sa kontroluje zakaždým, kým sa to opäť otočí. Akonáhle robot zistí prekážku alebo hranu, vykoná sa protokol, ktorým sa týmto prekážkam alebo hranám vyhnete. Tieto protokoly budú vysvetlené neskôr v tomto kroku. Štartovacia funkcia má jednu premennú, ktorá je premennou pripomenutia, o ktorej sme už diskutovali. Udelením hodnoty pripomenutia štartovacej funkcii robot vie, akým smerom sa musí otočiť, aby mohol tlačidlo hľadať.

// Úvodná slučka: Otočte sa a hľadajte tlačidlo // ------------------------------------ ----------------

prázdny štartér (int pripomenutie) {if (isedgeleft () || isedgeright ()) {// Detekuje hrany edgeDetected (pripomienka); } else {bool cond = true; while (cond == true) {if (buttonleft () == false && buttonright () == false && isButtonDetected () == true) {cond = false; } else {if (připomenutí == 1) {// Odbočili sme doľava, ak (isobstacleleft ()) {stoppeed (); Vyhnite sa prekážke (pripomenúť); } else if (isedgeleft () || isedgeright ()) {// Detekuje hrany edgeDetected (pripomienka); } else {turnleft (rýchlosť); }} else if (připomenutí == 2) {if (isobstacleright ()) {stoppeed (); Vyhnite sa prekážke (pripomenúť); } else if (isedgeleft () || isedgeright ()) {// Detekuje hrany edgeDetected (pripomienka); } else {turnright (rýchlosť); }}}}}}

Ak robot tlačidlo nájde, prvá štartovacia slučka sa ukončí a začne sa hlavná funkčná slučka robota. Táto hlavná slučka je dosť zložitá, pretože zakaždým robot potrebuje zistiť, či sa pred ním nachádza prekážka alebo hrana. Hlavnou myšlienkou je, že robot postupuje podľa tlačidla tým, že ho nájde a zakaždým stratí. Použitím dvoch IR senzorov môžeme rozlíšiť tri situácie:

  • rozdiel medzi infračerveným svetlom detegovaným ľavým a pravým senzorom je väčší ako určitá prahová hodnota a je tu tlačidlo.
  • rozdiel v infračervenom svetle je menší ako prahová hodnota a pred robotom je tlačidlo.
  • rozdiel v infračervenom svetle je menší ako prahová hodnota a pred robotom nie je žiadne tlačidlo.

Rutinná dráha funguje nasledovne: keď je tlačidlo detekované, robot sa pohybuje smerom k tlačidlu otáčaním v rovnakom smere, v akom sa otáčal (pomocou premennej pripomienky) a súčasne sa posunie trochu dopredu. Ak sa robot otočí príliš ďaleko, tlačidlo sa znova stratí a v tomto mieste si robot pamätá, že sa musí otočiť iným smerom. To sa robí aj vtedy, keď sa trochu pohnete dopredu. Robot tým neustále otáča doľava a doprava, ale medzitým stále postupuje smerom k tlačidlu. Zakaždým, keď robot nájde tlačidlo, len sa otáča, kým ho nestratí. V takom prípade sa začne pohybovať iným smerom. Všimnite si rozdielu vo funkciách, ktoré sa používajú v štartovacej slučke a hlavnej slučke: Štartovacia slučka používa „turnleft ()“alebo „turnright ()“, zatiaľ čo hlavná slučka používa „moveleft ()“a „moveright ()“. Funkcie pohybu vľavo/vpravo robota nielen otáčajú, ale zároveň ho nútia pohybovať sa dopredu.

/ * Funkčná slučka ---------------------------- Tu je iba rutina sledovania */

int stratené = 0; // Ak sa stratí = 0, tlačidlo sa nájde, ak sa stratí = 1, tlačidlo sa stratí neplatná slučka () {if (isedgeleft () || isedgeright ()) {

if (! isobstacle ()) {

pohyb vpred (rýchlosť); oneskorenie (5); } else {avoid_obstacle (pripomienka); } else {if (připomenutí == 1 && lost == 1) {// Otáčali sme doľava stoppeed (); if (! isobstacleright ()) {moveright (rýchlosť); // Otočte sa a nájdite tlačidlo} else {avoid_obstacle (pripomienka); } pripomenúť = 2; } else if (pripomenutie == 2 && lost == 1) {stoppeed (); if (! isobstacleleft ()) {moveleft (rýchlosť); // Zabočili sme doprava} else {avoid_obstacle (pripomienka); } pripomenutie = 1; } else if (lost == 0) {if (připomenutí == 1) {// Odbočili sme doľava, ak (! isobstacleleft ()) {moveleft (rýchlosť); // Odbočili sme doprava} else {stoppeed (); Vyhnite sa prekážke (pripomenúť); } //} else if (pripomenutie == 2) {if (! isobstacleright ()) {moveright (speed); // Otočte sa a nájdite tlačidlo} else {stoppeed (); Vyhnite sa prekážke (pripomenúť); }}} oneskorenie (10); stratené = 0; }} //}}

Teraz je uvedené malé vysvetlenie dvoch najkomplexnejších rutín:

Vyhnite sa okrajom

Protokol na vyhýbanie sa okrajom je definovaný vo funkcii nazývanej „edgeDetection ()“, ktorá je zapísaná v podsoubore „pohyb“. Tento protokol sa spolieha na skutočnosť, že robot by sa mal s okrajom stretnúť iba vtedy, keď dorazil do cieľa: tlačidlo. Akonáhle robot zistí hranu, prvá vec, ktorú urobí, je posunúť sa o kúsok späť, aby bol v bezpečnej vzdialenosti od okraja. Akonáhle je to hotové, robot počká 2 sekundy. Ak niekto v priebehu týchto dvoch sekúnd stlačí tlačidlo na prednej strane robota, robot vie, že sa dostal k osobe, ktorá chce maslo, otvorí priehradku na maslo a predloží maslo. V tomto mieste si niekto môže z robota vziať maslo. Po niekoľkých sekundách bude robot unavený čakaním a iba zatvorí veko s maslom. Akonáhle je veko zatvorené, robot spustí slučku štartéra a hľadá ďalšie tlačidlo. Ak sa stane, že robot narazí na hranu pred dosiahnutím cieľa a tlačidlo na prednej strane robota nestlačí, robot neotvorí veko na maslo a okamžite spustí slučku štartéra.

Vyhnite sa prekážkam

V sub-súbore "pohyb" sa nachádza aj funkcia avoid_obstacle (). Najťažšou vecou pri vyhýbaní sa prekážkam je skutočnosť, že robot má dosť veľké mŕtve miesto. Ultrazvukový senzor je umiestnený v prednej časti robota, čo znamená, že dokáže detekovať prekážky, ale nevie, kedy ním prechádza. Na vyriešenie tohto problému sa používa nasledujúci princíp: Akonáhle robot narazí na prekážku, pomocou remingovej premennej sa otočí opačným smerom. Robot sa tak vyhne nárazu na prekážku. Robot sa otáča, kým ultrazvukový senzor už nezistí prekážku. Počas otáčania robota sa počítadlo zvyšuje, až kým prekážka nie je rozpoznaná. Toto počítadlo potom poskytne aproximáciu dĺžky prekážky. Pohybom potom vpred a súčasne znížením počítadla sa dá prekážke vyhnúť. Akonáhle počítadlo dosiahne 0, funkciu Starter je možné znova použiť na premiestnenie tlačidla. Robot samozrejme vykonáva funkciu štartéra otáčaním v smere, v ktorom si pamätal, že ide, skôr ako narazil na prekážku (opäť pomocou premennej pripomienky).

Teraz, keď kódu úplne rozumiete, môžete ho začať používať!

Uistite sa, že prahy prispôsobíte svojmu prostrediu (napríklad IR odraz je na bielych stoloch vyšší) a prispôsobíte rôzne parametre svojim potrebám. Tiež by sa mala venovať veľká pozornosť napájaniu rôznych modulov. Je dôležité, aby servomotory neboli napájané 5V portom Arduino, pretože odoberajú veľa prúdu (mohlo by to poškodiť mikrokontrolér). Ak je pre snímače použitý rovnaký zdroj energie ako pre napájanie serva, môžu nastať problémy s meraním.

Odporúča: