Specificatii |
|
Nume | MR1 |
Dimensiuni | 97mm x 96mm x 94mm (lungime x latime x inaltime) |
Masa | 360g fara baterii 490g cu baterii |
Alimentare | 1 baterie de 9V pentru partea
electronica 4 baterii(acumulatori) R6 / AA de 1.5V pentru motoare |
Microcontroler | PIC16LF877A - I/P la 20MHz, 5V |
Motoare | 2 x GM9 (motorul original a fost inlocuit cu motorul RM2) |
Circuit de comanda pentru motoare | 2 x L293D , cate un integrat pentru fiecare motor |
Roti | 2 x GMPW-9, 67mm diametru |
Caucicuri | 2 x GMTT, 71mm diametru |
Senzori pentru detectia obiectelor | circuit separat bazat pe un PIC16F88 si 4 LED-uri IR cu 4 receptoare TSOP1738 |
Senzori pentru detectia marginii | 2 x RPR-220 ROHM |
Senzori pentru detectia liniei (in modul de functionare line follower) | 3 x RPR-220 ROHM |
Putere de impingere | testat pe o cutie de vopsea de 1600g |
Comunicatie cu PC | comunicatie seriala RS232, 57600baud |
Moduri de functionare | modul de functionare controlat
prin telecomdanda modul de functionare in diagnoza modul de functionare autonom, cu executia programului selectat |
Programe executate | programul de auto-calibrare programul minisumo defensiv programul minisumo ofensiv programul de urmarire a liniei (line follower) |
Soft-ul pentru microcontroler | Softul a fost scris in limbajul
C pentru compilatorul Hi-Tech PICC Il puteti descarca de aici. |
Schema placii de control | O puteti vedea aici. |
Schema senzorului pentru detectia adversarului | O puteti vedea aici. In schema pinii 5 si 14 ai PIC-ului sunt gresit conectati la Vcc si GND. |
Detalii constructive
Vedere de
sus 1 = microcontrolerul
PIC16F877A |
|
Vedere din
partea stanga 1 = motorul din
stanga |
|
Vedere din
partea dreapta 1 = motorul din
dreapta |
|
Vedere din
faţa 1 = LED-uri IR ce emit pulsuri
de 38kHz pentru detectia adversarului |
|
Vedere din
spate 1 = bateria de 9V pentru
alimentarea partii electronice de control |
|
Vedere de
jos 1 = baterii de 1.5V |
|
Vedere cu
placa de baza data deoparte 1 =
driver-ele de motor L293D
|
|
Vedere cu
driver-ul de motoare dat deoparte 1
= motoarele cu reductor |
|
Sasiul - detalii | |
Senzorul de
obiecte si lama de impins - detalii Senzorul de detectie a adversarului emite periodic 5 impulsuri modulate de aproximativ 600us, intercalate 5 perioade de pauza de aproximativ 600us. Aceasta se intampla, pe rand, pe fiecare din cele 4 led-uri emitatoare ( 3 in faţa si 1 in spate). In acelasi timp cu emiterea impulsurilor, sunt numarate ( folosind sistemul de intreruperi) reflexiile detectate de TSOP1738. Daca sunt numarate cel putin 3 reflexii, MR1 decide ca are un obiect in directia LED-ului emitator respectiv. Prin constructie, am protejat cu tub termocontractil fiecare led emitator, astfel incat sa un poata emite direct in vreo unul din TSOP-uri. In acest fel, in modul ideal, TSOP-urile “prind” doar reflexiile. |
|
Schema de principiu de functionare a robotului Afisajul LCD cu interfata I2C nu face parte din constructia robotului deoarece ar depasi greutatea admisa de 500g. Acesta poate fi adaugat pentru a inlesni depanarea soft-ului. |
|
Proba cantarului | |
MR1 impinge
650g In filmuletul asta, MR1 trebuie sa scoata afara din ring o cutie alba cu vopsea, cantarind aproximativ 650g. |
|
MR1 impinge
1600g In filmuletul asta, MR1 trebuie sa scoata afara din ring o cutie galbena cu vopsea, cantarind aproximativ 1600g. |
|
MR1
impotriva camerei foto In filmuletul asta, MR1 da afara din ring camera foto. |
Moduri de functionare
Modul de functionare controlat prin telecomanda
Acest mod de functionare este cel mai prioritar. In momentul in care MR1
receptioneaza un cod valid de la telecomanda IR, executa comanda asociata acelui
cod imediat, indiferent de ce anume facea la acel moment. MR1 intra in acest mod
de functionare imediat ce a primit un cod valid si iese din modul de functionare
controlat prin telecomanda doar atunci cand se apasa tasta OFF a telecomenzii.
Modul de functionare in diagnoza
Acest mod de functionare este al doilea ca prioritate. MR1 intra in modul
diagnoza imediat ce primeste o comanda de diagnoza valida si iese din acest mod
automat daca trec 5 secunde in care nu primeste nici o comanda de diagnoza. MR1
primeste comenzile de diagnoza prin interfata de comunicatie seriala, de la un
software de diagnoza ce ruleaza pe PC. Fiecare comanda de diagnoza este compusa
dintr-o cerere (de la PC catre MR1) si un raspuns (de la MR1 catre PC), dupa
urmatoarea logica:
MR1 primeste cerere de la PC ---> MR1 executa cererea ---> MR1 trimite
raspunsul catre PC
Rolul software-ului de diagnoza rulat pe PC este de a trimite comenzi simple de
diagnoza catre MR1, cum ar fi: comenzi de control al miscarii robotului, comenzi
de control al rotatiei motoarelor (directie de rotatie, viteza), comenzi de
citire a senzorilor, comenzi de calibrare a senzorilor. Aceste comenzi sunt
foarte utlile atunci cand doresc sa testez functionarea robotului.
De exemplu, mi s-a intamplat sa fac o modificare importanta in software si dupa
ce am scris hex-ul in microcontroler sa vad ca robotul minisumo nu mai misca
deloc. Intr-o asemenea situatie, prima intrebare care-mi trece in cap este: "oare
s-a busit vreun motor sau senzor sau noul soft are un bug?". La intrebarea asta
se poate raspunde foarte usor conectand cablul serial, pornind softul de
diagnoza si trimitand comenzi de diagnoza catre MR1.
Modul de functionare autonom
Acesta este modul de functionare in care robotul minisumo se afla cea mai mare
parte a timpului. In acest mod de functionare MR1 intra imediat dupa pornire si
de fiecare data cand iese din unul din modurile de functionare de mai sus. In
acest mod de functionare, robotul executa programul selectat prin jumperii de
selectie a programului.
Programe executate
Robotul meu minisumo poate executa 4 programe diferite. Cele 4 programe sunt
selectate cu ajutorul jump-erilor de selectie a programului.
Programul de auto-calibrare
Acest program are rolul de a calibra pragurile de “alb” si “negru” pentru
senzorii de detectia a marginii si a liniei si de a stabili factorul de umplere
pentru impulsurile de 38kHz ale senzorului de detectie a adversarului.
Pentru a calibra robotelul meu de minisumo sunt necesari urmatorii pasi:
1) pornesc robotul si astept ca ledul de stare sa clipeasca
de 5 ori
2) pun robotul pe ring in zona neagra
3) astept ca ledul de stare sa clipeasca de 5 ori
4) pun robotul cu toti senzorii deasupra marginii albe
5) astept ca ledul de stare sa clipeasca de 5 ori
6) pun robotul la aproximativ 25-30 cm de obiectul pe care
vreau sa-l detecteze
7) astept ca ledul de stare sa ramana aprins
8) in acest moment calibrarea este incheiata
Dar ce se intampla “inauntru”, totusi? MR1 memoreaza valorile masurate de
convertorul analogic-digital pentru fiecare senzor si pentru fiecare zona (alba/neagra).
Pentru fiecare senzor, face o medie intre valoarea de alb si valoarea de negru
si decide ca acea medie este valoarea de prag intre alb si negru. Apoi scrie in
EEPROM toate valorile de prag. Fiecare senzor are, in acest fel, valoarea sa
proprie de prag. Ceva asemanator face si cu senzorul de detectia a adversarului.
Schimba factorul de umplere al impulsurilor de 38kHz pana cand “gaseste”
obiectul din faţa sa. Valorile posibile pentru factorul de umplere sunt 25%, 50%
si 75%. Odata gasit factorul de umplere corect, acesta este memorat in EEPROM.
Programul minisumo defensiv
Executand acest program, robotul minisumo trebuie sa detecteze adversarul si sa
incerce sa-l scoata afara din ring. In plus, MR1 trebuie sa nu iasa de unul
singur afara din ring. O caracteristica care diferentiaza acest program de
programul minisumo ofensiv, este ca MR1 face o manevra de eschivare
imediat dupa trecerea celor 5 secunde de asteptare. Aceasta manevra are rolul de
a evita un robot mai rapid care ar putea ataca direct si imediat dupa cele 5
secunde.
In diagrama urmatoare se pot vedea starile prin care trece robotul minisumo in
timpul executiei acestui program:
Programul minisumo ofensiv
Este aproape identic cu programul minisumo defensiv, singura diferenta fiind ca
lipseste manevra de eschivare dupa expirarea celor 5 secunde de asteptare.
Programul de urmarire a liniei (line follower)
Executand acest program, MR1 trebuie sa urmareasca traseul unei linii negre, de
latime minim 1.5cm. MR1 este un robot minisumo, functionalitatea de urmarire a
unei linii fiind secundara, nu insist asupra acestui program (si nici in
software nu m-am complicat cu el).