Autorii pot fi contactati la adresele:
Proiectul nostru asambleaza si programeaza un robotel pentru a urmari o linie neagra (pe un fundal diferit de negru evident). Robotelul face asta prin faptul ca microcontroller-ul primeste feedback de la niste senzori de lumina care ne spun daca robotelul este pe banda, sau nu, si in functie de asta, cotim stanga/dreapta.
Am pornit de la ideea de a face un robotel independent care sa mearga pe o linie, alimentat de baterii (le cam mananca pe paine insa).
Pentru noi e util proiectul pentru ca imbina destule componente hardware la un loc si face un proiect destul de dragut :). Deci ne-a ajutat sa avem un overview mai bun asupra materiei si asupra a ce se poate face cu putin hardware conectat “cum trebuie”.
Schema bloc:
Flow-ul este descis de schema: cel 8 senzori intra in microprocesor in portul ADC unde sunt convertiti si analizati. In functie de logica software interna, microcontroller-ul va trimite semnale de 0/1 catre driver-ul de motoare, care va face motoarele sa se miste conform cu logica dorita de microprocesor.
<WRAP left round box 20%>
Motor 1
</WRAP>
<WRAP left round box 20%>
↑ Driver Motoare → ↓
</WRAP>
<WRAP left round box 20%>
← Placuta PM2013 →
</WRAP>
<WRAP left round box 20%>
← Placuta Senzori
</WRAP>
<WRAP left round box 20%>
Motor 2
</WRAP>
Ne-am organizat robotul in asa fel incat toate piesele sa fie alimentate de la o
singura baterie de 9V, nu mai multe (si se consuma super repede). Bateria are niste
fire care ies din conectorul cumparat (vezi tabel piese) pe care le-am bifurcat in
doua, niste fire merg pe alimentarea placutei cu uC, iar celelalte doua fire
merg la vcc-ul si gnd-ul driver-ului de motoare.
Lista de piese pe care am achizitionat-o:
Piese | Nr | Pret | Provider |
---|---|---|---|
Bara senzori | 1 | 59 RON | robofun.ro |
Motoare | 2 | 63 RON | robofun.ro |
set roti + jante | 1 | 25 RON | robofun.ro |
Driver Motoare | 1 | 75 RON | robofun.ro |
Baterie 9V | 4+ (multe, se consuma) | 10 RON | supermarket-uri |
Conector Baterie | 1 | 2 RON | robofun.ro |
Fire mama-tata | 1 | 10 RON | robofun.ro |
Placuta PM2013 | 1 | 45 RON | Laborator PM |
Ball caster | 1 | 19 RON | robofun.ro |
cadru robotel | 1 | 0 RON | facut de noi din placa de test |
Total | 371+ RON |
Schemele electrice:
Placuta PM2013:
Driver motoare:
Placuta senzori:
Codul este organizat in felul urmator:
Se initializeaza convertorul ADC, precum si Timer-ul 1 pe o rezolutie de 10 biti, in modul fast PWM.
Cu ajutorul timerului, modificand OCR1A si OCR1B se ajusteaza factorii de umplere. Deasemenea exista functii pentru inversarea modului fastPWM pentru a putea schimba directia motoarelor. Pentru a merge inainte, dintre cele doua inputuri ale unui motor, unul este constant pe 0 si celalalt variaza prin fastPWM. Pentru a inversa directia, inputul de pe 0 este trecut constant pe 1 si se variaza invers PWM celalalt input. Analog pentru ambele motoare.
Codul de directie este ajustat cu un compensator pentru a ne asigura ca robotul merge drept cand este pe linie.
Am realizat logica printr-o secventa de operatii conditionale, in functie de ce senzori simt linia neagra. In acest fel, se ia o decizie cum sa se seteze factorul de umplere la cele doua motoare, precum si directia acestora.
A fost un proiect tare misto (dar cam scumpe piesele). Sunt chestii care au mers plug and play, deci nu e chiar asa o satisfactie uriasa, n-am proiectat noi schema de pm sau alte scheme, dar altfel asamblarea lor si programarea e cool!
Ne-am interesat ce piese avem nevoie, si am scos cam urmatoarea lista:
motoare, driver pt motoare, una din placutele noastre de PM (o aveam ),
roti + jante, placuta de senzori si niste mufe conectoare (am vrut sa lipim
direct, dar mai bine ca am cumparat pt ca le-am tot schimbat locul).
Ne-am decis cum proiectam odata avute piesele, si am inceput cu a misca un motoras
cu ajutorul driver-ului. Driver-ul avea motoarele inscriptionate pe dos pe ea, asa ca
incercand fiindca noi am conectat la motor1 firele din uC in placa de test, asteptam
output la Motor1 (pai normal), si de fapt output era la Motor2 .
Ulterior ne-am intalnit acasa la unul din noi sa asamblam robotelul. Le-am aranjat
cum se vede in poze, folosind insa o placuta de test ca suport pt driver,
peste care am lipit (cu un adeziv puternic, a mai cedat uneori) niste distantieri,
facuti de noi (cu flexul , n-au vrut sa ne taie nenea din obi (reclama negativa)).
Dupa ce am asamblat motorul l-am facut sa se invarteasca pe loc in cerc sau diverse
alte miscari de genul. Am avut probleme cu faptul ca am facut design-ul putin gresit,
punand bateria in fata, si cam pica in *bot*. Am lasat ball caster-ul cat se poate de jos
dar acum senzorii nu mai erau la 6mm de sol cum era maxim recomandat, ci 8mm (dar e ok totusi).
Am mai avut o problema cu driver-ul de motoare, cu faptul ca CurrentSensing B nu era
legat la masa, desi CurrentSensing A era legat ( , noi ne asteaptam sa fie simetric),
si astfel ca nu ne mergea decat un motoras. Cand am gasit problema, am legat un strap pe
sub placa ce leaga CurrentSensing B la Current Sensing A.
Codul apoi l-am scris in penultima saptamana si l-am testat in laboratorul si era ok,
surprinzator pentru noi a facut traseul din prima .
Piese de pe robofun cumparate.
Datasheet uC doc8272.pdf
Datasheet driver motor L298N.pdf
Informatii despre senzori de pe pololu si din lab cu ADC 960