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, Juli
Anonim
Image
Image

Ovaj projekat je zasnovan na animiranoj seriji "Rick and Morty". U jednoj od epizoda, Rick pravi robota čija je jedina svrha donijeti maslac. Kao studenti sa Bruface -a (Tehnički fakultet u Briselu) imamo zadatak za projekat mehatronike koji treba da izgradi robota na osnovu 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 donese pravoj osobi, robot može stalno nositi maslac. Glavna ideja je stoga napraviti kolica koja prevoze maslac tamo gdje treba.

Osim transporta maslaca, robot mora znati i gdje treba donijeti maslac. U epizodi, Rick koristi svoj glas za pozivanje i upravljanje robotom. Ovo zahtijeva skup sistem za prepoznavanje glasa i bilo bi previše komplicirano. Umjesto toga, svi za stolom dobivaju dugme: nakon što se ovo dugme aktivira, robot može locirati ovo dugme i krenuti prema njemu.

Da rezimiramo, robot mora ispuniti sljedeće zahtjeve:

  • Mora biti siguran: mora izbjegavati prepreke i spriječiti da padne sa stola;
  • Robot mora biti mali: prostor na stolu je ograničen i niko 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 na taj način može koristiti na različitim stolovima;
  • Treba donijeti maslac pravoj osobi za stolom.

Korak 1: Glavni koncept

Prethodno navedeni zahtjevi mogu se ispuniti različitim tehnikama. Odluke o glavnom dizajnu koje su donesene objašnjene su u ovom koraku. Detalje o tome kako se ove ideje provode možete 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 korištenje kotača umjesto kretanja "hodanje" bolje pokrenuti. Budući da je stol ravna površina i da robot neće postići 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 upotrebe 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 posmatrati kao neka vrsta senzora udaljenosti. Isti princip postoji i sa infracrvenim svjetlom. Postoje neki infracrveni senzori za blizinu koji imaju digitalni izlaz: blizu ili ne. To je upravo ono što je robotu potrebno da otkrije rubove. Kombinacijom dva ivična senzora postavljena poput dvije antene protiv insekata i jednog aktiviranog ultrazvučnog senzora, robot bi trebao moći izbjeći prepreke i rubove.

Otkrivanje gumba može se postići i pomoću 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 opasno kada bi neko usmjerio laser u oko druge osobe. Također, korisnik bi trebao ciljati senzore na robotu samo tankim laserskim zrakom, što bi bilo prilično neugodno. Opremom robota s dva IC senzora i konstruiranjem gumba s IC LED diodom, robot zna u kojem smjeru mora ići prateći intenzitet IC svjetla. Kada nema gumba, robot se može okretati sve dok jedna od LED dioda ne uhvati signal s jednog od gumba.

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, a u tu svrhu su beskonačni servo motori prilagođeniji jer motori moraju ići u određeni položaj 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 koje vrijeme jer je trenutna potrošnja velika.

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

Korak 2: Materijali

Mehanički dijelovi

  • 3D štampač i mašina za lasersko sečenje

    • PLA će se koristiti za 3D štampanje, 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 da se kasnije kasnije izvrše 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, podloške i matice M3, ali za neke je potrebno postaviti vijke M2 ili M4. Dužina vijaka je u rasponu 8-12 mm

  • Odstojnici od PCB -a, 25 mm i 15 mm
  • 2 servo motora sa kompatibilnim točkovima
  • Debela metalna žica promjera 1-2 mm

Elektronski dijelovi

  • Mikrokontroler

    1 arduino UNO ploča

  • Servo motori

    • 2 velika servo motora: Feetech kontinuirani 6 kg 360 stepeni
    • 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 dugme
    • 1 Konektor za Arduino 9V bateriju

Korak 3: Testiranje elektronike

Testiranje elektronike
Testiranje elektronike
Testiranje elektronike
Testiranje elektronike

Kreiranje dugmeta:

Gumb je jednostavno napravljen pomoću prekidača, infracrvene LED diode i otpornika od 220 Ohma u seriji, koji se napaja iz 9V baterije. 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. Kola za ove module prikazana su u općim shemama. Princip je mjerenje intenziteta infracrvenog svjetla. Za poboljšanje 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;
  • Otkrivanje smjera IR dugmeta;
  • Otkrivanje rubova senzorima blizine;

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

Korak 4: Dizajn 3D ispisanih i laserski rezanih komada

Dizajn 3D ispisanih i laserski rezanih komada
Dizajn 3D ispisanih i laserski rezanih komada
Dizajn 3D ispisanih i laserski rezanih komada
Dizajn 3D ispisanih i laserski rezanih komada
Dizajn 3D ispisanih i laserski rezanih komada
Dizajn 3D ispisanih i laserski rezanih komada

Laserski rezani komadi

Sklop se sastoji od tri glavne vodoravne ploče koje drže odstojnici za PCB -ove kako bi dobili otvoreni dizajn koji omogućuje lak 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 se režu prema dimenzijama velikog servoa kako bi se pričvrstili na sklop.

3D štampani komadi

Osim laserskog rezanja, neke komade potrebno je 3D štampati:

  • 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 krajeva komada u obliku kutije za IC senzore djeluje kao zaslon za izbjegavanje smetnji između tipke koja emitira IC signal i IC senzora koji se trebaju usredotočiti samo na ono što se događa na tlu
  • Nosač za mikro servo motor koji otvara poklopac
  • I na kraju sam poklopac, napravljen od dva komada koji imaju veći radni kut izbjegavajući sudar s mikro servo motorom koji otvara poklopac:

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

Nakon što su svi komadi dizajnirani i datoteke izvezene u ispravnom formatu za strojeve koji se koriste, komadi se zapravo mogu napraviti. Imajte na umu da 3D ispis oduzima puno vremena, posebno s dimenzijama gornjeg dijela poklopca. Možda će vam trebati jedan ili dva dana da odštampate sve komade. Lasersko rezanje ipak je samo nekoliko minuta.

Sve datoteke SOLIDWORKS 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

Sastav će biti mješavina ožičenja i spajanja komponenti zajedno, počevši od dna prema vrhu.

Donja ploča

Donja ploča sastavljena je s 4AA baterijskim paketom, servo motorima, ispisanim dijelom (koji pričvršćuje kotačić ispod ploče), dva ivična senzora i 6 odstojnika za muškarce i žene.

Srednja ploča

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

Ultrazvučni modul može se pričvrstiti na nekontinuirani servo, koji je pričvršćen na srednju ploču s Arduinom, 9V baterijom (napaja arduino) i dva infracrvena prijemnička modula 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 ove module prikazani su u općim shemama.

Gornja ploča

U ovom dijelu sklopke prekidači nisu fiksirani, 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.

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

Zadnja stvar koju treba testirati i ispraviti je kut servo servera za pravilno otvaranje poklopca.

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

Na kraju ovog koraka sastavljanje je završeno, a posljednji preostali dio su šifre koje nedostaju.

Korak 6: Kodiranje: Spajanje 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 drugih funkcija zapisana je u pod-datotekama (takođe u fascikli sa zipom). Ove pod-datoteke trebaju biti spremljene u istu mapu (koja se naziva "glavna") kao glavna skripta prije nego što je postavite na Arduino

Prvo se definira opća brzina robota zajedno s varijablom "podsjeti". Ovaj "podsjetnik" je vrijednost 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 ovim 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); }

Starter (podsjetnik) funkcija se prvo poziva u postavkama. 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. Ovo se provjerava svaki put prije nego što se nastavi okretati. Kada robot otkrije prepreku ili rub, protokol za izbjegavanje ovih prepreka ili rubova će se izvršiti. 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 da bi potražio gumb.

