Sunteți pe pagina 1din 109

UNIVERSITATEA PO LITEHNICA DI N BUCURETI FACULTATEA DE INGINERIE ELECTRIC

Transmiterea datelor achiziionate de la senzorii robotului NXT la un PC prin conexiune Bluetooth

Autor: Greu Adrian-Victor Grupa: 152 IC ndrumtor: Conf. dr. ing. Constantin Ila

Iunie 2009

Sinteza
Pornind de la prevederile temei proiectului de diplom am urmrit s aplic eficient elementele existente (suportul LEGO Mindstorms NXT), n scopul dezvoltrii platformei de comunicaii a acestora cu elemente soft care s ofere un mediu favorabil i fiabil potenialelor aplicaii. Pentru ndeplinirea cerinelor i detaliilor impuse prin tem am realizat urmtoarele etape principale ale proiectrii: 1. Determinarea resurselor hardware i software necesare comunicrii prin Bluetooth dintre PC i robotul LEGO NXT; 2. Configurarea software a PC-ului pentru conexiunea Bluetooth cu robotul NXT; 3. Stabilirea conexiunii Bluetooth la robotul NXT folosind unul dintre porturile seriale ale PC-ului prin limbajul de programare C# (C Sharp); 4. Conceperea i implementarea algoritmului de achiziie a datelor de la senzorii NXT prin metoda interogrii de la PC n limbajul C# (Metoda 1); 5. Aplicaie practic la Metoda 1, Determinarea poziiei obiectelor cu senzorul de ultrasunete, cu prezentarea i analiza rezultatelor obinute; 6. Conceperea i implementarea algoritmului de transmisie a datelor de la senzorii NXT sub comanda unui program pe robot, n limbajul NXC (Not eXactly C), i algoritmul de recepionare i interpretare a datelor pe PC n limbajul C# (Metoda 2); 7. Aplicaie practic la Metoda 2, Evoluia n timp a mrimilor msurate de ctre senzorii NXT, cu prezentarea i analiza rezultatelor obinute; 8. Compararea celor dou metode prin elaborarea i rularea unei aplicaii speciale.

n afar de elementele consistente menionate mai sus, pentru realizarea proiectului a fost necesar s realizez i o documentare extins asupra domeniului roboilor mobili i a celorlalte domenii conexe temei (comunicaii, programare, senzori, servomotoare), utiliznd att Internetul ct i alte surse reflectate n detaliu n bibliografia de la sfritul lucrrii.

Cuprins
1 2 Introducere ................................................................................................................ 1 Roboi mobili .............................................................................................................. 2 2.1 Definiii, caracteristici i structur ........................................................................ 2 Scurt istoric. Definiii ..................................................................................... 2 Concepte privind existena roboilor .............................................................. 3 Roboi mobili. Elemente de structur ............................................................ 4 Caracterizare general a microprocesoarelor i microcontrolerelor .............. 5 Utilizri i aplicaii ale microcontrolerelor ...................................................... 7 Clasificri i arhitecturi constructive .............................................................. 8 Tipuri de memorii folosite n microcontrolere .............................................. 10 Sistemul de intrri-ieiri .............................................................................. 12 Familii reprezentative de microcontrolere ................................................... 13 Limbaje de programare i compilatoare ...................................................... 17 Caracteristici generale i clasificri ale principalelor tipuri de senzori ......... 19 Senzori cu ultrasunete ................................................................................ 21 2.1.1 2.1.2 2.1.3 2.2 2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 2.2.6 2.2.7 2.3 2.3.1 2.3.2

Sisteme de procesare utilizate n roboi mobili (microcontrolere) ........................ 5

Senzori ............................................................................................................. 19

2.3.2.1 Caracteristici generale ........................................................................... 21 2.3.2.2 Principiul de funcionare al senzorului cu ultrasunete............................. 22 2.3.2.3 Senzorul cu ultrasunete Parallax PING))) .............................................. 24 2.3.3 Senzori de contact ...................................................................................... 27 2.4 2.5 Servomotoare ................................................................................................... 28 Metode de comunicare fr fir (wireless) .......................................................... 32 Comunicaii n Infrarou .............................................................................. 32 Comunicaii prin Bluetooth ........................................................................ 34

2.5.1 2.5.2 3 3.1 3.2

Tehnologia Bluetooth ............................................................................................. 36 Prezentare general ......................................................................................... 36 Principalele caracteristici ale standardului Bluetooth / IEEE 802.15.1 ............... 37 Clasele de putere / acoperire i securitatea Bluetooth ................................ 38 Stiva de protocoale Bluetooth ..................................................................... 39 Descoperirea dispozitivelor Bluetooth ......................................................... 40

3.2.1 3.2.2 3.2.3

3.3 Versiuni n evoluia Bluetooth .......................................................................... 40 3.3.1 Evoluia specificaiilor Bluetooth la standardul IEEE ................................... 40 3.3.2 3.3.3 Bluetooth 1.0 .............................................................................................. 41 Bluetooth 1.1 .............................................................................................. 41

3.3.4 3.3.5 3.3.6

Bluetooth 1.2 (Ratificat ca IEEE Standard 802.15.1-2005)........................ 41 Bluetooth 2.0 (SIG-2004) ............................................................................ 41 Bluetooth 2.1 (SIG-2007) ............................................................................ 42

3.3.7 Bluetooth 3.0 (SIG-2009) ............................................................................ 42 3.4 Modele i arhitecturi de utilizare........................................................................ 42 4 Robotul LEGO Mindstorms NXT .............................................................................. 45 4.1 4.2 4.3 Generaliti ....................................................................................................... 45 Sistemul de procesare al robotului NXT ............................................................ 46 Senzorii robotului NXT ...................................................................................... 47 Senzorul cu ultrasunete NXT ...................................................................... 47 Protocolul de comunicare I2C...................................................................... 48 Servomotorul NXT ...................................................................................... 48

4.3.1 4.3.2 4.3.3 4.4 4.5 5

Metode de comunicare ..................................................................................... 51 Programarea robotului LEGO NXT ................................................................... 51 Limbajul de programare NXC (Not eXactly C) ............................................ 52

4.5.1

Citirea datelor achiziionate de la senzorii NXT prin interogare de la PC .................. 53 5.1 Obiectivele programului de pe PC .................................................................... 53 5.2 5.3 5.4 Resurse hardware i software necesare ........................................................... 54 Limbajul de programare C# (C Sharp) .............................................................. 56 Proiectarea i implementarea aplicaiei de pe PC ............................................. 58 Iniierea conexiunii Bluetooth dintre PC i NXT n C# ................................. 58 Comunicarea PC NXT prin interogare...................................................... 59 Implementarea protocolului de control prin comenzi directe ..................... 59 Algoritmul metodei de interogare de la PC.................................................. 62

5.4.1 5.4.2 5.4.3 5.4.4

5.5 Aplicaie la metoda de citire a datelor achiziionate de la senzorii NXT prin interogare de la PC ................................................................................................................ 63 5.5.1 Determinarea poziiei obiectelor cu senzorul de ultrasunete ....................... 63 5.5.2 6 6.1 Interfaa grafic i analiza datelor obinute.................................................. 65 Citirea datelor achiziionate de la senzorii NXT sub comanda programului NXC ...... 66 Proiectarea i implementarea programului de pe NXT (emitorul) ................... 67 Obiectivele programului de pe NXT ............................................................ 67 Achiziia datelor de la senzorii NXT ............................................................ 67 Serializarea datelor achiziionate ................................................................ 68 Transmisia datelor prin Bluetooth de la NXT la PC ..................................... 69 Algoritmul programului NXC ....................................................................... 69 Algoritmul programului de pe PC ................................................................ 70 Interfaa grafic a programului de pe PC .................................................... 72 6.1.1 6.1.2 6.1.3 6.1.4 6.1.5 6.2 6.2.1 6.2.2

Proiectarea i implementarea programului de pe PC (receptorul) ..................... 70

6.3 Aplicaie la metoda de citire a datelor achiziionate de la senzorii NXT sub comanda programului NXC .................................................................................................... 73 6.3.1 6.3.2 7 7.1 7.2 8 9 Evoluia n timp a mrimilor msurate de ctre senzorii NXT ...................... 73 Rezultatele obinute .................................................................................... 74

Analiza rezultatelor obinute ..................................................................................... 76 Rezultatele obinute la aplicaiile implementate................................................. 76 Compararea celor dou metode ....................................................................... 76

Concluzii .................................................................................................................. 78 Anexe ...................................................................................................................... 81 9.1 9.2 9.3 9.4 9.5 9.6 9.7 Anexa 1. Metoda 1. Clasa OperatorNXT........................................................... 81 Anexa 2. Metoda 1. Modul de afisare a datelor de la senzorul cu ultrasunete ... 87 Anexa 3. Metoda 1. Programul principal al aplicatiei ......................................... 90 Anexa 4. Metoda 2. Programul NXC ................................................................. 94 Anexa 5. Metoda 2. Clasa ReceptorNXT .......................................................... 97 Anexa 6. Metoda 2. Modul de listare i export date......................................... 100 Anexa 7. Metoda 2. Programul principal al aplicatiei ....................................... 102

Lista de figuri
Figura 1. Schia microcontrolerului PIC16F84 pe 8 bii cu arhitectur RISC ..................... 6 Figura 2. Robotul humanoid Johnnie ............................................................................... 8 Figura 3. AIBO ................................................................................................................. 8 Figura 4. ASIMO .............................................................................................................. 8 Figura 5. Arhitecturile Harvard i von-Neumann............................................................. 10 Figura 6. Sensibilitatea senzorului Devantech SRF08.................................................... 22 Figura 7. Sensibilitatea senzorului Devantech SRF10.................................................... 22 Figura 8. Principiul de funcionare al senzorului cu ultrasunete ...................................... 23 Figura 9. Senzorul cu ultrasunete Parallax PING))) ....................................................... 24 Figura 10. Cazuri n care obiectul nu este detectat de senzorul cu ultrasunete .............. 25 Figura 11. Test senzor Parallax PING))) pentru un paravan paralel din carton............... 26 Figura 12. Zona de sensibilitate a senzorului Parallax PING))) pentru testul cu paravan 26 Figura 13. Activarea senzorilor bumper n momentul ciocnirii robotului cu un obiect ...... 27 Figura 14. Componentele unui servomotor. Servomotorul Futaba S3151 ...................... 28 Figura 15. Comanda prin PWM. Servomotor standard i digital ..................................... 29 Figura 16. Caracteristicile cuplu-timp pentru servomotoarele standard i digitale .......... 30 Figura 17. Schema bloc a unui sistem de acionare cu servomotoare de c.c. ................ 31 Figura 18. Sistem de comunicaii n infrarou................................................................. 33 Figura 19. Dispozitiv i retea Bluetooth Piconet ............................................................. 35 Figura 20. Reele Bluetooth Scatternet .......................................................................... 37 Figura 21. Stiva de protocoale Bluetooth ....................................................................... 39 Figura 22. Arhitecturi Bluetooth ...................................................................................... 42 Figura 23. Structura pachetelor i asocierea canalelor pentru master/slave ................... 43 Figura 24. Diagrama sistemului de procesare NXT ........................................................ 46 Figura 25. Servomotor NXT. Structura interna ............................................................... 49

Figura 26. Servomotor NXT. Encoder de rotaie ............................................................ 50 Figura 27. Servomotor NXT. Dispozitiv de protecie la supracurent ............................... 50 Figura 28. Configurarea conexiunii Bluetooth dintre PC i NXT ..................................... 55 Figura 29. Arhitectura generala a protocolului de comunicare NXT................................ 60 Figura 30. Structura unei comenzi trimise prin Bluetooth ............................................... 61 Figura 31. Diagrama simplificata a algoritmului de citire a datelor achiziionate prin interogare de la PC ................................................................................................................... 63 Figura 32. Aplicaie la metoda de citire a datelor de la senzori prin interogare de la PC 64 Figura 33. Interfaa grafic a aplicaiei ........................................................................... 65 Figura 34. Diagrama simplificat a algotitmului programului NXC (emitor) .................. 70 Figura 35. Diagram simplificat a algoritmului de citirea a datelor de la senzorii NXT transmise la PC de ctre programul scris n NXC ...................................................................... 71 Figura 36. Interfaa grafic a programului. Iniierea conexiunii Bluetooth ....................... 72 Figura 37. Interfaa grafic a programului. Datele achiziionate ...................................... 72 Figura 38. Aplicaie la metoda de citire a datelor achiziionate sub comanda programului NXC .......................................................................................................................................... 74 Figura 39. Evoluia distanei parcurse de robot .............................................................. 75 Figura 40. Evoluia distanei pn la obstacol ................................................................ 75 Figura 41. Rezultatele comparrii celor dou metode .................................................... 77

1 Introducere
Studiile din domeniu roboticii arat c pentru a putea implementa concepte din domenii precum inteligena artificial, este necesar construirea unor arhitecturi modulare, scalabile i eficiente, att pentru componentele hardware ale robotului ct i pentru platformele software pe care acesta le utilizeaz. Pentru eficientizarea cercetrii pe baza modularitii i scalabilitii amintite mai sus, s-au dezvoltate produse cu pri mecanice care respect binecunoscutul principiu LEGO al interconexiunii dintre elemente modularizate. LEGO Mindstorms este o serie de componente LEGO care cuprinde uniti programabile, senzori, servomotoare i alte pri constructive. Produsul LEGO Mindstorms NXT a fost lansat n iulie 2006 i este succesorul primului model, Robotics Invention System (RCX), care a strnit interesul unui numr mare de amatori. Succesul setului NXT este argumentat n special de uurina cu care se poate personaliza i extinde platforma. Robotul mobil nu ar fi ns nici pe departe la fel de eficient, dac nu ar fi susinut de o platform software adecvat aplicaiilor tot mai complexe i performante din punctul de vedere al informaiilor procesate. n acest context, tema actualului proiect de diplom vizeaz s aplice eficient elementele existente (suportul LEGO Mindstorms NXT), n scopul dezvoltrii platformei de comunicaii a acestora cu elemente soft care s ofere un mediu favorabil i fiabil potenialelor aplicaii. Datorit nevoii tot mai ridicate de transmitere fiabil a datelor cu viteze mari, tehnologiile performante utilizate n prezent n diverse domenii ale comunicaiilor au ptruns i n roboii mobili. Astfel, LEGO Mindstorms NXT conine ca suport de comunicaii tehnologia Bluetooth. Performanele, ca tehnologie fiabil de acces de band larg pe distane mici, precum i eficiena sa economic i constructiv (dispozitive cu cost redus i cele mai mici dimensiuni), au determinat adoptarea, pe baza specificaiilor Bluetooth, a standardului IEEE 802.15.1, care a consacrat i a dat un gir corespuntor tehnologiei. Odat creat platforma mecatronic cu suportul de comunicaii performant oferit de Bluetooth, se pune problema dezvoltrii unui mediu soft adecvat aestui suport, care s permit comunicarea datelor n diverse configuraii cerute de aplicaii scientifice sau didactice specifice, n condiii de vitez i fiabilitate optimizabile. Pe aceast linie proiectul i propune studiul i elaborarea unor elemente soft care s permit abordarea mai eficient a sistemului de comunicaie PC robot mobil didactic, viznd realizarea optim a proceselor de comand, achiziie de date i execuie.

2 Roboi mobili
2.1 Definiii, caracteristici i structur
2.1.1 Scurt istoric. Definiii

Termenul de "robotics" (n traducere liber robotic) se refer la tiina care se ocup de studiul i utilizarea roboilor. Acest termen a fost prima dat folosit de scriitorul i omul de tiin american de origine rus, Isaac Asimov, ntr-o scurt povestioar numit "Runaround" n anul 1950. Primii roboi s-au numit Unimates i au aprut n anii '50, fiind dezvoltai de George Devol i Joe Engelberger. Acesta din urm a format Unimation i a fost primul care a vndut roboi, fiind considerat de unii printele roboticii [10]. Conform enciclopediei Webster, un robot este "un dispozitiv automat, care execut funcii normal atribuite oamenilor, sau o main cu asemnare de om". n timp ce aceast definiie ar putea fi satisfctoare pentru unii dintre noi, nu este ns neaprat i complet. O alt definiie a fost dat de Institutul de Robotic din America, n anul 1979. Conform acestei definiii, un robot este "o main reprogramabil, multifuncional creat pentru a muta diverse materiale, buci, unelte sau alte dispozitive specializate prin diverse micri programate, pentru realizarea unei varieti mari de sarcini". O definiie mai scurt i larg acceptat la ora actual este urmtoarea: un robot este un sistem inteligent care interacioneaz cu mediul fizic nconjurtor, prin intermediul unor senzori efectori. Pentru a modela lumea ncojurtoare este necesar ca un robot s adune date prin intermediul senzorilor de-a lungul unei perioade de timp. Orice tip de senzor este bineneles predispus la erori. Prin prisma acestei definiii, s-ar putea spune c i omul este un robot. Omul "interacioneaz" cu lumea nconjurtoare prin intermediul unor senzori i a unor efectori, reprezentate n lumea biologic de terminaii nervoase respectiv muchi. Bineneles, diferena cea mai semnificativ ntre robot i om, este c robotul a fost creat de om i nu invers.

2.1.2

Concepte privind existena roboilor

Binecunoscutul autor de literatur Science Fiction, Isaac Asimov, a propus trei "legi ale roboticii" sau mai bine zis ale existenei unui robot. Mai trziu acesta a adugat nc o lege, numit legea zero. Cu toate c aceste legi au fost privite la nceput ca fiind o pur ficiune, ele au fost preluate mai trziu att de ali scriitori de Science Fiction ct i de oameni de tiin, ca i principii de baz pentru existena unui robot. Astfel, Isaac Asimov este recunoscut de unii ca fiind printre oamenii care au pus bazele (fie ele pur abstracte) ale tiinei pe care astzi o numim robotic. Legile existenei unui robot sunt [10]: I. Un robot nu are voie s provoace vreun ru umanitii, sau prin inactivitate, s permit vreun ru umanitii.

II. Un robot nu are voie s rneasc o persoan uman, sau s permit rnirea unei persoane umane prin inactivitatea acestuia, cu excepia cazului cnd aceast lege contravine cu vreo lege anterioar. III. Un robot trebuie s respecte toate ordinele date de o persoan uman, cu excepia acelor reguli care intr n conflict cu vreo lege anterioar. IV. Un robot trebuie s-i protejeze propria existen atta timp ct aceast activitate nu intr n conflict cu legile anterioare. Dezvoltarea exploziv a tehnologiilor, incluznd n primul rnd pe cele electronice, a determinat utilizarea roboilor n majoritatea industriilor. Astfel exist att de multe tipuri de roboi folosii pentru diverse servicii, nct o enumerare a tuturor tipurilor acestora ar fi aproape imposibil. O clasificare aproximativ a celor mai ntlnite tipuri de roboi ar putea fi:

Androizi, roboi construii ca s mimeze comportamentul i nfiarea uman; Roboi statici, roboi folosii n diverse fabrici i laboratoare ca de exemplu brae robot; Roboi mobili, roboi care se deplaseaz ntr-un anumit mediu fr intervenie uman i realizeaz anumite obiective; Roboi autonomi, roboi care i ndeplinesc sarcinile fr intervenie din partea unui operator uman i i obin energia necesar funcionrii din mediul nconjurtor; Tele-roboi, care sunt ghidai prin dispozitive gen telecomand de un operator uman; Linii autonome de producie n fabrici, sunt tot un fel de roboi, chiar dac nu sunt mobili, deoarece au toate facilitile definiiei noastre.

Dintre toate aceste tipuri menionate mai sus, n proiect se studiaz doar roboii mobili, de aceea ori de cte ori se va face referire la termenul de robot, se va nelege de fapt un robot mobil.

2.1.3

Roboi mobili. Elemente de structur

Un robot mobil ar putea fi descris ca un robot care trebuie s se deplaseze ntr-un anumit mediu, fr ajutorul unui operator uman i s execute anumite sarcini date de acesta. Deci principala caracteristic este mobilitatea. Roboii mobili au ntrebuinri multiple. De-a lungul timpului au existat i exist roboi mobili cu funcii diverse, de la aspirator pentru cas la explorator spaial, de la vehicul ghidat automat (AGV) folosit n industrie la robot didactic folosit doar pentru scopuri tiinifice. Un robot mobil este alctuit dintr-o serie de componente, unele de natur fizic (hardware), iar altele de natur logic, computaional (software). Din punct de vedere al componentelor hardware, un robot mobil poate fi considerat ca o colecie de sisteme pentru [13]: Locomoie i aciune modalitatea prin care robotul se mic n mediul su ambiant; Sesizare prin sistem senzorial modalitatea prin care robotul msoar proprietile lui i ale mediului nconjurtor; Procesare modalitatea prin care robotul proceseaz i ia decizii n legtur cu informaiile primite de la sistemul senzorial; Comunicare modalitatea prin care robotul comunic cu ali roboi sau cu un operator din mediu. n ce privete locomoia i aciunea, pentru a se putea deplasa n mediul ambiant i a executa anumite aciuni prin intermediul organelor sale mobile, roboii mobili au nevoie de anumite componente electro-mecanice care s le permit o micare precis, bazate pe transformarea energiei electrice n energie mecanic de ctre motoare i servomotoare specifice. Printre aceste componente, cele mai reprezentative sunt: Motoare, servomotoare, electromagnei; Angrenaje, sisteme de transmisie; Roi, enile, picioare, perne de aer sau perne magnetice, elice.

2.2 Sisteme de procesare utilizate n roboi mobili (microcontrolere)


2.2.1 Caracterizare general a microprocesoarelor i microcontrolerelor

n general se poate considera c i controlerele fac parte din familia larg a calculatoarelor, fiind o structur electronic destinat controlului unui proces sau, mai general, unei interaciuni caracteristice cu mediul exterior, fr s fie necesar intervenia operatorului uman. Primele controlere au fost realizate n tehnologii pur analogice, folosind componente electronice discrete i/sau componente electromecanice (de exemplu relee). Cele care fac apel la tehnica numeric modern au fost realizate iniial pe baza logicii cablate (cu circuite integrate numerice standard SSI i MSI ) i a unei electronici analogice uneori complexe, motiv pentru care "strluceau" prin dimensiuni mari, consum energetic pe msur i, nu de puine ori, o fiabilitate care lsa de dorit. Pe msur ce procesul de miniaturizare a continuat, a fost posibil ca majoritatea componentelor necesare realizrii unei astfel de structuri s fie ncorporate (integrate) la nivelul unui singur microcircuit (cip). Astfel c un microcontroler ar putea fi descris ca fiind i o soluie a problemei controlului cu ajutorul unui singur dispozitiv integrat (aproximativ). O definiie, cu un sens foarte larg de cuprindere, ar fi aceea c un microcontroler este un microcircuit care ncorporeaz o unitate central (CPU) i o memorie mpreun cu resurse care-i permit interaciunea cu mediul exterior. Resursele integrate la nivelul microcircuitului ar trebui s includ, cel puin, urmtoarele componente [15]: a. b. c. d. e. f. o unitate central (CPU), cu un oscilator intern pentru ceasul de sistem; o memorie local tip ROM/PROM / EPROM / FLASH i eventual una de tip RAM; un sistem de ntreruperi; I/O intrri / ieiri numerice (de tip port paralel); un port serial de tip asincron i / sau sincron, programabil; un sistem de timere-temporizatoare / numrtoare programabile.

Este posibil ca la acestea s fie adugate, la un pre de cost avantajos, caracteristici specifice sarcinii de control care trebuie ndeplinite: g. h. i. j. k. l. un sistem de conversie analog numeric (una sau mai multe intrri analogice); un sistem de conversie numeric analogic i / sau ieiri PWM (cu modulare n durat); un comparator analogic; memorie de date nevolatil de tip EEPROM; faciliti suplimentare pentru sistemul de temporizare / numrare (captare i comparare); faciliti pentru optimizarea consumului propriu. 5

Un microcontroler tipic mai are, la nivelul unitii centrale, faciliti de prelucrare a informaiei la nivel de bit, de acces direct i uor la intrri / ieiri i un mecanism de prelucrare a ntreruperilor rapid i eficient. Utilizarea unui microcontroler constituie o soluie prin care se poate reduce dramatic numrul componentelor electronice precum i costul proiectrii i al dezvoltrii unui produs. Utilizarea unui microcontroler, orict de evoluat, nu elimin unele componente ale interfeei cu mediul exterior (atunci cnd ele sunt chiar necesare): subsisteme de prelucrare analogic (amplificare, redresare, filtrare, protecie-limitare), elemente pentru realizarea izolrii galvanice (optocuploare, transformatoare), elemente de comutaie de putere (tranzistoare de putere, relee electromecanice sau statice). n Figura 1 se prezint ca exemplu o structur tipic de microcontroler [15]:

Figura 1. Schia microcontrolerului PIC16F84 pe 8 bii cu arhitectur RISC

n Figura 1 sunt introduse urmtoarele elemente: Memorie program (FLASH) - pentru memorarea unui program scris. Pentru c memoria ce este fcut n tehnologia FLASH poate fi programat i tears mai mult dect odat, aceasta face microcontrolerul potrivit pentru dezvoltarea de component; EEPROM - memorie de date ce trebuie s fie salvate cnd nu mai este alimentare. Este n mod uzual folosit pentru memorarea de date importante ce nu trebuie pierdute dac sursa de alimentare se ntrerupe dintr-o dat. De exemplu, o astfel de dat este o temperatur prestabilit n regulatoarele de temperatur. Dac n timpul ntreruperii alimentrii aceast dat se pierde, va trebui s facem ajustarea nc o dat la revenirea alimentrii. Astfel componenta noastr pierde n privina auto-meninerii; RAM - memorie de date folosit de un program n timpul executrii sale. n RAM sunt memorate toate rezultatele intermediare sau datele temporare ce nu sunt cruciale la ntreruperea sursei de alimentare; 6

PORTUL A i PORTUL B sunt conexiuni fizice ntre microcontroler i lumea de afar. Portul A are 5 pini, iar portul B are 8 pini; TIMER-UL LIBER (FREE-RUN) este un registru de 8 bii n interiorul microcontrolerului ce lucreaz independent de program. La fiecare al patrulea impuls de ceas al oscilatorului i ncrementeaz valoarea lui pn ce atinge maximul (255), i apoi ncepe s numere tot din nou de la zero; UNITATEA DE PROCESARE CENTRAL are rolul unui element de conectivitate ntre celelalte blocuri ale microcontrolerului. Coordoneaz lucrul altor blocuri i execut programul utilizatorului. 2.2.2 Utilizri i aplicaii ale microcontrolerelor

Toate aplicaiile n care se utilizeaz microcontrolere fac parte din categoria aa ziselor sisteme ncapsulate-integrate (embedded systems), la care existena unui sistem de calcul incorporat este (aproape) transparent pentru utilizator. Pentru c utilizarea lor este de foarte multe ori sinonim cu ideea de control, microcontrolerele sunt utilizate masiv n robotic i mecatronic. Conceptul de mecatronic este pn la urm indisolubil legat de utilizarea microcontrolerelor. Automatizarea procesului de fabricaie-producie este un alt mare beneficiar,(CNC Computerised Numerical Controls - comenzi numerice pentru mainile unelte, automate programabile - PLC, linii flexibile de fabricaie, etc.). Indiferent de natura procesului automatizat sarcinile specifice pot fi eventual distribuite la un mare numr de microcontrolere integrate ntrun sistem unic prin intermediul uneia sau mai multor magistrale. Printre numeroasele domenii unde utilizarea microcontrolerelor este practic un standard industrial se pot meniona: n industria de automobile (controlul aprinderii /motorului, climatizare, diagnoz, sisteme de alarm, etc.), n aa zisa electronic de consum (sisteme audio, televizoare, camere video i videocasetofoane, telefonie mobil, GPS-uri, jocuri electronice, etc.), n aparatura electrocasnic (maini de splat, frigidere, cuptoare cu microunde, aspiratoare), n controlul mediului i climatizare (sere, locuine, hale industriale), n industria aerospaial, n mijloacele moderne de msurare - instrumentaie (aparate de msur, senzori i traductoare inteligente), la realizarea de periferice pentru calculatoare, n medicin. n Figura 2, Figura 3, Figura 4 se prezint cteva exemple de roboi [14]:

Figura 3. AIBO

Figura 2. Robotul humanoid Johnnie

Figura 4. ASIMO

Johnnie (Figura 2), un robot umanoid destul de simplu, construit la Universitatea Tehnic din Munchen n 1998, utilizeaz 5 microcontrolere, conectate prin intermediul unei magistrale CAN la un calculator PC. Un numr foarte mare de microcontrolere sunt folosite i de aa zisele jucrii inteligente, din care capetele de serie cele mai cunoscute sunt cei doi roboi, unul canin i altul umanoid: AIBO (Sony, Figura 3) i ASIMO (Honda, Figura 4). ASIMO folosete 26 de microcontrolere numai pentru controlul individual al celor 26 de elemente de acionare inteligente (motoare). Ca exemple din industria de automobile, numai la nivelul anului 1999, un BMW seria 7 utiliza 65 de microcontrolere, iar un Mercedes din clasa S utiliza 63 de microcontrolere. 2.2.3 Clasificri i arhitecturi constructive

Exist la ora actual un numr extrem de mare de tipuri constructive de microcontrolere. Un criteriu de clasificare care se poate aplica ntotdeauna este lungimea (dimensiunea) cuvntului de date. Funcie de puterea de calcul dorit i de alte caracteristici se pot alege variante avnd dimensiunea cuvntului de date de 4, 8, 16 sau 32 de bii (exist chiar i variante de 64 de bii).

Practic, toate microcontrolerele se realizeaz la ora actual n tehnologie CMOS (tehnologii similare celor utilizate la seriile standard CMOS de circuite numerice: HC, AC, ALV, etc.). Se pot realiza astfel structuri cu o mare densitate de integrare, cu un consum redus (care va depinde de frecvena de lucru), permind eventual alimentarea de la baterie. Logica intern este static (total sau n cea mai mare parte) permind astfel, n anumite condiii, micorarea frecvenei de ceas sau chiar oprirea ceasului n ideea optimizrii consumului. Tehnologia este caracterizat i de o imunitate mai mare la perturbaii, esenial ntr-un mare numr de aplicaii specifice. Se realizeaz variante pentru domeniu extins al temperaturii de funcionare (de ex.- 40 +85 0C). Arhitectura unitii centrale de calcul (CPU) este unul din elementele cele mai importante care trebuie avut n vedere n analiza oricrui sistem de calcul. Principalele concepte sunt urmtoarele: 1) Arhitecturi de tip "von Neumann" Cele mai multe microcontrolere sunt realizate pe baza acestei arhitecturi de sistem. Microcontrolerele bazate pe aceast arhitectur au o unitate central (CPU) caracterizat de existena unui singur spaiu de memorie utilizat pentru memorarea att a codului instruciunilor ct i a datelor ce fac obiectul prelucrrii. 2) Arhitecturi de tip "Harvard" La aceast arhitectur exist spaii de memorie separate pentru program i date. n consecin ar trebui s existe i magistrale separate (de adrese i date) pentru codul instruciunilor i respectiv pentru date. Este arhitectura standard pentru procesoarele numerice de semnal (DSP). 3) CISC Aproape toate microcontrolerele au la baza realizrii CPU conceptul CISC (Complex Instruction Set Computer). Aceasta nseamn un set uzual de peste 80 instruciuni, multe din ele foarte puternice i specializate. De obicei multe din aceste instruciuni sunt foarte diferite ntre ele: unele opereaz numai cu anumite spaii de adrese sau registre, altele permit numai anumite moduri de adresare, etc. 4) RISC (Reduced Instruction Set Computer) Este un concept de realizare a CPU care a nceput s fie utilizat cu succes de ceva timp i la realizarea microcontrolerelor. Prin implementarea unui set redus de instruciuni care se pot executa foarte rapid i eficient, se obine o reducere a complexitii microcircuitului, suprafaa disponibilizat putnd fi utilizat n alte scopuri. n Figura 5 se prezint o comparaie ntre arhitecturile Harvard i von-Neuman [15].

Figura 5. Arhitecturile Harvard i von-Neumann

Arhitectura Harvard este un concept mai nou dect von-Neumann. S-a nscut din nevoia de mrire a vitezei microcontrolerului. n arhitectura Harvard, bus-ul de date i bus-ul de adrese sunt separate. Astfel este posibil un mare debit de date prin unitatea de procesare central, i bineneles, o vitez mai mare de lucru. Microcontrolerele cu arhitectur Harvard sunt de asemenea numite "microcontrolere RISC". Microcontrolerele cu arhitectura von-Newmann sunt numite "microcontrolere CISC". 2.2.4 Tipuri de memorii folosite n microcontrolere

n afar de memoria local de tip RAM, de dimensiuni relativ reduse (uzual de la x10 octei la x1k), implementat ca atare sau existent sub forma unui set de registre i destinat memorrii datelor (variabilelor), mai exist o serie de aspecte specifice, marea majoritate a acestora fiind legat de implementarea fizic a memoriei de program (i eventual a unei pri a memoriei de date) cu ajutorul unor memorii nevolatile. Clasic, memoria de program era implementat ntr-o variant de tip ROM: EPROM pentru dezvoltare i producie pe scar mic/medie sau mask-ROM pentru producia de mas. Principalele concepte noi aprute de a lungul timpului n legtur cu implementarea memoriei de program sau date sunt enumerate n continuare [15].

10

a. OTP - majoritatea productorilor ofer variante de microcontrolere la care memoria local de program este de tip OTP (One Time Programmable), practic o memorie PROM identic intern cu varianta EPROM, dar fr fereastra de cuar pentru tergere (deci i mai ieftine); aceste variante pot fi utilizate ca o alternativ pentru o producie limitat, pn n momentul testrii i validrii finale a codului, moment n care pot fi comandate variantele (mask) ROM propriu-zise, cele mai economice pentru o producie de mas. b. FLASH EPROM - este o soluie mai bun dect EPROM-ul propriu-zis atunci cnd este necesar un volum mare de memorie program (nevolatil); mai rapid i cu un numr garantat suficient de mare (x10000) de cicluri de programare (de tergere/scriere), este caracterizat i prin modaliti mai flexibile de programare; este utilizat numai ca memorie de program. c. EEPROM - multe microcontrolere au i o memorie de acest tip, de dimensiune limitat (de la x10 octei la x K octei), destinat memorrii unui numr limitat de parametric (memorie de date) care eventual trebuie modificai din timp n timp; este o memorie relativ lent (la scriere), dar cu un numr de cicluri de tergere/scriere mai mare ca FLASH-ul (x100000). d. NOVRAM (RAM nevolatil) - realizat prin alimentarea local (baterie, acumulator) a unui masiv RAM CMOS atunci cnd este necesar un volum mare de memorie de program i date nevolatil; mult mai rapid dect toate celelalte tipuri i fr limitri ca numr de cicluri. e. Programarea "n System" (ISP-n System Programming) - folosirea unor memorii nevolatile de tip FLASH face posibil i "programarea" unui astfel de microcontroler fr a-l scoate din sistemul n care este ncorporat (programare on-line, n System Programming); programarea se face de regul prin intermediul unei interfee seriale dedicate de tip ISP (poate avea nume diferite) sau a unei interfee standard JTAG. Exist microcontrolere la care aceast programare se poate face prin intermediul portului serial asincron sau al interfeei CAN (Controller Area Network). f. Bootloader - multe din microcontrolerele recente la care memoria de program este de tip FLASH au i facilitatea (au de fapt instruciuni dedicate acestui scop) de a putea i scrie n aceast memorie de program fr a utiliza un circuit de programare extern. Astfel n microcontroler poate exista permanent (rezident) un cod de mici dimensiuni (denumit i bootloader) care pur i simplu va ncrca prin intermediul portului serial (este doar un exemplu) codul utilizator sau constantele pe care acesta vrea eventual s le actualizeze. Bootloader-ul este i cel care lanseaz n execuie programul utilizator dup ncrcarea acestuia. g. Protejarea codului - protejarea codului program dintr-o memorie local nevolatil mpotriva accesului neautorizat (la citire deoarece pirateria soft exist i aici) este oferit ca o opiune (ea mai trebuie i folosit!) la variantele FLASH, EPROM sau OTP. Codul poate fi protejat att la citire ct i la scriere (practic circuitul trebuie ters, nainte de a se mai putea scrie ceva n el). Este eliminat astfel posibilitatea de a se realiza, n acest caz, de patch-uri (alterri cu un anumit scop) ale codului original. La variantele mask-ROM propriu-zis protecia este de cele mai multe ori implicit.

11

h. Memoria extern de program sau date - marea majoritate a familiilor de microcontrolere permit i utilizarea de memorie extern de program (tipic ROM) sau date (tipic RAM). Aceasta presupune existena i utilizarea unor magistrale externe de adrese i date. Conexiunile externe necesare pentru acestea sunt disponibile ca funcii alternative ale pinilor. Din pcate, n aceast situaie numrul de conexiuni exterioare disponibile pentru interfaa cu exteriorul se reduce dramatic, reducnd mult din versatilitatea microcontrolerului.

2.2.5

Sistemul de intrri-ieiri

Toate microcontrolerele au un numr oarecare de intrri / ieiri numerice (de la x1 la x10) organizate sub forma unor porturi I/O; conexiunile exterioare sunt bidirecionale sau unidirecionale, unele sunt multifuncionale (se ofer funcii alternative pe acelai pin), unele pot avea o capacitate sporit de a absorbi curent, etc. n afar de acest set de intrri/ieiri de uz general, pentru interfaa cu mediul exterior se ofer o serie de alte faciliti importante de intrare/ieire cum ar f [15]i: a. UART (Universal Asynchronous Receiver Transmitter) este un port serial bidirecional destinat implementrii unui protocol clasic de comunicaie asincron; USART (Universal Synchronous Asynchronous Receiver Transmitter) este un port similar, dar care permite implementarea i a unui protocol sincron cu obinerea unor viteze mai mari de comunicaie; SCI (Serial Communications Interface) este un circuit de tip UART mbuntit, definit i utilizate de firma Freescale(Motorola). LIN (Local Interconnect Network) reprezint o implementare particular a unui protocol de comunicaie asincron, utilizat n industria de automobile ca o alternativ de mic vitez dar cu pre sczut pentru magistrala i protocolul CAN . b. Porturi seriale sincrone dedicate - sunt destinate transferului serial de date de mare vitez cu unele periferice specializate (sisteme de afiare, convertoare analog-numerice, etc.) sau care permit conectarea ntr-o reea de comunicaie. Presupun existena, mpreun cu datele, a unui semnal de ceas (implicit sau explicit) pentru sincronizarea acestora. Implic i implementarea unor protocoale mai mult sau mai puin complexe de transfer al informaiei, fiind de fapt vorba de o magistral serial. Exist cteva implementri rspndite (sunt prezentate n ordinea cresctoare a complexitii): - SPI (Serial Peripheral Interface) este un port serial sincron definit de firma Motorola - Microwire / Microwire Plus este o interfa serial bidirecional sincron definit i utilizat de firma National Semiconductors - I2C (Inter Integrated Circuits bus) este o interfa serial bidirecional (pe numai 2 fire), dezvoltat de Philips, destinat aplicaiilor de 8 bii. Exist i multe circuite "periferice" care sunt prevzute cu o astfel de interfa. Este cunoscut i sub denumirea TWI (Two Wire Interface) 12

- CAN (Controller Area Network) proprietate intelectual a firmei Bosch, foarte utilizat n Europa i Japonia, oarecum similar ca funcionalitate lui SAE J1850 care este utilizat n America de Nord (SAE -Society of Automotive Engineers), este un standard (o magistral i un protocol) de comunicaie serial sincron utilizat n industria de automobile, permind interconectarea ntr-o reea a diverselor componente inteligente (senzori, elemente de execuie, indicatoare, etc.) omniprezente ntr-un automobil modern. n ultimul timp magistrala CAN a nceput s fie utilizat i n alte domenii dect industria de automobile (automatizri industriale, robotic, acionri electrice). c. Conectivitate Ethernet/Web implic existena unor resurse care s permit integrarea cu uurin ntr-o reea de tip Ethernet, pentru a face posibil, n final, implementarea unui protocol TCP/IP (a unei stive TCP/IP). Resursele respective pot fi de natur software (stiv soft) care presupun o vitez de prelucrare (putere de calcul) a CPU suficient de mare pentru a nu afecta vizibil operarea propriu-zis a controlerului, sau hardware (stiv hardware). Pe baza acestei stive se poate realiza o conectivitate tip HTTP, FTP, STMP, POP3, etc. d. Conectivitate USB - magistrala serial USB (Universal Serial Bus) a fost creat pentru conectarea cu uurin a diverselor periferice la un calculator PC (cu rolul de gazd host). Conexiunea permite i furnizarea tensiunii de alimentare. Varianta USB 1.1 permite atingerea unei rate de transfer maxime a datelor de 12Mbytes/sec, iar varianta USB 2.0 a unei rate maxime de cca. 480MBytes/sec. e. Conectivitate Wireless- se refer la existena unor resurse hardware i/sau software care s permit integrarea cu uurin i la un pre de cost avantajos ntr-o reea de tip wireless, pentru a face posibil, n final, implementarea unui protocol (a stivei aferente protocolului). Exemplele cele mai cunoscute de astfel de reele, protocoale i stive sunt Bluetooth (IEEE 802.15.1) i Zigbee (IEEE 802.15.4). f. Convertoarele Analog Numerice (CAN, ADC) Convertoarele utilizate fac parte de regul dintr-un sistem de achiziie de date, existnd i un multiplexor analogic cu mai multe canale de intrare. Rezoluia disponibil este tipic de 8, 10 sau 12 bii, uneori cu precizia (rezoluia adevrat) corespunztoare unui numr mai mic de bii. Timpul minim de conversie este n plaja x sec la x10 sec. g. Convertoarele Numeric Analogice (CNA, DAC) Cea mai rspndit tehnic de conversie numeric analogic folosit este bazat pe modulaia n factor de umplere (PWM- Pulse Width Modulation). Exist unul sau mai multe canale pe care se poate genera un tren de impulsuri cu factor de umplere programabil (de la 0 la 100%). 2.2.6 Familii reprezentative de microcontrolere Cele mai reprezentative familii de microcontrolere de 8 bii i 16 bii sunt urmtoarele[15]: 13

a. 8048 (Intel MCS-48 - www.intel.com ) Este considerat "bunicul" microcontrolerelor pe 8 bii, iar unele dintre caracteristicile sale arhitecturale se regsesc la urmtoarea generaie (MCS-51, 8051). b. 8051 (Intel MCS-51 i muli alii: Atmel, Philips- www.semiconductor.philips.com, Infineon, Atmel, Dallas-Maxim - www.maxim-ic.com, Cygnal www.cygnal.com , etc.) A doua generaie de microcontrolere de 8 bii a firmei Intel care, dei aprut acum 20 de ani, nc ocup un segment semnificativ de pia. Cu o arhitectur destul de ciudat, este suficient de puternic i uor de programat. Arhitectura sa are spaii de memorie separate pentru program i date. Poate adresa 64KBytes memorie de program, din care primii 4(8..32)KBytes locali (ROM). Poate adresa 64KBytes memorie de date extern, adresabil doar indirect. Are 128 (256) octei de RAM local, plus un numr de registre speciale pentru lucrul cu periferia local. Are faciliti de prelucrare la nivel de bit (un procesor boolean, adresare pe bit). Intel a dezvoltat i un super 8051 numit generic 80151. c. 80C196 (Intel MCS-96) Este un microcontroler pe 16 bii fcnd parte din generaia a treia de microcontrolere a firmei Intel. Destinat iniial unor aplicaii din industria de automobile, are o arhitectur von Neumann, cu un spaiu de adresare de 64KBytes, o unitate de intrri/ieiri numerice de mare vitez (destinat iniial controlului injeciei la un motor cu ardere intern), ieiri PWM, convertor analog numeric, timer watchdog. Exist multe variante, ultimele cronologic aprute, fiind mult superioare variantei iniiale. Exist i o dezvoltare recent sub forma familiei MCS-296 (80C296). d. 80C186, 80C188 (Intel, AMD) Derivate din clasicele 8086/88 prin includerea pe acelai microcircuit a 2 canale DMA, 2 numrtoare/timere, un sistem de ntreruperi i un controler pentru DRAM. Marele avantaj al acestor cvasi(aproape) microcontrolere (ele nu au memorie integrat) este legat de utilizarea ca mediu de dezvoltare a unor platforme de calcul tip IBM-PC, compatibile 80x86, cu tot softul aferent. e. 68HC05 (Freescale - www.freescale.com, ex Motorola ) Are un spaiu de memorie unic (64Kbytes) n care sunt plasate i registrele perifericelor (I/O, timere) cu un indicator de stiv (SP) hard pe 5bii (stiv de maxim 32 octei !). Exist variante cu memorie EEPROM, CAN, port serial, etc. Este unul din cele mai rspndite microcontrolere (comparabil cu 8051). f. 68HC11, 68HC12, 68HC16 (Freescale)

14

68HC11 a fost unul din cele mai puternice microcontrolere pe 8 bii, foarte rspndit n ciuda faptului c Motorola a fost un timp singurul productor. Are un set de instruciuni asemntor cu alte produse ale firmei (6801, 6805, 6809). Are un spaiu de adrese unic de 64K. Nenumrate variante ca resurse: EEPROM, OTP, CAN, PWM, etc. Prezint ca particularitate existena unui program de ncrcare rezident (bootstrap loader n ROM intern) cu care, la reset, un segment din memoria RAM extern poate fi ncrcat cu cod program prin intermediul portului serial. g. 683xxx (Freescale) Microcontrolere pe 32 de bii construite n jurul unui CPU analog microprocesorului M68020 (CPU32), denumite i "procesoare integrate". Putere de calcul comparabil sau mai mare ca a lui Intel 80386. h. PIC (Microchip- www.microchip.com ) Primul microcontroler din aceast familie (PIC1650) a aprut acum mai bine de 20 de ani pe vremea cnd firma era proprietatea General Instruments. Este o familie de microcontrolere care, n ultimii ani, a cunoscut o dezvoltare exploziv. Sunt disponibile actualmente sub forma a 6 serii: PIC10, PIC12, PIC14, PIC16, PIC17 i PIC18. n seriile respective exist variante cu memorie de program de tip OTP(C) sau FLASH(F). Au fost primele microcontrolere de 8 bii cu arhitectur RISC: PIC16C5x avea un set de doar 33 instruciuni (Intel 8048 avea 90). Arhitectura este de tip Harvard i, ca o particularitate, dimensiunea cuvntului pentru program este de 12, 14 sau 16 bii, cuvntul de date fiind tot de 8 bii. Cronologic, ultimul produs al firmei Microchip este seria dsPIC30F, de fapt un procesor numeric de semnal, de 16 bii, cu o periferie specific optimizat pentru controlul acionrilor electrice (motoare electrice). Firma Ubicom (ex Scenix, www.ubicom.com) produce nite clone ale familiei PIC, mult mai rapide dect originalele. Modulele Basic Stamp ale firmei Parallax (www.parallax.com) sunt bazate i pe astfel de microcontrolere (sunt foarte utilizate, i nu numai de hobbitii din robotic). i. AVR (Atmel- www.atmel.com ) Un concurent puternic al seriei PIC este familia numit AVR, a firmei ATMEL, familie aprut n ultimii ani, care ofer variante de microcontrolere oarecum asemntoare ca resurse cu familia PIC, la performane similare sau mai bune. Sunt bazate pe o arhitectur diferit, dar unitatea central este tot de tip RISC, cu cuvntul de date de 8 bii. La fel ca la PIC dimensiunea cuvntului de program este mai mare, fiind de 16 bii. Exist cel puin 3 subfamilii mari, n ordinea complexitii resurselor, acestea fiind: AT Tiny, AT90 i ATMega. j. COP4(00) i COP8(00) (NS -National Semiconductors - www.national.com ) COP4 este un microcontroler pe 4 bii, categorie de microcontrolere care, n general, departe de a fi nvechite, ocup un segment relativ important al pieii. Printre caracteristici: pn la 2K ROM local, 32x4 pn la 160x4 RAM local, Microwire, numrtoare/timere, tensiune de alimentare 2.3-6V, numr mic de pini.

15

COP8 reprezint o serie de microcontrolere pe 8 bii, versatil, cu pre sczut, disponibil n multe variante. Arhitectura este similar lui 8051, dar setul de instruciuni este similar lui Z80. k. Z8 (Zilog, - www.zilog.com ) Un derivat al microprocesorului Z80, reprezint un compozit al mai multor arhitecturi diferite. Nu este compatibil cu setul de instruciuni i nici cu perifericele standard Z80. Are trei spaii de adrese: program, date i un masiv de registre. Resurse locale tipice: UART, timere, DMA, sistem de ntreruperi cu pn la 37 de surse. Exist o variant cu un interpreter Tiny Basic n ROM-ul local (analog 8052AH Basic de la Intel) precum i o variant cu resurse mbuntite numit Super-8. l. Z180(Zilog), Rabbit ( Rabbit Semiconductors- www.rabbitsemiconductor.com ) Z180 -ul firmei Zilog are un CPU similar cu Z80 dar mbuntit, cu resurse locale cum ar fi: management de memorie (memorie paginat de maxim 1MB), USART (numit SIO), 2 canale DMA, timere, sistem de ntreruperi, eventual PIO. Instruciuni suplimentare fa de setul standard Z80, printre care i nmulirea. Diversele sale variante nu includ memorie local. m. TMS370 (Texas Instruments- www.ti.com ) Microcontrolerul standard pe 8 bii al firmei TI realizat n multe variante (de ordinul zecilor), prezint unele asemnri cu 8051 (memoria de date local, stiva, modurile de adresare). O varietate extrem de mare a resurselor locale. n. 80386EX (Intel) Un 80386 destinat aplicaiilor de tip controler. Resurse locale: I/O seriale, timere/numrtoare, DMA, optimizarea consumului, controler de ntreruperi, controler pentru RAM dinamic. Nu au memorie local. Marele avantaj al unui astfel de microcontroler este c se poate utiliza ca platform de dezvoltare un sistem de tip IBM PC mpreun cu tot mediul de programare aferent. o. SC 3/4/5xx, Elan (AMD- www.amd.com ) O serie de microcontrolere deosebit de performante realizate n jurul unei uniti centrale de tip 386/486. Permit practic, doar prin adugarea de memorie extern, obinerea unui sistem de calcul compatibil PC, destinat unor aplicaii de control ncapsulate-integrate ("embedded PC"). p. 80C16x (Infineon, ex Siemens www.infineon.com ) Unul din microcontrolerele de 16 bii foarte utilizat n Europa. Arhitectur deosebit de performant a CPU, de tip RISC, are diverse variante, cu resurse complexe: 80C165, 80C166, 80C167, etc. q. MSP430 (Texas Instruments)

16

Firma TI ofer i o familie de microcontrolere de 16 bii cu arhitectura RISC, cu posibilitatea controlului compromisului vitez de calcul/consum propriu, destinat aplicaiilor portabile (i nu numai), denumit MSP 430. Cu un spaiu de adresare de 64KBytes, are diverse variante de realizare a memoriei interne de program (OTP, FLASH), resurse diverse (printre care i o interfa pentru un sistem de afiare LCD). r. ARM (Advanced RISC Machine, www.arm.com ) - este de fapt o unitate central de 32 de bii (sau de 16/32 bii) care face parte din categoria structurilor IP (Intelectual Property). Consoriul ARM a oferit licene ale acestei micro arhitecturi (nucleu ARM) pentru numeroi productori de circuite (Atmel, Philips, TI, OKI www.okisemi.com , etc.). Pe baza acestor licene se realizeaz i microcontrolere de mare performan. Cele mai cunoscute i rspndite variante de nuclee sunt ARM7 i ARM9, cu implementrile lor simplificate numite ARM7T, ARM9T (T-Thumb). 2.2.7 Limbaje de programare i compilatoare

Limbajul main (instruciunile main) este singura form de reprezentare a informaiei pe care un microcontroler o "nelege". Din pcate aceast form de reprezentare a informaiei este total nepractic pentru un programator, care va utiliza cel puin un limbaj de asamblare, n care o instruciune (o mnemonic cu operanzii afereni) are drept corespondent o instruciune n limbaj main (excepie fac macroinstruciunile disponibile la unele asambloare). Un program n limbaj de asamblare este rapid i compact. Aceasta nu nseamn c un astfel de program, prost scris, nu poate fi lent i de mari dimensiuni, programatorul avnd controlul total pentru execuia programului i gestiunea resurselor. Limbajul de asamblare este primul care trebuie nvat, chiar sumar, atunci cnd dorim s proiectm o aplicaie hard/soft cu un anume microcontroler (familie), el permind nelegerea arhitecturii acestuia i utilizarea ei eficient. Un compilator combin uurina n programare oferit de un interpreter (de fapt de limbajul de nivel nalt) cu o vitez mai mare de execuie a codului. Pentru aceasta programul, n limbaj de nivel nalt, este translatat (tradus) direct n limbaj main sau n limbaj de asamblare (urmnd a fi apoi asamblat). Codul main rezultat are dimensiuni relativ mari (dar mai mici dect cel interpretat) i este executat direct, ca un tot, de microcontroler. De regul codul generat poate fi optimizat fie ca dimensiune, fie ca timp de execuie. Se pot enumera compilatoare pentru limbajele: C, BASIC, Pascal, Forth.

17

Cele mai populare i utilizate sunt cele pentru limbajul C, un limbaj universal folosit att pentru super computere, ct i de microcontrolerele de 4 bii. Este un limbaj puternic i flexibil, care dei de nivel nalt, poate permite i accesul direct la resursele sistemului de calcul. Un program bine scris genereaz un cod rapid i compact. Totui, de multe ori, poriuni critice din punct de vedere al vitezei de execuie, trebuie nc scrise n limbaj de asamblare. Exist numeroase implementri, pentru majoritatea familiilor de microcontrolere. Cu anumite limitri legate de arhitectur i mai ales resursele microcontrolerului, asigur portabilitatea unei aplicaii scris pentru un anumit tip (familie) de microcontroler la un alt tip (familie). Referitor la asamblor i compilator, trebuie precizat c pentru acestea codul este obinut cu ajutorul unui mediu integrat de dezvoltare a programelor (IDE-Integrated Development Environment) care conine n mod tipic urmtoarele componente software: un editor specializat (orientat pe codul surs), un asamblor/compilator, un editor de legturi/locator ("linkeditor/locator"), programe de gestiune a unor biblioteci de cod ("librarians"), programe de conversie a formatelor de reprezentare a codului (de exemplu din binar n format Intel HEX sau Motorola S) i, nu n ultimul rnd, un simulator i/sau depanator ("debugger"). Codul astfel obinut trebuie ncrcat n memoria de program a mainii int unde va rula, fiind de fapt programat ntr-o memorie de tip (EP)ROM/FLASH sau ncrcat direct (uploaded) ntr-o memorie de tip RAM.

18

2.3 Senzori
2.3.1 Caracteristici generale i clasificri ale principalelor tipuri de senzori

Senzorii sunt dispozitive componente ale roboilor mobili care pot msura diferite proprieti ale mediului din jurul acestora, cum ar fi: temperatura, distana, rezistena fizic, greutatea, mrimea, etc. n cel mai general caz, senzorii pot fi grupai n dou categorii: Senzori de stare intern senzori care ofer informaii despre starea intern a robotului mobil, spre exemplu nivelul bateriei, poziia roilor sau altor componente, etc.; Senzori de stare extern senzori care ofer informaii despre mediul ambiant n care robotul funcioneaz. Senzorii de stare extern se mai pot mpri la rndul lor n dou categorii: senzori cu contact, mai precis acei senzori care culeg informaia din mediu prin atingere (exemplu: senzor "bumper"), respectiv senzori fr contact , care preiau informaia din mediu de la distan (exemplu: camer video, senzor ultrasonic)

Un senzor poate fi activ sau pasiv. Senzorii activi sunt acei senzori care emit energie n mediu pentru a putea observa anumite caracteristici ale acestuia, spre deosebire de senzorii pasivi care primesc energie din mediu pentru a putea prelua informaia. La modul general, despre toate categoriile de senzori se pot enuna urmtoarele ipoteze [13]: Orice senzor este afectat de interferente; Orice senzor ofer o informaie incomplet a mediului n care efectueaz msurtorile; Nici un senzor nu poate fi modelat complet.

De asemenea, toate tipurile de senzori sunt caracterizate printr-o serie de proprieti, cele mai importante fiind: Sensibilitatea: raportul dintre semnalul de ieire i semnalul de intrare; Liniaritatea: exprim dac raportul dintre intrare i ieire este constant; Intervalul de msurare: diferena ntre distana minim i maxim msurabil; Timpul de rspuns: timpul necesar pentru ca informaia de la intrare s fie observabil la ieire; Acurateea: diferena ntre semnalul msurat i semnalul real; Repetabilitatea: diferenele ntre msurtori succesive ale aceleiai entiti; Rezoluia: exprim cea mai mic unitate de incrementare a semnalului msurat; Preul senzorului; Puterea de calcul necesar pentru a interpreta rezultatele; 19

Tipul de semnal la ieire; Greutatea, mrimea i cantitatea de energie consumat pentru a face o msurtoare.

Din punct de vedere tehnologic/funcional, roboii mobili pot fi dotai cu diverse tipuri de senzori [16]: a. Senzori interni: - Senzori de poziie (Incrementali/Poteniometre); - Senzori de for; - Senzori de detecie n infrarou; - Senzori de acceleraie; - Senzori cu efect Hall. b. Senzori externi: - Senzori cu ultrasunete; - Senzori de atingere; - Senzori de for; - Senzori de culoare; - Senzori de lumin; - Camere video. Senzorii din roboii mobili se pot clasifica i independent de gruparea interni-externi, numai pe criteriul funcional, astfel: senzori de distan acei senzori care ofer informaii despre distana ntre senzor i obiectul de msurat din mediu; senzori de poziie acei senzori care ofer informaii despre poziia robotului n termeni absolui; senzori de mediu acei senzori care ofer informaii despre diverse proprieti i caracteristici ale mediului (exemplu: temperatur, culoare); senzori ineriali acei senzori care msoar proprieti difereniale ale poziiei robotului (exemplu: acceleraia). Caracterizarea general a senzorilor se poate face pe baza relaiei (f) dintre proprietile fizice de interes ale mediului (e) i informaia primit de la un senzor (r) ar putea fi modelat prin ecuaia [13]:

n principiu, orice model al unui senzor ar trebui s includ i un model intern al zgomotului care poate afecta senzorul n momenrul citirii informaiei. Problema de a recupera informaia din mediu din datele primite de la senzor poate fi destul de complex.

20

Un senzor este considerat instabil dac pentru variaii mici ale intrrii, ieirea se schimb radical. n caz general, pentru un senzor cu ieirea f(e), instabilitatea se refer la:

f (e) f (e + h ) h h 0 lim
n principiu orice tip de senzor poate fi afectat de mai multe tipuri de erori. Dintre acestea, cele mai importante sunt erorile incidentale, erorile sistematice i erorile stohastice. Erorile incidentale apar ocazional i pot avea un efect neprevzut asupra informaiei, ele provenind n cea mai mare parte de la msurtori efectuate greit. Erorile sistematice au o influen predictibil asupra acurateii informaiei,acestea provenind de la o interpretare greit a parametrilor n algoritmii de estimare, sau din cauza unor neconcordane (incertitudini) n modelare. n fine, erorile stohastice au un caracter aleator, ele diferind de fiecare dat cnd robotul execut aceeai operaie. 2.3.2 Senzori cu ultrasunete

Categoria de senzori cea mai des ntlnit la un robot mobil o constituie, fr nici o ndoial, categoria senzorilor ultrasonici. ntlnii n literatura de specialitate i sub denumirea de sonar senzorii ultrasonici folosesc semnale acustice (sunete). 2.3.2.1 Caracteristici generale Senzorii cu ultrasunete sunt unii dintre cei mai utili i eficieni senzori din dotarea roboilor. Ei permit msurarea suficient de precis, fr contact, a distanelor fa de alte obiecte din mediu i asigur astfel premizele pentru unele dintre cele mai importante activiti ale roboilor:

Msurarea distanei fa de unele repere, fixe sau mobile din mediu, pentru ancorarea propriei poziii n spaiul de lucru; Identificarea obstacolelor din mediu nconjurator, cu poziia i configuraia lor, n vederea stabilirii unei strategii optime pentru ocolirea lor, dar i pentru o eventual reconfigurare, n vederea abordrii lor directe; Identificarea poziiei i orientrii unor module, n vederea unei eventuale atari i cuplri;

Un emitor sonar transmite un semnal acustic n mediu urmnd apoi ca reflecia acestuia s fie recepionat de componenta detector a senzorului. Timpul n care semnalul este receptat napoi de senzor precum i atenuarea semnalului reprezint aspecte exploatate de diferitele tipuri de senzori sonar. Sunetele transmise de senzorii sonar sunt de regul n spectrul de sunete ultrasonice, avnd o frecven foarte nalt pentru a nu putea fi detectate de urechea uman.

21

Principiul de funcionare al senzorilor sonar a fost mprumutat din lumea animal, att liliecii ct i delfinii folosind aceleai tehnici pentru a localiza i identifica diferitele caracteristici ale unui anumit robot. Sensibilitatea unui senzor sonar nu este uniform, ci consist dintr-un lob principal i cteva loburi laterale mai mici. De asemenea, aceast sensibilitate difer de la un senzor sonar la altul. Diferenele de sensibilitate ale unora dintre cei mai populari senzori sonar, i anume modelele Devantech SRF08 i SRF10 pot fi observate n Figura 6 i Figura 7 [9].

Figura 6. Sensibilitatea senzorului Devantech SRF08

Figura 7. Sensibilitatea senzorului Devantech SRF10

2.3.2.2 Principiul de funcionare al senzorului cu ultrasunete Principiul de funcionare al unui senzor ultrasonic tipic este prezentat n Figura 8 (Vss, Vdd - tensiune alimentare sursa-drena).

22

Figura 8. Principiul de funcionare al senzorului cu ultrasunete

Msurarea distanei const n msurarea timpului de propagare a undelor ntre reperele considerate.

unde - distana - timpul msurat - viteza de propagare a undei n mediul considerat

n general depinde de indicele de refracie al mediului, care la rndul su depinde de mai muli parametrii (temperatur, presiune, umiditatea aerului, lungimea de und), iar cunoaterea exact a acestui aspect poate mbunti precizia msuratorilor.

23

2.3.2.3 Senzorul cu ultrasunete Parallax PING))) Un model pentru analiza i testarea caracteristicilor tehnice ale acestui tip de senzori poate fi Parallax PING))), un senzor avnd configuraia i dimensiunile prezentate n Figura 9 [9].

Figura 9. Senzorul cu ultrasunete Parallax PING)))

Acest senzor are urmtoarele caracteristici [9]: Tensiune de alimentare 5V cc.; Curent absorbit: 30 mA tipic, 35 mA maxim; Domeniu de msurare ntre 2 cm i 3 m; Impulsul de declanare a msurarii: impuls pozitiv TTL, 2s minim, 5s tipic; Semnal receptat ca ecou: impuls pozitiv TTL, ntre 115 s i 18,5 ms; Frecvena de baleiere: 40 KHz pentru 200 s; Timp de ntrziere pn la urmtoarea msurare: 200 s: Dimensiuni 22 mm x 46 mm x 16 mm.

Un avantaj major al acestui senzor const n faptul c nu necesit dect o singur linie I/E a unui procesor numeric. Senzorul detecteaz un obiect i permite msurarea distanei pn la el prin emiterea unui scurt impuls cu frecventa de 40 KHz (domeniul ultrasonic), care se deplaseaz cu viteza sunetului n aer, de 340 m/s, i ateptarea i sesizarea ecoului, determinat de reflectarea undelor de ctre obstacol (Figura 8). n practic senzorul Parallax PING))) are cteva particulariti care evideniaz limitrile acestei tehnologii. n Figura 10 sunt evidentiate aceste limitari.

24

Figura 10. Cazuri n care obiectul nu este detectat de senzorul cu ultrasunete

Nu poate fi msurat corect distana la un obiect care: a. se afl la mai mult de 3m distan; b. prezint suprafee care nu reflect undele acustice napoi spre dispozitiv; c. este prea mic pentru a reflecta destule unde acustice. O sensibilitate sczut a senzorului se constat i n cazul n care obiectul este alctuit din materiale moi sau prezint forme neregulate. Senzorul poate detecta suprafaa apei, dar este predispus la deteriorri din cauza umezelii i condensaiei, n consecin nu este recomandat pentru uz n aer liber sau n preajma apei. Deoarece viteza de propagare a sunetului prin aer este influenat i de temperatura ambiant, se poate ine cont de aceast variaie folosind urmtoarea formul:

unde viteza sunetului n aer [m/s] temperatura aerului [0C]

Eroarea de msurare pentru o variaie a temperaturii aerului de la 00C la 700C este de 11-12%. Se recomand folosirea unor constante de conversie n programare pentru a compensa pentru erori. Sensibilitatea senzorului este descris de testul din Figura 11.

25

Figura 11. Test senzor Parallax PING))) pentru un paravan paralel din carton

Testul a fost efectuat de ctre productor ntr-o camer izolat, la temperatura uzual. Obiectul int este un paravan din carton de dimesiuni 30.5 cm x 30.5 cm plasat la nlimea de 1m fa de podea pentru a elimina reflexii suplimentare ale undelor. Rezultatele msuratorilor au dus la urmtoarea reprezentare grafic a sensibilitii senzorului Parallax PING))):

Figura 12. Zona de sensibilitate a senzorului Parallax PING))) pentru testul cu paravan

De fapt zona de sensibilitate al senzorului cu ultrasunete este un con (n 3D), iar Figura 12 este o vedere perpendicular pe generatoarea conului. Doar obiectele din interiorul conului sunt detectate. Din Figura 12 se poate trage concluzia c senzorul are o sensibilitate mare concentrat pe axa acustic (generatoarea conului). Faptul c zona este ngust este avantajos, deoarece permite evaluarea poziiei obiectului. Precizia mare este datorat suprafeei drepte a paravanului i orientarea sa care reflect majoritatea undelor sonore inapoi spre senzor.

26

2.3.3

Senzori de contact

Cel mai des ntlnit tip de senzori de contact n roboii mobili este reprezentat de senzorii bumper . Aceste dispozitive pot fi simple ntreruptoare care raporteaz o valoare binar, 0 sau 1, valoare corespondent strii de fapt: deschis sau nchis. Astfel, n momentul n care robotul echipat cu senzori de acest tip se lovete de un alt obiect, ntreruptorul se va nchide semnalnd acest lucru. Un exemplu de caz n care o anumit parte a unui robot mobil se atinge de un obiect din mediu este prezentat n Figura 13 [13].

Figura 13. Activarea senzorilor bumper n momentul ciocnirii robotului cu un obiect

Robotul din Figura 13 are un sistem senzorial format din 8 senzori bumper, situai pe robot la circumferina acestuia. n momentul n care robotul se lovete de obiectul din mediu, senzorii aflai pe partea respectiv a robotului (n acest caz senzorul 4 i 5) vor raporta acest lucru. Cu toate c senzorii bumper sunt folosii pentru a evita lovirea robotului de obiecte din mediul ambiant n caz de coliziune cu acestea, dac fora de impact este mare, detectarea coliziunii nu mai este suficient pentru a evita distrugerea anumitor pri ale robotului. Majoritatea roboilor mobili folosii n laboratoare nu sunt echipai cu sisteme de frnare active, i chiar dac ar fi pentru o anumit vitez, unui robot mobil tot i-ar lua o distan considerabil pentru a se opri brusc, datorit ineriei motoarelor. Unele autovehicule au instalate totui senzori bumper, nu att pentru detectarea coliziunilor, ct pentru a absorbi din ocul produs la impactul cu un obiect extern.

27

2.4 Servomotoare
Servomotoarele reprezint componente eseniale, de execuie i de precizie, n structura unui robot mobil, utilizate n principal pentru deplasarea robotului, dar i pentru realizarea unor micri, ce pot fi complexe i de mare precizie, ale unor organe/pri ale robotului. Ultimele decade au fost marcate de evoluii remarcabile n ceea ce privete dimensiunile, viteza de rotaie i cuplul motor al motoarelor de tip servo. n Figura 14, se prezint astfel (spre exemplificare, pentru servomotorul Futaba S3151) o structur tipic, mpreun cu alte caracteristici semnificative [12].

Figura 14. Componentele unui servomotor. Servomotorul Futaba S3151

Tabelul 1. Caracteristicile mecanice, electrice i geometrice ale servomotorului.

Gabarit: ( mm )

Masa: (g)

Cuplul la 4,8V (Nmm) 310

Viteza: 0,16s/45 la 4,8V 0,21

Cuplul de mentinere (Nmm) 770

Tensiunea: (V)

40,5x20x36,1

42

4,8 6

O mbuntire deosebit constituie dezvoltarea servomotoarelor digitale ce au avantaje funcionale semnificative fa de servomotoarele analogice (standard). n principiu, un servomotor digital este asemntor cu un servomotor standard, cu excepia unui microprocesor care analizeaz semnalele de intrare i controleaz motorul. Una din diferene const n modul de procesare a semnalelor de intrare i transmiterea puterii iniiale de la servomotor, reducnd timpul mort, crescnd rezoluia i genernd un cuplu de meninere superior.

28

La motoarele servo convenionale, n faza de repaus, nu se alimenteaz servomotorul. n cazul servomotoarelor digitale, cnd este primit o comand de pornire a servomotorului, sau cnd se aplic un cuplu la axul de ieire, servo-ul rspunde prin alimentarea cu tensiune a motorului. Aceast tensiune, care este de fapt tensiunea maxim, este pulsat sau transmis on/off cu o rat fix de (spre exemplu 50 de cicluri pe secunda), genernd scurte impulsuri de tensiune. Prin creterea duratei fiecrui impuls se creeaz un control al vitezei, care poate crete progresiv cnd se aplic motorului tensiunea maxim fr ntrerupere, accelernd servomotorul i deci robotul, sau organul acionat, spre noua poziie. Modul concret de aplicare a acestui mecanisnm de comand se poate realiza conform cu diagramele prezentate n Figura 15.

Figura 15. Comanda prin PWM. Servomotor standard i digital

Un impuls On de lime scurt, urmat de o pauz scurt, nu constituie pentru motor o comand s se ntoarc, cu condiia s nu fie mai lung pauza. Aceasta nseamn un control al micrii, care la ntoarcere trimite mici impulsuri iniiale spre motor, este foarte ineficient, i de aceea este denumit banda moart. Din cele de mai sus rezult cteva avantaje importante ale servomotoarelor digitale:

29

prin intermediul microprocesorului este posibil primirea de semnale de intrare de comand prin care durata impulsului poate fi ajustat prin programarea microprocesorului pentru a realiza funciile cerute i pentru a optimiza performanele servomotorului; la un servomotor digital se pot trimite impulsuri ctre motor la o frecven semnificativ mai mare, de regul ntre 50 de impulsuri / secunda i 300 impulsuri / secunda, astfel c servomotoarele digitale vor rspunde mai rapid la comenzi.

n Figura 16 se prezint comparativ variaii tipice ale cuplului n timp pentru servomotoarele standard i servomotoarele digitale.

Figura 16. Caracteristicile cuplu-timp pentru servomotoarele standard i digitale

Comanda (controlul) servomotoarelor reprezint partea esenial a acestora care asigur posibilitatea interfarii cu procesoarele prin care se execut programele i aplicaiile specifice robotului. De fapt, sistemul de comand al servomotorului constituie elementul care se adaug i face diferena fa de un simplu motor. n general aceste motoare sunt de curent continuu, obinuite sau pas cu pas. 30

Comanda elementelor de execuie (roboi sau organe/pri ale acestora) cu ajutorul motoarelor pas cu pas i a servomotoarelor de curent continuu, pentru a obine o micare incremental precis, este o problem destul de dificil, cu mai multe tipuri de soluii n funcie de aplicaie i de caracteristicile urmrite. n general, modelul comenzii pentru roboi mobili se poate aborda i asimila sistemelor cu dinamic lent, care nu sunt supuse perturbaiilor electromagnetice (spre exemplu: acionarea mainilor cu comand numeric, a imprimantelor, plotter-elor etc.). Sistemul de comand pentru un servomotor de c.c este, practic, un sistem de acionare electric, avnd n componen motorul electric (servomotorul de c.c), obiectul acionat, transmisia i elementul de execuie (Figura 17) [18].

Figura 17. Schema bloc a unui sistem de acionare cu servomotoare de c.c.

n Figura 17 sunt fcute urmtoarele notaii: Motorul electric ME realizeaz transformarea puterii electrice n putere mecanic. Obiectul acionat OA este antrenat de ME i realizeaz anumite micri impuse. Transmisia T reprezint legatura mecanic dintre ME i OA cu rolul de a realiza transferul de putere mecanic i, eventual, de a schimba parametrii acestei puteri (viteza unghiular, cuplu). Elementul de execuie EE are drept scop alimentarea cu energie electric a ME i comanda funcionrii n conformitate cu anumite cerine.

Pentru proiectarea acestui element (EE), se ine seama de urmtorii factori: caracteristica viteza unghiular ( ) moment/cuplu ( ) n regim staionar att a motorului, ct i a obiectului acionat: gama de viteze de lucru necesare, definit ca fiind raportul dintre viteza unghiular minim i maxim; precizia de meninere a vitezei.

31

Comanda concret a servomotoarelor de c.c. se face cu convertoare statistice de c.c. c.c. (chopper-e), care la rndul lor pot fi comandate n funcie de semnalele asociate cu unul sau mai muli dintre factorii menionai mai sus, dar la acetia se adaug semnalele de comand care trebuie s asigure, prin procesor, execuia programelor specifice aplicaiei.

2.5 Metode de comunicare fr fir (wireless)


Tehnicile i tehnologiile utilizate n domeniul tehnologiei informaiei i comunicaiilor (TIC) reprezint baza dezvoltrii societii informaionale i principalul factor de progres tehnicoeconomic mondial, astfel explicndu-se att diversitatea, dinamica, complexitatea ct i importana n cadrul global. Tehnicile de comunicaie utilizabile pentru transmiterea datelor ntre un robot mobil i PC restrng, n majoritatea aplicaiilor specifice, gama tehnologiilor la cele cu o raz de aciune mobil dar limitat, care sunt reprezentate de standardele wireless (fr fir), radio sau infrarou. Pn acum proiectarea sistemelor de comunicaie fr fir s-a axat mai mult pe creterea performanelor de transmisie prin aer. n acest context atenuarea i interferenele sunt privite ca i zgomote inevitabile unui astfel de mediu de transmisie. Ultimele tendine au artat c acum accentul se pune prepondernt pe creterea eficienei spectrale. 2.5.1 Comunicaii n Infrarou

Comunicaiile wireless n infrarou se refer la propagarea undelor de lumin emis n banda infrarou, unde radiaa electromagnetica are o lungime de unda mai lunga decat cea a luminii vizibila, dar mai scurta decat a undelor radio. O modalitate de caracterizare a unei conexiuni wireless se face n funcie de tipul legturii care se stabilete: sistemele punct-la-punct i sistemele cu difuzie. Cel mai simplu tip de legtur care se poate stabili este cel punct-la-punct (Fig.18, [25]). n acest caz, att transmitorul ct i receptorul trebuie s se vad reciproc, deci s existe o cale neopturat. Aceste legturi pot fi stabilite temporar pentru a se putea realiza o sesiune de schimburi de date ntre doi utilizatori sau se poate stabili o legtur permanent atunci cnd se folosete o unitate mobil ca i base point n cadrul unei reele LAN.

32

Figura 18. Sistem de comunicaii n infrarou

Un emitor (T) convertete un semnal electric ntr-unul optic. LED-ul i dioda semiconductoare laser sunt dou dintre cele mai apropiate soluii tehnice pentru acest scop. LED-urile au caracteristici de transmisie care permit un cmp larg de aplicabilitate, n special n cazurile n care se folosesc legturile indirecte. LED-urile mai au nc un avantaj n faa diodelor semiconductoare laser, i anume c ele protejeaz ochiul uman. Receptorul (R) sau detectorul de semnal convertete semnalul optic recepionat de la emitor i l transpune ntr-un curent electric. Fotodiodele din siliciu de tip p-i-n sunt cele mai recomandate pentru astfel de aplicaii fr fir, ele avnd o eficien sporit n aceast band de comunicaie precum i un pre destul de bun. n cazul unui sistem de comunicaii optice care se afl ntr-un mediu deschis, aa cum este cazul tipic, detectorul este iluminat i de alte surse de lumin dect cea de la emitor, astfel c ele se manifest ca nite zgomote aditive care fac ca la fotodetector curentul generat de ctre acesta s nu mai fie cel exact. n comunicatiile optice partea de spectru de infrarosu care este folosita este impartita n cateva benzi bazate pe disponibilitatea surselor de lumina, materiale de transmisie i absorbie i detectori. Banda C (15301565 nm) este banda dominanta pentru retelele de telecomunicatii de distanta lunga, U cu lungimea de und ultralung (16251675 nm) iar banda O (12601360 nm) este banda original IR (lungimea de und cea mai scurt) [21]. Transmisia de date prin IR este o comunicare de raza scurta ntre perfericelele calculatorului i asistenti digitali personalizati. Aceste dispozitive se conformeaza standardului IRDA (Infrared Data Association). Controalele la distanta i dispozitivele IrDa folosesc LED-uri (Light Emitting Diodes) infrarosii pentru a emite radiatie infrarosie care este focalizata de o lentila de plastic ntr-o raza ingusta. Raza este modulata, pornita sau oprita, pentru a codifica datele. Receptorul foloseste o fotodioda siliconica pentru a converti radiatia infrarosie n curent electric. IrDa (Infrared Data Association, asociere de date prin infrarosu) defineste specificatii fizice pentru standarde de protocale de comunicatii pentru schimbul de date prin lumina infrarosie pe distanta mica, pentru utilizarea n PAN-uri (Personal Area Networks).

33

Standardele IrDa includ o serie larg de specificaii i protocoale: IrPHY, IrLAP, IrLMP, IrCOMM, Tiny TP, IrOBEX, IrLAN i IrSimple. 2.5.2 Comunicaii prin Bluetooth

Comunicaiile Bluetooth sunt un standard de comunicaie pentru dispozitive mobile, standard care se aplic pe distane ceva mai mari dect n cazul comunicaiilor n infrarou. Sistemul Bluetooth este cel mai adecvat atunci cnd distana dintre emitor/receptor este scurt, rata de transfer este mare, iar puterea consumat trebuie meninut ct mai sczut. Ideea ce a dat nastere tehnologiei wireless Bluetooth a aparut n 1994 cand compania Ericsson Mobile Communications a decis investigarea fezabilitatii unei interfete radio de mica putere i cost redus ntre telefoanele mobile i accesoriile acestora. Specificaiile Bluetooth sunt practic acoperite de standardul IEEE 802.15.1(astfel se justific termenul standardul Bluetooth) i reprezinta una dintre cele mai avansate tehnologii de comunicatie fara fir. Cu putere mare de transfer al datelor i consum foarte scazut de energie, actionand pe distante mici, de la 1m pana la 100m i numai "indoor", Bluetooth se afirma ca fiind mijlocul prin care toate echipamentele care ne inconjoara pot interactiona. Bluetooth prezinta o tehnologie pentru distante scurte cu costuri reduse, viznd crearea unor reele personale (PAN-Personal Area Nework). Principalele tipuri de aplicatii ale Bluetooth sunt: controlul wireless al comunicarii ntre telefonul celular i castile hands free sau car kitul. Aceasta aplicatie a devenit cea mai populara. retea wireless ntre calculatoare ntr-un spatiu limitat i cerinte mici de lungime de banda, aici putnd include i cazul PC-robot. comunicatie wireless ntre dispozitivele de intrare i ieire ale unui calculator, cele mai intalnite fiind mouse-ul,tastatura sau imprimanta. inlocuirea comunicarii traditionale seriale prin fir n echipamentele de test, receptoeul GPS i echipamente medicale. pentru controale unde infrarosul era folosit. controlul wireless al consolei de jocuri Nintendos Wii i Sonys PlayStation 3 folosesc tehnologia Bluetooth pentru consolele lor wireless.

Pentru a putea analiza eficient soluiile fr fir (wireless), este util comparaia cu alte tehnologii [21]: 1) Bluetooth a) este indreptata ctre aplicatii de voce i date; b) opereaza n spectrul 2.4GHz; 34

c) functioneaza pe o distanta de la 1m la 100 m; d) este capabila sa treaca prin obiecte solide, este omnidirectionala i nu necesita o pozitionare n linie cu celelalte dispozitive pentru conectare; e) securitatea este i va fi o prioritate n dezvoltare; f) costul unui chip este mic, nu necesita adrese de retea, aprobri i celelalte setari pentru o retea tipica de Internet; 2) IrDA a) este folosit pentru a oferi conectivitate wireless pentru dispozitivele care n mod normal folosesc cablu pentru conectare; b) opereaza pe distane mici (civa metri), la viteze ntre 9600 bps i 16 Mbps; c) nu poate trece prin obiecte solide i aplicatiile de schimb de date sunt limitate; d) este mai des folosit n sistemele de plata, n controlul la distanta sau pentru sincronizarea a 2 PDA-uri; 3) Wi-Fi a) este mai analog retelei traditionale de Internet i necesita configurari pentru a impartii resursele , transmite fisiere, realize legaturi audio; b) foloseste aceleasi frecvente radio ca i Bluetooth-ul , dar cu un consum de putere mai mare, rezultand o conexiune mai puternica; c) necesita mai multe configurari, dar este cel mai potrivit pentru o retea, realizandu-se o conexiune mai rapida, o raza de actiune mult mai mare i o securitate mai ridicata, dar costul este relativ mare; Sistemul de comunicaie Bluetooth a fost proiectat cu scopul de a conecta mai multe dispozitive pentru a implenta o reea mic i de aceea protocolul care dicteaz regulile de comunicaie are n vedere o arhitectur de tip master-slave. n Figura 19 se prezint un dispozitiv i o reea Blutooth (Piconet) [21].

Figura 19. Dispozitiv i retea Bluetooth Piconet

Avnd n vedere cerinele temei proiectului i caracteristicile generale avantajoase, care au determinat deja utilizarea sa frecvent la comunicaiile PC-roboi mobili, detalii privind structura i elementele principale ale standardului Bluetooth (IEEE 802.15.1), precum i a versiunilor acestuia, se vor prezenta n Capitolul 3.

35

3 Tehnologia Bluetooth
3.1 Prezentare general
Tehnologia wireless Bluetooth reprezint una dintre cele mai avansate i rspndite tehnologii de comunicatie fr fir. Bluetooth prezint urmtoarele avantaje principiale: faciliteaz att comunicaiile de date ct i pe cele vocale; ofer posibilitatea implementrii unor reele ad-hoc i a sincronizrii ntre diverse dispozitive electronice i echipamentele periferice ale computerelor care se afla la distane de ordinul a 10 m; asigur soluii pentru comunicaii vocale i de date fr cabluri, utiliznd alimentri standard low-power, tehnologii de cost redus ce pot fi cu uurin integrate n orice dispozitiv i deschide calea unei mobiliti totale. Specificaiile Bluetooth definesc capabiliti de legturi radio pe distane scurte (aproximativ 10m) sau opional pe distane medii (aproximativ 20m) pentru transmisii vocale sau de date de capacitate maxim 720kbps pe canal [20]. Gama de frecvene de operare o constituie banda neliceniat industrial, tiinific i medical (ISM) de la 2.4GHz la 2.48Hz, utiliznd tehnici de mprtiere a spectrului (frequency hopping spread spectrum), cu salturi de frecven ale semnalului duplex de pn la 1600 salturi pe secund. Semnalul execut salturi prin 79 intervale de frecven de 1MHz, pentru a realiza o bun imunitate la interferene. Puterea emis este conform specificaiilor 0dBm (1mW) pentru implementrile pentru acoperiri reduse (10m) i maxim 20dBm (100mW) pentru versiunile pentru domenii mai extinse (100m). Cnd s-au alctuit specificaiile radio, un mare accent s-a pus pe posibilitatea implementrii design-ului ntr-un singur chip CMOS, n consecin reducndu-se costul, puterea consumat i dimensiunile necesare pentru implementarea n dispozitivele mobile. Comunicaiile vocale: Sunt utilizate pn la trei canale vocale sincrone simultan sau un canal care suport simultan transmisie de date asincron i transmisie vocal sincron. Fiecare canal vocal suport sincron 64kb/s n fiecare sens. Comunicaii de date: Un canal de date asincron poate suporta maxim 723.2kbps n sens direct n conexiune asimetric (i pn la 57.6kbps n sens invers), sau 433.9kbps n conexiune simetric. Structura master-slave: Deorece sistemul de comunicaie Bluetooth a fost proiectat cu scopul de a conecta mai multe dispozitive pentru a implementa o reea de tip LAN, protocolul de sincronizare se bazeaz pe o structur de tip master-slave.

36

Fiecare dispozitiv Bluetooth poate stabili conexiuni cu nc 7 alte dispozitive. Numai o singur conexiune este activ la un moment de timp, restul fiind ntr-o stare semi-activ. Pe scurt aceste dispozitive au un numr de adres fix, dar nu au acees la mediul de transmisie dect atunci cnd le vine rndul sau li se cere s comunice cu un master. Sincronizarea frecvenelor presupune definirea unor intervale de timp de 625 de microsecunde, unde masterul i va transmite pachetele n intervalele de timp cu numr par, iar slave-urile n intervalele de timp cu numr impar. Unitile Bluetooth aflate n acelai domeniu spaial de aciune radio pot realiza ad-hoc conexiuni punct-la-punct i/sau punct-la-multipunct. Unitile pot fi adugate sau deconectate n mod dinamic la reea. Dou sau mai multe uniti pot utiliza n comun un canal al unui piconet. Se pot forma mai multe picoreele i acestea se pot lega ad-hoc mpreun formnd scatternet (Figura 20 [24]), pentru a realiza configuraii flexibile de comunicaii i schimburi de date. Dac ntr-un acelai domeniu spaial se afl mai multe pico-reele, fiecare lucreaz independent i fiecare are acces la ntreaga band de frecvene. Fiecare pico-reea este stabilit pe un canal diferit, cu salt n frecven. Toi utilizatorii participani la aceeai pico-reea sunt sincronizai pe acest canal. Spre deosebire de dispozitivele cu infrarou (IR), unitile Bluetooth nu sunt limitate de necesitatea vederii directe ntre ele.

Figura 20. Reele Bluetooth Scatternet

Pentru a se respecta normele de imunitate la coliziuni ntre date, un scatternet poate cuprinde pn la 10 piconet-uri.

3.2 Principalele caracteristici ale standardului Bluetooth / IEEE 802.15.1


Legtura ntre Bluetooth i IEEE s-a fcut prin faptul c primele specificaii Bluetooth (1.0) -1999 au devenit baza IEEE Standard 802.15.1-2002 (prin care se ratifica Bluetooth 1.1), consacrnd astfel importana i fora noii tehnologii.

37

Dei, n mod firesc, Bluetooth a urmat o evoluie ascendant (mai multe versiuni detaliate la paragraful 3.3), marcat i de standarde IEEE, principalele caracteristici ale standardului iniial (1.0) se pstreaz ca majoritare i definitorii, dup cum se prezint n continuare. 3.2.1 Clasele de putere / acoperire i securitatea Bluetooth

n funcie de puterea maxim emis s-au standardizat 3 clase principale n care se pot fabrica dispozitivele Bluetooth, acestora corespunzndu-le i diferite acoperiri (raze de aciune) maxime (Tabelul 2).

Tabelul 2. Clase Bluetooth

Puterea maxim permis Puterea maxim permis (mW) (dBm) Clasa 1 100 mW 20 dBm Clasa 2 2.5 mW 4 dBm Clasa 3 1 mW 0 dBm Clasa

Raza (aproximativ) 100 m 10 m 1m

Deoarece semnalele radio pot fi uor interceptate, dispozitivele Bluetooth au ncorporate proceduri de securizare, pentru prevenirea receptorilor ru-intenionai i nevizai de mesaj. Trei sunt metodele de securizare a informaiei: 1. Rutina de interpelare pentru autentificare; 2. Cifrarea fluxului informaional, ca metod de criptare; 3. Generarea unor chei de sesiune aceste chei pot fi oricnd schimbate pe parcursul unei conexiuni stabilite. n algoritmii de securizare sunt utilizate trei entiti: 1. Adresa dispozitivului Bluetooth (BD_ADDR pe 48 bii), care este o entitate public unic pentru fiecare dispozitiv (aceast adres se obine prin procedura Inquire); 2. cheie privat specific utilizatorului (128 bii), care este o entitate secret (cheia privat deriv din procedura de iniializare i nu este dezvluit niciodat); 3. Un numr aleator (128 bii), care difer la fiecare nou tranzacie. Acest numr este derivat dintr-un proces pseudo-aleator n unitatea Bluetooth. n plus fa de aceste funcii la nivel de legtur, salturile de frecven i transmisia limitat spaial ajut i ele la prevenirea recepionrilor neautorizate.

38

3.2.2

Stiva de protocoale Bluetooth

O caracteristic cheie a Bluetooth este aceea de a permite dispozitivelor realizate de diveri productori s lucreze mpreun. Pentru acest scop, Bluetooth nu definete doar un sistem radio, ci i o stiv de protocoale pentru ca aplicaiile respective s poat sesiza prezena altor dispozitive Bluetooth, s descopere ce servicii pot acestea oferi i s utilizeze aceste servicii. Stiva de protocoale este definit ca o serie de straturi, dei unele caracteristici nu pot fi delimitate ca aparinnd unui anumit strat. n Figura 21 este evideniat acest aspect [20].

Figura 21. Stiva de protocoale Bluetooth

Profilurile Bluetooth ghideaz aplicaiile n utilizarea stivei de protocoale Bluetooth. TCS (Telephony Control Protocol Specification) ofer servicii telefonice. SDP (Service Discovery Protocol) las dispozitivele Bluetooth s descopere ce servicii suport celelalte dispozitive. RFCOMM ofer o interfa serial asemntoare cu RS232. L2CAP multiplexeaz date de la straturile superioare i convertete dimensiunile pachetelor informaionale, dup necesiti. HCI manipuleaz comunicaiile ntre modulul Bluetooth i aplicaia gazd. LM controleaz i configureaz legturile cu alte dispozitive. BB/LC controleaz legturile fizice prin radio, asambleaz pachetele i controleaz salturile n frecven. Stratul Radio moduleaz i demoduleaz datele pentru transmisia i recepia aerian.

39

3.2.3

Descoperirea dispozitivelor Bluetooth

Presupunem c avem de-a-face cu dou dispozitive echipate Bluetooth, un telefon celular i un laptop. Celularul este capabil s se comporte ca un modem, folosind profilul Dial-Up Networking i scaneaz periodic s vad dac cineva dorete s-l utilizeze. Utilizatorul laptop-ului deschide o aplicaie care necesit o legtur Bluetooth dial-up. Pentru a utiliza aceast aplicaie, laptop-ul tie c are nevoie s stabileasc o legtur Bluetooth cu un dispozitiv ce suport profilul Dial-Up Networking. Primul pas n stabilirea unei astfel de conexiuni este de a afla ce dispozitive Bluetooth se afl n zon, aa c laptop-ul iniiaz o procedur Inquiry pentru a sonda vecintatea cu alte dispozitive. Pentru aceasta, laptop-ul transmite o serie de pachete de interogare (inquiry) i eventual telefonul celular rspunde cu un pachet FHS (Frequency Hop Synchronisation). Pachetul FHS conine toate informaiile de care laptop-ul are nevoie pentru crearea unei legturi cu celularul. Acesta conine de asemenea i informaii despre clasa dispozitivului, informaii structurate pe dou nivele: pri majore a fost descoperit un telefon i pri minore telefonul descoperit este un telefon celular. n acelai mod, orice dispozitiv Bluetooth din zon, care scaneaz mediul n cutarea de mesaje Inquiry, va rspunde cu un pachet FHS, astfel nct laptop-ul acumuleaz o list cu dispozitive. Ceea ce se ntmpl mai departe depinde de proiectantul aplicaiei. Laptop-ul poate prezenta utilizatorului o list a tuturor dispozitivelor descoperite i l poate lsa pe acesta s decid cum s continue; de menionat c n acest stadiu laptop-ul nu-i poate prezenta utilizatorului dect informaii referitoare la tipul dispozitivelor descoperite.

3.3 Versiuni n evoluia Bluetooth


3.3.1 Evoluia specificaiilor Bluetooth la standardul IEEE

Numele Bluetooth vine de la Harald I Bltand ("the blue-toothed"), regele Viking al Danemarcei ntre anii 940 i 981 [23]. Ideea ce a dat natere tehnologiei wireless Bluetooth a aprut n 1994 cnd compania Ericsson Mobile Communications a decis investigarea fezabilitii unei interfee radio de mic putere i cost redus ntre telefoanele mobile i accesoriile acestora. n februarie 1998 a luat fiin Grupul de Interes Special (SIG). Astzi Bluetooth SIG include companiile promotoare 3Com, Ericsson, IBM, Intel, Lucent, Microsoft, Motorola, Nokia i Toshiba, i mii de companii membri asociai sau adoptori. Iniial misiunea SIG a fost de a monitoriza dezvoltarea tehnologiei radio pentru domenii restrnse i de a crea un standard global deschis, prevenind astfel devenirea acestei tehnologii proprietatea unei singure companii. Acest lucru a avut ca rezultat apariia primei specificaii Bluetooth (1.0) 1999. 40

n martie 2000 IEEE i SIG au convenit crearea unui standard IEEE pe baza versiunii 1.1-Bluetooth. n 2002 Bluetooth 1.1 este ratificat ca IEEE Standard 802.15.1-2002. 3.3.2 Bluetooth 1.0

Prima versiune Bluetooth (1.0) apare n 1999. Versiunile 1.0 i 1.0B au avut multe probleme i mai muli producatori au avut multe dificultati n a face produsele interoperabile. Versiunile 1.0 i 1.0B de asemenea au avut prin regula BD_ADDR(Bluetooth Hardware Device Address) o adresa de recunoastere, ceea ce crea o imposibilitate a anonimatului la nivelul de protocol, ducnd la o incetinire a procesului de introducere a noi servicii n mediul Bluetooth. 3.3.3 Bluetooth 1.1 Multe din erorile descoperite n versiunea 1.0B au fost corectate: a fost adaugat suport pentru canalele necriptate; a fost introdus RSSI (Receiver Signal Strenght Indicator) Indicator de nivel al semnalului recepionat;

3.3.4

Bluetooth 1.2 (Ratificat ca IEEE Standard 802.15.1-2005) Aceasta versiune este compatibila cu 1.1 iar imbunatatirile majore includ: AFH (Adaptive Frequency Hopping), care imbunatateste rezistenta la interferentele frecventei radio, evitand utilizarea frecventelor aglomerate n secventa de salt; viteza da transmitere mai mare (maxim 721 kbit/s); eSCO(extended Syncronius Connections), care imbunatateste calitatea vocii n conexiunile audio prin permiterea retransmisiei de pachete alterate.

3.3.5

Bluetooth 2.0 (SIG-2004)

Aceasta versiune este compatibila cu versiunile 1.x. Principala imbunatatire este introducerea EDR-ului (Enhanced Data Rate) de 3.0 Mbps. Acest lucru are urmatoarele efecte: o viteza de transmitere de 3 ori mai mare, n unele cazuri de 10 ori mai mare raza de aciune 100m; consum de putere mai mic; latime de banda mai mare (important la portabile-PDA, laptop, telefon); imbunatatirea BER-ul (Bit Error Rate) mai bun gestionare a conexiunii ntre mai mult de dou dispozitive. 41

3.3.6

Bluetooth 2.1 (SIG-2007) Compatibil cu 1.2, iar imbunatatirile majore includ: Perfeconarea procedurii inquire (Extended Inquiry Response). Reducerea consumului n low-power mode Permite schimbarea cheilor de criptare (Encryption Pause Resume) n cazul legturilor lungi peste 23.3 h(one Bluetooth day). Crete nivelul de cunoatere ntre dispozitivele reelei (Secure Simple Pairing +Near Field Communication -NFC), ducnd la creterea securitii i vitezei de conectare;

3.3.7

Bluetooth 3.0 (SIG-2009)

Specificaia 3.0 a fost adoptat de Bluetooth SIG pe 21 aprilie 2009. Principala noutate introdus este AMP (Alternate MAC/PHY), adic adugarea lui 802.11 (asociat de regul cu WiFi) ca un mod de transport de mare vitez. Aceast extindere mrete considerabil importana i potenialul Bluetooth (Wi-Fi era principalul competitor tehnic i economic).

3.4 Modele i arhitecturi de utilizare


Unitile Bluetooth aflate n acelai domeniu spaial de aciune radio pot realiza ad-hoc conexiuni punct-la-punct i/sau punct-la-multipunct. Unitile pot fi adugate sau deconectate n mod dinamic la reea. Dou sau mai multe uniti pot utiliza n comun un canal al unui piconet. Se pot forma mai multe picoreele i acestea se pot lega ad-hoc mpreun formnd scatternet, pentru a realiza configuraii flexibile de comunicaii i schimburi de date (Figura 22)[22].

Figura 22. Arhitecturi Bluetooth

Pentru a regula traficul pe canal, unul dintre participani devine master n piconet, n timp ce restul unitilor devin slave. Dac ntr-un acelai domeniu spaial se afl mai multe pico-reele, fiecare lucreaz independent i fiecare are acces la ntreaga band de frecvene. Fiecare pico-reea este stabilit pe un canal diferit, cu salt n frecven. Toi utilizatorii participani la aceeai pico-reea sunt sincronizai pe acest canal. Spre deosebire de dispozitivele cu infrarou (IR), unitile Bluetooth nu sunt limitate de necesitatea vederii directe ntre ele.

42

n conformitate cu Specificaiile actuale ale Bluetooth, pot comunica cu un master, simultan active, pn la apte dispozitive slave. Totui, numrul unitilor virtual ataate unui master, capabile s ntre n comunicaie este aproape nelimitat. Nucleul sistemului tehnologiei Bluetooth este format dintr-un dispozitiv emisie/receptie RF, baseband i o stiva de protocoale. Sistemul ofera servicii care activeza conexiunea dispozitivelor i schimbul de diferite de clase de date ntre aceste dispozitive. RF-ul foloseste o modulatie de frecventa binara pentru a minimize complexitatea emitatorului/receptorului . Rata simbolului este de 1 Megasimbol/sec(Msps) care suporta o rata de bit de 1 Megabit/sec(Mbps) sau cu EDR(Enhanced Data Rate) o rata de bit n aer de 2 la 3 Mb/s. Pentru a facilita procesul de transmisie, datele sunt mprite n entiti mai mici, numite pachete. n Figura 23 se prezint structura pachetelor i asocierea canalelor pentru master i respectiv slave.

Figura 23. Structura pachetelor i asocierea canalelor pentru master/slave

Saltul n frecven nu este o tehnologie nou, dar comparativ cu alte dispozitive ce utilizeaz banda de 2.4GHz, pentru dispozitivele cu Bluetooth, acesta este rapid i utilizeaz pachete mici. innd cont de faptul c dispozitivele radio Bluetooth lucreaz conform unui model FHSS, acest canal de comunicaie const dintr-o secven bine definit de frecvene la care se face transmisiunea, alese pseudo-aleator dintr-un set posibil de valori(79 de frecvene ntre 2.402MHz i 2.480MHz, cu pasul de 1 MHz) i care se schimb de 1600 de ori pe secund, fapt pentru care spunem c se face un salt al frecvenei-frequency hop. Acest lucru este posibil asignndu-le un canal de salt n frecven, determinat de secvena frequency hopping (ordinea n care fiecare frecven este folosit) i de perioda frecvenei. ntr-o reea piconet(pico reea), succesiunea este determinat de ceasul sistemului dispozitivului master. n esen, dispozitivul slave sincronizeaz ceasul su intern cu cel al dispozitivului master , care seteaz aceeai succesiune salturilor n frecven. Bluetooth utilizeaz mecanismele Inquiry i Paging i SDP (Service Discovery Protocol).

43

Pentru stabilirea unei conexiuni prin tehnologia wireless Bluetooth condiia principal este ca ambele terminale s doreasc realizarea acestei legturi. Unele dispozitive pot fi setate s nu realizeze scanri pentru mesaje Inquiry; n acest caz, celelalte dispozitive nu le pot descoperi i vor fi practic invizibile. n mod similar, unele dispozitive pot fi setate s nu realizeze scanri pentru mesaje Page; n acest caz, aceste dispozitive pot iniia legturi, dar nu vor auzi ncercrile altor dispozitive de a se conecta la ele. Aplicaiile pot alege dac s fac dispozitivele conectabile sau descoperibile. O conexiune nu poate fi realizat forat cu un dispozitiv care nu este setat pentru a o accepta.

44

4 Robotul LEGO Mindstorms NXT


4.1 Generaliti
LEGO Mindstorms este o serie de componente LEGO care cuprinde uniti programabile, senzori, servomotoare i alte pri constructive. Produsul LEGO Mindstorms NXT a fost lansat n iulie 2006 i este succesorul primului model, Robotics Invention System (RCX), care a strnit interesul unui numr mare de amatori. Succesul setului NXT este argumentat n special de uurina cu care se poate personaliza i extinde platforma. Au fost dezvoltate numeroase concepte, multe dintre care s-au evideniat n diverse concursuri de robotic din ntreaga lume. Avnd la dispoziie elemente mecanice cu care se pot construi structuri i mecanisme, elemente electronice cum ar fi senzori, servomotoare i microcontrolere, rezult c setul NXT permite construirea i programarea unui robot mobil reconfigurabil deosebit de versatil. Elementele mecanice ale sistemului respect binecunoscutul principiu LEGO al interconexiunii dintre elemente modularizate. Utilizarea acestor elemente are ca scop realizarea subansamblului mecanic al sistemului mecatronic: mecanismul care va fi acionat i controlat n scopul ndeplinirii unui task. Aceste elemente cuprind diferite tipuri de articulaii (cilindrice, sferice de translaie), roi dinate (cilindrice i conice), came, transmisii prin curele, reductoare planetare etc. Echipamentul NXT cuprinde:
Unitatea central de procesare, caramida Este centrul operaional al sistemului. Execut programele utilizatorului i controleaz comunicarea cu senzorii, servomotoarele, cu PC-ul sau cu alte uniti NXT Motoare electrice de curent continuu alimentate la 9V sau 12V (pe perioade scurte). Determin distana de la senzor pn la cel mai apropiat obiect folosind un sistem similar sonarului Este practic un ntreruptor, avnd dou stri: apsat sau eliberat Senzor fotosensibil capabil s disting 4 culori sau variaii n intensitatea luminii ambiente Msoar intensitatea sonor n decibeli (microfon) Servomotoarele i senzorii se conecteaz la unitatea central de procesare prin cabluri cu cte 6 fire care suport interfaa analoga i digitala Robotul se poate conecta la PC prin USB sau prin Bluetooth Conine driverele necesare i mediul de programare proprietar NXT-G

3 servomotoare Senzor cu ultrasunete Senzor de contact Senzor optic Senzor acustic Cabluri de interconectare

Cablu USB Suita software pentru PC

Alimentarea robotului se face prin 6 baterii standard AA de 1,5V sau se poate achiziiona un acumulator dedicat de 1400mAH [4]. 45

4.2 Sistemul de procesare al robotului NXT


Sistemul de procesare al robotului cuprinde dou microcontrolere, cel principal execut programele utilizatorului, iar cel auxiliar este destinat controlului prin PWM al servomotoarelor i meninerea vitezei n funcie de sarcin. Sub aceeai carcas sunt gzduite i interfeele de comunicare cu senzorii, microcontrolerul de comunicare Bluetooth, afiajul cu cristale lichide, butoanele de navigare prin meniu, un difuzor i porturile de conectare cu senzorii i servomotoarele.

Figura 24. Diagrama sistemului de procesare NXT

Specificaiile sistemului de procesare [1]:


Main processor Atmel 32-bit ARM processor, AT91SAM7S256 - 256 KB FLASH - 64 KB RAM - 48 MHz Atmel 8-bit AVR processor, ATmega48 - 4 KB FLASH - 512 Byte RAM - 8 MHz CSR BlueCoreTM 4 v2.0 +EDR System - Supporting the Serial Port Profile (SPP) - Internal 47 KByte RAM - External 8 MBit FLASH - 26 MHz Full speed port (12 Mbit/s)

Co-processor

Bluetooth wireless communication

USB 2.0 communication

46

4 input ports

3 output ports Display Loudspeaker 4 button user-interface Power source

Connector

6-wire interface supporting both digital and analog interface - 1 high speed port, IEC 61158 Type 4/EN 50170 compliant 6-wire interface supporting input from encoders 100 x 64 pixel LCD black & white graphical display - View area: 26 X 40.6 mm Sound output channel with 8-bit resolutio - Supporting a sample rate of 2-16 KHz Rubber buttons 6 AA batteries - Alkaline batteries are recommended - Rechargeable Lithium-Ion battery 1400 mAH is available 6-wire industry-standard connector, RJ12 Right side adjustment

4.3 Senzorii robotului NXT


Robotului NXT i se pot ataa 4 senzori la porturile de intrare (1, 2, 3, 4). Senzorii standard cu care este dotat robotul NXT sunt capabili s msoare distana, intensitatea luminii i intensitatea sonor. mpreun cu posibilitatea de a determina rotaia fiecrui servomotor (cu ajutorul unui encoder ncorporat), aceti senzori alctuiesc un sistem senzorial foarte cuprinztor. Mai mult, dezvoltatori particulari au mbogit seria de senzori cu diverse intrumente de msurare cum ar fi: accelerometru, compas, giroscop, termometru, camera video i altele. 4.3.1 Senzorul cu ultrasunete NXT Msurarea distanei pn la un obiect se poate face cu senzorul cu ultrasunete. Senzorul cu care este echipat robotul LEGO Mindstorms NXT este similar cu Parallax PING, prezentat n Figura 9, i permite citirea distanei pn la cel mai apropiat obiect care se ncadreaz n raza de detecie a senzorului. Pot fi detectate obiecte aflate la distane de la 1-2 cm la aproximativ 255 cm cu o precizie ridicat. Cel mai uor de detectat sunt obiectele mari care au forma regulat i suprafaa dur. Obiectele din materiale moi, cu forme neregulate sau foarte subiri nu sunt bine detectate rezultnd n valori alternante ale distanei pn la obiect. Este recomandat s nu se foloseasc mai muli senzori cu ultrasunete n aceeai camer deoarece ei se pot preturba reciproc.

47

Undele ultrasonice se propag sub forma unui con, astfel nct sensibilitatea senzorului este maxim de-a lungul axei conului (axa acustic) i descrete odat cu apropierea de generatoare. Pentru a fi perceput, un obiect trebuie s se gseasc n interiorul acestui con. 4.3.2 Protocolul de comunicare I2C

Citirea informaiei furnizate de ctre senzorii NXT este realizat prin intermediul protocolului I2C. Acest protocol a fost inventat de Philips i este folosit pentru comunicarea dintre periferice low-speed i sisteme centrale (placa de baz, telefon mobil, etc.). Protocolul const n transmisia de message sub forma binar dintre un dispozitiv master i unul slave. Pentru comunicarea cu senzorul de ultrasunete al robotului LEGO NXT sunt definite o serie de comenzi care returneaz valoarea senzorului sau iniiaz un anumit mod de funcionare al senzorului, printre care: Single shot command: n acest mod de funcionare, senzorul va msura de fiecare dat cnd se va trimite comanda, iar ultimele 8 valori msurate vor fi stocate n variabilele Read measurement byte 0 7. Continuous measurement command: Acesta este modul de funcionare implicit, n care senzorul msoar la un interval de timp prestabilit i stocheaz valoarea n variabila Read measurement byte 0 Event capture command: Acest mod de funcionare permite detectarea altor senzori cu ultrasunete care sunt n raza de sensibilitate. Astfel se poate decide cnd s se efectueze o msuratoare pentru a nu aprea interferene ntre senzori. [2] 4.3.3 Servomotorul NXT

Setul NXT este dotat cu 3 servomotoare alimentate la 9V. Ele se conecteaz, prin cablurile furnizate, la cele 3 porturi de ieire (A, B, C) ale unitii centrale. Mufele cablurilor sunt special proiectate s nu poat fi introduse invers i s aib alte dimensiuni dect mufele standard ale liniilor telefonice. Spre deosebire de servomotoarele modelului precedent, RCX, noile servomotoare sunt mai puternice i au ncorporate un sistem de transmisie reductor menit s creasc cuplul la ieire. De asemenea a fost ncorporat i un encoder de rotaie care ofer informaii despre poziia relativ a axului motorului fa de momentul de referin.

48

Figura 25. Servomotor NXT. Structura interna

Servomotorul NXT cuprinde 4 componente: Motor de c.c. alimentat la 9V nominal (suport 12V pe perioade scurte) Dispozitiv de protecie la supracurent (termistor RXE065) Encoder care returneaz rotaia relativ a motorului Sistem de transmisie cu raport reductor de 48:1 de la motor la axul servomoturului

Componentele sunt introduse ntr-o carcas rigid care poate fi uor ataat unei structuri mecanice din elemente LEGO. Motorul a fost analizat de ctre amatori LEGO NXT de la www.philohome.com i au fost determinai urmtorii parametrii de funcionare [11]:

Tensiune de alimentare 4.5 V 7V 9V 12 V

Sarcina 16.7 Ncm 16.7 Ncm 16.7 Ncm 16.7 Ncm

Turaie 33 rpm 82 rpm 117 rpm 177 rpm

Curent 0.6 A 0.55 A 0.55 A 0.58 A

Putere debitat (mecanic) 0.58 W 1.44 W 2.03 W 3.10 W

Putere absorbit (electric) 2.7 W 3.85 W 4.95 W 6.96 W

Randament 21.4 % 37.3 % 41 % 44.5 %

Parametrii de funcionare n gol i n scurt sunt listai n tabelul urmtor:

Tensiune de alimentare 9V 9V

Sarcina 0 50 Ncm

Turaie 170 rpm 0

Curent 0,06 A 2A

49

Pentru a mri cuplul servomotorului, transmisia se face printr-un angrenaj cu raport reductor de 48:1. Dei randamentul scade, cuplul mare este un avantaj n construcia unui robot mobil NXT. Encoderul cu care este echipat servomotorul este un encoder rotativ incremental optic capabil s depisteze direcia de rotaie (quadrature encoder). Este un sistem bine cunoscut care se bazeaz pe numrarea impulsurilor optice primite de ctre o diod fotosensibil. Impulsurile sunt create prin trecerea luminii de la un LED prin fantele unui disc care se rotete. Discul prezint 12 fante i este antrenat de motor cu raportul de transmisie 10:32 de la motor la encoder. Considernd i raportul de transmisie de la motor la axul servomoturului (de 48:1) reiese c pentru o revoluie complet a axului servomotorului, encoderul detecteaz 360 de impulsuri. Astfel se poate msura o rotaie de 10 a axului servomotorului.

Figura 26. Servomotor NXT. Encoder de rotaie

Deoarece servomotorul poate fi folosit de ctre persoane neavizate, el este protejat la supracureni cu un termistor, modelul RAYCHEM RXE065, ilustrat n Figura 27. Dispozitivul suport un curent maxim de 40A i o tensiune maxim de 60V. [11]

Figura 27. Servomotor NXT. Dispozitiv de protecie la supracurent

50

4.4 Metode de comunicare


Legtura fizic dintre PC i robotul NXT se poate realiza prin cablu USB sau prin conexiune Bluetooth 2.0. Avantajele comunicrii prin cablul USB se restrng la o vitez de transfer superioar i compatibilitate garantat cu PC-ul. Avantajele conexiunii Bluetooth: Nu limiteaz mobilitatea robotului sau raza de aciune Robotul NXT se poate conecta la maxim 10 alte dispozitive Bluetooth, fie c sunt tot roboti NXT sau PC Comunicaia este rezistent la interferene radio datorit tehnicii spread spectrum (salt de frecven) Este omnidirecional i nu necesit o poziionare n linie cu celelalte dispozitive pentru conectare

Ca atare, pentru dezvoltarea programelor care asigur comunicarea dintre robotul NXT i PC, am ales conexiunea Bluetooth.

4.5 Programarea robotului LEGO NXT


Suita software cu care este prevzut setul NXT conine att drivere necesare comunicrii PC-ului cu robotul NXT ct i un program de tipul IDE (Intergrated Development Environment) numit NXT-G. Pentru a permite programarea robotului cu o deosebit uurint, programarea n NXT-G este vizual (graphical programming) similar cu programele LabVIEW i Microsoft Robotics Studio. Programarea n NXT-G prezint urmtoarele avantaje: Este uor de instalat att pe Windows ct i pe Mac OS X Configurarea calculatorului pentru comunicarea prin USB sau Bluetooth este asigurat de la instalare Programarea vizual este foarte intuitiv i reprezint un pas de iniiere n programarea clasic Totui, programarea n NXT-G are i dezavantaje, cum ar fi faptul c nu se poate valorifica complet varietatea de instruciuni ale firmware-ului rezident pe robot. Dei produsul LEGO Mindstorms NXT a fost lansat relativ recent, amatorii de robotic au vzut n acest produs o platform de dezvoltare versatil. Printre pionieri se regsete John Hansen, creatorul limbajului de programare NXC (Not eXactly C) despre a crui realizare voi detalia la punctul 4.5.1. 51

Alte limbaje de programare / compilere au fost create sau adaptate s suporte arhitectura robotului NXT. Printre cele mai importante se afl: Next Byte Codes i NXC, RobotC, leJOS NXT, Matlab, Lua, etc. 4.5.1 Limbajul de programare NXC (Not eXactly C)

Dup cum i sugereaz i numele, limbajul NXC este un derivat al popularului limbaj de programare C. NXC a fost creat de ctre John Hansen (principal software engineer, Nashville, TN, USA) i folosete compiler-ul NBC (Next Byte Codes). Compiler-ul traduce codul NXC n instruciuni NXT bytecodes care sunt executate direct pe robot. [7] Fiind un limbaj specific programrii pentru robotul NXT, NXC este structurat pe msur. Codul este mprit n seturi de instruciuni numite task-uri care pot fi rulate n paralel. De asemena instruciunile se pot grupa n proceduri (metode) sau funcii, la fel ca n limbajul C. Sintaxa limbajului NXC este familiar datorit trsturilor comune cu limbajul C. Partea specific limbajului NXC const n API (Application Programming Interface) care reprezint o colecie de proceduri i funcii (o librrie) care sunt disponibile programatorului pentru a realiza operaii specifice robotului NXT. Documentaia limbajului NXC este cuprinztoare i clarific rapid setul de operaii care se pot executa folosind limbajul NXC. Avantajele limbajului de programare NXC: Alternativ la programarea vizual LEGO NXT-G Similar limbajului C, dar este specific programrii NXT Limitri importante: Nu suport valori numerice cu zecimale Nu suport recursivitate n ciuda limitrilor, limbajul NXC este competent i acoper majoritatea funcionalitilor propuse n lucrarea de fa. Ca atare, voi folosi acest limbaj pentru programarea robotului NXT.

52

5 Citirea datelor achiziionate de la senzorii NXT prin interogare de la PC


Prima metoda de transmisie a datelor achiziionate de la senzorii robotului NXT la PC pe care am implementat-o se bazeaz pe principiul interogrii. De obicei comunicarea prin Bluetooth dintre dou dispozitive presupune stabilirea unui terminal master care iniiaz i controleaz conexiunea i unui terminal slave care este subordonat master-ului. n aceast metod folosesc PC-ul ca master i robotul NXT ca slave. Practic, am realizat un program pe PC care emite comenzi ctre robotul NXT, prin intermediul conexiunii Bluetooth, i ateapt un rspuns la comanda emis. Interpretarea i executarea comenzii se face automat de ctre firmware-ul rezident n robotul NXT, fr o programare suplimentar. n funcie de tipul comenzii, rspunsul poate s confirme execuia comenzii i chiar s returneze date achiziionate de la senzori. Avantajele acestei metode sunt: Nu necesit programare suplimentar pe robotul NXT Pot fi folosite diverse limbaje de programare pe PC Resursele PC-ului sunt nelimitate n comparaie cu cele ale robotului NXT Dezavantaje: Prin aceast metod nu pot fi valorificate toate funcionalitile puse la dispoziie de firmware-ul NXT Apar mici ntrzieri ntre comand, achiziie date i rspuns

5.1 Obiectivele programului de pe PC


Programul care ruleaz pe PC trebuie s: Iniieze i controleze conexiunea Bluetooth dintre PC i robotul NXT; Obin date achiziionate de la senzorii NXT n timp real; Interpreteze datele obinute pentru a putea fi prelucrate programatic; Afieze datele prelucrate ntr-o form grafic intuitiv; Permit exportul lor ntr-un format compatibil Microsoft Excel

Prelucrarea datelor achiziionate sau afiarea lor depinde de scopul aplicaiei i pot lua diverse forme. De aceea, eu mi-am propus s asigur o funcionalitate important i anume, aceea de a exporta datele achiziionate ntr-un format comun, care poate fi apoi uor procesat. Datele achiziionate pot fi salvate n format tabelar (pe rnduri i coloane) Tab delimited text (.txt) care este compatibil cu orice versiune de Microsoft Excel.

53

5.2 Resurse hardware i software necesare


Pentru realizarea aplicaiilor prezentate n aceast lucrare, resursele hardware i software necesare sistemului PC-NXT sunt urmtoarele: PC (desktop, laptop, notebook, netbook) care ruleaz Windows XP i Microsoft .NET Framework 2; Adaptor pentru conectare Bluetooth 2.0 (intern sau extern); Drivere (software) necesare adaptorului Bluetooth; Realizarea procesului de mperechere (pairing) Bluetooth dintre PC i NXT; Robotul LEGO NXT cu senzorul cu ultrasunete i un servomotor ataate

Un pas important n configurarea PC-ului pentru conexiunea Bluetooth cu robotul NXT este mperecherea Bluetooth. Procesul presupune recunoaterea (discovery) reciproc a celor dou dispozitive PC i NXT i cuplarea lor software dup introducerea pe fiecare dintre dispozitive a aceluiai cod PIN (Personal Identification Number). n urma confirmrii codului PIN fiecare dintre dispozitive stocheaz adresa MAC (Media Access Control) a corespondentului pentru recunoatere ulterioar. Acest proces se realizeaz o singur dat pentru aceleai dou dispozitive, ct timp nregistrrile adreselor MAC sunt pstrate de ctre fiecare parte. mperecherea este o msur de securitate care poate restriciona accesul la anumite dispozitive (prin codul PIN). Pe PC, mperecherea Bluetooth se face folosind soft-ul care este instalat o dat cu diverele adaptorului Bluetooth. Comunicarea Bluetooth suport anumite protocoale numite services specializate pentru transferul anumitor formate de date. Exist un protocol pentru transfer de semnal audio, transfer de fiiere, transfer de agend telefonic, etc. Pentru comunicarea PC-ului cu robotul NXT trebuie configurat protocolul de comunicare prin port serial. Aceasta se poate face din software de pe PC i realizeaz o alocare a conexiunii Bluetooth cu un anumit dispozitiv la un anumit port serial al PC-ului (exemplu: COM1, COM2, etc.). n Figura 28 sunt ilustrai paii tipici de configurare a conexiunii Bluetooth dintre PC i un robot NXT:

54

Figura 28. Configurarea conexiunii Bluetooth dintre PC i NXT

Configurarea conexiunii Bluetooth duce la stabilirea unui port serial al calculatorului dedicat comunicrii dintre PC i robotul NXT (exemplu: COM6). Numele portului rezervat pentru conexiunea Bluetooth cu robotul NXT poate s difere de la PC la PC. Cu aceast informaie se poate implementa programatic o metod de iniiere i control a conexiunii Bluetooth dintre PC i robotul NXT. n continuare voi prezenta o metod de iniiere i control a conexiunii Bluetooth dintre PC i robotul NXT folosind un algoritm scris n limbajul de programare C#.

55

5.3 Limbajul de programare C# (C Sharp)


Limbajul de programare C# (se citete C Sharp) este un limbaj creat de Microsoft pentru dezvoltarea aplicaiilor bazate pe .Net Framework. Similar au fost dezvoltate i limbajele VB.NET, J#, F#. Motivele pentru care am ales acest limbaj de programare pentru realizarea aplicaiilor pe PC din aceasta lucrare sunt urmtoarele: C# este un limbaj destinat RAD (Rapid Application Development) Librriile din Microsoft .Net Framework sunt robuste i permit implementarea comunicrii prin port serial Din punctul de vedere al sintaxei, C# este similar cu popularul C i C++ cu care mam familiarizat pe parcursul facultii

C# este un limbaj pur Object Oriented i are la baz conceptul de clas (class). O clas reprezint un obiect virtual care are proprieti, metode, constante, constructori, evenimente, etc. n programare, obiectele virtuale sunt utile deoarece pot reprezenta corespondente ale unor obiecte din realitate. Aceste obiecte virtuale pot fi folosite pentru a simula sau a controla obiectele din realitate. Pentru a descrie acest concept (clas sau obiect virtual) am ales s consider un exemplu din realitate care poate fi reprezentat n programare: automobilul. Obiectul sau clasa se va numi Automobil i poate fi definit astfel:
Clasa Proprieti Automobil Sunt parametrii care caracterizeaz starea sau tipul clasei: kilometrajul curent, viteza cu care ruleaz, turaia Se refer la secvene de aciuni pe care le poate executa clasa: mers nainte, sau mers n mararier, sau aprinderea farurilor Valori folosite frecvent care nu pot fi schimbate: numrul de roi, sau volan pe partea stng sau dreapt, sau marca automobilului Sunt metode care definesc parametrii iniiali i creaz o reprezentare (instance) a clasei. Similar productorul construiete automobilul n funcie de speficicaiile posesorului. Sunt aciuni invocate de ctre clasa care reflect o anumit schimbare n starea sa i necesit intervenia utilizatorului (posesorului): avertizare de combustibil redus, sau avertizare faruri aprinse

Metode

Constante

Constructori

Evenimente

56

Este evident asemnarea unui automobil cu un robot mobil. Observaia rmne valabil i pentru conceptele corespondente din programare. n C# clasa Automobil ar putea fi definit astfel:
public class Automobil { // constante public const int NumarDeRoti = 4; public const string Marca = "Suzuki"; public const bool VolanPeStanga = true; // constructor public Automobil() { VitezaCurenta = 0; Kilometraj = 0; } // constructor public Automobil(int km) { Kilometraj = km; } // proprietate public int VitezaCurenta { // in km / ora get {return _VitezaCurenta;} set {_VitezaCurenta = value;} } private int _VitezaCurenta; // proprietate public int Kilometraj { get {return _Kilometraj;} set {_Kilometraj = value;} } private int _Kilometraj; // proprietate public int TuratieCurenta { get {return _TuratieCurenta;} set {_TuratieCurenta = value;} } private int _TuratieCurenta; // metoda public void PornesteMotorul() { TuratieCurenta = 900; //rpm } // metoda public void OpresteMotorul() { TuratieCurenta = 0; //rpm } // metoda public int RuleazaInainte(int Durata) {// Durata in ore Kilometraj = Kilometraj + (VitezaCurenta * Durata); return Kilometraj; } }

57

Similar cu exemplul de mai sus am creat o clas numit OperatorNXT care controleaz robotul NXT. Mai concret, clasa OperatorNXT controleaz conexiunea Bluetooth cu robotul NXT i citirea datelor achiziionate de la senzori. Codul care definete clasa OperatorNXT este prezentat n Anexa 9.1.

5.4 Proiectarea i implementarea aplicaiei de pe PC


5.4.1 Iniierea conexiunii Bluetooth dintre PC i NXT n C#

Urmnd paii de configurare al PC-ului descrii la sub-capitolul 5.2 rezult stabilirea unui port serial (COM1, COM2, etc) prin care se realizeaz conexiunea Bluetooth cu robotul NXT. n limbajul de programare C#, clasa SerialPort din librria System.IO.Ports, inclus n Microsoft .Net Framework, supervizeaz operaiile de citire sau scriere de date la un port serial al calculatorului. Am folosit aceast clas pentru a iniia i controla conexiunea cu dispozitivul Bluetooth asignat acelui port serial, adic robotul NXT. La iniializare, clasa SerialPort primete ca parametru numele portului serial. Acest parametru este un ir de caractere (string) care reprezint numele portului serial stabilit pentru comunicarea Bluetooth cu robotul NXT. n aplicaiile prezentate n acest lucrare, numele portului serial folosit este COM6. n consecin clasa SerialPort este iniializat cu parametrul COM6.

private SerialPort PortSerial = new SerialPort("COM6");

n exemplul de mai sus am creat o reprezentare (instance) a clasei SerialPort. Aceasta reprezentare este o variabil definit pe baza clasei SerialPort i dispune de toate atributele clasei SerialPort. Pentru a putea comnica prin portul serial al PC-ului trebuie ca acesta s fie deschis. Deschiderea conexiunii se face apelnd metoda Open. Clasa SerialPort dispune de metodele Write i Read pe care le folosesc pentru transmisia de date dintre PC i NXT. Metoda Write realizeaz transmisia informaiei de la PC la NXT i primete ca parametru un vector de tip byte care conine seria de octei ce va fi trimis prin portul serial. Metoda Read este folosit pentru citirea unui vector de tip byte care reprezint seria de octei primit de la robotul NXT.

58

5.4.2

Comunicarea PC NXT prin interogare

n calitate de master, PC-ul va iniia i controla conexiunea Bluetooth i va emite comenzi ctre robotul NXT. Recepionarea, interpretarea i executarea comenzilor pe robotul NXT se face automat de ctre firmware-ul rezident, fr o programare suplimentar [2]. n funcie de tipul comenzii, rspunsul poate s confirme execuia comenzii sau chiar s returneze date achiziionate de la senzori. Acest protocol este numit control prin comenzi directe. Protocolul de control prin comenzi directe poate furniza date achiziionate de la orice senzor NXT. Un ciclu de interogare i rspuns cuprinde urmtoarele etape generale: 1. Formularea comenzii 2. Trimiterea comenzii la portul serial al PC 3. Transmisia prin Bluetooth de la PC la NXT 4. Interpretarea comenzii pe NXT 5. Executarea comenzii / Achiziia de date de la senzor 6. Formularea rspunsului 7. Trimiterea rspunsului 8. Transmisia prin Bluetooth de la NXT la PC 9. Recepionarea rspunsului la portul serial al PC 10. Interpretarea rspunsului Prin interogri succesive, la un anumit interval de timp, se poate acumula pe PC o serie de msuratori de la senzorii NXT care reflect evoluia n timp a mrimilor respective. Un aspect important pentru valorificarea datelor achiziionate este fixarea lor n timp. Deoarece timpul este msurat pe PC i datele sunt achiziionate de la senzori pe unitatea NXT, apar ntrzieri i o desincronizare a datelor fa de momentul achiziiei. Fiecare etap din procesul descris mai sus reprezint o ntrziere. Din fericire suma acestor ntrzieri este relativ mic, de ordinul zecilor de milisecunde. Mai mult, aceste ntrzieri sunt n general constante i se poate compensa efectul lor din programare. Dei subiectul este discutabil, n final voi demonstra experimental c aceste ntrzieri sunt neglijabile n raport cu aplicaiile prezentate n aceast lucrare. n consecin, metoda prin interogare de la PC asigur acurateea i consistena datelor achiziionate i este o metod fiabil i performant. 5.4.3 Implementarea protocolului de control prin comenzi directe

Acest set de instruciuni face posibil comanda robotului NXT de la dispozitive externe. Astfel robotul NXT poate fi controlat de la PC, de la ali roboi NXT sau orice dispozitiv capabil de comunicare Bluetooth sau USB prin port serial. 59

Protocolul acoper funcionalitile de baz ale robotului NXT, dar permite i extinderea sa prin trimiterea unor comenzi personalizate care ar putea fi interpretare de un program suplimentar care ruleaz pe robot. Utiliznd comenzi directe se poate: Comanda un servomotor NXT (turaie, sens, oprire, frn) Citi date de la senzori sau de la encoderul unui servomotor Trimite / primi de mesaje tip SMS (Short Message Service) care pot fi preluate / generate de ctre un program ce ruleaz pe NXT Executa un anumit program rezident pe robot Alte operaii specifice

Protocolul se bazeaz pe protocolul standard de comunicare LEGO Mindstorms NXT, i anume prin transmisia de telegrame cu arhitectura prezentat n Figura 29 [3].

Figura 29. Arhitectura generala a protocolului de comunicare NXT

Primul octet (byte 0) va conine tipul de comand. Dac seria de octei este un rspuns, atunci primul octet va reprezenta tot un tip de comand (reply) i va avea valoarea 0x02 n hexadecimal. Lista complet de tipuri de comand este prezentat n Tabelul 3.

Tabelul 3. Lista tipurilor de comand NXT

0x00 0x01 0x02 0x80 0x81

Comanda direct, necesit rspuns Comanda de sistem, necesit rspuns Rspuns Comanda direct fr rspuns Comanda de sistem fr rspuns

Comenzile de sistem nu fac parte din protocolul de comenzi directe i nu sunt folosite pentru comanda uzual a robotului NXT. Al doilea octet (byte 1) va determina care comand va fi executat, adic va conine codul comenzii, iar restul de octei vor descrie parametrii specifici respectivei comenzi.

60

Lungimea maxim a unei telegrame care reprezint o comand direct este de 64 de octei, ncepnd de la primul octet (byte 0). Pentru telegrame transmise prin Bluetooth se adaug doi octei la nceputul structurii conform Figura 30. Acesti doi octei descriu lungimea telegramei.

Figura 30. Structura unei comenzi trimise prin Bluetooth

Unde LSB (Least Semnificant Byte) i MSB (Most Semnificant Byte) descriu lungimea total a comenzii. n C#, formularea comenzilor presupune completarea unui vector de valori byte cu parametrii specifici comenzii:
byte[] comanda = new byte[3]; comanda[0] = 0x00; // comanda directa, necesita raspuns comanda[1] = (byte)CodMesajDirect.CitesteStareMotor; // 0x06 codul comenzii comanda[2] = (byte)port_motor; // portul la care este atasat servomotorul

Comanda este apoi procesat, se construiete telegrama i se scrie (Write) la portul serial al PC-ului:
int lungime_comanda = comanda.Length; byte[] telegrama = new byte[lungime_comanda + 2]; // creeaza telegrama telegrama[0] = (byte)(lungime_comanda & 0xFF); // calculeaza LSB telegrama[1] = (byte)((lungime_comanda & 0xFF00) >> 8); // calculeaza MSB comanda.CopyTo(telegrama, 2); // completeaza telegrama cu continutul comenzii PortSerial.Write(telegrama, 0, telegrama.Length); // trimite telegrama

n funcie de tipul comenzii se ateapt apoi un rspuns i se citete de la portul serial al PC-ului:
if (comanda[0] < 0x80) // in cazul in care comanda directa necesita raspuns { int lsb = PortSerial.ReadByte(); // citeste primul byte int msb = PortSerial.ReadByte(); // citeste al doilea byte int lungime_raspuns = lsb + msb * 256; // calculeaza lungimea raspunsului byte[] raspuns = new byte[lungime_raspuns]; PortSerial.Read(raspuns, 0, lungime_raspuns); // citeste raspunsul }

61

5.4.4

Algoritmul metodei de interogare de la PC

Folosind metodele prezentate la punctele 5.4.1, 5.4.2 i 5.4.3 am construit programul propus, implementnd un algoritm care presupune citirea datelor de la senzorii NXT prin interogri succesive. Pe scurt, algoritmul metodei de citire a datelor achiziionate prin interogare de la PC cuprinde urmtorii pai: 1. Deschiderea portului serial (iniierea conexiunii cu NXT) 2. Ct timp se dorete interogarea: 2.1. Formularea unui vector de valori byte care reprezint o comand direct 2.2. Scrierea seriei de byte la portul serial al calculatorului 2.3. Ateptarea unui rspuns din partea robotului NXT sub forma de serie byte 2.4. Interpretarea rspunsului i a datelor ataate 2.5. Stocarea datelor primite 3. nchiderea portului serial (anularea conexiunii cu NXT) 4. Afiarea sau exportul rezultatelor

n Figura 31 este prezentat o diagram simplificat a algoritmului metodei de citire a datelor achiziionate prin interogare de la PC.

62

Figura 31. Diagrama simplificata a algoritmului de citire a datelor achiziionate prin interogare de la PC

Codul surs complet este prezentat n Anexa 9.1, Anexa 9.2, Anexa 9.3.

5.5 Aplicaie la metoda de citire a datelor achiziionate de la senzorii NXT prin interogare de la PC
5.5.1 Determinarea poziiei obiectelor cu senzorul de ultrasunete

Deoarece senzorul cu ultrasunete are un unghi de acoperire mare (aprox. 120o) nu se poate determina poziia obiectelor din raza sa de msurare sau numrul lor. Pentru determinarea poziiei obiectelor se poate construi un sistem din componenete LEGO NXT care cuprinde un servomotor, unitatea central i senzorul cu ultrasunete. Sistemul funcioneaz ca radarul de pe vasele maritime i scaneaz mprejurimile pentru construirea unui contur virtual al obiectelor din jur.

63

Figura 32. Aplicaie la metoda de citire a datelor de la senzori prin interogare de la PC

Senzorul este ataat rotorului servomotorului i se rotete stnga-dreapta pentru a acoperi ct mai mult din spaiul nconjurtor. Pe msur ce senzorul se rotete, datele colectate de la senzor sunt asociate cu poziiile rotorului fa de unghiul iniial. Pentru un control mai precis al rotaiei se folosete un raport de transmisie ntre servomotor i suportul senzorului. n principiu, astfel se poate determina att poziia unui obiect ct i dimensiunile acestuia (limea sau nlimea). Controlul servomotorului i citirea senzorului cu ultrasunete se face de pe PC prin Bluetooth folosind metoda i algoritmul de citire a datelor achiziionate de la senzorii NXT prin interogare de la PC descrise mai sus. Aplicaia prezint o interfa grafic facil prin intermediul creia se poate iniia conectarea sau deconectarea prin Bluetooth a PC-ului la NXT. Aplicaia realizeaz urmtoarele operaii: realizeaz conectarea prin Bluetooth a celor dou sisteme: PC i robot NXT; seteaz modul de funcionare al senzorului cu ultrasunete (Continous read mode); efectueaz la un anumit interval de timp citiri ale valorii furnizate de senzorul cu ultrasunete; nregistreaz fiecare valoare a distanei citite i o asociaz cu valoarea rotaiei motorului (unghiul) din momentul respectiv; afieaz n interfa grafic valoarea curent a distanei msurate, a rotaiei motorului i a rotaiei relative fa de momentul pornirii procesului; n funcie de poziia rotorului, se decide schimbarea sensului de rotaie sau continuarea micrii n sensul curent; controleaz viteza i rotaia motorului dup fiecare msurare a distanei; 64

Deoarece msurarea distanei i transmisia informaiei prin Bluetooth cauzeaz o ntrziere considerabil din momentul trimiterii comenzii pn n momentul returnrii rezultatului, nu se poate msura n timp ce senzorul cu ultrasunete se rotete cu vitez constant. n consecin, msurarea distanei se face la intervale de timp precise, sincronizate cu staionarea motorului dup parcurgerea unei anumite rotaii. Astfel procesul de colectare a datelor este sacadat i lent, dar confer o precizie superioar. 5.5.2 Interfaa grafic i analiza datelor obinute

Analiza datelor obinute se poate face n chiar timpul colectrii lor datorit interfeei grafice care prezint n mod vizual o hart virtual a conturului spaiului nconjurtor Figura 33.

Figura 33. Interfaa grafic a aplicaiei

Intuitiv, zonele cu negru reprezint umbre ale obiectelor situate n zona scanat (la distante mici), iar rou reprezint spaiul gol (distante mari). n urma diferitelor ncercari i optimizri am ajuns la concluzia ca rezultatele obinute ofera o vaga imagine a spatiului scanat. Desi pozitia obiectelor poate fi determinata, o incercare de a evalua dimensiunile obiectului nu ar oferi rezultate precise. Consider ca deficienele sunt n mare parte datorate metodei de control i comanda prin Bluetooth care adauga o intarziere semnificativa intre diferite masuratori i faptului ca prin aceasta metoda nu se pot accesa anumite functionalitati software ale robotului NXT care ar permite o mai buna manevrare a servomotorului.

65

6 Citirea datelor achiziionate de la senzorii NXT sub comanda programului NXC


Ca alternativ la prima metod, prezentat la Capitolul 0, am elaborat o a doua metod prin care se poate face transmisia datelor achiziionate de la senzorii NXT la PC. Aceast a doua metod presupune realizarea a dou programe: Programul emitor care ruleaz pe robotul NXT (n limbajul de programare NXC) acest program stocheaz date achiziionate de la senzori, le serializeaz i le trimite prin conexiune Bluetooth ctre PC; Programul receptor care ruleaz pe PC (n limbajul de programare C#) acest program monitorizeaz portul serial al PC-ului, citete datele primite de la NXT i interpreteaz datele achiziionate de la senzori. Cele dou programe conlucreaz pentru a realiza transmisia datelor achiziionate de la NXT la PC, dar este evident faptul c programul de pe NXT are comanda operaiunilor. Dei rolurile par inversate, din punctul de vedere al conexiunii Bluetooth, cel care iniiaz conexiunea Bluetooth este tot programul de pe PC-ul, iar acest lucru se face n acelai mod descris la punctul 5.4.1. Avantajele acestei metode sunt: Posibilitatea valorificrii tuturor funciilor robotului prin programarea robotului n limbajul NXC; Acces la funcii care permit control mai precis al robotului; ntrzieri minime ntre momentele de achiziie ale datelor; Comunicarea se desfoar ntr-un singur sens (de la NXT la PC), ca atare transmisia datelor dureaz mai puin i este mai sigur; Posibilitatea transmiterii de date cu scop de depanare (debugging) a aplicatiilor NXC; Dezavantaje: Resurse hardware i software limitate pentru programul n NXC Necesit programare i pe partea NXT i pe partea PC

n continuare voi prezenta pe larg fiecare dintre cele dou programe i o aplicaie la aceast metod.

66

6.1 Proiectarea i implementarea programului de pe NXT (emitorul)


6.1.1 Obiectivele programului de pe NXT

Programul care ruleaz pe robotul NXT are rolul de a achiziiona date de la senzorii NXT i de a le transmite prin Bluetooth ctre PC. Pe scurt programul n NXC trebuie s: Achiziioneze date de la anumii senzori ai robotului NXT; Stocheze datele ntr-un format care permite asocierea valorii achiziionate de la senzor cu momentul achiziiei; Serializeze datele achiziionate pentru transmisia prin Bluetooth; Segmenteze calupul de date n pachete pentru a fi transmise prin Bluetooth; Expedieze pachetele de date achiziionate ctre PC;

Programul va colecta date achiziionate i le va trimite la PC n salve (pachete). 6.1.2 Achiziia datelor de la senzorii NXT

n limbajul de programare NXC sunt disponibile cteva funcii (metode) destinate citirii datelor de la senzorii NXT. Pentru aplicaiile prezentate n aceast lucrare voi folosi dou funcii pentru a citi datele de la doi senzori NXT: MotorTachoCount i SensorUS [7]. Funcia MotorTachoCount returneaz rotaia axului servomotorului fa de poziia iniial. Valoarea returnat este n grade i este un numr ntreg stocat pe 16 bii care poate fi i negativ, adic de tipul short. Aceast informaie poate fi folosit pentru calcularea distanei parcurse de robotul NXT. Encoderul care furnizeaz aceast informaie este descris la punctul 4.3.3. Funcia SensorUS returneaz ultima msurtoare efectuat de senzorul cu ultrasunete NXT. Valoarea returnat reprezint distana de la senzor pn la cel mai apropiat obiect i este n centimetri. Distana maxim care poate fi msurat de ctre senzorul cu ultrasunete este de 255 cm, adic un numr stocat pe 8 bii, un octet (byte). Senzorul cu ultrasunete NXT este prezentat la punctul 2.3.2 i 4.3.1. Datele achiziionate sunt semnificative numai dac se pstreaz i momentul la care au fost achiziionate. Practic trebuie asociat o valoare msurat cu momentul n care a fost msurat. Pentru a realiza acest lucru n programare se poate folosi un vector cu 2 dimensiuni (o matrice) sau se poate folosi un tip de date numit structura (struct). Am ales varianta a doua deoarece tipul de date struct este similar cu conceptul de obiect virtual ntlnit n programarea Object Oriented din C# (punctul 5.3). Un alt avantaj al tipului de date struct este c permite mai uor serializarea sa. 67

Tipul de date struct folosit n programul dezvoltat pentru aceast lucrare este numit

masuratoare i se definete astfel: struct masuratoare { unsigned short timp; short valoare; };
Pentru exemplificare, achiziia de date de la encoderul unui servomotor i crearea unei variabile de tipul masuratoare se poate face n felul urmtor:

masuratoare m; // declararea variabilei de tip masuratoare m.valoare = MotorTachoCount(OUT_C); // achizitie date encoder m.timp = CurrentTick(); // nr de milisecunde
Instruciunile de mai sus sunt incluse ntr-o metod numit SalveazaMasuratoare care primete ca parametru valoarea unui senzor, iar fixarea n timp se face independent de tipul de senzor care a furnizat valoarea sau de valoare n sine. Mai mult, metoda construiete un vector de tip masuratoare n care sunt stocate achiziiile de date efectuate. Practic, fiecare

masuratoare efectuat este pstrat ntr-un vector numit SerieMasuratori. Acest vector
va fi serializat i transmis prin Bluetooth la PC. Codul complet al programului scris n NXC este prezentat n Anexa 9.4. 6.1.3 Serializarea datelor achiziionate

Pentru a putea transmite date prin conexiunea Bluetooth i apoi la PC, datele achiziionate de la senzorii NXT de ctre programul NXC trebuie serializate. Serializarea este folosit pretutindeni n transmisia informaiei i poate fi o tehnic de compresie sau criptare a informaiilor transmise. n programul NXC serializarea datelor achiziionate de la senzorii NXT se face prin intermediul unei funcii native limbajului NXC numite FlattenVar. Funcia FlattenVar transform orice variabil n reprezentarea sa sub forma de ir de caractere ASCII, adic de tip string. Tipul de date string ascunde n spate un vector de tip byte n care fiecare element conine codul ASCII al caracterului reprezentat. [7] Folosind funcia FlattenVar se poate transforma un vector de tip masuratoare ntr-o variabil de tip string care poate fi trimis apoi prin Bluetooth la PC.

68

6.1.4

Transmisia datelor prin Bluetooth de la NXT la PC

n programul NXC dezvoltat pentru aceast lucrare, trimiterea datelor serializate n prealabil prin conexiune Bluetooth se face apelnd metoda BluetoothWrite care este nativ limbajului NXC. Metoda BluetoothWrite primete ca parametru o variabil de tip string care reprezint un ir de caractere ASCII, sau mai exact un vector de tip byte. Aceast metod realizeaz transmisia de date de la NXT la PC prin intermediul conexiunii Bluetooth. Parametrul ataat metodei, sub form de string, reprezint un mesaj care va fi transmis la PC-ului. 6.1.5 Algoritmul programului NXC Pe scurt, algoritmul programului NXC este definit de urmtoarele etape: 1. Iniierea msurtorii (salvarea momentului iniial) 2. Ct timp se msoar: 2.1. Achiziia valorii unui senzor 2.2. Stocarea valorii ntr-un tip de date structura numit msuratoare care permite asocierea valorii cu momentul msurrii (4 octei) 2.3. Adugarea msurtorii curente la un vector tip coada de msurtori 3. ncheierea procesului de msurare 4. Serializarea vectorului de msurtori ntr-un string numit buffer 5. Segmentarea buffer-ului n pachete de cte 200 octei, adic 50 de msurtori 6. Trimiterea pachet cu pachet a datelor serializate ctre PC

n Figura 34 este prezentat o diagram simplificat a algoritmului de achiziionare a datelor de la senzorii NXT i transmisia lor la PC de ctre programul scris n NXC.

69

Figura 34. Diagrama simplificat a algotitmului programului NXC (emitor)

Codul surs complet este prezentat n Anexa 9.4.

6.2 Proiectarea i implementarea programului de pe PC (receptorul)


Programul care ruleaz pe PC are rolul de a recepiona datele transmise de ctre programul NXC. Aceast funcionalitate este similar cu cea ndeplinit de ctre programul PC de la Capitolul 5, adic citirea datelor prin interogare de la PC. Ca atare am folosit aceleai principii i metode perfecionate pentru comanda robotului prin interogare. De acest dat accentul a fost pus pe citirea datelor de la portul serial al calculatorului, interpretarea i stocarea lor. Clasa pe care am creat-o pentru acest scop se numete ReceptorNXT, iar codul complet se gseste n Anexa 9.5. 6.2.1 Algoritmul programului de pe PC

Pe scurt, algoritmul programului care ruleaz pe PC (receptorul) este definit de urmtoarele etape: 1. Deschiderea portului serial (conexiune cu NXT) 2. Ct timp se dorete monitorizarea: 2.1. Citirea seriei de bytes de la SerialPort 2.2. Stabilirea capetelor pachetelor 70

2.3. Interpretarea fiecrui pachet primit 2.4. Conversia de la bytes la tipuri de date utilizabile n C# short, ushort 2.5. Construirea unui vector de tip de date Masuratoare 2.6. Stocarea vectorului de msurtori 3. Afiare sau export msurtori

n Figura 35 este prezentat o diagram simplificat a algoritmului de citire a datelor de la senzorii NXT transmise la PC de ctre programul scris n NXC.

Figura 35. Diagram simplificat a algoritmului de citirea a datelor de la senzorii NXT transmise la PC de ctre programul scris n NXC

Codul surs complet este prezentat n Anexa 9.5.

71

6.2.2

Interfaa grafic a programului de pe PC Interfaa grafic a programului de pe PC este ilustrat n figurile de mai jos:

Figura 36. Interfaa grafic a programului. Iniierea conexiunii Bluetooth

Figura 37. Interfaa grafic a programului. Datele achiziionate

Primul pas care trebuie efectuat pentru citirea datelor de la robotul NXT este iniierea conexiunii Bluetooth. n Figura 36 este evideniat zona dedicat iniierii conexiunii Bluetooth. Aceasta se face alegnd portul serial rezervat pentru comunicarea Bluetooth cu robotul NXT. Pentru rapiditate este disponibil o list cu porturile seriale uzuale (COM1, COM2, COM6, COM13), dar este posibil i introducerea manual a numelui portului. Apsarea butonului Conecteaz! realizeaz deschiderea portului serial. Dac operaiunea a avut succes, butonul este iluminat, iar pe afiajul robotului NXT se poate observa c dispozitivelele sunt cuplate Bluetooth. n continuare se poate porni monitorizarea portului serial prin apsarea butonului Start din stnga. Astfel se pornete o execuie repetitiv care verific portul serial n ateptarea unui transfer de date. Dac portul serial al PC-ului recepioneaz date transmise prin Bluetooth de la robotul NXT, atunci acestea sunt rapid interpretate i listate n interfaa programului (Figura 37). Odat primite i interpretate, datele pot fi salvate ntr-un fiier n format Tab delimited text pentru postprocesare.

72

6.3 Aplicaie la metoda de citire a datelor achiziionate de la senzorii NXT sub comanda programului NXC
6.3.1 Evoluia n timp a mrimilor msurate de ctre senzorii NXT

Pentru testarea celor dou programe prezentate la punctele 6.1 i 6.2, am realizat robotul din Figura 38 care face uz de un servomotor NXT i senzorul cu ultrasunete NXT. Scopul aplicaiei este s furnizeze date achiziionate de la senzorii NXT sub comanda programului NXC pentru a obine graficul evoluiei mrimilor msurate n timp. Se va analiza evoluia n timp a distanei parcurse de ctre robot i a distanei pn la cel mai apropiat obiect msurate de ctre senzorul cu ultrasunete. Comanda robotului este de partea programului NXC care va executa urmtoarele instruciuni pentru a pune n micare robotul:

task motion() { // roteste ax servomotor 500 de grade cu viteza 20 RotateMotor(OUT_C, 20, 500); // asteapta 3000 de ms (3 secunde) Wait(3000); // roteste ax servomotor 500 de grade cu viteza -60 // (sens invers) RotateMotor(OUT_C, -60, 500); }
Instruciunea RotateMotor(OUT_C, 20, 500) va produce o rotire cu 500 de grade n sensul acelor de ceasornic a axului servomotorului conectat la portul OUT_C al robotului NXT. Viteza de rotaie (20 n prima instruciune) este o mrime derivat cu valori ntre -100 i 100 i se traduce de fapt n tensiunea aplicat bornelor servomotorului (-9V i +9V). Avnd n vedere construcia robotului prezentat n Figura 38, cu traciunea suportat de ctre un singur servomotor, este evident faptul c robotul nu se poate deplasa dect pe o singur direcie (nainte i napoi), iar distana parcurs este direct proporional cu unghiul de rotaie al axului servomotorului.

73

Ca atare, robotul se va deplasa nainte cu o vitez relativ mic pe o distan de aprox. 20cm, apoi se va opri timp de 3 secunde i se va ntoarce la poziia iniial cu o vitez de 3 ori mai mare. Pentru evaluarea datelor de la senzorul cu ultrasunete se va plasa n faa robotului, la aproximativ 40cm, un obstacol. Pe msur ce robotul se apropie de obstacol, senzorul cu ultrasunete ar trebui s nregistreze scderea distanei, iar evoluia acestei mrimi s corespund cu evoluia distanei parcurse msurat de ctre encoderul servomotorului.

Figura 38. Aplicaie la metoda de citire a datelor achiziionate sub comanda programului NXC

6.3.2

Rezultatele obinute

n urma executrii aplicaiei i a transmisiei datelor achiziionate la PC, rezultatele au fost exportate ntr-un fiier Tab delimited text care a fost apoi introdus n programul Microsoft Excel pentru interpretare.

74

Figura 39. Evoluia distanei parcurse de robot

Figura 40. Evoluia distanei pn la obstacol

75

7 Analiza rezultatelor obinute


7.1 Rezultatele obinute la aplicaiile implementate
Lucrarea de fa prezint dou metode de transmisie a datelor achiziionate de la senzorii NXT la PC: 1. Citirea datelor achiziionate de la senzorii NXT prin interogare de la PC (cap. 5) 2. Citirea datelor achiziionate de la senzorii NXT sub comanda unui program scris n limbajul NXC care ruleaz pe NXT (cap. 6) La fiecare dintre cele dou metode elaborate am realizat i cte o aplicaie practic. Aplicaiile respective au fost: 1) Determinarea poziiei obiectelor cu senzorul de ultrasunete (punctul 5.5) 2) Evoluia n timp a mrimilor msurate de ctre senzorii NXT (punctul 6.3) Deoarece aplicaiile implementate au obiective distincte i modaliti de interpretare specifice, rezultatele obinute la fiecare dintre cele dou aplicaii sunt prezentate la capitolele respective, adic punctul 5.5 i punctul 6.3.

7.2 Compararea celor dou metode


Pentru compararea celor dou metode am realizat o aplicaie similar cu aplicaia de la punctul 6.3 (Evoluia n timp a mrimilor msurate de ctre senzorii NXT). Aplicaia realizeaz monitorizarea senzorilor NXT folosind simultan ambele metode n timpul executrii unui set de instruciuni NXC care determin micarea robotului NXT astfel nct mrimile monitorizate s varieze n timp. Se va analiza evoluia unghiului de rotire al axului servomotorului. Avnd n vedere construcia robotului prezentat n Figura 38, cu traciunea suportat de ctre un singur servomotor, este evident faptul c robotul nu se poate deplasa dect pe o singur direcie (nainte i napoi), iar distana parcurs este direct proporional cu unghiul de rotaie al axului servomotorului. Instruciunile de micare sunt: mers nainte cu viteza 20 pe o distan corespunztoare unei rotiri cu 500 de grade a axului servomotorului, oprire 1 secund, revenire la poziia iniial (rotire 500 grade napoi) cu vitez de 3 ori mai mare. Rulnd aplicaia am obinut graficul comparativ din Figura 41.

76

Figura 41. Rezultatele comparrii celor dou metode

Dup cum se observ n graficul din Figura 41, cele dou metode furnizeaz rezultate aproape identice. Acest concluzie a constituit o surpriz, deoarece m ateptam ca metoda 1 (achiziia datelor prin interogare de la PC) s sufere ntrzieri datorate unui algoritm mai complex i traficului mai frecvent prin conexiune Bluetooth, iar curba s se decaleze fa de curba metodei 2. Ambele metode au presupus efectuarea de msurtori (achiziii de date de la senzori) la intervale de 100ms. Prin reducerea intervalelor este posibil apariia decalajului menionat mai sus, dar o rezoluie att de mare a datelor achiziionate nu reprezint un beneficiu considerabil n aplicaiile uzuale ale robotului NXT. Fiecare dintre cele dou metode elaborate n lucrarea de fa prezint avantaje i dezavantaje. Avnd n vedere c rezultatele furnizate de ctre cele dou metode sunt aproape identice, diferenierea acestora n proiectare se poate face n funcie de impactul specific aplicaiei cu avantajele/dezavantajele menionate.

77

8 Concluzii
Tema proiectului de diplom se refer la un domeniu de actualitate, viznd valorificarea eficient a unor elemente disponibile n domeniul roboilor mobili de uz tiinific i didactic (suportul LEGO Mindstorms NXT) n scopul dezvoltrii platformei de comunicaii prin Bluetooth a acestora cu elemente soft care s ofere un mediu favorabil i fiabil potenialelor aplicaii. Acest scop a fost realizat, conform cerinelor i detaliilor impuse prin tem, prin elaborarea a dou metode de transmitere a datelor achiziionate de la senzorii NXT, de la robotul mobil la PC. Pentru fiecare metod s-a realizat un program-soft corespunztor, precum i cte o aplicaie care s concretizeze i s verifice eficiena metodei, iar acest aspect a fost confirmat, att prin rezultatele aplicaiilor asociate, ct i prin rezultatele unei aplicaii elaborat special pentru compararea celor dou metode. Dificultile ntlnite n elaborarea proiectului au fost legate de particularitile programrii robotului LEGO NXT. Limitrile software ct i cele hardware ale robotului NXT m-au motivat s gasesc modaliti inedite de a realiza obiectivele propuse. n final eforturile mele au dus la obinerea unor algoritmi i programe performante care utilizeaz n mod optim resursele disponibile. Faptul c, la compararea rezultatelor aplicrii celor dou metode, s-au obinut date aproape identice determin concluzia c ambele metode sunt caracterizate de un nivel ridicat de acuratee n domeniul timp. ntrzierea transferului de date prin conexiune Bluetooth este neglijabil n raport cu reacia n timp a elementelor de execuie ale robotului (servomotorul) sau reacia n timp a anumitor senzori. Ca urmare, metodele i programele create asigur un nivel de performan ridicat i ofer o rezerv considerabil n perspectiva unor aplicaii cu elemente de execuie mai rapide. Este important de menionat c cele dou metode nu exclud, pentru viitor, elaborarea i a altor programe (mbuntite) cu acelai scop, iar programele pe care le-am realizat reprezint o baz flexibil pentru rularea unei diversiti de aplicaii tiinifice sau didactice.

78

Bibliografie
[1] ***, LEGO Mindstorms NXT Hardware Developer Kit. [2] ***, LEGO Mindstorms NXT Bluetooth Developer Kit [3] ***, LEGO Mindstorms NXT Direct commands [4] ***, Mindstorms Education NXT User Guide [5] Dave Astolfo, Mario Ferrari, Giulio Ferrari, Building Robots with LEGO Mindstorms NXT [6] Michael Gasperi, Philippe Philo Hurbain, Isabelle Hurbain, Extreme NXT Extending the LEGO MINDSTORMS NXT to the Next Level [7] John Hansen, Not eXactly C (NXC) Programmer's Guide. [8] Daniele Benedettelli, Programming LEGO NXT Robots using NXC [9] *** , www.parallax.com [10] Radu Bogdan Rusu, Robotux - a multiagent robot security system. Master's Thesis, Faculty of Automation and Computer Science, Technical University of Cluj-Napoca, Romania, 2004. [11] *** http://www.philohome.com/nxt.htm [12] *** , http://me.mecatronica.pub.ro/romar/etape/etapa_3/Legatura%202_1.pdf [13] Radu Bogdan Rusu, Modern architectures for mobile robots: Javaclient and ZeeRO. Advanced Master's Thesis, Faculty of Automation and Computer Science, Technical University of Cluj-Napoca Romania, 2005 [14] *** , http://yo9hnh.files.wordpress.com/2008/10/introducere-n-microcontrollere.pdf [15] *** , www.mikroe.com/ro/product/books/PICbook/2_01Poglavlje.htm [16] Dumitriu, A., Bucan, C., Demian, T., Sisteme senzoriale pentru roboi, Editura MEDRO, Bucureti, 1996. [17] Dumitriu, A., Mecatronic, volumul I, Editura Universitii Transilvania din Braov, 2006. [18] Grigore, O., An Incremental Motion Tracking Controller for on Board Directly Platform, n: Rev. Roum. Sci. Techn. Electrotehn. Et Energ., 3, Bucharest, 2000. [19] *** , www.LegoDacta.com [20] *** , http://telecom.etc.tuiasi.ro/telecom/staff/ccomsa/Lucru/ Introducere_n_Bluetooth.pdf [21] *** , http://stst.elia.pub.ro/RIC/Teme_RIC_2006_7/AlexandraAlmasan/ RETELE%20WIRELESS%20DE%20MICI%20DIMENSIUNI.doc [22] *** , ftp.utcluj.ro/pub/users/cmil/rwcm/week3/bluetooth01.ppt 79

[23] *** , http://en.wikipedia.org/wiki/Bluetooth [24] *** , IEEE Oregon bluetooth seminar-2001 [25] *** , http://me.mecatronica.pub.ro/romar/etape/etapa_2/Legatura%203.pdf [26] *** , http://www.bluetooth.com/ [27] Jon Inouye, Introduction to BluetoothWireless Technology -Mobile Platforms Group Intel Corporation [28] *** , Ericsson Mobile Communications AB Users Manual Bluetooth PC Reference Stack by Ericsson, 2000 [29] Muller, Nathan J., Bluetooth Demistified McGraw-Hill Telecom, 2001 [30] Coiffet, P., La robotique principles et applications, Editions Hermes Paris, 1986,

80

Anexe

9 Anexe
9.1 Anexa 1. Metoda 1. Clasa OperatorNXT
using using using using using System; System.Collections.Generic; System.Text; System.IO.Ports; Bram.Utilities;

namespace PC2NXT { public class OperatorNXT { public OperatorNXT(string portname){ _portName = portname; } private string _portName; private SerialPort port = null; public void Connect(){ if(port != null){ Disconnect(); } port = new SerialPort(_portName); port.Open(); IsConnected = true; } public void Disconnect(){ IsConnected = false; if(port.IsOpen){ port.Close(); port.Dispose(); } port = null; } /// <summary> /// semafor care marcheaza conexiune activa sau nu /// </summary> public bool IsConnected { get { return _isConnected; } private set { _isConnected = value; } } bool _isConnected = false; /// <summary> /// trimite serie bytes la portul serial /// </summary>

81

private byte[] TrimiteComanda(byte[] comanda){ if(!IsConnected){ throw new InvalidOperationException("trebuie conectat"); } else { lock(this){ int length = comanda.Length; byte[] btMessage = new byte[comanda.Length + 2]; btMessage[0] = (byte)(length & 0xFF); btMessage[1] = (byte)((length & 0xFF00) >> 8); comanda.CopyTo(btMessage, 2); port.Write(btMessage, 0, btMessage.Length); if(comanda[0] < 0x80){ // A reply is expected. Check it. int lsb = port.ReadByte(); int msb = port.ReadByte(); int size = lsb + msb * 256; byte[] reply = new byte[size]; port.Read(reply, 0, size); return reply; } else { return null; } } } } /// <summary> /// seteaza starea unui motor /// </summary> public void SetStareMotor(PortNxtMotor port, sbyte power, ModNxtMotor mode, RegModNxtMotor regulationMode, sbyte turnRatio, FunctNxtMotor runState, uint tachoLimit){ byte[] comanda = new byte[12]; comanda[0] = 0x80; comanda[1] = (byte)CodMesajDirect.SetOutputState; comanda[2] = (byte)port; comanda[3] = (byte)power; comanda[4] = (byte)mode; comanda[5] = (byte)regulationMode; comanda[6] = (byte)turnRatio; comanda[7] = (byte)runState; Util.SetUInt32(comanda, 8, tachoLimit); TrimiteComanda(comanda); } /// <summary> /// returneaza starea unui motor /// </summary> public StareMotor GetStareMotor(PortNxtMotor port){ byte[] comanda = new byte[3]; comanda[0] = 0x00; comanda[1] = (byte)CodMesajDirect.GetOutputState; comanda[2] = (byte)port; byte[] reply = TrimiteComanda(comanda); StareMotor raspuns = new StareMotor(); raspuns.Power = (sbyte)reply[4]; raspuns.Mode = (ModNxtMotor)reply[5]; raspuns.RegulationMode = (RegModNxtMotor)reply[6]; raspuns.TurnRatio = (sbyte)reply[7]; raspuns.RunState = (FunctNxtMotor)reply[8]; raspuns.TachoLimit = Util.GetUInt32(reply, 9); raspuns.TachoCount = Util.GetInt32(reply, 13); raspuns.BlockTachoCount = Util.GetInt32(reply, 17); raspuns.RotationCount = Util.GetInt32(reply, 21); return raspuns;

82

} /// <summary> /// seteaza modul de functionare al unui senzor /// </summary> public void SetInputMode(PortNxtSenzor port, TipNxtSenzor type, ModNxtSenzor mode){ byte[] comanda = new byte[5]; comanda[0] = (byte)NxtCommandType.DirectCommandWithResponse; comanda[1] = (byte)CodMesajDirect.SetInputMode; comanda[2] = (byte)port; comanda[3] = (byte)type; comanda[4] = (byte)mode; TrimiteComanda(comanda); } /// <summary> /// citeste date achiziionate de la un senzor /// </summary> public StareSenzor GetInputValues(PortNxtSenzor port){ StareSenzor raspuns = new StareSenzor(); byte[] comanda = new byte[3]; comanda[0] = 0x00; // Expect an answer comanda[1] = (byte)CodMesajDirect.GetInputValues; comanda[2] = (byte)port; byte[] reply = TrimiteComanda(comanda); raspuns.Valid = (reply[4] == 1) ? true : false; raspuns.Calibrated = (reply[5] == 1) ? true : false; raspuns.Type = (TipNxtSenzor)reply[6]; raspuns.Mode = (ModNxtSenzor)reply[7]; raspuns.RawAD = Util.GetUInt16(reply, 8); raspuns.NormalizedAD = Util.GetUInt16(reply, 10); raspuns.ScaledValue = Util.GetInt16(reply, 12); raspuns.CalibratedValue = Util.GetInt16(reply, 14); return raspuns; } /// <summary> /// citeste numarul de bytes disponibil la magistrala I2C (Low speed) /// </summary> public int LSGetStatus(PortNxtSenzor port){ byte[] comanda = new byte[3]; comanda[0] = (byte)NxtCommandType.DirectCommandWithResponse; comanda[1] = (byte)CodMesajDirect.LSGetStatus; comanda[2] = (byte)port; byte[] reply = TrimiteComanda(comanda); return reply[3]; } /// <summary> /// scrie un mesaj la magistrala I2C (low speed) /// </summary> public void LSWrite(PortNxtSenzor port, byte[] data, int returnMessageLength){ if(data.Length < 1 || data.Length > 16){ throw new InvalidOperationException("data length must be between 1 and 16 bytes"); } byte[] comanda = new byte[5 + data.Length]; comanda[0] = (byte)NxtCommandType.DirectCommandWithResponse; comanda[1] = (byte)CodMesajDirect.LSWrite; comanda[2] = (byte)port; comanda[3] = (byte)data.Length; comanda[4] = (byte)returnMessageLength; Array.Copy(data, 0, comanda, 5, data.Length); TrimiteComanda(comanda); }

83

/// <summary> /// citeste tot de la magistrala I2C (low speed) /// </summary> public byte[] LSRead(PortNxtSenzor port){ byte[] comanda = new byte[3]; comanda[0] = (byte)NxtCommandType.DirectCommandWithResponse; comanda[1] = (byte)CodMesajDirect.LSRead; comanda[2] = (byte)port; byte[] reply = TrimiteComanda(comanda); int length = (int)reply[3]; byte[] raspuns = new byte[length]; Array.Copy(reply, 4, raspuns, 0, length); return raspuns; } /// <summary> /// scrie un byte de la interfata I2C (low speed) /// </summary> public void I2CSetByte(PortNxtSenzor port, byte address, byte value){ byte[] i2cCmd = new byte[3]; i2cCmd[0] = 0x02; i2cCmd[1] = address; i2cCmd[2] = value; LSWrite(port, i2cCmd, 0); } /// <summary> /// citeste un byte de la interfata I2C (low speed) /// </summary> public byte I2CGetByte(PortNxtSenzor port, byte address){ byte[] i2cCmd = new byte[2]; i2cCmd[0] = 0x02; i2cCmd[1] = address; int bytesRead = 0; do { LSWrite(port, i2cCmd, 1); try { bytesRead = LSGetStatus(port); } catch(Exception){ bytesRead = 0; } } while(bytesRead < 1); return LSRead(port)[0]; } } public struct public public public public public public public public public } public struct public public public public public public public StareMotor { sbyte Power; ModNxtMotor Mode; RegModNxtMotor RegulationMode; sbyte TurnRatio; FunctNxtMotor RunState; uint TachoLimit; int TachoCount; int BlockTachoCount; int RotationCount; StareSenzor { bool Valid; bool Calibrated; TipNxtSenzor Type; ModNxtSenzor Mode; UInt16 RawAD; UInt16 NormalizedAD; Int16 ScaledValue;

84

public Int16 CalibratedValue; } public enum CodMesajDirect : byte { StartProgram = 0x00, StopProgram = 0x01, PlaySoundFile = 0x02, PlayTone = 0x03, SetOutputState = 0x04, SetInputMode = 0x05, GetOutputState = 0x06, GetInputValues = 0x07, MessageWrite = 0x09, ResetMotorPosition = 0x0A, GetBatteryLevel = 0x0B, KeepAlive = 0x0D, LSGetStatus = 0x0E, LSWrite = 0x0F, LSRead = 0x10, MessageRead = 0x13, OpenRead = 0x80, OpenWrite = 0x81, Read = 0x82, Write = 0x83, SetBrickName = 0x98 } public enum CodRaspuns : byte { OK = 0x00, PendingCommunicationInProgress = 0x20, SpecifiedMailBoxEmpty = 0x40, RequestFailed = 0xBD, UnknownCommand = 0xBE, InsanePacket = 0xBF, publicOfRangeData = 0xC0, CommBusError = 0xDD, publicOfMemoryInCommunicationBuffer = 0xDE, ChannelInvalid = 0xDF, ChannelBusy = 0xE0, NoActiveProgram = 0xEC, IllegalSizeSpecified = 0xED, IllegalMailboxID = 0xEE, InvalidFieldAccess = 0xEF, BadData = 0xF0, publicOfMemory = 0xFB, BadArguments = 0xFF } [Flags()] public enum ModNxtMotor : byte { None = 0x00, MotorOn = 0x01, Brake = 0x02, Regulated = 0x04 } [Flags] public enum RegModNxtMotor : byte { Idle = 0x00, MotorSpeed = 0x01, MotorSynchronization = 0x02 } [Flags] public enum FunctNxtMotor : byte { Idle = 0x00, RampUp = 0x10, Running = 0x20,

85

Rampdown = 0x40 } public enum PortNxtMotor { PortA = 0x00, PortB = 0x01, PortC = 0x02, None = 0xFE, All = 0xFF } public enum PortNxtSenzor { Port1 = 0x00, Port2 = 0x01, Port3 = 0x02, Port4 = 0x03, None = 0xFE } public enum TipNxtSenzor { None = 0x00, Switch = 0x01, Temperature = 0x02, Reflection = 0x03, Angle = 0x04, LightActive = 0x05, LightInactive = 0x06, SoundDB = 0x07, SoundDBA = 0x08, Custom = 0x09, LowSpeed = 0x0A, LowSpeed_9V = 0x0B } public enum ModNxtSenzor { Raw = 0x00, Boolean = 0x20, TransitionCounter = 0x40, PeriodCounter = 0x60, Percentage = 0x80, Celsius = 0xA0, Fahrenheit = 0xC0, AngleStep = 0xE0 } public enum NxtCommandType { DirectCommandWithResponse SystemCommandWithResponse Reply, DirectCommandNoResponse = SystemCommandNoResponse = } }

= 0x00, = 0x01, 0x80, 0x81

86

9.2 Anexa 2. Metoda 1. Modul de afisare a datelor de la senzorul cu ultrasunete


using using using using using using using using using System; System.Collections.Generic; System.ComponentModel; System.Drawing; System.Data; System.Text; System.Windows.Forms; System.Collections; System.Drawing.Drawing2D;

namespace PC2NXT { public partial class SonarMap : UserControl { private Brush brush1 = new SolidBrush(Color.Red); private Brush brush2 = new SolidBrush(Color.Black); private Brush brush3 = new SolidBrush(Color.AliceBlue); public int RotationRange = 0; public SonarMap() { InitializeComponent(); } private void SonarMap_Load(object sender, EventArgs e) { } public void Init(int RotationRange) { this.RotationRange = RotationRange; this.Clear(); label1.Text = ""; label2.Text = ""; } private ArrayList _FoundObjects; public ArrayList FoundObjects { get { return _FoundObjects; } set { _FoundObjects = value; } } public void Clear() { panel1.CreateGraphics().Clear(panel1.BackColor); } public void Draw(SomeObject obj) { Draw(obj, panel1.CreateGraphics()); } public void Draw(SomeObject obj, Graphics graphics) { int W = panel1.Width; int H = panel1.Height - 10; int w = (int)(W / RotationRange);

87

int h = (int)(H * obj.Distance / 255); int x = (int)(w * obj.Rotation); graphics.FillRectangle(brush1, x, 10 + H - h, 4, h); graphics.FillRectangle(brush2, x, 10, 4, H - h); graphics.FillRectangle(brush3, 0, 0, W, 10); graphics.FillPolygon(brush1, new Point[] {new Point(x - 3, 0), new Point(x, 8), new Point(x + 4, 0)}); } private void DrawAll(Graphics graphics) { if (this.FoundObjects != null) for (int i = 0; i < this.FoundObjects.Count; i++) Draw((SomeObject)this.FoundObjects[i], graphics); } public void DrawAll(ArrayList PartiallyFoundObjects) { this.FoundObjects = PartiallyFoundObjects; DrawAll(panel1.CreateGraphics()); } private void panel1_Paint(object sender, PaintEventArgs e) { DrawAll(e.Graphics); } private void SonarMap_Resize(object sender, EventArgs e) { panel1.Width = this.Width; } private int? SelectionStart = null; private void panel1_MouseDown(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Right) { if (SelectionStart != null) { SelectionStart = null; panel1.Cursor = Cursors.Default; } else { SelectionStart = e.X; panel1.Cursor = Cursors.VSplit; } } } private void panel1_MouseMove(object sender, MouseEventArgs e) { if (SelectionStart != null) { label1.Text = "Distanta minima: " + GetMinDistanceBetween((int)SelectionStart, e.X); label1.Text = "intre " + SelectionStart + " i " + e.X;// + GetWidthBetween((int)SelectionStart, e.X); } else { label1.Text = "Distanta: " + GetDistanceAround(e.X); label2.Text = ""; } } private int GetDistanceAround(int x) {

88

if (FoundObjects == null) return 0; int r = XToRotation(x); ArrayList vals = new ArrayList(); for (int i = 0; i < FoundObjects.Count; i++) { int R = ((SomeObject)FoundObjects[i]).Rotation; if (R == r) { return ((SomeObject)FoundObjects[i]).Distance; } else if (Math.Abs(R - r) < 3) { vals.Add(((SomeObject)FoundObjects[i]).Distance); } } if (vals.Count > 0) { int sum = 0; for (int i = 0; i < vals.Count; i++) { sum += (int)vals[i]; } return (int)(sum / vals.Count); } return 0; } private int GetMinDistanceBetween(int StartX, int x) { if (FoundObjects == null) return 0; int r1 = XToRotation(StartX); int r2 = XToRotation(x); if (r1 > r2){ int a = r1; r1 = r2; r2 = a; } ArrayList vals = new ArrayList(); for (int i = 0; i < FoundObjects.Count; i++) { int R = ((SomeObject)FoundObjects[i]).Rotation; if (r1 <= R && R <= r2) { vals.Add(((SomeObject)FoundObjects[i]).Distance); } } if (vals.Count > 0){ int min = (int)vals[0]; for (int i = 1; i < vals.Count; i++){ if ((int)vals[i] < min) min = (int)vals[i]; } return min; } return 0; } private int XToRotation(int x) { return (int)(x / (panel1.Width / RotationRange)); } } }

89

9.3 Anexa 3. Metoda 1. Programul principal al aplicatiei


using using using using using using using using System; System.Collections.Generic; System.ComponentModel; System.Data; System.Drawing; System.Text; System.Windows.Forms; System.Collections;

namespace PC2NXT { public partial class Form1 : Form { private const int SonarConeAngle = 100; private const int SonarConeAngleInDegrees = 90; public Form1() { InitializeComponent(); } private OperatorNXT nxt = new OperatorNXT("COM6"); private PortNxtSenzor SonarPort = PortNxtSenzor.Port1; private PortNxtMotor MotorPort = PortNxtMotor.PortC; private ArrayList FoundObjects = new ArrayList(); private int RotationDirection = 1; private int RotationReference = 0; private int RotationDiff = 0; private int RotationLimit = 400; private bool scanning = false; private void button1_Click(object sender, EventArgs e) { if (nxt.IsConnected) Disconnect(); else Connect(); } private void button2_Click(object sender, EventArgs e) { if (scanning) { scanning = false; button2.Text = "Start"; } else { FoundObjects.Clear(); RotationLimit = Int32.Parse(textBox1.Text); MotorInit(); sonarMap.FoundObjects = this.FoundObjects; sonarMap.Init(RotationLimit); sonarGauge.Init(RotationToAngle(RotationReference), 0); button2.Text = "Stop"; scanning = true; } } private void Connect() { nxt.Connect(); if (nxt.IsConnected) {

90

SonarInit(); MotorInit(); timer1.Enabled = true; timer1.Interval = 1600; button1.Text = "Disconnect"; } } private void Disconnect() { timer1.Enabled = false; nxt.Disconnect(); button1.Text = "Connect"; } private void SonarInit() { nxt.SetInputMode(SonarPort, TipNxtSenzor.LowSpeed_9V, ModNxtSenzor.Raw); if (nxt.LSGetStatus(SonarPort) > 0) { nxt.LSRead(SonarPort); } nxt.I2CSetByte(SonarPort, (byte)NxtSonarRegister.Mode, 0x02); } private int SonarGetDistance() { return SonarGetDistance(NxtSonarRegister.MeasurementByte0); } private int SonarGetDistance(NxtSonarRegister meas) { try { return nxt.I2CGetByte(SonarPort, (byte)meas); } catch (Exception ex) { return -1; } } private void timer1_Tick(object sender, EventArgs e){ if (nxt.IsConnected == false) return; int Rotation = MotorGetRotation(); int Distance = SonarGetDistance(); int RelativeRotation = Rotation - RotationReference; lblSonar.Text = "Distanta: " + Distance; lblRotation.Text = "Rotatie: " + Rotation + " : " + (RelativeRotation); lblRotationReference.Text = "Rotatie de referinta: " + RotationReference; if (!scanning) return; // log info txtLog.AppendText(RelativeRotation + " : " + Distance + "\r\n"); // store distance ObjectCheckNew(Distance, RelativeRotation); // what to do next? if (RelativeRotation > RotationLimit) { RotationDirection = -1; RotationDiff++; } else if (RelativeRotation < 0) { RotationDirection = 1;

91

RotationDiff++; } else if (RelativeRotation == 0) { RotationDirection = 1; RotationDiff++; } sonarMap.FoundObjects = this.FoundObjects; sonarMap.Draw(new ObiectDetectat(Distance, RelativeRotation)); //sonarGauge.Angle = RotationToAngle(Rotation); //sonarGauge.Distance = Distance; //sonarGauge.Draw(); RotesteServo(10, 20 + RotationDiff); } private void ObjectCheckNew(int Distance, int Rotation){ ObiectDetectat CurrentObject = new ObiectDetectat(Distance, Rotation); if (FoundObjects.Count == 0) ObjectAdd(CurrentObject); else { //ObiectDetectat PreviousObject = (ObiectDetectat)FoundObjects[FoundObjects.Count - 1]; //if (PreviousObject.CompareDistance(CurrentObject) != 0) ObjectAdd(CurrentObject); } } private void ObjectAdd(ObiectDetectat obj){ // parcurge valorile existente pentru a asigura ordinea crescatoare for (int i = 0; i < FoundObjects.Count; i++){ if (((ObiectDetectat)FoundObjects[i]).Rotation > obj.Rotation){ FoundObjects.Insert(i, obj); return; } } FoundObjects.Add(obj); } private void MotorInit(){ RotationReference = MotorGetRotation(); } private int MotorGetRotation(){ StareMotor motorState = nxt.GetStareMotor(MotorPort); return motorState.TachoCount; } private int RotationToAngle(int rotation){ double angle = ((180.00 / 420.00) * (rotation RotationReference)); double offset = ((180.00 / 420.00) * ((double)RotationLimit / 2)); return (int)(angle + offset); } /// <summary> /// porneste motorul /// </summary> public void RotesteServo(int speed, int degrees){ SetStareMotor( speed, ModNxtMotor.MotorOn | ModNxtMotor.Brake, RegModNxtMotor.MotorSpeed, 0, FunctNxtMotor.Running, degrees );

92

} /// <summary> /// opreste motorul prin compensarea inertiei /// </summary> public void Frana(){ SetStareMotor( 0, ModNxtMotor.MotorOn | ModNxtMotor.Brake | ModNxtMotor.Regulated, RegModNxtMotor.MotorSpeed, 0, FunctNxtMotor.Running, 0 ); } /// <summary> /// seteaza starea motorului /// </summary> public void SetStareMotor(int power, ModNxtMotor mode, RegModNxtMotor regulationMode, int turnRate, FunctNxtMotor runState, int tachoLimit){ nxt.SetStareMotor( MotorPort, (sbyte)(power * RotationDirection), mode, regulationMode, (sbyte)turnRate, runState, (uint)tachoLimit ); } } public class ObiectDetectat { public int Distance = 0; public int Rotation = 0; public ObiectDetectat(int Distance, int Rotation) { this.Distance = Distance; this.Rotation = Rotation; } public int CompareDistance(ObiectDetectat other) { if (this.Distance < other.Distance) return -1; else if (this.Distance > other.Distance) return 1; else return 0; } } public enum NxtSonarRegister { MeasurementUnits = 0x14, PollInterval = 0x40, Mode = 0x41, MeasurementByte0 = 0x42, MeasurementByte1 = 0x43, MeasurementByte2 = 0x44, MeasurementByte3 = 0x45, MeasurementByte4 = 0x46, MeasurementByte5 = 0x47, MeasurementByte6 = 0x48 } }

93

9.4 Anexa 4. Metoda 2. Programul NXC


#define BT_CONN 0 #define BT_PACKET_LEN 200 //bytes struct masuratoare { unsigned short timp; short valoare; }; masuratoare SerieMasuratori1[], SerieMasuratori2[]; unsigned long MasuratoareLastTime1, MasuratoareLastTime2; bool SeMasoara; int VerificaStatusBT() { CommBTCheckStatusType StatusArgs; StatusArgs.Connection = BT_CONN; TextOut(0, LCD_LINE2, "SysCommBTCheckStatus", true); SysCommBTCheckStatus(StatusArgs); switch(StatusArgs.Result) { case LDR_SUCCESS: TextOut(0, LCD_LINE2, "LDR_SUCCESS", true); break; case STAT_COMM_PENDING: TextOut(0, LCD_LINE2, "STAT_COMM_PENDING", true); Wait(100); break; case ERR_INVALID_PORT: TextOut(0, LCD_LINE2, "ERR_INVALID_PORT", true); Wait(1000); break; case ERR_COMM_CHAN_NOT_READY: TextOut(0, LCD_LINE2, "ERR_COMM_CHAN_NOT_READY", true); Wait(1000); break; default: string str = NumToStr(StatusArgs.Result); TextOut(0, LCD_LINE2, StrCat("other err = ", str), true); Wait(2000); break; } return StatusArgs.Result; } bool TrimitePrinBT(string str) { until (VerificaStatusBT() == LDR_SUCCESS); BluetoothWrite(BT_CONN, str); until (VerificaStatusBT() == LDR_SUCCESS); return true; } void StartMasuratori() { MasuratoareLastTime1 = CurrentTick(); MasuratoareLastTime2 = CurrentTick(); SeMasoara = true;

94

} void StopMasuratori() { SeMasoara = false; } void SalveazaMasuratoare(byte SeriesNumber, short valoare) { if (!SeMasoara){ return; } unsigned long now = CurrentTick(); masuratoare m, tmp[]; m.valoare = valoare; switch(SeriesNumber) { case 1: m.timp = now - MasuratoareLastTime1; //MasuratoareLastTime1 = now; tmp = SerieMasuratori1; ArrayBuild(SerieMasuratori1, tmp, m); break; case 2: m.timp = now - MasuratoareLastTime2; //MasuratoareLastTime2 = now; tmp = SerieMasuratori2; ArrayBuild(SerieMasuratori2, tmp, m); break; } } string SerializeazaVectorMasuratori(masuratoare ms[]) { return FlattenVar(ms); } bool TrimiteMasuratori(byte SeriesNumber) { masuratoare clear_series[]; string buffer, sn, packet; buffer = ""; sn = FlattenVar(SeriesNumber); switch(SeriesNumber) { case 1: buffer = SerializeazaVectorMasuratori(SerieMasuratori1); SerieMasuratori1 = clear_series; break; case 2: buffer = SerializeazaVectorMasuratori(SerieMasuratori2); SerieMasuratori2 = clear_series; break; } int i, len; len = StrLen(buffer); for (i = 0; i < len; i += BT_PACKET_LEN) { packet = SubStr(buffer, i, BT_PACKET_LEN); packet = StrCat(sn, packet);

95

TrimitePrinBT(packet); } return true; } task motion() { RotateMotor(OUT_C, 20, 500); Wait(3000); RotateMotor(OUT_C, -60, 500); } task masuratori() { while (SeMasoara && ButtonPressed(BTNCENTER, true) == false) { short i = 0; i = MotorTachoCount(OUT_C); SalveazaMasuratoare(1, i); i = SensorUS(IN_1); SalveazaMasuratoare(2, i); Wait(100); } StopMasuratori(); int i = 0; string s = ""; i = ArrayLen(SerieMasuratori1); s = NumToStr(i); TextOut(0, LCD_LINE1, StrCat("Series1 ", s), true); i = ArrayLen(SerieMasuratori2); s = NumToStr(i); TextOut(0, LCD_LINE2, StrCat("Series2 ", s), false); Wait(5000); TrimiteMasuratori(1); TrimiteMasuratori(2); Stop(true); } task main() { SetSensorLowspeed(IN_1); StartMasuratori(); start masuratori; start motion; }

96

9.5 Anexa 5. Metoda 2. Clasa ReceptorNXT


using using using using using using using System; System.Collections.Generic; System.Text; System.IO; System.IO.Ports; System.Windows.Forms; System.Runtime.InteropServices;

namespace NXT2PC { public class Masuratoare { public ushort Timp; public short Valoare; } public class ReceptorNXT { public ReceptorNXT() { } private SerialPort PortSerial = new SerialPort(); public string NumePort { get { return PortSerial.PortName; } set { if (!EsteConectat) PortSerial.PortName = value; } } public bool EsteConectat { get { return PortSerial.IsOpen; } } public bool Conecteaza() { if (!EsteConectat) { PortSerial.ReadBufferSize = 1024 * 10; //10 KB PortSerial.Open(); PortSerial.DiscardInBuffer(); } return EsteConectat; } public void Deconecteaza() { if (EsteConectat) PortSerial.Close(); } public byte[] CitesteDeLaPortSerial() { byte[] reply = {}; if (EsteConectat) {

97

int size = PortSerial.BytesToRead; if (size > 0) { reply = new byte[size]; PortSerial.Read(reply, 0, size); PortSerial.DiscardInBuffer(); } } return reply; } public void CitesteMasuratoriInSeriile(ref SerieMasuratori Series1, ref SerieMasuratori Series2) { byte[] data = CitesteDeLaPortSerial(); if (data.Length > 2) { int Offset, SeriesNumber; Offset = 0; Masuratoare[] ms = CitesteMasuratori(ref data, ref Offset, out SeriesNumber); while (ms != null && ms.Length > 0) { if (SeriesNumber == 1) Series1.AfiseazaMasuratorile(ms); if (SeriesNumber == 2) Series2.AfiseazaMasuratorile(ms); ms = CitesteMasuratori(ref data, ref Offset, out SeriesNumber); } } } public Masuratoare[] CitesteMasuratori(ref byte[] data, ref int offset, out int NumarSerie) { Masuratoare[] ms = null; NumarSerie = 0; if (data.Length > offset + 2) { short data_count = BytesToShort(data, offset + 0); if (data.Length >= offset + 2 + data_count) { byte struct_len = 4; byte struct_start = 2 + 1; short struct_count = 0; NumarSerie = data[offset + 2]; if (Math.IEEERemainder(data_count - 2, struct_len) == 0) { struct_count = (short)((data_count - 2) / struct_len); ms = new Masuratoare[struct_count]; for (int i = 0; i < struct_count; i++) { ms[i] = BytesToMasuratoare(data, offset + struct_start + (i * struct_len)); } offset += 2 + data_count; } else MessageBox.Show(String.Format("Transfer corupt (2): \ndata.Length = {0}\ndata_count = {1}\noffset = {2}", data.Length, data_count, offset)); }

98

else MessageBox.Show(String.Format("Transfer corupt (1): \ndata.Length = {0}\ndata_count = {1}\noffset = {2}", data.Length, data_count, offset)); } return ms; } public string BytesToList(byte[] data){ if (data != null && data.Length > 0){ StringBuilder str = new StringBuilder(); for (int i = 0; i < data.Length; i++){ str.AppendLine(data[i].ToString()); } return str.ToString(); } return string.Empty; } public Masuratoare BytesToMasuratoare(byte[] data, int offset){ Masuratoare m = new Masuratoare(); m.Timp = BytesToUShort(data, offset); m.Valoare = BytesToShort(data, offset + Marshal.SizeOf(m.Timp.GetType())); return m; } public int BytesToInt(byte[] data, int offset){ int len = Marshal.SizeOf(typeof(int)); //4 bytes IntPtr i = Marshal.AllocHGlobal(len); Marshal.Copy(data, offset, i, len); int val = (int)Marshal.PtrToStructure(i, typeof(int)); Marshal.FreeHGlobal(i); return val; } public uint BytesToUInt(byte[] data, int offset){ int len = Marshal.SizeOf(typeof(uint)); //4 bytes IntPtr i = Marshal.AllocHGlobal(len); Marshal.Copy(data, offset, i, len); uint val = (uint)Marshal.PtrToStructure(i, typeof(uint)); Marshal.FreeHGlobal(i); return val; } public ushort BytesToUShort(byte[] data, int offset){ int len = Marshal.SizeOf(typeof(ushort)); //2 bytes IntPtr i = Marshal.AllocHGlobal(len); Marshal.Copy(data, offset, i, len); ushort val = (ushort)Marshal.PtrToStructure(i, typeof(ushort)); Marshal.FreeHGlobal(i); return val; } public short BytesToShort(byte[] data, int offset){ int len = Marshal.SizeOf(typeof(short)); //2 bytes IntPtr i = Marshal.AllocHGlobal(len); Marshal.Copy(data, offset, i, len); short val = (short)Marshal.PtrToStructure(i, typeof(short)); Marshal.FreeHGlobal(i); return val; } } }

99

9.6 Anexa 6. Metoda 2. Modul de listare i export date


using using using using using using using using using System; System.Collections.Generic; System.ComponentModel; System.Drawing; System.Data; System.Text; System.Windows.Forms; System.IO; NXT2PC;

namespace NXT2PC { public partial class SerieMasuratori : UserControl { public SerieMasuratori() { InitializeComponent(); } public Masuratoare[] Masuratori { get { return _Masuratori; } set { if (value != null) { int len = _Masuratori.Length; Array.Resize<Masuratoare>(ref _Masuratori, _Masuratori.Length + value.Length); Array.Copy(value, 0, _Masuratori, len, value.Length); Salvat = false; } } } private Masuratoare[] _Masuratori = new Masuratoare[0]; public string TitluSerie { get { return _TitluSerie; } set { _TitluSerie = value; groupBox1.Text = _TitluSerie; groupBox1.Text += String.Format(" ({0})", _Masuratori.Length); groupBox1.Text += Salvat ? "" : " *"; } } private string _TitluSerie; public bool Salvat { get { return _Salvat; } private set { _Salvat = value; TitluSerie = TitluSerie; } } private bool _Salvat; public void AfiseazaMasuratorile() { if (Masuratori != null) { textBox1.Text = "se incarca ..."; string txt = MasuratoriConcatenate();

100

textBox1.Text = "Timp\tValoare" + Environment.NewLine; textBox1.AppendText("---------------" + Environment.NewLine); textBox1.AppendText(txt); } } public string MasuratoriConcatenate() { StringBuilder str = new StringBuilder(); if (Masuratori != null && Masuratori.Length > 0){ Masuratoare m; string line; for (int i = 0; i < Masuratori.Length; i++) { m = Masuratori[i]; line = m.Timp.ToString() + "\t" + m.Valoare.ToString(); str.AppendLine(line); } } return str.ToString(); } public void AfiseazaMasuratorile(Masuratoare[] ms) { this.Masuratori = ms; AfiseazaMasuratorile(); } private void button1_Click(object sender, EventArgs e) { SaveFileDialog FereastraSave = new SaveFileDialog(); FereastraSave.DefaultExt = "txt"; FereastraSave.Filter = "Tab delimited text file (*.txt)|*.txt|All files (*.*)|*.*"; FereastraSave.AddExtension = true; FereastraSave.RestoreDirectory = true; FereastraSave.Title = "Salveaza pe disk: " + this.TitluSerie; FereastraSave.InitialDirectory = System.Environment.GetEnvironmentVariable("desktop"); ; if (FereastraSave.ShowDialog() == DialogResult.OK) { string filepath = FereastraSave.FileName; StreamWriter writer = new StreamWriter(filepath); writer.Write(MasuratoriConcatenate()); writer.Close(); Salvat = true; } FereastraSave.Dispose(); FereastraSave = null; } } }

101

9.7 Anexa 7. Metoda 2. Programul principal al aplicatiei


using using using using using using using System; System.Collections.Generic; System.ComponentModel; System.Data; System.Drawing; System.Text; System.Windows.Forms;

namespace NXT2PC { public partial class Form1 : Form { public Form1(){ InitializeComponent(); } private ReceptorNXT nxt2pc = new ReceptorNXT(); private void button1_Click(object sender, EventArgs e){ if (nxt2pc.EsteConectat) nxt2pc.Deconecteaza(); else { nxt2pc.NumePort = comboBox1.Text; nxt2pc.Conecteaza(); } if (nxt2pc.EsteConectat){ button1.Text = "Deconecteaza"; button1.BackColor = Color.PaleGreen; } else { button1.Text = "Conecteaza!"; button1.BackColor = Color.LimeGreen; } } private void button2_Click(object sender, EventArgs e){ timer1.Interval = 1000; timer1.Enabled = !timer1.Enabled; if (timer1.Enabled) button2.Text = "Stop"; else button2.Text = "Start!"; } private void timer1_Tick(object sender, EventArgs e){ if (nxt2pc.EsteConectat){ nxt2pc.CitesteMasuratoriInSeriile(ref measurementSeries1, ref measurementSeries2); } } private void Form1_FormClosing(object sender, FormClosingEventArgs e){ if (nxt2pc.EsteConectat){ if (MessageBox.Show("Aplicatia este conectata la robot. Sigur doriti sa abandonati conexiunea?", "Conexiune activa", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.No){ e.Cancel = true; return; } timer1.Enabled = false; nxt2pc.Deconecteaza(); } } } }

102