Sunteți pe pagina 1din 110

Transmiterea datelor achiziionate de la

senzorii robotului NXT la un PC prin


conexiune Bluetooth

Cod Student: Huma Karina Elena

Grupa: 152 IC

ndrumtor: Conf. dr. ing. Constantin Ila

Iunie 2017
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 Introducere................................................................................................................... 1
2 Roboi mobili ................................................................................................................ 2
2.1 Definiii, caracteristici i structur ........................................................................... 2
2.1.1 Scurt istoric. Definiii ........................................................................................ 2
2.1.2 Concepte privind existena roboilor................................................................. 2
2.1.3 Roboi mobili. Elemente de structur ............................................................... 4
2.2 Sisteme de procesare utilizate n roboi mobili (microcontrolere)............................ 5
2.2.1 Caracterizare general a microprocesoarelor i microcontrolerelor ................. 5
2.2.2 Utilizri i aplicaii ale microcontrolerelor ......................................................... 7
2.2.3 Clasificri i arhitecturi constructive ................................................................. 8
2.2.4 Tipuri de memorii folosite n microcontrolere .................................................. 10
2.2.5 Sistemul de intrri-ieiri .................................................................................. 12
2.2.6 Familii reprezentative de microcontrolere ....................................................... 14
2.2.7 Limbaje de programare i compilatoare .......................................................... 17
2.3 Senzori ................................................................................................................ 20
2.3.1 Caracteristici generale i clasificri ale principalelor tipuri de senzori ............ 20
2.3.2 Senzori cu ultrasunete ................................................................................... 22
2.3.2.1 Caracteristici generale ....................................................................................... 22
2.3.2.2 Principiul de funcionare al senzorului cu ultrasunete ......................................... 23
2.3.2.3 Senzorul cu ultrasunete Parallax PING))) ........................................................... 24
2.3.3 Senzori de contact......................................................................................... 27
2.4 Servomotoare ...................................................................................................... 28
2.5 Metode de comunicare fr fir (wireless) ............................................................. 32
2.5.1 Comunicaii n Infrarou................................................................................. 33
2.5.2 Comunicaii prin Bluetooth ........................................................................... 34
3 Tehnologia Bluetooth ............................................................................................... 36
3.1 Prezentare general ............................................................................................ 36
3.2 Principalele caracteristici ale standardului Bluetooth / IEEE 802.15.1 .................. 38
3.2.1 Clasele de putere / acoperire i securitatea Bluetooth ................................... 38
3.2.2 Stiva de protocoale Bluetooth ........................................................................ 39
3.2.3 Descoperirea dispozitivelor Bluetooth............................................................ 40
3.3 Versiuni n evoluia Bluetooth ............................................................................. 41
3.3.1 Evoluia specificaiilor Bluetooth la standardul IEEE ...................................... 41
3.3.2 Bluetooth 1.0 ................................................................................................. 42
3.3.3 Bluetooth 1.1 ................................................................................................. 42
3.3.4 Bluetooth 1.2 (Ratificat ca IEEE Standard 802.15.1-2005) .......................... 42
3.3.5 Bluetooth 2.0 (SIG-2004)............................................................................... 42
3.3.6 Bluetooth 2.1 (SIG-2007)............................................................................... 43
3.3.7 Bluetooth 3.0 (SIG-2009)............................................................................... 43
3.4 Modele i arhitecturi de utilizare ........................................................................... 43
4 Robotul LEGO Mindstorms NXT ................................................................................. 46
4.1 Generaliti ........................................................................................................... 46
4.2 Sistemul de procesare al robotului NXT ............................................................... 47
4.3 Senzorii robotului NXT ......................................................................................... 48
4.3.1 Senzorul cu ultrasunete NXT ......................................................................... 48
4.3.2 Protocolul de comunicare I2C ........................................................................ 49
4.3.3 Servomotorul NXT ......................................................................................... 49
4.4 Metode de comunicare ......................................................................................... 52
4.5 Programarea robotului LEGO NXT ....................................................................... 52
4.5.1 Limbajul de programare NXC (Not eXactly C) ............................................... 53
5 Citirea datelor achiziionate de la senzorii NXT prin interogare de la PC .................... 53
5.1 Obiectivele programului de pe PC ........................................................................ 54
5.2 Resurse hardware i software necesare .............................................................. 54
5.3 Limbajul de programare C# (C Sharp).................................................................. 56
5.4 Proiectarea i implementarea aplicaiei de pe PC ................................................ 59
5.4.1 Iniierea conexiunii Bluetooth dintre PC i NXT n C# .................................... 59
5.4.2 Comunicarea PC NXT prin interogare ........................................................ 60
5.4.3 Implementarea protocolului de control prin comenzi directe ........................ 60
5.4.4 Algoritmul metodei de interogare de la PC .................................................... 63
5.5 Aplicaie la metoda de citire a datelor achiziionate de la senzorii NXT prin interogare
de la PC ...................................................................................................................... 64
5.5.1 Determinarea poziiei obiectelor cu senzorul de ultrasunete .......................... 64
5.5.2 Interfaa grafic i analiza datelor obinute .................................................... 66
6 Citirea datelor achiziionate de la senzorii NXT sub comanda programului NXC ........ 67
6.1 Proiectarea i implementarea programului de pe NXT (emitorul) ...................... 68
6.1.1 Obiectivele programului de pe NXT ............................................................... 68
6.1.2 Achiziia datelor de la senzorii NXT ............................................................... 68
6.1.3 Serializarea datelor achiziionate ................................................................... 69
6.1.4 Transmisia datelor prin Bluetooth de la NXT la PC ........................................ 70
6.1.5 Algoritmul programului NXC .......................................................................... 70
6.2 Proiectarea i implementarea programului de pe PC (receptorul) ........................ 71
6.2.1 Algoritmul programului de pe PC ................................................................... 71
6.2.2 Interfaa grafic a programului de pe PC ....................................................... 72
6.3 Aplicaie la metoda de citire a datelor achiziionate de la senzorii NXT sub comanda
programului NXC ........................................................................................................ 74
6.3.1 Evoluia n timp a mrimilor msurate de ctre senzorii NXT ......................... 74
6.3.2 Rezultatele obinute ....................................................................................... 75
7 Analiza rezultatelor obinute ....................................................................................... 77
7.1 Rezultatele obinute la aplicaiile implementate .................................................... 77
7.2 Compararea celor dou metode ............................................................................ 77
8 Concluzii ..................................................................................................................... 79
9 Anexe ........................................................................................................................ 82
9.1 Anexa 1. Metoda 1. Clasa OperatorNXT .............................................................. 82
9.2 Anexa 2. Metoda 1. Modul de afisare a datelor de la senzorul cu ultrasunete ...... 88
9.3 Anexa 3. Metoda 1. Programul principal al aplicatiei ............................................ 91
9.4 Anexa 4. Metoda 2. Programul NXC .................................................................... 95
9.5 Anexa 5. Metoda 2. Clasa ReceptorNXT .............................................................. 97
9.6 Anexa 6. Metoda 2. Modul de listare i export date ............................................ 101
9.7 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.

1
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

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

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

4
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. o unitate central (CPU), cu un oscilator intern pentru ceasul de sistem;


b. o memorie local tip ROM/PROM / EPROM / FLASH i eventual una de tip RAM;
c. un sistem de ntreruperi;
d. I/O intrri / ieiri numerice (de tip port paralel);
e. un port serial de tip asincron i / sau sincron, programabil;
f. 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. un sistem de conversie analog numeric (una sau mai multe intrri analogice);
h. un sistem de conversie numeric analogic i / sau ieiri PWM (cu modulare n durat);
i. un comparator analogic;
j. memorie de date nevolatil de tip EEPROM;
k. faciliti suplimentare pentru sistemul de temporizare / numrare (captare i
comparare);

5
l. faciliti pentru optimizarea consumului propriu.
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

6
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;

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.

7
n Figura 2, Figura 3, Figura 4 se prezint cteva exemple de roboi [14]:

Figura 3. AIBO

Figura 4. ASIMO
Figura 2. Robotul humanoid Johnnie

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

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

9
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

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

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

13
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]:


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.

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

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

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

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

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

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

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

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

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

19
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;

20
Preul senzorului;
Puterea de calcul necesar pentru a interpreta rezultatele;
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]:

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

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.

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

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

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

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

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

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

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

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

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

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

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

28
Tabelul 1. Caracteristicile mecanice, electrice i geometrice ale servomotorului.
Gabarit: Masa: Cuplul la Viteza: Cuplul de Tensiunea:
( mm ) (g) 4,8V 0,16s/45 la mentinere (V)
(Nmm) 4,8V (Nmm)

40,5x20x36,1 42 310 0,21 770 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.
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.

29
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:
- 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.

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

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

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

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

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.

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

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

34
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;

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

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

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

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.

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

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


Clasa Puterea maxim permis Puterea maxim permis Raza
(mW) (dBm) (aproximativ)
Clasa 1 100 mW 20 dBm 100 m
Clasa 2 2.5 mW 4 dBm 10 m
Clasa 3 1 mW 0 dBm 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:

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

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

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

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

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

n martie 2000 IEEE i SIG au convenit crearea unui standard IEEE pe baza versiunii
1.1-Bluetooth.

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

42
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

43
sincronizai pe acest canal. Spre deosebire de dispozitivele cu infrarou (IR), unitile Bluetooth
nu sunt limitate de necesitatea vederii directe ntre ele.

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

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

45
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
3 servomotoare Motoare electrice de curent continuu alimentate la
9V sau 12V (pe perioade scurte).
Senzor cu ultrasunete Determin distana de la senzor pn la cel mai
apropiat obiect folosind un sistem similar sonarului
Senzor de contact Este practic un ntreruptor, avnd dou stri:
apsat sau eliberat
Senzor optic Senzor fotosensibil capabil s disting 4 culori sau
variaii n intensitatea luminii ambiente
Senzor acustic Msoar intensitatea sonor n decibeli (microfon)
Cabluri de interconectare Servomotoarele i senzorii se conecteaz la
unitatea central de procesare prin cabluri cu cte
6 fire care suport interfaa analoga i digitala
Cablu USB Robotul se poate conecta la PC prin USB sau prin
Bluetooth
Suita software pentru PC Conine driverele necesare i mediul de
programare proprietar NXT-G
Alimentarea robotului se face prin 6 baterii standard AA de 1,5V sau se poate achiziiona
un acumulator dedicat de 1400mAH [4].

46
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
Co-processor Atmel 8-bit AVR processor, ATmega48
- 4 KB FLASH
- 512 Byte RAM - 8 MHz

Bluetooth wireless communication CSR BlueCoreTM 4 v2.0 +EDR System


- Supporting the Serial Port Profile (SPP)
- Internal 47 KByte RAM
- External 8 MBit FLASH - 26 MHz

USB 2.0 communication Full speed port (12 Mbit/s)


4 input ports 6-wire interface supporting both digital and analog
interface
- 1 high speed port, IEC 61158 Type 4/EN 50170
compliant

47
3 output ports 6-wire interface supporting input from encoders
Display 100 x 64 pixel LCD black & white graphical display
- View area: 26 X 40.6 mm
Loudspeaker Sound output channel with 8-bit resolutio
- Supporting a sample rate of 2-16 KHz
4 button user-interface Rubber buttons
Power source 6 AA batteries
- Alkaline batteries are recommended
- Rechargeable Lithium-Ion battery 1400
mAH is available
Connector 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.

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.

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

49
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]:

Putere Putere
Tensiune de
Sarcina Turaie Curent debitat absorbit Randament
alimentare
(mecanic) (electric)
4.5 V 16.7 Ncm 33 rpm 0.6 A 0.58 W 2.7 W 21.4 %
7V 16.7 Ncm 82 rpm 0.55 A 1.44 W 3.85 W 37.3 %
9V 16.7 Ncm 117 rpm 0.55 A 2.03 W 4.95 W 41 %
12 V 16.7 Ncm 177 rpm 0.58 A 3.10 W 6.96 W 44.5 %

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

Tensiune de
Sarcina Turaie Curent
alimentare
9V 0 170 rpm 0,06 A
9V 50 Ncm 0 2A

50
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

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

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.

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

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

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

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
54
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:

55
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#.

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:

56
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 Automobil

Sunt parametrii care caracterizeaz starea sau


Proprieti tipul clasei: kilometrajul curent, viteza cu care
ruleaz, turaia

Se refer la secvene de aciuni pe care le poate


Metode executa clasa: mers nainte, sau mers n
mararier, sau aprinderea farurilor

Valori folosite frecvent care nu pot fi schimbate:


Constante 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
Constructori
productorul construiete automobilul n funcie
de speficicaiile posesorului.

Sunt aciuni invocate de ctre clasa care reflect


o anumit schimbare n starea sa i necesit
Evenimente intervenia utilizatorului (posesorului): avertizare
de combustibil redus, sau avertizare faruri aprinse

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:

57
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;
}

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

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

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

60
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.
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
Comanda direct, necesit rspuns
0x01
Comanda de sistem, necesit rspuns
0x02
Rspuns
0x80
Comanda direct fr rspuns
0x81
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.

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

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] = (comanda[2] = (bytebyte))port_motor; CodMesajDirect// portul la care este


atasat servomotorul.CitesteStareMotor; // 0x06 codul comenzii

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:

62
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
}

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.

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

64
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;

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

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

67
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

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

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

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.

70
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

2.3. Interpretarea fiecrui pachet primit

71
2.4. Conversia de la bytes la tipuri de date utilizabile n C# short, ushort
Construirea unui vector de tip de date
2.5. 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.

6.2.2 Interfaa grafic a programului de pe PC

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

72
Figura 36. Interfaa grafic a programului. Iniierea Figura 37. Interfaa grafic a programului. Datele
conexiunii Bluetooth 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.

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

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.

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

75
Figura 39. Evoluia distanei parcurse de robot

Figura 40. Evoluia distanei pn la obstacol

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

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

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

Bibliografie

[1] ***, LEGO Mindstorms NXT Hardware Developer Kit.

79
[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

[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

80
[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,

81
Anexe

9 Anexe
9.1 Anexa 1. Metoda 1. Clasa OperatorNXT

using System;
using System.Collections.Generic;
using System.Text; using
System.IO.Ports; using
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;

82
/// <summary>
/// trimite serie bytes la portul serial
/// </summary>
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];

83
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;
}
/// <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] =

84
(byte)returnMessageLength; Array.Copy(data,
0, comanda, 5, data.Length);
TrimiteComanda(comanda);
}
/// <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 StareMotor {
public sbyte Power; public
ModNxtMotor Mode; public RegModNxtMotor
RegulationMode; public sbyte TurnRatio;
public FunctNxtMotor RunState;
public uint TachoLimit; public int
TachoCount; public int BlockTachoCount;
public int RotationCount;
}
public struct StareSenzor {
public bool Valid; public
bool Calibrated; public
TipNxtSenzor Type; public
ModNxtSenzor Mode; public
UInt16 RawAD; public

85
UInt16 NormalizedAD;
public Int16 ScaledValue;
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

86
}
[Flags]
public enum FunctNxtMotor : byte {
Idle = 0x00,
RampUp = 0x10,
Running = 0x20,
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 = 0x00,
SystemCommandWithResponse = 0x01,
Reply,
DirectCommandNoResponse = 0x80,
SystemCommandNoResponse = 0x81
}
}

87
9.2 Anexa 2. Metoda 1. Modul de afisare a datelor de la senzorul cu
ultrasunete
using
System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing; using
System.Data; using System.Text;
using System.Windows.Forms; using
System.Collections; using
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;

88
int w = (int)(W / RotationRange);
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
{

89
label1.Text = "Distanta: " + GetDistanceAround(e.X);
label2.Text = "";
}
}
private int GetDistanceAround(int x)
{
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;

90
}
private int XToRotation(int x)
{
return (int)(x / (panel1.Width / RotationRange));
}
}
}
9.3 Anexa 3. Metoda 1. Programul principal al aplicatiei
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data; using
System.Drawing; using
System.Text; using
System.Windows.Forms; using
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";

91
scanning = true;
}
}
private void Connect()
{
nxt.Connect();
if (nxt.IsConnected)
{
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");

92
// store distance
ObjectCheckNew(Distance, RelativeRotation);
// what to do next?
if (RelativeRotation > RotationLimit)
{
RotationDirection = -1;
RotationDiff++;
}
else if (RelativeRotation < 0)
{
RotationDirection = 1;
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);

93
}
/// <summary>
/// porneste motorul
/// </summary>
public void RotesteServo(int speed, int degrees){
SetStareMotor(
speed,
ModNxtMotor.MotorOn | ModNxtMotor.Brake,
RegModNxtMotor.MotorSpeed,
0,
FunctNxtMotor.Running,
degrees
);
}
/// <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;

94
}
}
public enum NxtSonarRegister {
MeasurementUnits = 0x14,
PollInterval = 0x40,
Mode = 0x41,
MeasurementByte0 = 0x42,
MeasurementByte1 = 0x43,
MeasurementByte2 = 0x44,
MeasurementByte3 = 0x45,
MeasurementByte4 = 0x46,
MeasurementByte5 = 0x47,
MeasurementByte6 = 0x48
}
}
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;
}

95
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;
}
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:

96
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);
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;
}

9.5 Anexa 5. Metoda 2. Clasa ReceptorNXT


using System;

97
using System.Collections.Generic;
using System.Text; using System.IO;
using System.IO.Ports; using
System.Windows.Forms; using
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)
{
int size = PortSerial.BytesToRead;
if (size > 0)

98
{
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));

99
}
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;
}
}
}

100
9.6 Anexa 6. Metoda 2. Modul de listare i export date
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing; using
System.Data; using System.Text;
using System.Windows.Forms; using
System.IO; using 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();

101
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;
}
}
}

9.7 Anexa 7. Metoda 2. Programul principal al aplicatiei


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

namespace NXT2PC
{
public partial class Form1 : Form
{

102
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();
}
}
}

103

S-ar putea să vă placă și