// Starter Loop: Okrenite se i potražite dugme // ------------------------------------ ----------------

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) {// Skrenuli smo lijevo if (isobstacleleft ()) {stoppeed (); izbjeći prepreku (podsjetiti); } else if (isedgeleft () || isedgeright ()) {// Otkrivanje rubova edgeDetected (podsjetiti); } else {turnleft (brzina); }} else if (podsjetnik == 2) {if (isobstacleright ()) {Stoppeed (); izbjeći prepreku (podsjetiti); } else if (isedgeleft () || isedgeright ()) {// Otkrivanje rubova edgeDetected (podsjetiti); } else {turnright (brzina); }}}}}}

Ako robot pronađe dugme, 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 dugme tako što ga pronađe i svaki put izgubi. 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 dugme.
  • razlika u IC svjetlu je manja od praga, a ispred robota nalazi se dugme.
  • razlika u IC svjetlu je manja od praga, a ispred robota nema tipke.

Način funkcioniranja rutine praćenja je sljedeći: kada se dugme 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. Ovo se takođe radi dok se malo krećete napred. Time se robot stalno okreće lijevo i skreće desno, ali u međuvremenu i dalje napreduje prema gumbu. Svaki put kada robot pronađe dugme, nastavlja se okretati sve dok ga ne izgubi, u tom slučaju počinje se kretati u drugom smjeru. Uočite razliku u funkcijama koje se koriste u starter petlji i glavnoj petlji: starter petlja koristi "turnleft ()" ili "turnright ()", dok glavna petlja koristi "moveleft ()" i "moveright ()". Funkcije pomicanja lijevo/desno ne samo da čine da se robot okreće, već ga istovremeno tjeraju i naprijed.

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

int izgubljeno = 0; // Ako je izgubljeno = 0, dugme je pronađeno, ako je izgubljeno = 1, dugme je izgubljeno 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š dugme} else {izbjegni prepreku (podsjeti); } podsjeti = 2; } else if (podsjetnik == 2 && lost == 1) {stoppeed (); if (! isobstacleleft ()) {moveleft (brzina); // Skretali smo desno} else {izbjegni prepreku (podsjeti); } podsjeti = 1; } else if (lost == 0) {if (podsjetnik == 1) {// Skretali smo lijevo if (! isobstacleleft ()) {moveleft (speed); // Skretali smo desno} else {Stoppeed (); izbjeći prepreku (podsjetiti); } //} else if (podsjetnik == 2) {if (! isobstacleright ()) {moveright (speed); // Okreni se da pronađeš dugme} else {stoppeed (); izbjeći prepreku (podsjetiti); }}} kašnjenje (10); izgubljeno = 0; }} //}}

Sada je dato malo objašnjenje dvije najsloženije rutine:

Izbjegavajte rubove

Protokol za izbjegavanje rubova definiran je u funkciji pod nazivom "edgeDetection ()" koja je zapisana u pod-datoteci "move". Ovaj protokol oslanja se na činjenicu da bi robot trebao naići na ivicu tek kada je stigao na odredište: dugme. Kada robot otkrije ivicu, 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 neko pritisne dugme na prednjoj strani robota u te dvije sekunde, robot zna da je stiglo do osobe koja želi maslac i otvara pretinac za maslac i predstavlja maslac. U ovom trenutku, neko može uzeti robotu maslac. Nakon nekoliko sekundi robot će se umoriti od čekanja i samo će zatvoriti poklopac za maslac. Kada se poklopac zatvori, robot će pokrenuti petlju startera kako bi potražio drugo dugme. 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 startera.

Izbjegavajte prepreke

Funkcija izbjegavanja_obstakla () također se 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 s prednje strane 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ći princip: Nakon što robot naiđe na prepreku, koristi promjenjivu varijablu za okretanje u drugom smjeru. Na ovaj način robot izbjegava udariti u prepreku. Robot se nastavlja okretati sve dok ultrazvučni senzor više ne otkrije prepreku. Za vrijeme okretanja robota, brojač se povećava sve dok se prepreka više ne otkrije. Ovaj brojač tada daje približnu dužinu prepreke. Pomicanjem zatim naprijed i istovremeno smanjenjem brojača prepreka se može izbjeći. Kada brojač dosegne 0, funkcija Starter se može ponovo 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!

Prilagodite pragove svom okruženju (infracrveni odraz je veći na bijelim tablicama, na primjer) i prilagodite različite parametre svojim potrebama. Također, veliku pažnju treba posvetiti napajanju različitih modula. Od velike je važnosti da se servo motori ne napajaju putem Arduino 5V porta 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čuje se: