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
 2 = conectorul de alimentare de 9V si butonul ON / OFF
 3 = cuartz de 20MHz si condensatori de 22pF
 4 = mufa seriala, MAX232 si condensatorii de 1uF
 5 = stabilizatorul de tensiune 78L05 si ledul de prezenta a tensiunii
 6 = jumper-ii de selectie a programului
 7 = conectorul ICSP
 8 = conectorul pentru driver-ul de motoare
 9 = conectorul pentru modulul de detectie a adversarului
10 = conectorul pentru senzorii de detectie a liniei
11 = conectorul pentru senzorii de detectie a marginii
12 = ledul indicator de stare
13 = TSOP1738

Vedere din partea stanga

1 = motorul din stanga
2 = roata din stanga
3 = roata libera din spate(de fapt e o bila)
4 = lama de impins din fata
5 = conectorul de alimentare de 9V si butonul ON / OFF
6 = microcontrolerul PIC16F877A
7 = bateriile de 1.5V de jos
8 = jumper-ii de selectie a programului

Vedere din partea dreapta

1 = motorul din dreapta
2 = roata din dreapta
3 = roata libera din spate(de fapt e o bila)
4 = lama de impins din fata
5 = mufa seriala
6 = microcontrolerul PIC16F877A
7 = bateriile de 1.5V de jos
8 = receptorul IR TSOP1738

Vedere din faţa

1 = LED-uri IR ce emit pulsuri de 38kHz pentru detectia adversarului
2 = receptoare IR de 38kHz
3 = lama de impins din fata
4 = conectorul pentru senzorii de detectie a liniei
5 = conectorul pentru senzorii de detectie a marginii
6 = conectorul pentru modulul de detectie a adversarului
7 = conectorul de alimentare de 6V pentru dirver-ul de motoare

Modulul de detectie a adversarului, usor vizibil din fata, este bazat pe emisia si receptia radiatiei IR modulata la 38kHz. Modulul este controlat de un microcontroler PIC16F88 ce comunica prin bus-ul I2C cu controlerul principal.
Lama de impins din fata(in egleza ii zice "front scoop", o traducere mai desteapta n-am gasit) are forma concava jos, pentru a  contracara roboti de genul celor de aici.

Vedere din spate

1 = bateria de 9V pentru alimentarea partii electronice de control
2 = motoarele cu reductor
3 = conectorul pentru driver-ul de motoare
4 = roata libera din spate
5 = suportul si bateriile de 1.5V pentru alimentarea driver-elor de motoare(L293D)
6 = receptor IR de 38kHz
7 = LED IR ce emite pulsuri de 38kHz pentru detectia adversarului

Vedere de jos

1 = baterii de 1.5V
2 = roata libera din spate
3 = lama de impins din fata
4 = senzorii de detectie a marginii
5 = senzorii de detectie a liniei

Am pus bateriile (toate 5 au 180-220g) si motoarele cat mai jos posibil pentru a cobora centrul de greutate al robotului.

Vedere cu placa de baza data deoparte

1 = driver-ele de motor L293D
2, 4 = LED IR ce emite pulsuri de 38kHz pentru detectia adversarului
3, 5 = receptor IR de 38kHz
6 = conectorul de alimentare de 6V pentru dirver-ul de motoare
7 = motoarele cu reductor
8 = conectorii de alimentare a motoarelor

 

Vedere cu driver-ul de motoare dat deoparte

1 = motoarele cu reductor
2 = bateria de 9V
3 = LED IR ce emite pulsuri de 38kHz pentru detectia adversarului
4 = receptor IR de 38kHz
5 = conectorul de alimentare de 9V pentru electronica de control

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).
 

Inapoi