Robot care sorteaza cutii

Introducere

Proiectul consta intr-un robot care stie sa urmareasca o linie pe un traseu care are 4 capete:1 capat este destinat pentru primirea cutiei (voi avea 3 cutii de culori diferite) si 3 capete pentru depozitarea cutiilor. Robotul va urmarii un traseu ghidat de o linie cu scopul de a duce cutia in zona corespunzatoare ei (una dintre cele 3 capete). In functie de culoarea cutiei, la o rascruce el va sti in ce directie sa mearga pentru a duce cutia si pentu a o lasa acolo, revenind apoi in zona de colectare a cutiilor.

Descriere generală

Robotul se va deplasa pe 2 roti, avand o roata pivotanta pentru echilibru. El va fi pornit din capatul in care asteapta sa primeasca cutii, cu ajutorul unui switch. Dupa ce robotul primeste cutia, el se va intoarce cu 180 de grade si va urmari linia, folosind un modul pentru urmarirea liniei, pana cand ajunge la o intersectie. In acel moment, in functie de culoarea cutitei, el va decide pe ce cale o va lua pentru a ajunge in capatul potrivit. Cand va ajunge acolo, robotul se va folosi de un servomotor pentru a arunca cutia jos, dupa care el sa va intoarce in pozitia initiala, adica in capatul de unde colecteaza cutii.

Pe langa componente robotului, voi confectiona o 'arena' in care robotul se va deplasa si in care se vor afla cele 4 capete povestite anterior si cutiile care vor fi de trei culori diferite(rosu, verde si albastru).

Traseu robot

Hardware Design

Lista de piese:

  • Arduino Uno
  • Modul senzor de culoare TCS3200
  • Modul pentru urmarirea liniei cu 5 senzori fotoelectrici reflectivi TCRT5000
  • 2 motoare DC cu reductor 3-6V
  • un servomotor SG90
  • driver motor L298N
  • acumulator 7V2 pentru driver
  • baterie 9V pentru arduino
  • switch

Placuta de arduino de la pulsivo suporta tensiuni de pana la 40V, deci m-am decis sa folosesc o baterie de 9V.

Software Design

Pentru dezvoltarea proiectului am folosit arduino IDE, impreuna cu libraria pentru servomotare.

Pentru o buna deplasare a robotul in timp ce urmareste o linie am folosit un controller PID, in care eroarea este cat de deplasat este robotul fata de linie (valoare obtinuta din senzorul pentru urmarirea liniei). Pentru deplasarea efectiva, am creat functia goForward(), care primeste ca parametrii viteze care vor fi trimise fiecarui motor in parte.

Pentru a face codul mai lizibil am scris valorile senzorilor pe bitii unei singure variabile, care este testata intr-un switch cu scopul aclualizarii erorii.

Dupa foarte mult debug din cauza ca robotul nu se misca la PWM cu duty cycle mic, am schimbat frecventa timerului de care se folosesc pinii 5 si 6 (cei montati la driver), pentru a putea da valori mai mari la output fara a avea o frecventa prea mare la PWM.

Pentru detectia culorii cuburilor senzorul primeste pe doi pini o comanda care ii schimba culoarea pe care el trebuie sa o setecteze (adica el, pe rand, va trebui sa transmita cat de “rosu”, “verde” si “albastru” vede in fata lui). Cu aceste date si cu niste valori gasite prin incercari, senzorul detecteaza cu usurinta si fara eroare coluarea cuburilor.

Pentru deplasarea pe traseu, robotul functioneaza dupa un principiu simplu: numara prin cate “intersectii” a umblat (atunci cand toti senzorii mai putin cel din mijloc vad linia neagra robotul considera ca se afla intr-o intersectie). In functie de numarul de intersectii prin care a trecut, robotul stie care va fi actiunea pe care trebuie sa o ia mai departe.

In plus, am implementat si o intrerupere, al carui pin folosit a fost legat la un switch care, in momnetul cand ii este schimbata starea, intreruperea se va activa si va porti robotul.

Rezultate Obţinute

Update 26.05

  1. dupa multe lupte si incercari nenumarate (in care mi-am bubuit priza cand am incarcat acumulatorii -_-) am reusit sa finalizez proiectul.

Concluzii

A fost o experienta unica, plina de obstacole (dintre care credeam ca nu mai pot sa trec peste), dar cu un rezultat de care sunt foarte incantat si multumit.

Download

Jurnal

Update 22.05

  1. adaugat switch proiectului care va opri executia programului cand este pe ON (implementat cu intreruperi)
  2. schimbat schematicul pentru a adauga switch-ul si un modul nou de urmarie a liniei (acesta are senzorii mai apropiati)
  3. incercat driver + senzor de urmarire a liniei impreuna cu un PID controller pentru a testa functionalitatea pieselor si pentru a intelege cum functioneaza modulele.

Update 23.05

  1. ajustat pozitie modul urmarire linie (pentru ca mi-a fost foarte greu sa il fac sa fie foarte aproape de podea, dar am observat ca daca inclin putin de modul, senzorii detecteaza mai de departe negru, dar are nevoie de o suprafata neagra mai mare)
  2. dublat grosime traseu de test si traseu final pentru a detecta mai bine linia neagra
  3. calibrat PID pentru a stabiliza robotul

Update 24.05

  1. am terminaat de scris restul codului dar are foarte multe buguri in zona de luat viraje si detectat intersectii (mai ales cand trebuie sa ia decizia de a vira in mijlocul intersectiei)

Bibliografie/Resurse

pm/prj2024/sseverin/bogdan.prunescu.txt · Last modified: 2024/05/26 22:28 by bogdan.prunescu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0