Tartalomjegyzék:

A vaj robot: az Arduino robot egzisztenciális válsággal: 6 lépés (képekkel)
A vaj robot: az Arduino robot egzisztenciális válsággal: 6 lépés (képekkel)

Videó: A vaj robot: az Arduino robot egzisztenciális válsággal: 6 lépés (képekkel)

Videó: A vaj robot: az Arduino robot egzisztenciális válsággal: 6 lépés (képekkel)
Videó: Большие Боссы | полный фильм 2024, Július
Anonim
Image
Image

Ez a projekt a "Rick and Morty" című animációs sorozaton alapul. Az egyik epizódban Rick robotot készít, amelynek egyetlen célja a vaj elhozása. A Bruface (Brüsszeli Mérnöki Kar) hallgatóiként egy feladatot kaptunk a mechatronikai projekthez, melynek célja egy robot építése egy javasolt téma alapján. Ennek a projektnek a feladata: Készítsen robotot, amely csak vajat szolgál fel. Létezhet egzisztenciális válság. Természetesen a Rick and Morty epizód robotja meglehetősen összetett robot, és néhány egyszerűsítést meg kell tenni:

Mivel egyetlen célja a vaj elhozása, vannak egyszerűbb alternatívák. Ahelyett, hogy a robot kinézné és megragadná a vajat, mielőtt a megfelelő személyhez juttatná, a robot folyamatosan hordhatja a vajat. A fő ötlet tehát egy olyan szekér készítése, amely a vajat a szükséges helyre szállítja.

A vaj szállításán kívül a robotnak tudnia kell, hogy hova kell hoznia a vajat. Az epizódban Rick a hangjával hívja és parancsolja a robotnak. Ez drága hangfelismerő rendszert igényel, és túl bonyolult lenne. Ehelyett az asztalnál mindenki kap egy gombot: ha ezt a gombot aktiválja, a robot megtalálja ezt a gombot, és elindulhat felé.

Összefoglalva, a robotnak meg kell felelnie a következő követelményeknek:

  • Biztonságosnak kell lennie: el kell kerülnie az akadályokat, és meg kell akadályoznia az asztal leesését;
  • A robotnak kicsinek kell lennie: az asztalon korlátozott a hely, és senki sem szeretne olyan robotot, amely vajat szolgál fel, de fele akkora, mint maga az asztal;
  • A robot működése nem függhet az asztal méretétől vagy alakjától, így különböző asztalokon használható;
  • El kell juttatnia a vajat az asztalhoz.

1. lépés: Fő koncepció

A korábban említett követelmények különböző technikákkal teljesíthetők. A fő tervezéssel kapcsolatos döntéseket ebben a lépésben ismertetjük. Ezen ötletek megvalósításának részletei a következő lépésekben találhatók.

Feladatának teljesítéséhez a robotnak a cél eléréséig mozognia kell. Figyelembe véve a robot alkalmazását, egyértelmű, hogy a kerekeket a "járó" mozgás helyett jobb mozgatni. Mivel az asztal sík felület, és a robot nem tud nagy sebességet elérni, két működtetett kerék és egy görgőgolyó a legegyszerűbb és legkönnyebben vezérelhető megoldás. A működtetett kerekeket két motorral kell működtetni. A motoroknak nagy nyomatékkal kell rendelkezniük, de nem kell nagy fordulatszámot elérniük, ezért folyamatos szervomotorokat fognak használni. A szervomotorok másik előnye az Arduino használatának egyszerűsége.

Az akadályok észlelése ultrahangos érzékelővel történhet, amely méri a távolságot, és szervomotorhoz csatlakoztatva választja ki a mérés irányát. Az élek LDR érzékelők segítségével észlelhetők. Az LDR érzékelők használatához olyan készüléket kell felépíteni, amely led fényt és LDR érzékelőt is tartalmaz. Az LDR érzékelő méri a visszavert fényt, és valamilyen távolságérzékelőnek tekinthető. Ugyanez az elv létezik az infravörös fénynél is. Vannak infravörös közelségérzékelők, amelyek digitális kimenettel rendelkeznek: zárva vagy nem közel. A robotnak pontosan erre van szüksége az élek észleléséhez. A két élérzékelő kombinálásával, mint két rovarantenna és egy működtetett ultrahangos érzékelő, a robotnak képesnek kell lennie elkerülni az akadályokat és az éleket.

A gombérzékelés infravörös érzékelők és LED -ek használatával is elvégezhető. Az IR előnye, hogy láthatatlan, így használata nem zavarja az asztalnál ülőket. Lézereket is lehet használni, de akkor a fény látható és veszélyes is lehet, ha valaki más szemébe irányítja a lézert. Ezenkívül a felhasználónak csak vékony lézersugárral kell megcéloznia a robot érzékelőit, ami elég bosszantó lenne. Azáltal, hogy a robotot két IR érzékelővel látja el, és a gombot infravörös leddel építi fel, a robot tudja, melyik irányba kell haladnia, követve az IR-fény intenzitását. Ha nincs gomb, a robot addig fordulhat, amíg az egyik LED el nem veszi az egyik gomb jelét.

A vajat a robot tetején lévő rekeszbe tesszük. Ez a rekesz egy dobozból és egy nyitott fedélből állhat a doboz kinyitásához. A fedél kinyitásához és az ultrahangos érzékelő mozgatásához az akadályok felderítéséhez és észleléséhez két motorra van szükségünk, és ehhez a nem folyamatos szervomotorok jobban illeszkednek, mivel a motoroknak egy bizonyos helyzetben kell lenniük, és meg kell tartaniuk ezt a helyzetet.

A projekt további jellemzője volt, hogy robothanggal kölcsönhatásba lépett a külső környezettel. A zümmögő egyszerű és erre a célra igazított, de nem használható bármikor, mert a kikeményedés nagy.

A projekt fő nehézségei a kódoláson alapulnak, mivel a mechanikus rész meglehetősen egyszerű. Sok esetet figyelembe kell venni annak elkerülése érdekében, hogy a robot elakadjon, vagy valami nem kívánt dolgot tegyen. A fő problémák, amelyeket meg kell oldanunk, az az, hogy egy akadály miatt elveszítjük az infravörös jelet, és megállunk, amikor megérkezik a gombhoz!

2. lépés: Anyagok

Mechanikus alkatrészek

  • 3D nyomtató és lézervágó gép

    • A 3D nyomtatáshoz PLA -t használnak, de használhat ABS -t is
    • Egy 3 mm -es nyír rétegelt lemezből készült tányért használnak lézervágáshoz, mivel ez lehetővé teszi a későbbi módosítások egyszerű elvégzését, a plexiüveget is lehet használni, de nehezebb módosítani a lézervágás után anélkül, hogy megsemmisítenénk
  • Csavarok, anyák, alátétek

    A legtöbb alkatrészt M3 gombfejű csavarok, alátétek és anyák segítségével tartják össze, de némelyikhez M2 vagy M4 csavar szükséges. A csavarok hossza 8-12 mm

  • NYÁK távtartók, 25 mm és 15 mm
  • 2 szervomotor kompatibilis kerekekkel
  • Néhány vastag fémhuzal 1-2 mm átmérőjű

Elektronikus részek

  • Mikrokontroller

    1 arduino UNO tábla

  • Szervo motorok

    • 2 Nagy szervomotorok: Feetech folyamatos 6 kg 360 fok
    • 2 mikro szervomotor: Feetech FS90
  • Érzékelők

    • 1 Ultrahangos érzékelő
    • 2 IR közelségérzékelő
    • 2 IR fotodióda
  • Akkumulátorok

    • 1 db 9V -os elemtartó + akkumulátor
    • 1 db 4AA méretű elemtartó + elem
    • 1 db 9V -os elemdoboz + akkumulátor
  • További alkatrészek

    • Néhány ugráló vezeték, huzal és forrasztólap
    • Néhány ellenállás
    • 1 IR LED
    • 3 kapcsoló
    • 1 hangjelző
    • 1 gomb
    • 1 Arduino -9V akkumulátor csatlakozó

3. lépés: Az elektronika tesztelése

Az elektronika tesztelése
Az elektronika tesztelése
Az elektronika tesztelése
Az elektronika tesztelése

A gomb létrehozása:

A gombot egyszerűen egy kapcsoló, egy infravörös LED és egy 220 Ohmos soros ellenállás teszi lehetővé, amelyet 9 V -os elem táplál. Ez egy 9 V -os elemcsomagba van helyezve a kompakt és tiszta kialakítás érdekében.

Az infravörös vevő modulok létrehozása:

Ezek a modulok átmenő lyukú forrasztólapokkal készülnek, amelyeket később csavarokkal rögzítenek a robothoz. Ezeknek a moduloknak az áramköreit az általános vázlatok mutatják be. Az elv az infravörös fény intenzitásának mérése. A mérések javítása érdekében (zsugorcsövekkel készült) kollimátorokkal egy adott érdeklődési irányra lehet összpontosítani.

A projekt különböző követelményeit elektronikus eszközök segítségével kell teljesíteni. Az eszközök számát korlátozni kell a viszonylag alacsony összetettség érdekében. Ez a lépés tartalmazza a bekötési rajzokat és minden kódot az összes alkatrész külön teszteléséhez:

  • Folyamatos szervomotorok;
  • Ultrahangos érzékelő;
  • Nem folyamatos szervomotorok;
  • Berregő;
  • IR gomb irányjelzés;
  • Élészlelés közelségérzékelőkkel;

Ezek a kódok segíthetnek az alkatrészek megértésében az elején, de nagyon hasznosak a későbbi szakaszok hibakeresésében is. Ha bizonyos probléma merül fel, a hiba könnyebben észlelhető az összes komponens külön tesztelésével.

4. lépés: 3D nyomtatott és lézervágott darabok tervezése

3D nyomtatott és lézervágott darabok tervezése
3D nyomtatott és lézervágott darabok tervezése
3D nyomtatott és lézervágott darabok tervezése
3D nyomtatott és lézervágott darabok tervezése
3D nyomtatott és lézervágott darabok tervezése
3D nyomtatott és lézervágott darabok tervezése

Lézervágott darabok

A szerelvény három fő vízszintes lemezből áll, amelyeket PCB -távtartók tartanak össze, hogy nyitott kialakítást kapjanak, és szükség esetén könnyen hozzáférjenek az elektronikához.

Ezeken a lemezeken ki kell vágni a szükséges lyukakat, hogy a távtartókat és más alkatrészeket csavarni lehessen a végső szereléshez. Elsősorban mindhárom lemezen lyukak vannak ugyanazon a helyen a távtartók számára, és speciális lyukak vannak az elektronikához rögzítve. Vegye figyelembe, hogy a középső lemezen van egy lyuk a vezetékek átvezetéséhez a közepén.

A kisebb darabokat a nagy szervó méreteire vágják, hogy rögzítsék őket a szerelvényhez.

3D nyomtatott darabok

A lézervágáson kívül néhány darabot 3D -ben kell nyomtatni:

  • Az ultrahangos érzékelő támogatása, amely összekapcsolja azt egy mikroszervo motorkarral
  • A görgő kerék és a két infravörös élérzékelő támogatása. Az infravörös érzékelők darabjának doboz alakú végeinek különleges kialakítása képernyőként szolgál, hogy elkerülje az interferenciát az infravörös jelet kibocsátó gomb és az infravörös érzékelők között, amelyeknek csak arra kell összpontosítaniuk, ami a földön történik.
  • A mikroszervo motor támasza kinyitja a fedelet
  • És végül maga a fedél, amely két darabból készült, hogy nagyobb működési szögű legyen, elkerülve az ütközést a fedelet nyitó mikro szervomotorral:

    • Az alsó, amelyet a felső lemezhez rögzítenek
    • És a tetejét, amely csuklópánttal kapcsolódik az aljához, és a szervó működteti egy vastag fémhuzal segítségével. Úgy döntöttünk, hogy egy kis személyiséget adunk a robotnak azzal, hogy fejet adunk neki.

Miután az összes darabot megtervezték, és a fájlokat a használt gépeknek megfelelő formátumban exportálták, a darabok valóban elkészíthetők. Ne feledje, hogy a 3D nyomtatás sok időt vesz igénybe, különösen a fedél felső részének méreteivel. Egy -két napra van szüksége az összes darab kinyomtatásához. A lézeres vágás azonban csak néhány perc.

Az összes SOLIDWORKS-fájl megtalálható a tömörített mappában.

5. lépés: Összeszerelés és bekötés

Image
Image
Összeszerelés és huzalozás
Összeszerelés és huzalozás
Összeszerelés és huzalozás
Összeszerelés és huzalozás
Összeszerelés és huzalozás
Összeszerelés és huzalozás

A szerelvény a huzalozás és az alkatrészek csavarozásának keveréke lesz, alulról felfelé.

Alsó lemez

Az alsó lemezt a 4AA elemcsomag, a szervomotorok, a nyomtatott rész (a golyós görgő rögzítése a lemez alá), a két élérzékelő és 6 férfi-női távtartó tartalmazza.

Középső lemez

Ezután a középső lemezt lehet felszerelni, összenyomva a szervo motorokat a két lemez között. Ezt a lemezt ezután rögzíthetjük úgy, hogy egy másik távtartó készletet teszünk rá. Néhány kábel átvezethető a középső lyukon.

Az ultrahangos modul csatlakoztatható egy nem folyamatos szervóhoz, amelyet a középső lemezen rögzítenek az Arduino-val, a 9 V-os akkumulátorral (az arduino-t táplálja) és a két infravörös vevőmodullal a robot elején. Ezek a modulok átmenő lyukú forrasztólapokkal készülnek, és csavarokkal vannak rögzítve a lemezhez. Ezeknek a moduloknak az áramköreit az általános vázlatok mutatják be.

Felső lemez

A szerelvény ezen részén a kapcsolók nincsenek rögzítve, de a robot már mindent megtehet, kivéve a fedelet igénylő műveleteket, így lehetővé teszi számunkra, hogy valamilyen tesztet végezzünk a küszöb korrigálása, a mozgás kódjának adaptálása és a könnyű hozzáférés az arduino portjaihoz.

Ha mindez megvalósult, a felső lap távtartókkal rögzíthető. Az utolsó komponensek, amelyek a két kapcsoló, a gomb, a szervó, a zümmögő és a fedélrendszer, végül rögzíthetők a felső lemezre a szerelés befejezéséhez.

Az utolsó dolog, amit tesztelni és korrigálni kell, az a szervó szöge, hogy megfelelően nyissa ki a fedelet.

Az élérzékelők küszöbértékét a mellékelt potenciométerrel (lapos csavarhúzóval) hozzá kell igazítani a különböző asztalfelületekhez. A fehér asztalnak alacsonyabb küszöbértékkel kell rendelkeznie, mint például a barna asztalnak. Az érzékelők magassága is befolyásolja a szükséges küszöbértéket.

Ennek a lépésnek a végén az összeszerelés befejeződik, és az utolsó fennmaradó rész a hiányzó kódok.

6. lépés: Kódolás: mindent össze kell rakni

A robot működéséhez szükséges összes kód megtalálható a letölthető tömörített fájlban. A legfontosabb a "fő" kód, amely tartalmazza a robot beállítását és működési ciklusát. A többi funkció nagy része alfájlokba van írva (szintén a tömörített mappába). Ezeket az alfájlokat ugyanabban a mappában kell menteni (amelyet "főnek" neveznek), mint a fő szkriptet, mielőtt feltöltené az Arduino-ba

Először a robot általános sebességét határozzák meg az "emlékeztet" változóval együtt. Ez az "emlékeztető" olyan érték, amely emlékszik arra, hogy a robot melyik irányba fordult. Ha "emlékeztet = 1", akkor a robot balra kanyarodik, ha "emlékeztet = 2", akkor a robot jobbra fordul.

int sebesség = 9; // A robot általános sebessége

int emlékeztető = 1; // Kezdeti irány

A robot beállításakor a program különböző alfájljai inicializálódnak. Ezekben az alfájlokban a motorok, érzékelők,… vezérlésének alapvető funkciói vannak leírva. Ha a beállításban inicializálja őket, akkor az egyes fájlokban leírt funkciók használhatók a fő hurokban. Az r2D2 () funkció aktiválásával a robot olyan zajt ad, mint a Star Wars film franchise -ból származó R2D2 robot. elindul. Itt az r2D2 () funkció le van tiltva, hogy megakadályozza a zümmögő túl nagy áramfelvételét.

// Beállítás @ visszaállítás // ----------------

void setup () {initialize_IR_sensors (); initialize_obstacles_and_edges (); initialize_movement (); initialize_lid (); initialize_buzzer (); // r2D2 (); int emlékeztet = 1; // kezdeti irány Starter (emlékeztet); }

A beállításban először a Starter (emlékeztető) funkciót hívják meg. Ezzel a funkcióval a robot megfordul, és megkeresi az egyik gomb infravörös jelét. Miután megtalálta a gombot, a program kilép a Starter funkcióból, a „cond” változót hamisra változtatva. A robot forgása során tisztában kell lennie a környezetével: észlelnie kell az éleket és az akadályokat. Ezt minden alkalommal ellenőrzik, mielőtt tovább fordulna. Amint a robot akadályt vagy élt észlel, végrehajtásra kerül az akadályok vagy élek elkerülésére szolgáló protokoll. Ezeket a protokollokat a lépés későbbi részében ismertetjük. A Starter függvénynek van egy változója, amely a korábban tárgyalt emlékeztető változó. Az emlékeztető érték megadásával az Indító funkcióval a robot tudja, hogy melyik irányba kell fordulnia a gomb kereséséhez.

// Kezdő hurok: Forduljon meg, és keresse meg a gombot // ------------------------------------ ----------------

void Starter (int emlékeztető) {if (isedgeleft () || isedgeright ()) {// Élek észleléseDetected (emlékeztet); } else {bool cond = true; while (cond == true) {if (buttonleft () == false && buttonright () == false && isButtonDetected () == true) {cond = false; } else {if (emlékeztet == 1) {// Balra kanyarodtunk, ha (isobstacleleft ()) {stoppeed (); välttä_obstacle (emlékeztet); } else if (isedgeleft () || isedgeright ()) {// Élek észleléseDetected (emlékeztet); } else {fordulás (sebesség); }} else if (emlékeztet == 2) {if (isobstacleright ()) {stoppeed (); välttä_obstacle (emlékeztet); } else if (isedgeleft () || isedgeright ()) {// Élek észleléseDetected (emlékeztet); } else {forduló (sebesség); }}}}}}

Ha a robot megtalálja a gombot, akkor az első indító hurok kilép, és a robot fő, funkcionális ciklusa kezdődik. Ez a fő hurok meglehetősen bonyolult, mivel a robotnak minden alkalommal észlelnie kell, hogy van -e akadály vagy él előtte. A fő ötlet az, hogy a robot követi a gombot, és megtalálja, és minden alkalommal elveszíti. Két IR érzékelő használatával három helyzetet különböztethetünk meg:

  • a bal és jobb érzékelő által észlelt infravörös fény közötti különbség nagyobb, mint egy bizonyos küszöbérték, és van egy gomb.
  • az infravörös fényben a különbség kisebb, mint a küszöb, és egy gomb van a robot előtt.
  • az infravörös fény különbsége kisebb, mint a küszöbérték, és a robot előtt nincs NO gomb.

A nyomkövetési rutin a következőképpen működik: amikor a gombot észleli, a robot a gomb felé mozdul el, ugyanabba az irányba forgatva (az emlékeztető változó segítségével), és ezzel egyidejűleg egy kicsit előre. Ha a robot túl messzire fordul, a gomb ismét elveszik, és ekkor a robot emlékezik arra, hogy a másik irányba kell fordulnia. Ez is történik, miközben egy kicsit haladunk előre. Ezzel a robot folyamatosan balra fordul és jobbra fordul, de közben még mindig a gomb felé halad. Minden alkalommal, amikor a robot megtalálja a gombot, addig forog, amíg el nem veszíti, ebben az esetben a másik irányba kezd el mozogni. Figyelje meg a Starter ciklusban és a főhurokban használt funkciók közötti különbséget: "turnleft ()" vagy "turnright ()", míg a fő hurok a "moveleft ()" és "moveright ()" értékeket használja. A balra/jobbra léptető funkciók nem csak arra késztetik a robotot, hogy egyszerre forduljon előre.

/ * Funkcionális hurok ---------------------------- Itt csak a nyomkövetési rutin van */

int elveszett = 0; // Ha elveszett = 0 a gomb megtalálható, ha elveszett = 1, akkor a gomb elveszett void loop () {if (isedgeleft () || isedgeright ()) {

if (! isobstacle ()) {

haladás előre (sebesség); késleltetés (5); } else {elkerül_obstacle (emlékeztet); } else {if (emlékeztet == 1 && elveszett == 1) {// Balra fordultunk stoppeed (); if (! isobstacleright ()) {moveright (sebesség); // Forduljon meg, hogy megtalálja a gombot} else {elkerül_obstacle (emlékeztet); } emlékeztet = 2; } else if (emlékeztet == 2 && elveszett == 1) {stoppeed (); if (! isobstacleleft ()) {moveleft (sebesség); // Jobbra kanyarodtunk} else {elkerül_obstacle (emlékeztet); } emlékeztet = 1; } else if (elveszett == 0) {if (emlékeztet == 1) {// Balra kanyarodtunk, ha (! isobstacleleft ()) {moveleft (speed); // Jobbra kanyarodtunk} else {stoppeed (); välttä_obstacle (emlékeztet); } //} else if (emlékeztet == 2) {if (! isobstacleright ()) {moveright (sebesség); // Forduljon meg, hogy megtalálja a gombot} else {stoppeed (); välttä_obstacle (emlékeztet); }}} késleltetés (10); elveszett = 0; }} //}}

Most adunk egy kis magyarázatot a két legbonyolultabb rutinra:

Kerülje a széleket

Az élek elkerülésére szolgáló protokollt az "edgeDetection ()" nevű függvény határozza meg, amely a "motion" alfájlba van írva. Ez a protokoll arra a tényre támaszkodik, hogy a robot csak akkor találkozzon egy éllel, amikor elérte célját: a gombot. Miután a robot észleli az élt, az első dolga egy kicsit hátrébb lépni, hogy biztonságos távolságra legyen a széltől. Ha ez megtörtént, a robot 2 másodpercet vár. Ha valaki ebben a két másodpercben megnyomja a robot elején lévő gombot, a robot tudja, hogy elérte a vajat kérő személyt, és kinyitja a vajtartót, és bemutatja a vajat. Ekkor valaki vajat vehet a robottól. Néhány másodperc múlva a robot belefárad a várakozásba, és csak lezárja a vaj fedelét. A fedél bezárása után a robot végrehajtja az indító hurkot, és keres egy másik gombot. Ha megtörténik, hogy a robot találkozik az élekkel, mielőtt eléri célját, és a robot elején lévő gombot nem nyomja meg, akkor a robot nem nyitja ki a vaj fedelét, és azonnal végrehajtja az indítóhurkot.

Kerülje az akadályokat

Az izvair_obstacle () függvény szintén a "mozgás" alfájlban található. Az akadályok elkerülése során az a nehéz, hogy a robotnak elég nagy vakfoltja van. Az ultrahangos érzékelőt a robot elejére helyezték, ami azt jelenti, hogy képes észlelni az akadályokat, de nem tudja, mikor halad el mellette. Ennek megoldására a következő elvet alkalmazzák: Ha a robot akadályba ütközik, a reming változót használja a másik irányba forduláshoz. Így a robot elkerülheti az akadály ütését. A robot addig forog, amíg az ultrahangos érzékelő már nem észleli az akadályt. A robot forgása alatt a számlálót addig növelik, amíg az akadály már nem észlelhető. Ez a számláló ekkor közelíti az akadály hosszát. Ha továbblép, majd előre, és ezzel egyidejűleg csökkenti a számlálót, az akadály elkerülhető. Amint a számláló eléri a 0 értéket, az Indító funkció ismét használható a gomb áthelyezéséhez. Természetesen a robot az Indító funkciót úgy hajtja végre, hogy abba az irányba fordul, amire emlékezett, mielőtt az akadályba ütközött (ismét az emlékeztető változó használatával).

Most, hogy teljesen megértette a kódot, elkezdheti használni!

Ügyeljen arra, hogy a küszöbértékeket a környezetéhez igazítsa (például az IR -tükröződés nagyobb a fehér asztalokon), és a különböző paramétereket az Ön igényeihez igazítsa. Ezenkívül nagy figyelmet kell fordítani a különböző modulok áramellátására. Rendkívül fontos, hogy a szervomotorokat ne az Arduino 5V portja táplálja, mivel nagy áramot vesznek fel (ez károsíthatja a mikrokontrollert). Ha ugyanazt az áramforrást használják az érzékelőkhöz, mint a szervók tápellátását, akkor bizonyos mérési problémák merülhetnek fel.

Ajánlott: