Sadržaj:

Robot s maslacem: Arduino robot s egzistencijalnom krizom: 6 koraka (sa slikama)
Robot s maslacem: Arduino robot s egzistencijalnom krizom: 6 koraka (sa slikama)

Video: Robot s maslacem: Arduino robot s egzistencijalnom krizom: 6 koraka (sa slikama)

Video: Robot s maslacem: Arduino robot s egzistencijalnom krizom: 6 koraka (sa slikama)
Video: robot, pasa la mantequilla #shorts #rickymorty 2024, Srpanj
Anonim
Image
Image

Ovaj se projekt temelji na animiranoj seriji "Rick and Morty". U jednoj od epizoda Rick pravi robota čija je jedina svrha donijeti maslac. Kao studenti s Brufacea (Tehnički fakultet u Bruxellesu) imamo zadatak za projekt mehatronike koji treba izgraditi robota na temelju predložene teme. Zadatak za ovaj projekt je: Napravite robota koji služi samo maslac. Može doći do egzistencijalne krize. Naravno, robot u epizodi Ricka i Mortyja prilično je složen robot i potrebno je napraviti neka pojednostavljenja:

Budući da mu je jedina svrha donijeti maslac, postoje jednostavnije alternative. Umjesto da natjera robota da pogleda i zgrabi maslac, prije nego što ga dovede pravoj osobi, robot može nositi maslac cijelo vrijeme. Glavna ideja je stoga napraviti kolica koja prevoze maslac tamo gdje treba biti.

Osim transporta maslaca, robot mora znati kamo treba donijeti maslac. U epizodi Rick koristi svoj glas da nazove robota i zapovijedi mu. To zahtijeva skup sustav prepoznavanja glasa i bilo bi previše komplicirano. Umjesto toga, svi za stolom dobivaju gumb: nakon što je ovaj gumb aktiviran, robot može locirati ovaj gumb i krenuti prema njemu.

Da rezimiramo, robot mora ispuniti sljedeće zahtjeve:

  • Mora biti siguran: mora izbjegavati prepreke i spriječiti se da padne sa stola;
  • Robot mora biti mali: prostor na stolu je ograničen i nitko ne bi želio robota koji služi maslac, ali je upola manji od samog stola;
  • Rad robota ne može ovisiti o veličini ili obliku stola, pa se može koristiti na različitim stolovima;
  • Treba donijeti maslac pravoj osobi za stolom.

Korak 1: Glavni koncept

Prethodno spomenuti zahtjevi mogu se zadovoljiti različitim tehnikama. Odluke o glavnom dizajnu koje su donesene objašnjene su u ovom koraku. Pojedinosti o tome kako se ove ideje provode mogu se pronaći u sljedećim koracima.

Da bi ispunio svoju dužnost, robot se mora kretati sve dok ne stigne do odredišta. S obzirom na primjenu robota, jasno je da je pomoću kotača umjesto kretanja "hodajući" bolje pokrenuti ga. Budući da je stol ravna površina, a robot neće postići vrlo velike brzine, dva pokrenuta kotača i jedna kotačić najjednostavnije su i najjednostavnije rješenje za upravljanje. Aktivirane kotače moraju pokretati dva motora. Motori moraju imati veliki okretni moment, ali ne moraju dosezati veliku brzinu, zato će se koristiti kontinuirani servo motori. Još jedna prednost servo motora je jednostavnost korištenja s Arduinom.

Otkrivanje prepreka može se obaviti pomoću ultrazvučnog senzora koji mjeri udaljenost, pričvršćenog na servo motor za odabir smjera mjerenja. Rubovi se mogu otkriti pomoću LDR senzora. Korištenje LDR senzora zahtijevat će konstrukciju uređaja koji sadrži i LED svjetlo i LDR senzor. LDR senzor mjeri reflektirano svjetlo i može se vidjeti kao neka vrsta senzora udaljenosti. Isti princip postoji i s infracrvenim svjetlom. Postoje neki infracrveni senzori blizine koji imaju digitalni izlaz: blizu ili ne. To je upravo ono što je robotu potrebno za otkrivanje rubova. Kombinirajući 2 senzora ruba postavljena poput dvije antene protiv insekata i jednog aktiviranog ultrazvučnog senzora, robot bi trebao moći izbjeći prepreke i rubove.

Otkrivanje gumba također se može postići korištenjem IC senzora i LED dioda. Prednost IR -a je u tome što je nevidljiv što njegovu upotrebu čini neometanom za ljude za stolom. Mogli su se koristiti i laseri, ali tada bi svjetlo bilo vidljivo i također opasno kada netko usmjeri laser u oko druge osobe. Također, korisnik bi trebao ciljati senzore na robotu samo tankim laserskim snopom, što bi bilo prilično neugodno. Opremivši robota s dva IC senzora i konstruirajući gumb s IC LED diodom, robot zna u kojem smjeru mora ići prateći intenzitet IC svjetla. Kad nema gumba, robot se može okretati sve dok jedna od LED dioda ne uhvati signal s jedne od tipki.

Maslac se stavlja u odjeljak na vrhu robota. Ovaj odjeljak može se sastojati od kutije i aktiviranog poklopca za otvaranje kutije. Za otvaranje poklopca i pomicanje ultrazvučnog senzora za skeniranje i otkrivanje prepreka potrebna su nam dva motora, pa su u tu svrhu beskonačni servo motori prilagođeniji jer motori moraju ići u određenom položaju i održavati taj položaj.

Dodatna značajka projekta bila je interakcija s vanjskim okruženjem s glasom robota. Zvučni signal je jednostavan i prilagođen za tu svrhu, ali se ne može koristiti u bilo kojem trenutku jer je trenutna potrošnja velika.

Glavne poteškoće projekta oslanjaju se na kodiranje, budući da je mehanički dio prilično jednostavan. Mnogi se slučajevi moraju uzeti u obzir kako bi se izbjeglo da robot zaglavi ili učini nešto neželjeno. Glavni problemi koje moramo riješiti su gubitak IR signala zbog prepreke i zaustavljanje kada stigne do gumba!

Korak 2: Materijali

Mehanički dijelovi

  • 3D pisač i stroj za lasersko rezanje

    • PLA će se koristiti za 3D ispis, ali možete koristiti i ABS
    • Ploča od šperploče od breze od 3 mm koristit će se za lasersko rezanje jer daje mogućnost kasnije izmjene, može se koristiti i pleksiglas, ali je teže modificirati je nakon laserskog rezanja bez uništavanja
  • Vijci, matice, podloške

    Većina komponenti drži se zajedno pomoću vijaka s gumbima M3, podloška i matica, no za neke je potrebno postaviti vijke M2 ili M4. Duljina vijaka je u rasponu 8-12 mm

  • Odstojnici od PCB -a, 25 mm i 15 mm
  • 2 servo motora s kompatibilnim kotačima
  • Debela metalna žica promjera 1-2 mm

Elektronički dijelovi

  • Mikrokontroler

    1 arduino UNO ploča

  • Servo motori

    • 2 velika servo motora: Feetech kontinuirani 6 kg 360 stupnjeva
    • 2 mikro servo motora: Feetech FS90
  • Senzori

    • 1 Ultrazvučni senzor
    • 2 IC senzora blizine
    • 2 IR fotodiode
  • Baterije

    • 1 držač baterije 9V + baterija
    • 1 držač baterije 4AA + baterije
    • 1 9V kutija za baterije + baterija
  • Dodatne komponente

    • Neke žice za preskakanje, žice i ploče za lemljenje
    • Neki otpornici
    • 1 IR LED
    • 3 prekidača
    • 1 zujalica
    • 1 gumb
    • 1 Priključak za Arduino 9V bateriju

Korak 3: Testiranje elektronike

Testiranje elektronike
Testiranje elektronike
Testiranje elektronike
Testiranje elektronike

Izrada gumba:

Gumb jednostavno izrađuju prekidač, infracrvena LED dioda i otpornik od 220 ohma u nizu, napaja se baterijom od 9 V. Ovo je stavljeno u 9V bateriju za kompaktan i čist dizajn.

Izrada modula infracrvenog prijemnika:

Ovi moduli izrađeni su od ploča za lemljenje kroz rupe, koje će kasnije biti pričvršćene vijcima na robota. Krugovi za te module prikazani su u općim shemama. Princip je mjerenje intenziteta infracrvenog svjetla. Kako bi se poboljšala mjerenja, mogu se koristiti kolimatori (napravljeni sa skupljajućim cijevima) za fokusiranje na određeni smjer interesa.

Različiti zahtjevi projekta moraju se postići pomoću elektroničkih uređaja. Broj uređaja trebao bi biti ograničen kako bi se zadržala relativno niska složenost. Ovaj korak sadrži sheme ožičenja i svaki kod za testiranje svih dijelova zasebno:

  • Kontinuirani servo motori;
  • Ultrazvučni senzor;
  • Servo motori koji nisu kontinuirani;
  • Zujalica;
  • Detekcija smjera IR gumba;
  • Otkrivanje rubova senzorima blizine;

Ovi kodovi mogu pomoći u razumijevanju komponenti na početku, ali su također vrlo korisni za otklanjanje pogrešaka u kasnijim fazama. Ako se pojavi određeni problem, bug se može lakše otkriti testiranjem svih komponenti zasebno.

Korak 4: Dizajn 3D ispisanih i laserski izrezanih komada

Dizajn 3D ispisanih i laserski izrezanih komada
Dizajn 3D ispisanih i laserski izrezanih komada
Dizajn 3D ispisanih i laserski izrezanih komada
Dizajn 3D ispisanih i laserski izrezanih komada
Dizajn 3D ispisanih i laserski izrezanih komada
Dizajn 3D ispisanih i laserski izrezanih komada

Laserski izrezani komadi

Sklop je izrađen od tri glavne vodoravne ploče koje drže odstojnici za PCB -ove kako bi dobili otvoreni dizajn koji omogućuje jednostavan pristup elektronici ako je potrebno.

Na tim pločama je potrebno izrezati potrebne rupe kako bi se zavrnuli odstojnici i ostale komponente za konačnu montažu. Uglavnom, sve tri ploče imaju rupe na istom mjestu za odstojnike i posebne rupe za elektroniku pričvršćene na svakoj ploči. Uočite da srednja ploča ima otvor za prolaz žica u sredini.

Manji komadi izrezani su na dimenzije velikog servoa kako bi se pričvrstili na sklop.

3D tiskani komadi

Osim laserskog rezanja, neke će komade trebati 3D printati:

  • Podrška za ultrazvučni senzor, koji ga povezuje s jednom rukom mikro servo motora
  • Podrška za kotač i dva IR ručna senzora. Poseban dizajn vrste kutijastih krajeva komada za IR senzore djeluje kao zaslon za izbjegavanje smetnji između gumba koji emitira IC signal i IC senzora koji se trebaju usredotočiti samo na ono što se događa na tlu
  • Potpora za mikro servo motor koji otvara poklopac
  • I na kraju sam poklopac, napravljen od dva dijela koji imaju veći radni kut izbjegavajući sudar s mikro servo motorom koji otvara poklopac:

    • Donji koji će biti pričvršćen na gornju ploču
    • I gornji dio koji je šarkama povezan s dnom, a servo aktiviran pomoću debele metalne žice. Odlučili smo robotu dodati malo osobnosti dajući mu glavu.

Nakon što su svi komadi dizajnirani i datoteke izvezene u ispravnom formatu za korištene strojeve, komadi se zapravo mogu izraditi. Imajte na umu da 3D ispis oduzima puno vremena, osobito s dimenzijama gornjeg dijela poklopca. Možda će vam trebati jedan ili dva dana za ispis svih komada. Lasersko rezanje ipak je samo nekoliko minuta.

Sve datoteke SOLIDWORKS-a mogu se pronaći u fascikli sa zipom.

Korak 5: Montaža i ožičenje

Image
Image
Montaža i ožičenje
Montaža i ožičenje
Montaža i ožičenje
Montaža i ožičenje
Montaža i ožičenje
Montaža i ožičenje

Sklop će biti mješavina ožičenja i vijčavanja komponenti, počevši od dna prema vrhu.

Donja ploča

Donja ploča sastavljena je s baterijom od 4AA, servo motorima, tiskanim dijelom (koji pričvršćuje kotačić ispod ploče), dva osjetnika ruba i 6 odstojnika za muško-ženski spol.

Srednja ploča

Zatim se može montirati srednja ploča, komprimirajući servo motore između dvije ploče. Ova se ploča tada može popraviti stavljanjem na nju drugog niza odstojnika. Neki kabeli mogu se provući kroz središnji otvor.

Ultrazvučni modul može se pričvrstiti na nekontinuirani servo, koji je pričvršćen na srednju ploču s Arduinom, bateriju od 9 V (za napajanje arduina) i dva infracrvena modula prijemnika na prednjoj strani robota. Ovi moduli izrađeni su od ploča za lemljenje kroz rupe i pričvršćeni su vijcima na ploču. Krugovi za te module prikazani su u općim shemama.

Gornja ploča

Na ovom dijelu sklopke prekidači nisu fiksni, ali robot već može učiniti sve osim radnji koje zahtijevaju poklopac, pa nam omogućuje da napravimo neki test kako bismo ispravili prag, prilagodili kôd kretanja i imali lako pristup lukama arduina.

Kad se sve to postigne, gornja se ploča može učvrstiti odstojnicima. Posljednje komponente, a to su dva prekidača, gumb, servo, zujalica i sustav poklopca mogu se konačno pričvrstiti na gornju ploču kako bi završili montažu.

Posljednja stvar koju treba ispitati i ispraviti je kut serva za pravilno otvaranje poklopca.

Prag rubnih senzora mora se prilagoditi priloženim potenciometrom (pomoću ravnog odvijača) za različite površine stola. Bijeli stol trebao bi imati niži prag od, na primjer, smeđeg stola. Također će visina senzora utjecati na potrebni prag.

Na kraju ovog koraka montaža je gotova, a posljednji preostali dio su šifre koje nedostaju.

Korak 6: Kodiranje: Stavljanje svega zajedno

Sav potreban kôd za rad robota nalazi se u zip datoteci koju je moguće preuzeti. Najvažniji je "glavni" kod koji uključuje postavku i funkcionalnu petlju robota. Većina ostalih funkcija zapisana je u pod-datotekama (također u fascikli sa zipom). Ove pod-datoteke trebaju biti spremljene u istu mapu (koja se naziva "glavna") kao glavna skripta prije nego što je prenesete na Arduino

Prvo se definira opća brzina robota zajedno s varijablom "podsjeti". Ovaj "podsjetnik" vrijednost je koja pamti u kojem se smjeru robot okrenuo. Ako je "podsjetnik = 1", robot je skretao ulijevo, ako je "podsjetnik = 2", robot je skretao udesno.

int brzina = 9; // Opća brzina robota

int podsjetnik = 1; // Početni smjer

U postavljanju robota, različite pod-datoteke programa se inicijaliziraju. U tim pod-datotekama zapisane su osnovne funkcije upravljanja motorima, senzorima … Inicijalizacijom u postavljanju funkcije koje su opisane u svakoj od ovih datoteka mogu se koristiti u glavnoj petlji. Aktiviranjem funkcije r2D2 () robot će stvarati buku poput robota R2D2 iz franšize filmova Star Wars pokreće se. Ovdje je funkcija r2D2 () onemogućena kako bi se spriječilo da zujalica crpi previše struje.

// Postavljanje @ reset // ----------------

void setup () {initialize_IR_sensors (); initialize_obstacles_and_edges (); initialize_movement (); initialize_lid (); initialize_buzzer (); // r2D2 (); int podsjetnik = 1; // početni smjer Starter (podsjetnik); }

Funkcija Starter (podsjetnik) prvo se poziva u postavljanju. Ova funkcija tjera robota da se okrene i potraži IC signal jedne od tipki. Nakon što pronađe gumb, program će napustiti funkciju Starter promjenom varijable 'cond' u false. Tijekom rotacije robota mora biti svjestan svog okruženja: mora otkriti rubove i prepreke. To se provjerava svaki put prije nego što se nastavi okretati. Nakon što robot otkrije prepreku ili rub, izvršit će se protokol za izbjegavanje ovih prepreka ili rubova. Ovi protokoli bit će objašnjeni kasnije u ovom koraku. Funkcija Starter ima jednu varijablu koja je varijabla podsjetnika o kojoj je ranije bilo riječi. Davanjem podsjetničke vrijednosti funkciji Starter, robot zna u kojem se smjeru treba okrenuti kako bi potražio gumb.

// Petlja za pokretanje: Okrenite se i potražite gumb // ------------------------------------ ----------------

void Starter (int podsjetnik) {if (isedgeleft () || isedgeright ()) {// Otkrivanje rubova edgeDetected (podsjetiti); } else {bool cond = true; while (cond == true) {if (buttonleft () == false && buttonright () == false && isButtonDetected () == true) {cond = false; } else {if (podsjetnik == 1) {// Skretali smo lijevo if (isobstacleleft ()) {stoppeed (); izbjegavati prepreke (podsjetiti); } else if (isedgeleft () || isedgeright ()) {// Otkrivanje rubova edgeDetected (podsjetiti); } else {turnleft (brzina); }} else if (podsjetnik == 2) {if (isobstacleright ()) {Stoppeed (); izbjegavati prepreke (podsjetiti); } else if (isedgeleft () || isedgeright ()) {// Otkrivanje rubova edgeDetected (podsjetiti); } else {turnright (brzina); }}}}}}

Ako robot pronađe gumb, tada se izlazi iz prve starterske petlje i započinje glavna, funkcionalna petlja robota. Ova glavna petlja je prilično složena jer svaki put robot mora otkriti postoji li prepreka ili rub ispred nje. Glavna ideja je da robot prati gumb pronalazeći ga i gubeći ga svaki put. Pomoću dva IC senzora možemo razlikovati tri situacije:

  • razlika između IC svjetla koje je otkrio lijevi i desni senzor veća je od određenog praga, a postoji i gumb.
  • razlika u IC svjetlu manja je od praga, a ispred robota nalazi se gumb.
  • razlika u IC svjetlu manja je od praga, a ispred robota ne postoji tipka.

Način funkcioniranja rutine kolosijeka je sljedeći: kada se gumb otkrije, robot se pomiče prema gumbu okrećući se u istom smjeru u kojem se okretao (koristeći varijablu podsjetnika) i istovremeno se pomaknuo malo naprijed. Ako se robot okrene predaleko, gumb će se opet izgubiti, a u ovom trenutku robot se sjeća da se mora okrenuti u drugom smjeru. To se također radi dok se malo krećete naprijed. Time se robot stalno okreće ulijevo i udesno, ali u međuvremenu i dalje napreduje prema gumbu. Svaki put kada robot pronađe gumb, nastavlja se okretati sve dok ga ne izgubi, u tom slučaju se počinje kretati u drugom smjeru. Uočite razliku u funkcijama koje se koriste u petlji za pokretanje i glavnoj petlji: petlja za pokretanje koristi "turnleft ()" ili "turnright ()", dok glavna petlja koristi "moveleft ()" i "moveright ()". Funkcije pomaka lijevo/desno ne samo da tjeraju robota da se okreće, već ga istovremeno tjeraju i naprijed.

/ * Funkcionalna petlja ---------------------------- Ovdje postoji samo rutina praćenja */

int izgubljeno = 0; // Ako je izgubljeno = 0, gumb je pronađen, ako je izgubljen = 1, gumb je izgubljen void loop () {if (isedgeleft () || isedgeright ()) {

if (! isobstacle ()) {{100} {101}

pomak naprijed (brzina); kašnjenje (5); } else {izbjegavati prepreku (podsjetiti); } else {if (podsjetnik == 1 && lost == 1) {// Okrenuli smo lijevu stop brzinu (); if (! isobstacleright ()) {moveright (brzina); // Okreni se da pronađeš gumb} else {izbjegni prepreku (podsjeti); } podsjetiti = 2; } else if (podsjetnik == 2 && lost == 1) {stoppeed (); if (! isobstacleleft ()) {moveleft (brzina); // Skrenuli smo desno} else {izbjegni prepreku (podsjeti); } podsjetiti = 1; } else if (lost == 0) {if (podsjetnik == 1) {// Skretali smo ulijevo if (! isobstacleleft ()) {moveleft (speed); // Skretali smo desno} else {Stoppeed (); izbjegavati prepreke (podsjetiti); } //} else if (podsjetnik == 2) {if (! isobstacleright ()) {moveright (brzina); // Okreni se da pronađeš gumb} else {Stoppeed (); izbjegavati prepreke (podsjetiti); }}} odgoda (10); izgubljeno = 0; }} //}}

Sada se daje malo objašnjenje dviju najsloženijih rutina:

Izbjegavajte rubove

Protokol za izbjegavanje rubova definiran je funkcijom pod nazivom "edgeDetection ()" koja je zapisana u pod-datoteci "move". Ovaj se protokol oslanja na činjenicu da bi se robot trebao susresti s rubom tek kad je stigao na odredište: gumb. Nakon što robot otkrije rub, prvo što učini je pomaknuti se malo unatrag kako bi bio na sigurnoj udaljenosti od ruba. Nakon što to učini, robot čeka 2 sekunde. Ako netko pritisne gumb na prednjoj strani robota u te dvije sekunde, robot zna da je stigao do osobe koja želi maslac te otvara pretinac za maslac i predstavlja maslac. U ovom trenutku netko može uzeti robotu maslac. Nakon nekoliko sekundi robot će se umoriti od čekanja i samo će zatvoriti poklopac maslaca. Nakon što se poklopac zatvori, robot će pokrenuti petlju Starter kako bi potražio drugi gumb. Ako se dogodi da robot naiđe na rub prije nego što stigne na odredište, a gumb na prednjoj strani robota nije pritisnut, robot neće otvoriti poklopac maslaca i odmah će pokrenuti petlju Starter.

Izbjegavajte prepreke

Funkcija escape_obstacle () se također nalazi u pod-datoteci "kretanje". Težak dio izbjegavanja prepreka je činjenica da robot ima prilično veliku mrtvu točku. Ultrazvučni senzor postavljen je na prednjoj strani robota, što znači da može otkriti prepreke, ali ne zna kada mu je prošao. Da bi se to riješilo, koristi se sljedeće načelo: Nakon što robot naiđe na prepreku, koristi varijablu reming za okretanje u drugom smjeru. Na taj način robot izbjegava udariti u prepreku. Robot se okreće sve dok ultrazvučni senzor više ne otkrije prepreku. Tijekom vremena dok se robot okreće, brojač se povećava sve dok se prepreka više ne otkrije. Ovaj brojač tada daje aproksimaciju duljine prepreke. Pomicanjem zatim naprijed i istodobno smanjivanjem brojača prepreka se može izbjeći. Kad brojač dosegne 0, funkcija Starter se može ponovno koristiti za premještanje gumba. Naravno da robot radi Starter funkciju okrećući se u smjeru u kojem se sjećao da ide prije nego što je naišao na prepreku (opet koristeći varijablu podsjetnika).

Sada kada ste potpuno razumjeli kôd, možete ga početi koristiti!

Pragove svakako prilagodite svom okruženju (IR refleksija je veća na bijelim tablicama, na primjer) i prilagodite različite parametre svojim potrebama. Također, veliku pozornost treba posvetiti napajanju različitih modula. Od velike je važnosti da se servo motori ne napajaju putem Arduino 5V priključka jer uzimaju veliku struju (to bi moglo oštetiti mikrokontroler). Ako se za senzore koristi isti izvor napajanja kao i onaj za napajanje servo pogona, mogli bi se pojaviti neki mjerni problemi.

Preporučeni: