Sisukord:

Või robot: eksistentsiaalse kriisiga Arduino robot: 6 sammu (piltidega)
Või robot: eksistentsiaalse kriisiga Arduino robot: 6 sammu (piltidega)

Video: Või robot: eksistentsiaalse kriisiga Arduino robot: 6 sammu (piltidega)

Video: Või robot: eksistentsiaalse kriisiga Arduino robot: 6 sammu (piltidega)
Video: Riigikogu 23.01.2024 2024, Juuli
Anonim
Image
Image

See projekt põhineb animeeritud sarjal "Rick and Morty". Ühes episoodis teeb Rick roboti, mille ainus eesmärk on või toomine. Bruface'i (Brüsseli tehnikateaduskond) üliõpilastena on meil mehhatroonika projekti jaoks ülesanne, milleks on soovitatud teemal põhineva roboti ehitamine. Selle projekti ülesanne on: Tehke robot, mis serveerib ainult võid. Sellel võib olla eksistentsiaalne kriis. Loomulikult on Ricki ja Morty episoodi robot üsna keeruline robot ja seda tuleb lihtsustada:

Kuna selle ainus eesmärk on tuua võid, on ka lihtsamaid alternatiive. Selle asemel, et robot välja näha ja võid haarata, võib robot enne, kui see õige inimeseni jõuab, kanda võid kogu aeg. Põhiidee on seega teha käru, mis transpordib või sinna, kus see peab olema.

Lisaks või transportimisele peab robot teadma, kuhu ta võib või tuua. Jaos kasutab Rick oma häält robotile helistamiseks ja käskimiseks. See nõuab kallist kõnetuvastussüsteemi ja oleks keeruline. Selle asemel saavad kõik lauas viibijad nupu: kui see nupp on aktiveeritud, saab robot selle nupu üles leida ja selle poole liikuda.

Kokkuvõtteks peab robot vastama järgmistele nõuetele:

  • See peab olema ohutu: see peab vältima takistusi ja vältima laua kukkumist;
  • Robot peab olema väike: laual on ruumi vähe ja keegi ei tahaks robotit, mis serveerib võid, kuid on poole suurem kui laud ise;
  • Roboti töö ei saa sõltuda laua suurusest või kujust, nii et seda saab kasutada erinevatel laudadel;
  • See peab tooma või lauale õigele inimesele.

Samm: põhikontseptsioon

Eespool nimetatud nõudeid saab täita erinevate tehnikate abil. Selles etapis selgitatakse põhikujunduse kohta tehtud otsuseid. Nende ideede rakendamise üksikasjad leiate järgmistest sammudest.

Oma kohustuse täitmiseks peab robot liikuma, kuni sihtkoht on saavutatud. Arvestades roboti rakendust, on lihtne, et rataste kasutamine "kõndimise" asemel on parem panna see liikuma. Kuna laud on tasane pind ja robot ei saavuta väga suuri kiirusi, on kaks käivitatavat ratast ja üks rattapall kõige lihtsam ja hõlpsamini juhitav lahendus. Käivitatavad rattad peavad töötama kahe mootoriga. Mootoritel peab olema suur pöördemoment, kuid nad ei pea saavutama suurt kiirust, seetõttu kasutatakse pidevaid servomootoreid. Servomootorite teine eelis on Arduinoga kasutamise lihtsus.

Takistuste tuvastamiseks saab kasutada kaugust mõõtvat ultraheli andurit, mis on servomootori külge kinnitatud, et valida mõõtmise suund. Servi saab tuvastada LDR -andurite abil. LDR -andurite kasutamiseks on vaja ehitada seade, mis sisaldab nii LED -valgust kui ka LDR -andurit. LDR -andur mõõdab peegeldunud valgust ja seda võib vaadelda kui mingit kaugusandurit. Sama põhimõte kehtib ka infrapunavalguse kohta. On olemas mõned infrapuna lähedusandurid, millel on digitaalne väljund: sulgeda või mitte sulgeda. See on täpselt see, mida robot vajab servade tuvastamiseks. Kombineerides kaks servaandurit, mis on paigutatud nagu kaks putukaantenni ja üks aktiveeritud ultraheliandur, peaks robot suutma vältida takistusi ja servi.

Nuppu saab tuvastada ka IR -andurite ja LED -ide abil. Infrapuna eelis on see, et see on nähtamatu, mis muudab selle kasutamise lauas olevate inimeste jaoks häirimatuks. Kasutada võiks ka lasereid, kuid siis oleks valgus nähtav ja ohtlik ka siis, kui keegi suunab laseri teise inimese silma. Samuti peaks kasutaja robotil olevaid andureid sihtima ainult õhukese laserkiirega, mis oleks üsna tüütu. Varustades roboti kahe IR-anduriga ja konstrueerides nupu IR-valgusdioodiga, teab robot, mis suunas ta peab minema, järgides IR-valguse intensiivsust. Kui nuppu pole, saab robot ümber pöörata, kuni üks LED -idest võtab signaali ühelt nupult.

Või pannakse roboti ülaossa lahtrisse. See sektsioon võib koosneda karbist ja kaane avamiseks avatavast kaasast. Kaane avamiseks ja ultrahelianduri liigutamiseks takistuste skannimiseks ja avastamiseks vajame kahte mootorit ning selleks on mittepidevad servomootorid paremini kohandatud, kuna mootorid peavad teatud asendis liikuma ja seda positsiooni säilitama.

Projekti lisavõimalus oli suhelda väliskeskkonnaga roboti häälega. Sumin on lihtne ja selleks otstarbeks kohandatud, kuid seda ei saa igal ajal kasutada, kuna kõvenditõmme on kõrge.

Projekti peamised raskused sõltuvad kodeerimisest, kuna mehaaniline osa on üsna lihtne. Paljusid juhtumeid tuleb arvesse võtta, et vältida roboti kinni jäämist või midagi soovimatut. Peamised probleemid, mida peame lahendama, on IR -signaali kaotamine takistuse tõttu ja peatumine, kui see nupule jõuab!

2. samm: materjalid

Mehaanilised osad

  • 3D -printer ja laserlõikusmasin

    • 3D -printimisel kasutatakse PLA -d, kuid võite kasutada ka ABS -i
    • Laserlõikamiseks kasutatakse 3 mm kasevineerist plaati, kuna see võimaldab hiljem hõlpsalt muudatusi teha, samuti saab kasutada pleksiklaasi, kuid seda on raskem muuta, kui see on laserlõigatud ilma seda hävitamata
  • Poldid, mutrid, seibid

    Enamikku komponente hoitakse koos, kasutades M3 nööppea polte, seibisid ja mutreid, kuid mõned neist nõuavad M2 või M4 poltide komplekti. Poltide pikkus on vahemikus 8-12 mm

  • PCB -vaheseinad, 25 mm ja 15 mm
  • 2 ühilduvate ratastega servomootoreid
  • Mingi paks metalltraat läbimõõduga umbes 1-2 mm

Elektroonilised osad

  • Mikrokontroller

    1 arduino UNO plaat

  • Servomootorid

    • 2 suurt servomootorit: pidev 6 kg 360 kraadi
    • 2 mikro servomootorit: Feetech FS90
  • Andurid

    • 1 ultraheli andur
    • 2 IR lähedusandurit
    • 2 IR -fotodioodi
  • Patareid

    • 1 9V patareipesa + aku
    • 1 4AA patareipesa + patareid
    • 1 9V akukarp + aku
  • Lisakomponendid

    • Mõned hüppavad juhtmed, juhtmed ja jootmisplaadid
    • Mõned takistid
    • 1 IR -LED
    • 3 lülitit
    • 1 helisignaal
    • 1 nupp
    • 1 Arduino kuni 9V aku pistik

3. samm: elektroonika testimine

Elektroonika testimine
Elektroonika testimine
Elektroonika testimine
Elektroonika testimine

Nupu loomine:

Nuppu valmistab lihtsalt lüliti, infrapuna -LED ja 220 -oomine takisti järjestikku, mida toidab 9 V aku. See on kompaktse ja puhta disaini jaoks paigutatud 9 V akupakki.

Infrapuna vastuvõtja moodulite loomine:

Need moodulid on valmistatud läbimõõduga jootmisplaatidega, mis hiljem kinnitatakse kruvidega roboti külge. Nende moodulite ahelad on kujutatud üldistes skeemides. Põhimõte on mõõta infrapunavalguse intensiivsust. Mõõtmiste parandamiseks võib kasutada kollimaatoreid (valmistatud kokkutõmbumistorudega), et keskenduda teatud huvisuunale.

Projekti erinevad nõuded tuleb täita elektrooniliste seadmete abil. Seadmete arv peaks olema piiratud, et hoida seda suhteliselt keerukana. See samm sisaldab juhtmestiku skeeme ja iga koodi kõigi osade eraldi testimiseks:

  • Pidevad servomootorid;
  • Ultraheli andur;
  • Mittepidevad servomootorid;
  • Helisignaal;
  • IR -nupu suuna tuvastamine;
  • Servade tuvastamine lähedusandurite abil;

Need koodid võivad aidata komponentidest alguses aru saada, kuid on ka väga kasulik silumiseks hilisemates etappides. Teatud probleemi ilmnemisel on viga lihtsam tuvastada, katsetades kõiki komponente eraldi.

4. samm: 3D -prinditud ja laserlõigatud tükkide kujundamine

3D -trükitud ja laserlõigatud tükkide disain
3D -trükitud ja laserlõigatud tükkide disain
3D -trükitud ja laserlõigatud tükkide disain
3D -trükitud ja laserlõigatud tükkide disain
3D -trükitud ja laserlõigatud tükkide disain
3D -trükitud ja laserlõigatud tükkide disain

Laserlõigatud tükid

Komplekt koosneb kolmest peamisest horisontaalsest plaadist, mida hoiavad kokku trükkplaatide vaheseinad, et saada avatud kujundus, mis tagab vajadusel hõlpsa juurdepääsu elektroonikale.

Nendel plaatidel tuleb lõigata vajalikud augud, et kruvida vaheseinad ja muud komponendid lõplikuks kokkupanekuks. Põhimõtteliselt on kõigil kolmel plaadil vahekauguste jaoks samas kohas augud ja igale plaadile vastavalt fikseeritud spetsiaalsed augud elektroonika jaoks. Pange tähele, et keskmise plaadi keskel on auk juhtmete läbimiseks.

Väiksemad tükid lõigatakse suure servo mõõtmetega, et need sõlme külge kinnitada.

3D trükitud tükid

Lisaks laserlõikamisele tuleb mõned tükid printida 3D -vormingus:

  • Toetus ultraheli andurile, mis ühendab selle ühe mikroservomootoriga
  • Tugi ratasrattale ja kahele IR servaandurile. Infrapuna -andurite detaili karbikujuliste otste konkreetne disain toimib ekraanina, et vältida häireid IR -signaali kiirgava nupu ja IR -andurite vahel, mis peavad keskenduma ainult sellele, mis toimub maapinnal
  • Mikroservomootori tugi kaane avamiseks
  • Ja lõpuks kaas ise, mis on valmistatud kahest osast, et neil oleks suurem töönurk, vältides kokkupõrget kaant avava mikro -servomootoriga:

    • Alumine, mis kinnitatakse ülemise plaadi külge
    • Ja ülaosa, mis on hingega ühendatud põhjaga ja mida käivitab servo, kasutades paksu metalltraati. Otsustasime robotile natuke isiksust lisada, andes sellele pea.

Kui kõik tükid on kavandatud ja failid kasutatud masinate jaoks õiges vormingus eksporditud, saab neid tegelikult teha. Pidage meeles, et 3D -printimine võtab palju aega, eriti kaane ülemise osa mõõtmetega. Kõigi tükkide printimiseks võib kuluda üks või kaks päeva. Kuid laserlõikamine on vaid mõne minuti küsimus.

Kõik SOLIDWORKS-failid on pakitud kaustas.

Samm: kokkupanek ja juhtmestik

Image
Image
Kokkupanek ja juhtmestik
Kokkupanek ja juhtmestik
Kokkupanek ja juhtmestik
Kokkupanek ja juhtmestik
Kokkupanek ja juhtmestik
Kokkupanek ja juhtmestik

Komplekt koosneb juhtmestikust ja komponentide kruvimisest, alustades alt üles.

Alumine plaat

Alumine plaat on kokku pandud koos 4AA patareipaketi, servomootorite, trükitud osaga (palliratta kinnitamine plaadi alla), kahe servaanduriga ja 6 isase-naise vahekaugusega.

Keskmine plaat

Seejärel saab paigaldada keskmise plaadi, surudes servomootorid kahe plaadi vahele kokku. Seda plaati saab seejärel fikseerida, pannes selle peale teise komplekti vahekaugusi. Mõningaid kaableid saab juhtida läbi keskse ava.

Ultrahelimooduli saab kinnitada katkematu servo külge, mis on kinnitatud keskmisele plaadile koos Arduino, 9 V akuga (arduino toide) ja kahe infrapuna vastuvõtja mooduliga roboti esiosas. Need moodulid on valmistatud läbimõõduga jootmisplaatidega ja kinnitatud kruvidega plaadi külge. Nende moodulite ahelad on kujutatud üldistes skeemides.

Ülemine plaat

Seadme selles osas pole lülitid fikseeritud, kuid robot saab juba teha kõike, välja arvatud kaant nõudvad toimingud, seega võimaldab see meil teha künnise korrigeerimiseks, liikumise koodi kohandamiseks ja lihtsaks juurdepääs arduino sadamatesse.

Kui see kõik on saavutatud, saab ülemise plaadi kinnitada vahetükkidega. Viimased komponendid, milleks on kaks lülitit, nupp, servo, sumin ja kaanesüsteem, saab montaaži lõpetamiseks lõpuks ülemise plaadi külge kinnitada.

Viimane asi, mida testida ja parandada, on servo nurk kaane korrektseks avamiseks.

Servasensorite läve tuleb erinevate lauapindade jaoks kohandada kaasasoleva potentsiomeetriga (kasutades lamedat kruvikeerajat). Valgel laual peaks olema madalam künnis kui näiteks pruunil laual. Samuti mõjutab andurite kõrgus vajalikku läve.

Selle etapi lõpus on kokkupanek lõppenud ja viimane järelejäänud osa on puuduvad koodid.

6. samm: kodeerimine: kõik kokku panemine

Kogu vajalik kood roboti toimimiseks on pakitud failis, mille saab alla laadida. Kõige olulisem on "peamine" kood, mis sisaldab roboti seadistust ja funktsionaalset tsüklit. Enamik teisi funktsioone on kirjutatud alamfailidesse (ka pakitud kausta). Need alamfailid tuleks enne Arduinole üleslaadimist salvestada samasse kausta (nimega "peamine") kui põhiskript

Esmalt määratletakse roboti üldine kiirus koos muutujaga "meeldetuletus". See "meeldetuletus" on väärtus, mis mäletab, millises suunas robot pööras. Kui "tuleta meelde = 1", pööras/pöörab robot vasakule, kui "meenuta = 2", pöörab/pöörab robot paremale.

int kiirus = 9; // Roboti üldine kiirus

int tuleta meelde = 1; // Esialgne suund

Roboti seadistamisel lähtestatakse programmi erinevad alamfailid. Nendesse alamfailidesse on kirjutatud mootorite, andurite,… juhtimise põhifunktsioonid. Seadistuses lähtestades saab põhisilmus kasutada igas failis kirjeldatud funktsioone. Funktsiooni r2D2 () aktiveerimisel teeb robot müra nagu Star Warsi filmi frantsiisist pärit robot R2D2. see hakkab käima. Siin on r2D2 () funktsioon keelatud, et vältida sumisti liigse voolu tõmbamist.

// Seadistamine @ lähtestamine // ----------------

tühine seadistus () {initialize_IR_sensors (); initialize_obstacles_and_edges (); initialize_movement (); initialize_lid (); initialize_buzzer (); // r2D2 (); int tuleta meelde = 1; // esialgne suund Starter (tuleta meelde); }

Seadistuses kasutatakse esmalt funktsiooni Starter (meeldetuletus). See funktsioon paneb roboti ümber pöörama ja otsima ühe nupu IR -signaali. Kui nupp on leitud, väljub programm käivitusfunktsioonist, muutes muutuja „cond” väärtuseks false. Roboti pöörlemise ajal peab ta olema teadlik oma keskkonnast: see peab tuvastama servad ja takistused. Seda kontrollitakse iga kord enne ümberpööramist. Kui robot tuvastab takistuse või serva, täidetakse nende takistuste või servade vältimise protokoll. Neid protokolle selgitatakse selles etapis hiljem. Funktsioonil Starter on üks muutuja, mis on meeldetuletusmuutuja, millest varem räägiti. Andes funktsioonile Starter meeldetuletusväärtuse, teab robot, millises suunas ta nupu otsimiseks pöörama peab.

// Alustussilm: pöörake ringi ja otsige nuppu // ------------------------------------ ----------------

void Starter (int meeldetuletus) {if (isedgeleft () || isedgeright ()) {// Tuvasta servad edgeDetected (tuletab meelde); } else {bool cond = true; while (cond == true) {if (buttonleft () == false && buttonright () == false && isButtonDetected () == true) {cond = false; } else {if (meeldetuletus == 1) {// Pöörasime vasakule, kui (isobstacleleft ()) {stoppeed (); vältima_obstacle (tuleta meelde); } else if (isedgeleft () || isedgeright ()) {// Tuvasta servad edgeDetected (tuletab meelde); } else {pööre vasakule (kiirus); }} else if (meenuta == 2) {if (isobstacleright ()) {stoppeed (); vältima_obstacle (tuleta meelde); } else if (isedgeleft () || isedgeright ()) {// Tuvasta servad edgeDetected (tuletab meelde); } else {turnright (kiirus); }}}}}}

Kui robot nupu üles leiab, väljutakse esimesest käivitusahelast ja algab roboti peamine funktsionaalne tsükkel. See peamine silmus on üsna keeruline, sest robot peab iga kord tuvastama, kas selle ees on takistus või serv. Põhiidee on selles, et robot järgib nuppu, leides selle ja kaotades selle iga kord. Kahe IR -anduri abil saame eristada kolme olukorda:

  • erinevus vasaku ja parema anduri poolt tuvastatud IR -valguse vahel on suurem kui teatud lävi ja nupp on olemas.
  • IR -valguse erinevus on künnisest väiksem ja roboti ees on nupp.
  • IR -valguse erinevus on künnisest väiksem ja roboti ees pole nuppu NO.

Raja rutiin töötab järgmiselt: kui nupp on tuvastatud, liigub robot nupu poole, keerates samas suunas, mida ta keeras (kasutades muutujat meeldetuletus), ja samal ajal veidi edasi. Kui robot pöörab liiga kaugele, läheb nupp uuesti kaduma ja sel hetkel mäletab robot, et tal on vaja pöörata teises suunas. Seda tehakse ka natuke edasi liikudes. Seda tehes pöörab robot pidevalt vasakule ja paremale, kuid vahepeal liigub nupu poole. Iga kord, kui robot nupu leiab, pöörleb see edasi, kuni on selle kaotanud, sellisel juhul hakkab see liikuma teises suunas. Pange tähele erinevusi funktsioonides, mida kasutatakse käivitusahelas ja põhiahelas: käivitusahel kasutab "turnleft ()" või "turnright ()", samas kui põhiahel kasutab "moveleft ()" ja "moveright ()". Liigutusnurgad vasakule/paremale ei pane mitte ainult robotit pöörama, vaid panevad teda samal ajal edasi liikuma.

/ * Funktsionaalne tsükkel ---------------------------- Siin on ainult jälgimisrutiin */

int kadunud = 0; // Kui kadunud = 0, leitakse nupp, kui kaotatud = 1, on nupp kadunud void loop () {if (isedgeleft () || isedgeright ()) {

kui (! isobstacle ()) {

edasi liikumine (kiirus); viivitus (5); } else {vältida_obstacle (tuleta meelde); } else {if (meeldetuletus == 1 && kadunud == 1) {// Pöörasime vasakule stoppeed (); if (! isobstacleright ()) {moveright (kiirus); // Nupu leidmiseks pöörake ümber} else {vältima_obstacle (tuleta meelde); } meenuta = 2; } else if (meenuta == 2 && kadunud == 1) {stoppeed (); if (! isobstacleleft ()) {moveleft (kiirus); // Me pöörasime paremale} else {vältida_obstacle (tuleta meelde); } meeldetuletus = 1; } else if (kaotatud == 0) {if (meenuta == 1) {// Pöördusime vasakule, kui (! isobstacleleft ()) {moveleft (speed); // Me pöörasime paremale} else {stoppeed (); vältima_obstacle (tuleta meelde); } //} else if (meenuta == 2) {if (! isobstacleright ()) {moveright (kiirus); // Nupu leidmiseks pöörake ümber} else {stoppeed (); vältima_obstacle (tuleta meelde); }}} viivitus (10); kaotatud = 0; }} //}}

Nüüd on toodud kahe kõige keerulisema rutiini väike selgitus:

Vältige servi

Servade vältimise protokoll on määratletud funktsioonis "edgeDetection ()", mis on kirjutatud alamfaili "motion". See protokoll tugineb asjaolule, et robot peaks kohtuma servaga alles siis, kui on jõudnud sihtkohta: nupule. Kui robot tuvastab serva, liigub ta esimese asjana natuke tagasi, et servast turvaliselt eemale hoida. Kui see on tehtud, ootab robot 2 sekundit. Kui keegi vajutab selle kahe sekundi jooksul roboti esiosa nuppu, teab robot, et see on või soovijani jõudnud, avab võisahtli ja esitab või. Siinkohal võib keegi robotilt võid võtta. Mõne sekundi pärast väsib robot ootamisest ja sulgeb lihtsalt või kaane. Kui kaas on suletud, käivitab robot uue nupu otsimiseks käivitusahela. Kui juhtub, et robot satub enne sihtkohta jõudmist serva ja roboti esiküljel olevat nuppu ei vajutata, ei ava robot või kaant ja käivitab kohe käivitusahela.

Vältige takistusi

Funktsioon vältimine_obstacle () asub ka alamfailis "liikumine". Raske osa takistuste vältimisel on asjaolu, et robotil on päris suur pimeala. Ultraheli andur on paigutatud roboti esiosa, mis tähendab, et see suudab takistusi tuvastada, kuid ei tea, millal temast möödutakse. Selle lahendamiseks kasutatakse järgmist põhimõtet: Kui robot on takistusega kokku puutunud, kasutab ta remingmuutujat teises suunas pööramiseks. Nii väldib robot takistust. Robot pöörleb seni, kuni ultraheliandur ei tuvasta enam takistust. Roboti pöörlemise ajal suurendatakse loendurit, kuni takistust enam ei tuvastata. See loendur annab siis takistuse pikkusele ligikaudse hinnangu. Edasi liikudes ja samal ajal loendurit vähendades saab takistust vältida. Kui loendur jõuab nulli, saab nuppu Starter uuesti kasutada nupu ümberpaigutamiseks. Loomulikult täidab robot käivitusfunktsiooni, keerates selles suunas, mis tal enne takistuse ilmnemist meelde tuli (jällegi kasutades muutujat meeldetuletus).

Nüüd, kui olete koodist täielikult aru saanud, võite hakata seda kasutama!

Kohandage künnised kindlasti oma keskkonnaga (näiteks IR -peegeldus on kõrgem näiteks valgetel laudadel) ja kohandage erinevad parameetrid vastavalt teie vajadustele. Samuti tuleks suurt tähelepanu pöörata erinevate moodulite toiteallikale. On väga oluline, et servomootoreid ei toidaks Arduino 5V port, kuna need võtavad palju voolu (see võib mikrokontrollerit kahjustada). Kui andurite jaoks kasutatakse sama toiteallikat kui servode toiteks, võib tekkida mõningaid mõõtmisprobleeme.

Soovitan: