Diploma Thesis

151
Universitatea “POLITEHNICA” Timişoara Facultatea de Automatică şi Calculatoare Laboratoarele DSPLabs LUCRARE DE DIPLOMĂ SISTEM ROBOTIZAT MOBIL TELEOPERAT, DESTINAT STUDIULUI VEDERII ARTIFICIALE ŞI STEREO-VIZIUNII Alexandru JONI COORDONATOR ŞTIINŢIFIC: Şl. ing. Mihai V. MICEA 2003

Transcript of Diploma Thesis

Page 1: Diploma Thesis

Universitatea “POLITEHNICA” Timişoara Facultatea de Automatică şi Calculatoare

Laboratoarele DSPLabs

LUCRARE DE DIPLOMĂ

SISTEM ROBOTIZAT MOBIL TELEOPERAT, DESTINAT

STUDIULUI VEDERII ARTIFICIALE ŞI STEREO-VIZIUNII

Alexandru JONI

COORDONATOR ŞTIINŢIFIC: Şl. ing. Mihai V. MICEA

2003

Page 2: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

Pagina 2 din 151

Cuprins Lista figurilor.............................................................................................................................. 4 Lista secvenţelor de cod ............................................................................................................. 7 1 Introducere ......................................................................................................................... 8

1.1 Teleoperarea în domeniul roboticii ............................................................................ 8 1.2 Domeniile de aplicare ale teleoperării; exemple ........................................................ 9

1.2.1 Teleoperarea în medii ostile omului................................................................... 9 1.2.2 Teleoperarea în zone inaccesibile omului ........................................................ 19

1.3 Obiectivele proiectului ............................................................................................. 23 1.4 Cadrul general al proiectului .................................................................................... 24 1.5 Structura lucrării....................................................................................................... 24

2 Descrierea generală a sistemului ...................................................................................... 26

2.1 Componenţa sistemului ............................................................................................ 26 2.2 Modul general de operare......................................................................................... 27 2.3 Specificaţiile tehnice ................................................................................................ 27

3 Sistemul de acţionare al robotului .................................................................................... 29

3.1 Acţionarea unui motor de curent continuu............................................................... 29 3.1.1 Puntea tip “H” pentru acţionarea unui motor de curent continuu .................... 29 3.1.2 Tranzistorii MOS-FET ..................................................................................... 32 3.1.3 Tranzistorul IRFZ44N...................................................................................... 34 3.1.4 Tranzistorul IRF4905 ....................................................................................... 35

3.2 Sistemul de măsurare a deplasării cu ajutorul unui encoder .................................... 35 3.2.1 Tipuri de encodere............................................................................................ 36

3.3 Sistemul de comandă a punţii................................................................................... 39 3.3.1 Microcontrolerul P89C51RC+ ......................................................................... 41 3.3.2 Circuitul numărător 74HC193.......................................................................... 42 3.3.3 Circuitul supervizor de tensiune TL7705......................................................... 43 3.3.4 Convertorul analog numeric ADS7822............................................................ 44

3.4 Reglajul de viteză ..................................................................................................... 45 3.4.1 Implementarea a două semnale PWM.............................................................. 45 3.4.2 Bucla de reglaj automat al vitezei .................................................................... 48

4 Subsistemul de alimentare................................................................................................ 51

4.1 Bateria plumb-acid ................................................................................................... 51 4.2 Energia solară ........................................................................................................... 51

4.2.1 Avantajele energiei solare ................................................................................ 51 4.2.2 Energia de dislocare ......................................................................................... 54 4.2.3 Conversia luminii în electricitate ..................................................................... 55 4.2.4 Principiul de funcţionare: Tip P, Tip N şi câmpul electric............................... 58 4.2.5 Materialele celulei solare ................................................................................. 60 4.2.6 Utilizare............................................................................................................ 61

4.3 Convertizorul 12V DC – 220V AC.......................................................................... 62 5 Subsistemul de comunicaţii.............................................................................................. 64

5.1 Reţeaua wireless WLAN (Wi-Fi)............................................................................. 64 5.1.1 Prezentare generală WLAN ............................................................................. 64 5.1.2 Ce este tehnologia wireless? ............................................................................ 65

Page 3: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

Pagina 3 din 151

5.1.3 Echipamentele Wireless ................................................................................... 72 5.1.4 Avantajele WLAN............................................................................................ 75 5.1.5 Dezavantajele ................................................................................................... 76

5.2 Comunicaţiile client-server cu ajutorul socket-urilor............................................... 78 5.2.1 Aspectele teoretice ........................................................................................... 78

6 Platforma experimentală .................................................................................................. 84

6.1 Proiectarea, modelarea 3D ....................................................................................... 84 6.2 Realizare practică. Detalii constructive.................................................................... 86

7 Subsistemul video ............................................................................................................ 88

7.1 Camerele video cu semnal-video-complex .............................................................. 88 7.2 Dispozitivul de mişcare a camerelor cu două grade de libertate.............................. 88 7.3 Placa de captură a semnalului video ........................................................................ 89

8 Subsistemul de comandă .................................................................................................. 91

8.1 Componenţa ............................................................................................................. 91 8.2 Interfaţa prezentată utilizatorului ............................................................................. 91 8.3 Comanda robotului cu ajutorul joystickului............................................................. 92

8.3.1 Tipurile de Joy-stickuri .................................................................................... 92 9 Funcţionarea (operarea) sistemului .................................................................................. 97 10 Concluzii şi perspective ............................................................................................... 98 11 Bibliografie................................................................................................................... 99 Anexa 1 – Proiectul platformei experimentale....................................................................... 100 Anexa 2 – Schema punţii „H“ pentru comanda motoarelor DC ............................................ 106 Anexa 3 – Cablajul realizat aferent punţii „H“ ...................................................................... 107 Anexa 4 – Schema sistemului de comandă a punţii „H“........................................................ 108 Anexa 5 – Cablajul sistemului de comandă a punţii „H“. Faţa superioară ............................ 111 Anexa 6 – Cablajul sistemului de comandă a punţii „H“. Faţa inferioară ............................. 112 Anexa 7 – Codul sursă al sistemului de comandă a punţii „H“ ............................................. 113 Anexa 8 – Codul sursă al aplicaţiei server, care rulează pe sistemul de comandă al robotului................................................................................................................................................ 123 Anexa 9 – Codul sursă al aplicaţiei de teleoperare ................................................................ 133

Page 4: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

Pagina 4 din 151

Lista figurilor Figura 1 - Detectarea / distrugerea de mine în fosta Iugoslavie................................................. 9 Figura 2 - Robot mobil detector de mine ................................................................................. 10 Figura 3 - Robot mobil folosit la inspecţii în urma dezastrelor nucleare................................. 10 Figura 4 - Jet de apă folosit la distrugerea bombelor (disruptor) ............................................. 11 Figura 5 - Exemplu de robot mobil folosit la ameninţări cu bombe ........................................ 11 Figura 6 - Inspectarea unui autovehicul de către un robot mobil............................................. 12 Figura 7 - Robot mobil folosit la detectarea dispozitivelor explozive capcană ....................... 12 Figura 8 - Robot mobil echipat cu dispozitiv de distrugere a bombelor (disruptor) ................ 13 Figura 9 - Robot mobil teleoperat din anii ‘60......................................................................... 13 Figura 10 - Comparaţie între roboţi mobili (în fundal Apollo 15 LRV anii 70, în plan apropiat

Sojourner – 1997)............................................................................................................. 14 Figura 11 - Şasiu experimental de robot mobil ........................................................................ 14 Figura 12 - Robot mobil Sojourner - roţile din faţă ................................................................. 15 Figura 13 - Depăşirea unui obstacol......................................................................................... 15 Figura 14 - Sojourner pregătit pentru transport........................................................................ 16 Figura 15 - Sojourner pregătit de funcţionare .......................................................................... 16 Figura 16 - Robot mobil experimental ..................................................................................... 16 Figura 17 - Pathfinder şi Sojourner .......................................................................................... 17 Figura 18 - Versiunea a doua a lui Sojourner........................................................................... 17 Figura 19 - Robotul mobil Sojourner preluând o mostră de rocă............................................. 18 Figura 20 - Design experimental de robot mobil ..................................................................... 18 Figura 21 - Detaliu al subsitemului video la un robot mobil ................................................... 19 Figura 22 - Robot mobil folosit la inspecţia ţevilor ................................................................. 19 Figura 23 - Exemplu de robot mobil folosit la inspecţia conductelor...................................... 20 Figura 24 - Robot mobil pentru inspecţia conductelor verticale.............................................. 20 Figura 25 - Robot mobil pentru zone greu accesibile .............................................................. 21 Figura 26 - Modificarea formei în timpul operării ................................................................... 21 Figura 27 - Robot subacvatic teleoperat................................................................................... 21 Figura 28 - Robot subacvatic de recunoaştere ......................................................................... 22 Figura 29 - Robot mobil militar multifuncţional...................................................................... 22 Figura 30 - Robot mobil militar folosit la aprovizionarea cu medicamente ............................ 23 Figura 31 - Robot mobil folosit la decontaminări / înlăturarea obstacolelor ........................... 23 Figura 32 - Arhitectura sistemului ........................................................................................... 26 Figura 33 - Acţionarea unui motor de curent continuu ............................................................ 29 Figura 34 - Acţionare în sens invers......................................................................................... 29 Figura 35 - Schemă bloc a unei punţi tip „H“ .......................................................................... 30 Figura 36 - Deschiderea unei părţi a punţii .............................................................................. 30 Figura 37 - Deschidere inversă a punţii ................................................................................... 31 Figura 38 - Punte „H“ cu tranzistori......................................................................................... 31 Figura 39 - Diode de protecţie.................................................................................................. 32 Figura 40 - Tranzistor MOS-FET............................................................................................. 32 Figura 41 - Tranzistor P-MOS ................................................................................................. 33 Figura 42 - Tranzistori N-MOS................................................................................................ 33 Figura 43 - Detaliu constructiv a unui encoder ........................................................................ 36 Figura 44 - Semnale de la un encoder incremental .................................................................. 36 Figura 45 - Disc codor a unui encoder incremental ................................................................. 37

Page 5: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

Pagina 5 din 151

Figura 46 - Semnale ale unui encoder incemental cu semnale de comutaţie pentru un motor trifazic............................................................................................................................... 37

Figura 47 - Disc codor a unui encoder incremental cu semnale de comutaţie......................... 38 Figura 48 - Disc codor a unui encoder absolut (cod Grey) ...................................................... 38 Figura 49 - Disc codor a unui encoder absolut (cod binar)...................................................... 39 Figura 50 - Ordinograma sistemului de comandă .................................................................... 41 Figura 51 - Configuraţia pinilor – P89C51RC+....................................................................... 42 Figura 52 - Configuraţia pinilor – 74HC193............................................................................ 43 Figura 53 - Diagrama logică – 74HC193 ................................................................................. 43 Figura 54 - Configuraţia pinilor – TL7705 .............................................................................. 44 Figura 55 - Diagrama funcţională – TL7705 ........................................................................... 44 Figura 56 - Configuraţia pinilor – ADS7822 ........................................................................... 44 Figura 57 - Diagrame de timp – comunicaţie serială cu ADS7822 ......................................... 45 Figura 58 - Forma de undă a mărimii controlate cu factor de umplere de A. 95% B. 50% C.

5%..................................................................................................................................... 46 Figura 59 - Exemplu de semnale PWM ................................................................................... 46 Figura 60 - Ordinograma reglajului automat al vitezei ............................................................ 49 Figura 61 - Aplicare a tehnologiei solare ................................................................................. 52 Figura 62 - Panou solar ............................................................................................................ 52 Figura 63 - Energia solară ........................................................................................................ 53 Figura 64 - Procese în cadrul materialului ............................................................................... 54 Figura 65 - Energia absorbată de diferite materiale ................................................................. 55 Figura 66 - Celulă, modul, matrice .......................................................................................... 55 Figura 67 - Celula solară .......................................................................................................... 56 Figura 68 - Pământul ................................................................................................................ 57 Figura 69 - Spectrul radiaţiei solare ......................................................................................... 57 Figura 70 - Secţiune prin celula fotovoltaică ........................................................................... 58 Figura 71 - Procesul de fabricaţie al siliciului.......................................................................... 59 Figura 72 - Procesul de fabricaţie al siliciului.......................................................................... 59 Figura 73 - Aranjarea cristalelor de siliciu............................................................................... 60 Figura 74 - Exemple de aplicare a tehnologiei solare .............................................................. 61 Figura 75 - Exemple de aplicare a tehnologiei solare .............................................................. 61 Figura 76 - Ieşiri a diferitor tipuri de invertoare (semnal sinusoidal, cvasi-sinusoidal şi

rectangular)....................................................................................................................... 62 Figura 77 - Convertizor sinusoidal 12V DC - 220 V AC......................................................... 63 Figura 78 - Reţea wireless cu conexiune simplă punct la punct .............................................. 64 Figura 79 - Reţea wireless cu conexiuni multi-punct cu securitate.......................................... 65 Figura 80 - Comunicaţii prin infraroşu .................................................................................... 67 Figura 81 - Spectrul de emisie.................................................................................................. 68 Figura 82 - Câştig în domeniul 2.4 GHz .................................................................................. 69 Figura 83 - Antenă omnidirecţională ....................................................................................... 71 Figura 84 - Echipamente Wireless ........................................................................................... 72 Figura 85 - Stâlp BTS (Base Tranceiver Station) .................................................................... 73 Figura 86 - Antenă direcţională................................................................................................ 74 Figura 87 - Tower..................................................................................................................... 75 Figura 88 - Antenă satelit ......................................................................................................... 76 Figura 89 - Antenă direcţională................................................................................................ 77 Figura 90 - Modelare 3D a sistemului de acţionare. ................................................................ 84 Figura 91 - Prototip şasiu simulat ............................................................................................ 85 Figura 92 - Wireframe prototip. ............................................................................................... 85 Figura 93 - Modelare 3D a prototipului ................................................................................... 86

Page 6: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

Pagina 6 din 151

Figura 94 - Realizare practică a şasiului .................................................................................. 87 Figura 95 - Sistemul teleoperat ................................................................................................ 87 Figura 96 -Cameră video Navigator......................................................................................... 88 Figura 97 - Dispozitiv de rotire (Pan-Tilt) a camerelor ........................................................... 89 Figura 98 - Interfaţa prezentată utilizatorului .......................................................................... 91 Figura 99 - Joystick digital....................................................................................................... 93 Figura 100 - Joystick ................................................................................................................ 96 Figura 101 - Schemă interconectare joystick cu un PC ........................................................... 96 Figura 102 - Aplicaţia server.................................................................................................... 97 Figura 103 - Subansamblu complet........................................................................................ 100 Figura 104 - Subansamblu complet........................................................................................ 101 Figura 105 - Părţi componente subansamblu ......................................................................... 101 Figura 106 - Ax ...................................................................................................................... 102 Figura 107 - Bucşă ................................................................................................................. 102 Figura 108 - Inel..................................................................................................................... 103 Figura 109 - Arbore................................................................................................................ 103 Figura 110 - Manşon de cuplare............................................................................................. 103 Figura 111 - Bucşă antrenare ................................................................................................. 104 Figura 112 - Suport Encoder .................................................................................................. 104 Figura 113 - Placă suport ....................................................................................................... 105 Figura 114 - Schema punţii „H“............................................................................................. 106 Figura 115 - Cablajul punţii „H“ – faţa superioară ................................................................ 107 Figura 116 - Cablajul punţii „H“ - faţa inferioară .................................................................. 107 Figura 117 - Schema sistemului de comandă a punţii - detaliu - microcontrolerul ............... 108 Figura 118 - Intrări separate galvanic .................................................................................... 108 Figura 119 - Ieşiri separate galvanic ...................................................................................... 109 Figura 120 - Formare impulsuri numărare ............................................................................. 109 Figura 121 - Una din cele trei ramuri cu numărătoare pe 24 de biţi ...................................... 110 Figura 122 - Cablajul sistemului de comandă : faţa superioară ............................................. 111 Figura 123 - Cablajul sistemului de comandă : faţa inferioară .............................................. 112

Page 7: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

Pagina 7 din 151

Lista secvenţelor de cod Secvenţă cod 1 - Comenzi acceptate de la calculatorul gazdă ................................................. 40 Secvenţă cod 2 - Definiţii cazuri PWM ................................................................................... 47 Secvenţă cod 3 - Rutină timer 0 PWM..................................................................................... 48 Secvenţă cod 4 - Calcularea vitezei X...................................................................................... 49 Secvenţă cod 5 - Reglaj dinamic al vitezei .............................................................................. 50 Secvenţă cod 6 - Calcul variabile PWM .................................................................................. 50 Secvenţă cod 7 - Apelare socket .............................................................................................. 79 Secvenţă cod 8 - Familii de protocoale .................................................................................... 79 Secvenţă cod 9 - Funcţia connect............................................................................................. 80 Secvenţă cod 10 - Structura sockaddr_in ................................................................................. 80 Secvenţă cod 11 - Deschidere conexiune................................................................................. 80 Secvenţă cod 12 - Apel funcţie send ........................................................................................ 81 Secvenţă cod 13 - Apel funcţie receive.................................................................................... 82 Secvenţă cod 14 - Apel funcţie sendto ..................................................................................... 82 Secvenţă cod 15 - Structura sockaddr ...................................................................................... 82 Secvenţă cod 16 - Apel funcţie recvfrom................................................................................. 82 Secvenţă cod 17 - Închidere socket .......................................................................................... 83

Page 8: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

1. Introducere Pagina 8 din 151

1 Introducere

Lucrarea de faţă îşi propune abordarea domeniului teleoperării. Teleoperarea este un concept inovator care a fost recent introdus în practica curentă a domeniului automatizărilor. Teleoperarea se poate aplica pe o gamă largă de echipamente, de la cei mai complecşi roboţi industriali până la aplicaţii locale extrem de simple.

Teleoperarea necesită anumite particularităţi ale aplicaţiei tratate, printre care amintim: • aplicaţia trebuie să suporte comanda prin acest procedeu, adică să nu existe restricţii

specifice; • aplicaţia trebuie să fie compatibilă cu comanda prin teleoperare; • aplicaţia trebuie să prezinte avantaje evidente în urma aplicării teleoperării. Având în vedere aceste aspecte, putem conchide afirmând că teleoperarea nu a adus decât

îmbunătăţiri ale modului de lucru în domeniul industrial, că simplifică extrem de mult unele procese de comandă, că este nu doar oportună ci chiar indispensabilă în anumite condiţii de exploatare.

1.1 Teleoperarea în domeniul roboticii

Lucrarea prezintă o aplicaţie de comandă şi percepţie la distanţă, numită generic teleprezenţă şi teleoperare. În esenţă, este vorba despre transmiterea la distanţă, prin mediul informatic, a semnalelor captate de un echipament şi a comenzilor adresate echipamentului, decise de un operator sau de un sistem de reglare automată. În mod generic, transmiterea comenzilor către echipamentul aflat la distanţă este numită teleoperare, indiferent dacă cel care decide comenzile este un operator uman sau un sistem de conducere automată.

Aplicaţiile în care operatorul este conectat la senzorii aflaţi la distanţă, ca şi cum s-ar afla în mediul în care sunt instalaţi senzorii, sunt numite aplicaţii de teleprezenţă. Distanţa între echipament şi operator nu va fi luată în considerare, în cadrul acestei lucrări, deşi întîrzierea care apare în mediul de transmisiune este una din problemele cele mai dure, în cazul unei operaţii de reglare (umană sau automată).

Scopul acestor aplicaţii este comanda sau percepţia la distanţă, şi poate fi impus de una din situaţiile:

- echipamentul (robot mobil) operează într-un mediu ostil, periculos pentru operatorul uman, cum ar fi reactoarele nucleare, zonele de război, etc.;

- echipamentul colectează informaţii (sub diverse forme fizice) din zone inaccesibile operatorului (spaţiul extraterestru, spaţii înguste), dar pe care operatorul trebuie să le perceapă ca şi cum ar fi prezent (cum ar fi cazul telechirurgiei);

- echipamentul trebuie configurat de la distanţă (inclusiv roboţi mobili sau echipamente industriale);

- echipamentul este disponibil într-un număr mic de exemplare (poate fi chiar unicat) şi trebuie folosit de mai mulţi utilizatori, aflaţi în zone geografice diferite (ca în cazul experimentelor ştiinţifice sau al învăţămîntului la distanţă).

Structura generală a unei aplicaţii de teleoperare cuprinde următoarele elemente: - un echipament aflat la distanţă faţă de operator (spre exemplu un robot mobil), capabil

să execute comenzile recepţionate, datorită elementelelor de execuţie proprii; - un sistem de traductoare, instalat pe echipament, care furnizează informaţii despre

evoluţia mediului şi despre gradul de executare a comenzilor;

Page 9: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

1. Introducere Pagina 9 din 151

- un sistem programabil, aflat la distanţă faţă de echipamentul operat, capabil să preia comenzile operatorului sau să realizeze operaţia de automatizare (de obicei este vorba de un calculator de uz general, dar poate fi şi unul dedicat);

- un mediu de transmisiune, prin care comunică cei doi corespondenţi. Mediul poate fi unul dedicat aplicaţiei sau poate fi reţeaua Intranet sau Internet, cu comunicaţie pe fir, prin modemuri radio, pe fibră optică, prin radiaţie infraroşie etc.;

- câte un mediu software pentru fiecare dintre corespondenţi, prin intermediul căruia se exploatează resursele hardware. De regulă, principiul pe care se bazează programele din cele două calculatoare aflate în legătură este principiul client/server.

1.2 Domeniile de aplicare ale teleoperării; exemple

Cele mai des întâlnite domenii de aplicare ale teleoperării sunt: • acţiuni ce necesită precizie; • se desfăşoară în medii ostile, inaccesibile omului sau în medii de mare puritate

(camere curate, medicină, fabricaţia medicamentelor, semiconductoarelor, etc.); • beneficiază de îmbunătăţiri de performanţă prin introducerea roboţilor mobili.

În cele ce urmează vor fi prezentate câteva din domeniile cele mai des întâlnite de aplicare a teleoperării roboţilor, atât mobili cât şi staţionari.

1.2.1 Teleoperarea în medii ostile omului

1.2.1.1 Detectarea minelor anti-personal Una din problemele umanitare grave cu care se confruntă civilizaţia modernă o

constituie minele anti-persoană. Doar anul trecut au fost distruse 100.000 de mine, dar alte 2.5 milioane au fost amplasate (cu precădere în Asia de sud-est). Distrugerea acestor mine este o operaţiune periculoasă şi costisitoare.

Figura 1 - Detectarea / distrugerea de mine în fosta Iugoslavie

Din acest motiv există în prezent mai multe proiecte ce încearcă rezolvarea acestei

probleme. Soluţiile alese constau de obicei dintr-un robot mobil (ca unitate de execuţie) un algoritm de scanare a suprafeţei ce trebuie eliberată de mine, un element pentru detonarea sau dezamorsarea minelor reperate. Reperarea se face în funcţie de tipul minelor folosite cu diferiţi senzori: detector de metale, senzor infraroşu, electro-optic, multi spectral, cu

Page 10: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

1. Introducere Pagina 10 din 151

dispozitive radar cu diferite lungimi de undă, senzori cu unde acustice, detectarea particulelor cu sarcini, rezonanţă, senzori chimic, biologici, câini, etc.

Figura 2 - Robot mobil detector de mine

1.2.1.2 Inspecţia în zone contaminate nuclear

În urma unui accident nuclear trebuie inspectată zona accidentului şi evaluate daunele. Datorită faptului că de obicei nu se cunoaşte starea nucleului, a radiaţiilor sau a posibilelor urmări se preferă trimiterea unui robot mobil pentru evaluarea daunelor.

Acest tip de robot trebuie să fie proiectat să facă faţă unei astfel de situaţii, să fie imun la radiaţii ridicate, să poată depăşi obstacole de diferite forme (obstacole ce rezultă în urma unei explozii), să fie capabili să furnizeze date corecte şi în aceste situaţii personalului de teleoperare.

Figura 3 - Robot mobil folosit la inspecţii în urma dezastrelor nucleare

1.2.1.3 Intervenţiile în cazul ameninţărilor cu bombe şi a muniţiei neexplodate

În cazul unei amenţări cu bombe este encesară evacuarea zonei în cauză. Pentru a preveni pierderea de vieţi umane şi pentru a putea relua activităţile normale cât mai repede se folosesc şi în aceste cazuri tot mai des roboţi mobili.

Page 11: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

1. Introducere Pagina 11 din 151

Figura 4 - Jet de apă folosit la distrugerea bombelor (disruptor)

Aceşti roboţi mobili au posibilitatea de a urca / coborî scări, deschide uşi, ridica obiecte, etc. În majoritatea din cazuri sunt echipate cu un dispozitiv folosit la detonarea voită a explozibilului. În acest scop se foloseşte cel mai des un jet de mare presiune de apă.

Figura 5 - Exemplu de robot mobil folosit la ameninţări cu bombe

În astfel de situaţii, siguranţa în funcţionarea robotului mobil depinde în principal de stabilitatea acestuia (pentru evitarea răsturnării sub greutatea proprie sau a sarcinii purtate) şi de aderenţa la terenul pe care se deplasează (pentru evitarea patinării chiar în condiţiile unui sol cu caracteristici nefavorabile). Gabaritul redus (atât longitudinal cât şi transversal), ca şi greutatea proprie redusă, reprezintă condiţii extrem de severe impuse roboţilor mobili; aceştia trebuie să pătrundă în clădiri şi locuri mai puţin accesibile, să se deplaseze pe culoare sau în pasaje proiectate iniţial numai pentru accesul operatorului uman.

Page 12: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

1. Introducere Pagina 12 din 151

Figura 6 - Inspectarea unui autovehicul de către un robot mobil

Ţările puternic industrializate au în dotarea forţelor armate roboţi mobili înzestraţi cu

echipamente de lucru, care permit efectuarea operaţiilor de detecţie, manipulare şi neutralizare a muniţiilor neexplodate şi a dispozitivelor explozive capcană. Montate la capătul ultimului braţ al manipulatorului – robot, aceste echipamente de lucru pot fi: detector de metale sau explozivi la adâncime, dispozitiv de prehensiune tip cleşte, instalaţie de control prin radiografiere, disruptoare de diferite categorii.

Figura 7 - Robot mobil folosit la detectarea dispozitivelor explozive capcană

În domeniul protecţiei civile, roboţii mobili sunt folosiţi pentru a interveni în locuri

aglomerate (aeroporturi, gări, pieţe etc.) pentru a detecta şi neutraliza unele dispozitive explozive capcană (colete, genţi diplomat etc.).

Page 13: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

1. Introducere Pagina 13 din 151

Figura 8 - Robot mobil echipat cu dispozitiv de distrugere a bombelor (disruptor)

1.2.1.4 Roboţii mobili folosiţi în cercetarea spaţială

Încă din anii 60 institutele de cercetare spaţială au cercetat posibilitatea aplicării tehnologiei de teleoperare a unor roboţi mobili în cadrul cercetării spaţiale.

Figura 9 - Robot mobil teleoperat din anii ‘60

Concepte legate de mărime, sisteme de acţionare, telecomunicaţii s-au modificat drastic

în ultimele 4 decenii de dezvoltare.

Page 14: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

1. Introducere Pagina 14 din 151

Figura 10 - Comparaţie între roboţi mobili (în fundal Apollo 15 LRV anii 70, în plan apropiat Sojourner –

1997)

Poate că unul dintre cei mai cunoscuţi roboţi mobili teleoperaţi este Sojourner. Sojourner a fost conceput de către JPL (Jet Propulsion Laboratory, laborator NASA) în cadrul proiectului Mars Pathfinder. Probabil unul dintre cei mai mediatizaţi roboţi mobili, Sojourner este un robot cu 6 roţi motoare pe un şasiu inovativ introdus de către NASA.

Figura 11 - Şasiu experimental de robot mobil

Page 15: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

1. Introducere Pagina 15 din 151

Figura 12 - Robot mobil Sojourner - roţile din faţă

Acest tip de şasiu ales de către NASA a fost special conceput pentru a face faţă

problemelor apărute datorită suprafeţei plenetei marte. Aceasta este cunoscută pentru multitudinea de obstacole de diferite dimensiuni întălnite. Datorită faptului că viteza de deplasare a robotului mobil Sojourner este relativ mică (câţiva centimetri pe secundă) un algoritm de evitare a tuturor obstacolelor s-a dovedit a fi foarte neproductiv.

Figura 13 - Depăşirea unui obstacol

Page 16: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

1. Introducere Pagina 16 din 151

Figura 14 - Sojourner pregătit pentru transport

Figura 15 - Sojourner pregătit de funcţionare

Figura 16 - Robot mobil experimental

Page 17: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

1. Introducere Pagina 17 din 151

Figura 17 - Pathfinder şi Sojourner

Figura 18 - Versiunea a doua a lui Sojourner

Una din problemele cela mai mari întâlnite în cazul robotului mobil Sojourner a fost

diferenţa foarte mare de temperatură ambiantă ce poate apare. Noaptea temperatura scade până la cca. -96 de grade Celsius, ziua atingând temperaturi destul de ridicate. Din această cauză a fost necesară crearea unui microclimat în interiorul robotului pentru a proteja electronica de fluctuaţiile de temperatură şi pentru a o menţine funcţională.

Robotul mobil a fost echipat şi cu un element acţionator numit IDD (Instrument Deplyment Device). Acesta este un braţ robotizat, ce permite utilizarea echipamentelor de cercetare din dotare, cum ar fi: un ansamblu pentru preluare de imagini (format dintr-un microscop şi o cameră de înaltă rezoluţie), un spectrometru Mössbauer, un spectrometru cu raze X şi un dispozitiv pentru preluarea de mostre de rocă.

Page 18: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

1. Introducere Pagina 18 din 151

Figura 19 - Robotul mobil Sojourner preluând o mostră de rocă

Figura 20 - Design experimental de robot mobil

Page 19: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

1. Introducere Pagina 19 din 151

Figura 21 - Detaliu al subsitemului video la un robot mobil

1.2.2 Teleoperarea în zone inaccesibile omului

Nu doar în zonele periculoase se folosesc roboţi mobili, ci şi în zone inaccesibile sau greu accesibile omului. Acestea pot fi: inspectarea ţevilor, conductelor, operaţii subacvatice la mare adâncime, monitorizarea siguranţei scufundătorilor, operaţii de salvare subacvatice, pază de coastă, operaţiuni de recunoaştere militară, evacuări medicale, suport logistic, inspecţii de epave, etc.

1.2.2.1 Inspecţia conductelor

Figura 22 - Robot mobil folosit la inspecţia ţevilor

Page 20: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

1. Introducere Pagina 20 din 151

Sistemele de inspecţie a conductelor sunt formate uzual din mai multe părţi: robotul mobil ce oferă platforma locomotorie, o cameră video uzual montată pe un dispozitiv ce permite rotirea şi înclinarea acesteia şi unelte necesare efectuarea altor teste sau reparaţii.

Dintre testele ce pot fi efectuate amintim cele de natură nedistructivă, cum ar fi probe cu lichide penetrante, scanări ultrasonice, cu raze x. Acestea se efectuează periodic pentru a verifica parametrii conductei în cauză.

Sistemele folosite în practică sunt de obicei izolate etanş astfel încât este posibilă operarea lor şi în conducte cu lichid, atâta timp cât lichidul permite efectuarea testelor propuse.

Figura 23 - Exemplu de robot mobil folosit la inspecţia conductelor

Pentru a permite inspecţia conductelor verticale s-au dezvoltat roboţi mobili cu trei

şenile dispuse la o distanţă de 120 de grade, astfel asigurându-de o aderenţă maximă şi în cazul operării pe verticală.

Figura 24 - Robot mobil pentru inspecţia conductelor verticale

1.2.2.2 Inspecţia în zone greu accesibile

Pentru a putea pătrunde în zone greu accesibile este nevoie de roboţi mobili de dimensiuni foarte reduse. Aceste dimensiuni reduse au însă un impact asupra calităţii teleprezenţei. În special calitatea imaginilor video teletransmise este scăzută datorită distanţei la sol foarte mici. Pentru a depăşi acest inconvenient au fost concepuţi roboţi mobili ce îşi modifică forma în timpul operării.

Page 21: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

1. Introducere Pagina 21 din 151

Figura 25 - Robot mobil pentru zone greu accesibile

Figura 26 - Modificarea formei în timpul operării

Printre aplicaţiile cele mai importante pentru acest tip de roboţi mobili enumerăm:

descoperirea de victime în cazul cutremurilor sau a unor explozii, inspecţia clădirilor (în special inspecţia fundaţiilor), etc.

1.2.2.3 Roboţii subacvatici

Aceştia operează uzual la adâncimi destul de mari, de până la 7-8000 de metri adâncime. Printre aplicaţiile uzuale numărăm: cartografiere, detectarea de epave, readucerea la suprafaţă a diferitor obiecte (cum ar fi bucăţi de epavă, chiar elicoptere sau alte aparate de zbor), inspecţia epavelor (Magellan 725 a fost folosit acum câţiva ani în cadrul unei anchete legate de scufundarea unui vas cargo, astfel s-a demonstrat că vasul a fost scufundat deliberat pentru încasarea primei de asigurare), salvarea scufundătorilor sau a altor naufragiaţi, etc.

Figura 27 - Robot subacvatic teleoperat

Page 22: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

1. Introducere Pagina 22 din 151

Figura 28 - Robot subacvatic de recunoaştere

1.2.2.4 Roboţii militari mobili

În cadrul militar folosirea roboţilor mobili aduce numeroase avantaje. Se pot efectua operaţiuni de recunoaştere, de spionaj fără riscul pierderilor de trupe (sau de divulgare a informaţiilor la capturarea acestora), suport logistic (transport de muniţie, medicamente, combustibil), evacuare medicală a soldaţilor răniţi, operaţiuni de căutare şi salvare, etc.

Figura 29 - Robot mobil militar multifuncţional

Page 23: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

1. Introducere Pagina 23 din 151

Figura 30 - Robot mobil militar folosit la aprovizionarea cu medicamente

Figura 31 - Robot mobil folosit la decontaminări / înlăturarea obstacolelor

1.3 Obiectivele proiectului

Lucrarea de faţă îşi propune abordarea domeniilor de teleoperare şi teleprezenţă, domenii relativ noi, dar cu o creştere uimitoare în ultimii ani.

Page 24: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

1. Introducere Pagina 24 din 151

În cele ce urmează se doreşte prezentarea, pe lângă stadiul actual de dezvoltare a tehnicilor de teleoperare/teleprezenţă, şi prezentarea unei aplicaţii de teleoperare tipice. S-au dezvoltat, şi sunt prezentate în cele ce urmează, componente de acţionare, de comandă, de teletransmitere a diferiţilor parametri, precum şi algoritmi de control, de reglaj a vitezelor împreună cu protocoale de comunicaţii între diferitele componente.

1.4 Cadrul general al proiectului

Marea majoritate a instituţiilor de învăţământ superior tehnic din lume manifestă în ultimii ani un puternic interes faţă de tehnologia de teleoperare şi de teleprezenţă, dezvoltând două sau chiar trei discipline de studiu în domeniu, alocând pentru acestea importante sume de bani, oameni cu o înaltă calificare şi laboratoare echipate specific. De asemenea sistemele teleoperate constituie un domeniu de interes pecial pentru cercetarea universitară, pentru activităţile de doctorat şi masterat.

Departamentul de Ştiinţa şi Ingineria Calculatoarelor reprezentat prin laboratorul DSPLabs, se încadrează la rândul său în tendinţa generală manifestată în acest domeniu atât în mediul universitar cât şi de puternice companii din întreaga lume.

Înfiinţat în anii 1980 de prof. Dr. ing. Voicu GROZA laboratorul DSPLabs a cunoscut o dezvoltare puternică în ultimii ani, atât din punct de vedere al dotării cât şi al numărului de membri activi, componente esenţiale ce au contribuit la statutul său actual. În momentul de faţă laboratorul DSPLabs condus de către şl. ing. Mihai V. MICEA şi coordonat de către prof. Dr. ing. Ştefan HOLBAN şi prof. Dr. ing. Vladimir CREŢU a contribuit la finalizarea a peste 27 de contracte şi granturi majore de cercetare cu parteneri din ţară şi din străinătate, dispunând de o puternică echipă de cercetare compusă din studenţi, masteranzi şi doctoranzi. Participarea unor membri ai acesteia la concursuri internaţionale de calculatoare ( hard şi soft ) cu rezultate excepţionale ( locurile I şi II ) reprezintă o dovadă a calităţii resurselor umane de care dispune laboratorul.

Experienţa câştigată în activităţile de cercetare / dezvoltare şi la concursurile din domeniul prelucrării numerice a semnalelor şi comenzii numerice a sistemelor a contribuit în mare măsură la iniţierea în anul 1999 a unei fructuoase colaborări cu compania Motorola din SUA, colaborări ce continuă şi în prezent.

Astfel încheierea unui proiect de o asemenea anvergură în cadrul acestui laborator reprezintă încă un exemplu legat ce demonstrează potenţialul acestui laborator.

1.5 Structura lucrării

Primul capitol este o introducere, care îsi propune să contureze obiectivele acestei lucrări de diplomă şi cadrul general în care s-a născut. Sunt prezentate pe scurt posibilităţile actuale în cadrul teleoperării, precum şi câteva aplicaţii semnificative.

În cel de-al doilea capitol este prezentată întreaga aplicaţie de teleoperare fără a se intra însă în detalii constructive. Este prezentată componenţa sistemului, modul de operare precum şi specificaţiile tehnice ale acestuia.

Capitolul al treilea prezintă întreg susbsistemul de acţionare, realizarea unei punţi de tip “H”, realizarea unui sistem cu microcontroler pentru comanda acesteia, precum şi folosirea unor encodere pentru măsurarea poziţiei şi a vitezei de deplasare.

Page 25: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

1. Introducere Pagina 25 din 151

În cel de-al patrulea capitol este prezentat subsistemul de alimentare, bateria de 12V 125 Ah, panoul solar (împreună cu o descriere a tehnologiei solare), precum şi convertizorul necesar pentru alimentarea PC-ului de pe robot.

Următorul capitol prezintă aspecte legate de comunicaţii, tehnologia WLAN folosită la comanda robotului precum şi la realizarea teleprezenţei, folosirea socket-urilor pentru comunicaţia interproces şi transmisia video a imaginilor de la cele două camere prin streaming MPEG4.

Capitolul al şaselea prezintă realizarea practică a robotului împreună cu realizarea virtuală a acestuia.

Următorul capitol prezintă aspecte legate de furnizarea imaginilor. Se prezintă camerele folosite, împreună cu placa de captură folosită la digitizarea semnalului analogic. Se mai prezintă şi dispozitivul ales pentru realizarea înclinării şi rotirii camerelor.

Cel de-al optulea capitol descrie sistemul de comandă. Este prezentată interfaţa aplicaţiei de teleoperare, precum şi posibilitatea de comandă a robotului prin intermediul unui joystick.

În următorul capitol este descrisă aplicaţia software ce stă la baza acestui robot, la baza întregului sistem de teleoperare.

În cele ce urmează sunt descrise concluziile şi perspectivele acestei lucrări, posibilităţi de îmbunătăţire ulterioară. Menţionăm că sistemul a fost astfel dimensionat, ca să permită folosirea sa drept platformă experimentală pentru testarea mai multor senzori.

Page 26: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

2. Descrierea generală a sistemului Pagina 26 din 151

2 Descrierea generală a sistemului

În cadrul acestei lucrări s-a dorit realizarea unei aplicaţii de teleoperare complete. Componenţa şi intercomunicarea între diferitele componente vor fi prezentate pe scurt în cele ce urmează şi în detaliu în capitolele aferente-

2.1 Componenţa sistemului

Aplicaţia de teleoperare este compusă din mai multe subsisteme prezentate schematic în figura ce urmează.

Figura 32 - Arhitectura sistemului

Cum reiese şi din figură aplicaţia de teleoperare este compusă din mai multe subsisteme:

• platforma robotului mobil şi sistemul de acţionare, • sistemul video, • sistemul de orientare a camerelor, • subsistemul de comunicaţie, • aplicaţiile software

Primul sistem, sistemul de acţionare împreună cu platforma robotului mobil, au un rol

principal în poziţionarea robotului. Sistemul este compus din două punţi de tip „H” ce realizează comanda a două motoare DC, un sistem cu microcontroler care le comandă.

Aplicaţia SERVER, rulează pe

robotul mobil

Aplicaţia de teleoperare, rulează la utilizator

Imagini video

Date sistem Internet

Comenzi

Imagini video

Date sistem

Comenzi

Sistemul de orientare a camerelor

RS232

Sistemul de acţionare a robotului

RS232

Subsistemul video

Semnal video complex

Page 27: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

2. Descrierea generală a sistemului Pagina 27 din 151

Sistemul video este compus dintr-o placă de achiziţie video, două camere alb/negru cu senzor CCD şi un server soft, care realizează encodarea semnalelor video în format MPEG2 şi teletransmiterea acestora la clientul ce realizează teleoperarea.

Pentru a îmbunătăţi calităţile de teleprezenţă, camerele video au fost montate pe un dispozitiv de rotire / înclinare, comandat tot de către utilizatorul de teleoperare. Astfel de la distanţă se pot roti şi orienta cele două camere.

Următoarele sisteme sunt implementate software. Acestea realizează intercomunicarea între calculatorul gazdă al teleoperatorului şi calculatorul de pe platforma robotizată.

Interfaţa de teleoperare a fost realizată ţinându-se cont în primul rând de un proces de învăţare cât mai scurt. Interfaţa a fost proiectată cât mai intuitiv, pentru a scuti utilizatorii de teleoperare de o perioadă lungă de şcolarizare, acomodare.

2.2 Modul general de operare

Sistemul implementat în cadrul acestei lucrări de diplomă este un sistem complet de teleoperare. Din acest considerent prezintă toate elementele unui sistem de teleoperare. Acestea au fost prezentate pe scurt în subcapitolul anterior şi vor fi prezentate în detaliu pe parcursul acestei lucrări. În cele ce urmează se prezintă modul general de operare a sistemului de teleoperare.

După ce sistemul a fost pornit, robotul mobil este testat dacă este gata de funcţionare. Se execută nişte teste interne de funcţionare, se verifică tensiunea bateriei principale şi comunicaţia cu exteriorul. După îndeplinirea acestor condiţii sistemul mobil este pregătit să accepte comenzi de teleoperare.

Utilizatorul va accesa software-ul de teleoperare, îl va configura cu nume de cont şi parolă de acces, după care se va conecta la robotul mobil. Primul utilizator conectat va putea lansa şi comenzi. Utilizatorii conectaţi ulterior nu vor putea interveni în acţiunile robotului mobil, ci vor fi simplii privitori. Menţionăm că utilizatorii ulteriori au acces la transmisiunea video. Acces la această transmisiune este oferit şi fără un software special, dintr-o simplă fereastră web.

Utilizatorul va interacţiona cu robotul folosind un joystick, iar mişcările acestuia sunt convertite în comenzi şi teletransmise robotului pentru a fi interpretate şi transformate în acţiuni.

2.3 Specificaţiile tehnice Platforma mobilă Dimensiuni: 1010x830x1600 mm Greutate: aprox. 80 kg Baterie: 124 Ah Panou solar: 50 Wh Convertizor 220V: 200 W Subsistemul de acţionare Motoare: 2 x 150 W DC Punte tip “H”: 2 x 10 A (DA 100%), cu limitare electronică Siguranţe: F 15A Camere video Lentilă: 3.6 mm F 2.0 focus fix

Page 28: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

2. Descrierea generală a sistemului Pagina 28 din 151

Viteză shutter: 1/60 - 1/100,000 Iluminare minimă necesară: 0,5 Lux Rezoluţie: 420 linii orizontale TV Consum: 1,3 W Dispozitiv rotire / înclinare Alimentare: 5V, 12V Consum: 5,2 W Rotire: > 360 deg. Înclinare: 180 deg. WLAN Viteză: 22 Mbps Acoperire: 300 m câmp deschis Antenă: 2 dBi Calculator gazdă pe robot Procesor: AMD K6-2 500 MHz Memorie: 128 MB SDRAM Sistem de operare: Windows 2000

Page 29: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

3. Sistemul de acţionare Pagina 29 din 151

3 Sistemul de acţionare al robotului

3.1 Acţionarea unui motor de curent continuu Pentru a antrena un motor de curent continuu este suficient să-l conectăm la o sursă de

tensiune. Astfel motorul începe o mişcare de rotire. Pentru a schimba sensul de rotaţie este suficient să inversăm polaritatea.

Pentru a comanda un motor de către un microcontroler este necesar un element de comutaţie care este capabil să pornească şi să întrerupă curentul ce trece prin motor.

În cele ce urmează prezentarea se face cu relee, ulterior acestea vor fi substituite cu tranzistoare.

Figura 33 - Acţionarea unui motor de curent continuu

În prima figură este schema de conectare pentru acţionarea unui motor de curent continuu.

Dacă la intrarea A se aplică un nivel logic „1” (Obs. nivelul de tensiune trebuie să fie suficient de mare pentru a putea acţiona releul) se va aclanşa releul, fapt ce va determina trecerea unui curent prin spirele motorului, lucru care va duce la o mişcare de rotaţie a axului său.

Figura următoare arată posibilitatea de rotire a motorului în sens invers.

Figura 34 - Acţionare în sens invers

Similar cu cele discutatea anterior, dacă se aplică o tensiune logică la intrarea B motorul

va fi acţionat corespunzător.

3.1.1 Puntea tip “H” pentru acţionarea unui motor de curent continuu Pentru a putea însă modifica direcţia de rotire a motorului şi în timpul funcţionării este

nevoie de o punte de tip „H“ ca în figura următoare.

Page 30: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

3. Sistemul de acţionare Pagina 30 din 151

Figura 35 - Schemă bloc a unei punţi tip „H“

Pentru a roti motorul într-un sens este necesară închiderea a două relee. În următoarea figură s-au închis releele A şi D iar B şi C au rămas deschise.

Figura 36 - Deschiderea unei părţi a punţii

Similar pentru a roti motorul în sens invers se comandă releele B şi C.

Page 31: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

3. Sistemul de acţionare Pagina 31 din 151

Figura 37 - Deschidere inversă a punţii

Niciodată nu este permisă acţionarea simultană a releelor A şi C, respectiv B şi D. Dacă

acest caz apare, sursa de alimentare a circuitului este pusă la masă, lucru neacceptabil. Pentru a controla mai bine comportamentul motorului, şi pentru a putea regla viteza în

locul releelor se folosesc tranzistori. Astfel schema devine:

Figura 38 - Punte „H“ cu tranzistori

Pentru a proteja tranzistorii de tensiunea suplimentară generată de către motor în

momentul frânării circuitului mai trebuie adăugate nişte diode de protecţie.

Page 32: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

3. Sistemul de acţionare Pagina 32 din 151

Figura 39 - Diode de protecţie

Tranzistorii, fiind circuite semiconductoare, au o rezistenţă internă. Crescând curentul ce

trece prin ei, va creşte şi cantitatea de căldură ce trebuie disipată. Suplimentar la realizarea practică schema prezentată mai sus a fost îmbunătăţită prin

adăugarea mai multor componente. S-a adăugat o limitare de curent, realizată cu un shunt în serie cu motorul. Căderea de tensiunea de pe acest shunt este comparată de un amplificator operaţional cu o tensiune prestabilită.

Ca element de protecţie suplimentar s-au adăugat siguranţe de 15A pe alimentările motoarelor, astfel dacă protecţia electronică de curent nu funcţionează se protejează sursa de alimentare a montajului.

O schemă completă a punţii realizate se găseşte în Anexa 1 la pagina 100.

3.1.2 Tranzistorii MOS-FET Spre deosebire de tranzistori bipolari, tranzistorii cu efect de câmp (MOS-FET) au o

rezistenţă internă scăzută, astfel permit trecerea unui curent mai mare, fără a se încălzi prea tare.

Un tranzistor metal-oxid-semiconductor cu efect de câmp (MOSFET) este format dintr-o

suprapunere a mai multor straturi de metal, oxid şi un strat semiconductor. Cele mai recente circuite folosesc însă o grilă din polisiliconi în locul celei metalice.

Figura 40 - Tranzistor MOS-FET

Page 33: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

3. Sistemul de acţionare Pagina 33 din 151

Există două tipuri de bază de tranzistori MOSFET. Tranzistori MOSFET cu canal P (P-MOSFET sau PMOS) şi tranzistori cu canal N (N-MOSFET sau NMOS). În aplicaţii se mai foloseşte şi aşa numitul CMOS (MOSFET complementar) care este de fapt o combinaţie a celor doi. În momentul de faţă CMOS este elementul cel mai folosit în proiectarea VLSI, deoarece consumă mult mai puţin faţă de alte tehnologii.

3.1.2.1 Tranzistorii P-MOS Este un tranzistor cu canal indus de tip P. Prin acest canal circulă goluri ca purtătoare de

curent. Sursa şi drena, precum se poate observa din figura următoare, sunt fabricate din material dopat P, iar grila este dintr-un strat de polisilicon ce se află deasupra stratului de oxid.

Figura 41 - Tranzistor P-MOS

În figura din dreapta se observă stratul format din goöuri în imediata apropiere a stratului

de oxid al grilei în momentul aplicării unei tensiuni negative grilei. Dacă sursei i se aplică o tensiune pozitivă va apărea o scurgere de goluri dinspre sursă spre drenă.

3.1.2.2 Tranzistorii N-MOS Similar cu tranzistorii P-MOS cei N-MOS sunt formaţi din material dopat de tip N (la

sursă şi drenă) şi dintr-un strat de polisilicon deasupra stratului de oxid al grilei.

Figura 42 - Tranzistori N-MOS

Page 34: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

3. Sistemul de acţionare Pagina 34 din 151

În figura din dreapta se observă canalul de electroni ce se formează în momentul aplicării

unei tensiuni pozitive asupra grilei. Dacă se aplică o tensiune drenei, va apare o scurgere de electroni dinspre sursă înspre drenă.

3.1.3 Tranzistorul IRFZ44N

Este un tranzistor MOSFET de tip N. În tabelul următor sunt prezentate câteva din caracteristicile acestuia. Simbol Caracteristică Valoare Unitate VDSS Tensiune sursă drenă maximă 60 V

Curent de drenă continuu (T=25°C) 50 ID

Curent de drenă continuu (T=150°C) 35.4 A

IDM Curent de drenă pulsat 200 A VGS Tensiune grilă-sursă ±20 V PD Putere maximă disipată (T=25°C) 126 W RθJC Rezistenţă termică joncţiune carcasă 1.19 °C/W RθCS Rezistenţă termică carcasă radiator 0.5 °C/W RθJA Rezistenţă termică joncţiune ambient 62.5 °C/W RDS(on) Rezistenţă drenă sursă la o tensiune grilă sursă =

10V şi un curent ID=25A 0.024 Ω

În cele ce urmează vom face câteva clarificări legate de modelul folosit pentru a alege

tranzistorul şi pentru a determina cantitatea de energie disipată, precum şi calităţile radiatorului.

Tranzistorul este ambalat într-o capsulă de tip TO-220AB, care permite un transfer de aprox. 75A, astfel nu s-a ales un tranzistor cu ID > 70A (IRF1405 are un ID=169A, dar care din cauza capsulei nu se poate atinge).

Din documentaţia tranzistorului preluăm şi temperatura maximă a joncţiunii TJ=175°C, precum şi o relaţie între curent şi temperatura capsulei, dată de RθJC=1.19°C/W(rezistenţa termică joncţiune-carcasă).

Astfel dacă tranzistorul este blocat, nu trece curent prin el, temperatura joncţiunii va fi identică cu cea a capsulei. Dacă avem un curent de 10A diferenţa de temperatură va fi de 11.9°C. Puterea disipată de către tranzistor este dată de formula lui Ohm:

P = I2R R în această formulă este rezistenţa drenă sursă, RDS(on) = 0.024Ω. Calculăm întăi puterea maximă ce poate fi disipată.

(175-25) = 1.19 * W rezultă 126W, valoare ce corespunde şi cu modelul teoretic din documentaţie.

Page 35: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

3. Sistemul de acţionare Pagina 35 din 151

Pentru a calcula valoarea curentului ce poate trece prin tranzistor fără răcire suplimentară folosim RθJA. La o temperatură a joncţiunii de 175°C şi o temperatură a ambientului de 25°C (temperatura camerei) puterea disipată va fi:

P = 150 / RθJA P = 2.4 W

dar P = I2R,

rezultă curentul I = sqrt(P/R) I = 10A

Datorită faptului că temperatura ambiantă poate creşte datorită anumitor factori,

refacem calculele pentru T = 40°C, şi astfel obţinem un curent I = 9.5A

Putem astfel, fără răcire să încărcăm tranzistorul pănă la 9.5A. Calculăm şi temperatura capsulei:

TC=175°C – (2.4 W * 1.19 °C / W)

TC=172.14°C

Din acest motiv s-a ales utilizarea unui radiator de aproximativ 3W, pentru a nu pune în pericol eventuale persoane ce ating din greşeală carcasa vreunui tranzistor. Al doilea motiv este faptul că, deşi curentul de aproape 10A ar fi suficient pentru motorul ales, în cazul unei probleme neprevăzute s-ar putea ajunge la un curent mai mare, lucru care ar duce cu siguranţă la deteriorarea tranzistorilor.

3.1.4 Tranzistorul IRF4905 Este un tranzistor MOSFET de tip P. În tabelul următor sunt prezentate câteva din

caracteristicile acestuia. Simbol Caracteristică Valoare Unitate

Curent de drenă continuu (T=25°C) 64 ID

Curent de drenă continuu (T=150°C) 45 A

IDM Curent de drenă pulsat 260 A VGS Tensiune grilă-sursă ±20 V PD Putere maximă dispipată (T=25°C) 150 W RθJC Rezistenţă termică joncţiune carcasă 1.0 °C/W RθCS Rezistenţă termică carcasă radiator 0.5 °C/W RθJA Rezistenţă termică joncţiune ambient 62 °C/W RDS(on) Rezistenţă drenă sursă la o tensiune grilă sursă =

10V şi un curent ID=25A 0.02 Ω

3.2 Sistemul de măsurare a deplasării cu ajutorul unui encoder

Pentru a putea măsura distanţa parcursă, respectiv derivata acesteia viteza este necesar un dispozitiv ce transformă mişcarea motorului şi a roţilor într-un semnal digital.

Page 36: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

3. Sistemul de acţionare Pagina 36 din 151

Un encoder este format, precum reiese şi din figura următoare, dintr-o sursă de lumină (uzual un LED) ce luminează printr-un disc (care prezinte un număr binedefinit de fante) un detector de lumină, care cu ajutorul unei circuistici generează un semnal digital (sau analogic) ce este trimis la sistemul de comandă a acţionării.

Figura 43 - Detaliu constructiv a unui encoder

3.2.1 Tipuri de encodere

Dacă se foloseşte un encoder ca element de reacţie, de feedback, există o multitudine de soluţii la care se poate apela. În cele ce urmează sunt prezentate pe scurt variantele utilizate în momentul de faţă în soluţii industriale.

3.2.1.1 Encoder incremental (TTL)

Foarte multe modele de la diferiţi producători sunt în momentul actual de acest tip. Prezintă o precizie foarte bună, cu până la 5000 de impulsuri pe rotaţie. Este foarte facilă adăugarea de semnale speciale cum ar fi o referinţă de zero a motorului.

Figura 44 - Semnale de la un encoder incremental

Page 37: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

3. Sistemul de acţionare Pagina 37 din 151

Figura 45 - Disc codor a unui encoder incremental

3.2.1.2 Encoder incremental cu semnale de comutaţie (TTL)

Foarte folosit în prezent mai ales în Statele Unite şi în Japonia. Din păcate nu beneficiază de un standard industrial, lucru care nu sporeşte răspândirea acestei metode. Configuraţiile de montare, tipurile de semnal şi tensiunile de alimentare diferă foarte mult. Precizia este de până la 8000 de impulsuri per rotaţie. Acest tip de encoder este folosit la motoare cu 2, 4, 6 sau 8 poli, şi din acest motiv alimentarea fazelor trebuie făcută intermitent pentru a se obţine o rotaţie. Semnalele de comutaţie sunt folosite pentru a schimba alimentarea fazelor. Cum reiese din figura următoare acestea determină momentul când o fază trebuie alimentată şi când alimentarea trebuie întreruptă.

Figura 46 - Semnale ale unui encoder incemental cu semnale de comutaţie pentru un motor trifazic

Page 38: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

3. Sistemul de acţionare Pagina 38 din 151

Figura 47 - Disc codor a unui encoder incremental cu semnale de comutaţie

3.2.1.3 Encoder incremental cu comutaţie (semnal sinusoidal)

Folosit mai ales în Europa, acest tip de encoder prezintă o ieşire sinusoidală cu o amplitudine (vârf la vârf) de 1 volt.

3.2.1.4 Encoder absolut cu o singură tură (TTL / paralel)

Mai puţin folosit la aplicaţii de acţionare, de obicei sunt prezintă o rezoluţie de 10 sau 12 biţi. Există şi în variante cu rezoluţie mai bună, dar de obicei sunt folosite doar în aplicaţii foarte specializate.

Figura 48 - Disc codor a unui encoder absolut (cod Grey)

Page 39: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

3. Sistemul de acţionare Pagina 39 din 151

Figura 49 - Disc codor a unui encoder absolut (cod binar)

3.2.1.5 Encoder absolut multitură (incremental sinusoidal, serial absolut)

Acest tip de encoder este compus de obicei dintr-un encoder cu o singură tură cu 12 sau 13 biţi de precizie la care s-a adăugat un numărător de rotaţii pe 12 biţi, astfel ajungându-se la 24 sau 25 de biţi precizie. Cu toate că există de ceva vreme, nu au fost foarte folosiţi datorită costului relativ ridicat. În ultima vreme însă, datorită cercetărilor avansate, preţul a început să scadă şi folosirea lor în aplicaţii practice a început să ia amploare.

Encoderele de acest tip prezintă de obicei ieşiri incrementale de tip A, B şi impuls de referinţă, o interfaţă serială pentru transferul poziţiei absolute (de obicei RS485 sau RS422) şi ieşiri de comutaţie. Din LSB-ul poziţiei absolute se generează un semnal incremental cu 2048 sau 4096 impulsuri pe rotaţie pentru folosirea în sisteme rapide de reglaj de tip servo.

Menţionăm că în aplicaţii mai pretenţioase în locul encoderelor se folosesc rezolvere, dar care, datorită faptului că depăşesc cadrul acestei lucrări, nu vor fi prezentaţi.

3.3 Sistemul de comandă a punţii

Pentru comanda punţii s-a ales o soluţie dedicată bazată pe un sistem cu microcontroler. Sistemul este compus dintr-un microcontroler Phillips P89C51RC+, un generator de semnal de reset de tipul TL7705, trei canale de numărătoare pe 24 de biţi descrise amănunţit în cele ce urmează, un convertor analog-numeric de tipul ADS7822, trei ieşiri directe separate galvanic, opt ieşiri cu încărcare într-un registrul paralel de tipul 74HC574 separate galvanic, două intrări directe separate galvanic, opt intrări cu încărcare într-un registru paralel separate galvanic, un conector şi circuistica necesară conectării unui afişaj cu cristale lichide şi un circuit de tipul MAX232 pentru conversia semnalului serial din nivele de tensiune TTL în nivele EIA.

Sistemul a fost conceput pentru a putea fi utilizat la comanda unui centru de prelucrare cu comandă numerică, cu trei grade de libertate. Din acest motiv sistemul prezintă trei canale de numărare cu o precizie pe 24 de biţi. Pe fiecare canal sunt preluate, prin intermediul unui optocuplor de viteză mare, semnalele de la un encoder de tip incremental, acestea sunt prelucrate pentru a se diferenţia direcţia de rotaţie şi apoi sunt conectate la numărătoare de tipul 74HC193. Acestea sunt numărătoare pe 4 biţi cascadate câte 6 pe fiecare canal, pentru a se asigura precizia de 24 de biţi.

Page 40: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

3. Sistemul de acţionare Pagina 40 din 151

Pe fiecare dintre canale informaţia din numărătoare trebuie încărcată în câte trei registre pe 8 biţi, conectate la magistala de date. Aceste registre sunt accesate prin intermediul a două circuite decodificatoare 74HC138 conectate la magistrala de adrese.

Circuitul ADS7822, un convertor analog numeric cu o precizie de 12 biţi, descris în subcapitolul 3.3.4 la pagina 44, este folosit la citirea tensiunii bateriei şi astfel la determinarea gradului de încărcare a acesteia.

Pe acest sistem rulează un program, codul sursă se găseşte în Anexa 7 – Codul sursă al sistemului de comandă a punţii „H“ la pagina 113, care se comportă conform ordinogramei următoare.

La pornire se vor configura porturile de intrare / ieşire, timerele, interfaţa serială cu calculatorul gazdă, interfaţa serială cu convertorul analog numeric.

Timer 0 odată pornit va tot genera semnale de tip PWM cu condiţia ca sistemul de acţionare să fie validat, pentru fiecare dintre gradele de libertate. Timer 1 va compara viteza momentană cu cea prescrisă şi dacă constată o diferenţă între cele două va opera asupra factorului de umplere pentru a compensa această diferenţă.

După ce configurările au fost efectuate sistemul aşteaptă comenzi de la calculatorul gazdă.

#define GET_BUFF_LEN 0x01 #define START 0x02 #define STOP 0x03 #define OK 0x04 #define DOWNLOAD 0x05 #define BUFFER_OVERRUN 0x06 #define GET_COUNTER 0x07 #define GET_X_POS 0x08 #define GET_Y_POS 0x09 #define RESET 0x0A #define SET_PWM 0x0B #define SET_X_SPEED 0x0C #define SET_Y_SPEED 0x0D #define START_X 0x0E #define START_Y 0x0F #define STOP_X 0x10 #define STOP_Y 0x11

Secvenţă cod 1 - Comenzi acceptate de la calculatorul gazdă

Page 41: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

3. Sistemul de acţionare Pagina 41 din 151

Figura 50 - Ordinograma sistemului de comandă

3.3.1 Microcontrolerul P89C51RC+ Caracteristici P89C51RC+:

• compatibil cu familia MCS-51; • 32 KB de memorie Flash reprogramabilă; anduranţă 1000 de cicluri scriere / ştergere; • programabil ISP (“In System Programming”); • operare total statică: 0 Hz la 33 MHz; • 512 x 8 biţi memorie RAM internă; • 4 porturi de intrare / ieşire pe 8 biţi; • 3 registre timer / counter pe 16 biţi;

Iniţializare sistem

Configurare pini, timere, port serial

Comandă validă?

nu

START

da

Comandă acţionare?

da

Relativ la comanda unei anumite axe, se operează modificarea de viteză aferentă acesteia. Dacă este cazul, se poate opri acţionarea sau inversa sensul de rotaţie.

nu

Se furnizează informaţiile necesare, care pot fi: distanţa parcursă, parametrii de funcţionare, încărcarea bateriei, etc.

Lansare rutine timer descrise în 3.4.2

Page 42: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

3. Sistemul de acţionare Pagina 42 din 151

• 7 surse de întrerupere; • canal serial UART programabil; • timer watchdog; • comparator analogic on-chip; • moduri de operare: cu consum redus şi suspend.

P89C51 RC+ este un microcontroler pe 8 biţi, în tehnologie CMOS avansată, cu 32 KB

de memorie Flash programabilă şi cu memorie RAM internă de 512 kB expandabilă extern până la 64 kB.

Dispozitivul este construit utilizând tehnologia phillips de memorie nevolatilă de mare densitate şi este compatibil cu setul de instrucţiuni al standardului industrial MCS-51.

Un boot loader (program de încărcare) programat în ROM permite programarea în sistem a memoriei Flash. Utilizatorul poate şterge / reprograma memoria Flash cu ajutorul rutinelor programate în ROM.

Figura 51 - Configuraţia pinilor – P89C51RC+

3.3.2 Circuitul numărător 74HC193

Circuitul 74HC193 este un dispozitiv de numărare realizat în tehnică high-speed CMOS. Este circuit de numărare sincron, binar pe 4 biţi cu posibilitate de numărare crescătoare şi descrescătoare. Prin intermediul semnalelor de clock diferite pentru cele două moduri de numărare operarea acestui circuit este simplificată.

În tabelul următor sunt descrise câteva din caracteristicile principale.

Simbol Parametru Valoare Unitate de măsură tPHL Timp propagare 20 Ns fmax Frecvenţă maximă de

operare 45 MHz

CI Capacitate de intrare 3.5 pF

Page 43: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

3. Sistemul de acţionare Pagina 43 din 151

Figura 52 - Configuraţia pinilor – 74HC193

Figura 53 - Diagrama logică – 74HC193

3.3.3 Circuitul supervizor de tensiune TL7705

Familia TL77xxA de circuite integrate de supervizat tensiuni sunt concepute pentru folosirea în aplicaţii cu microcontrolere şi/sau microprocesoare. Circuitul asigură un semnal de reset de o durată bine stabilită, în momentul în care tensiunea de alimentare trece de 3.6V. Chiar şi în timpul funcţionării aplicaţiei în cazul în care apare o scădere de tensiune momentană circuitul TL7705 va genera un nou semnal de reset pentru a asigura buna funcţionare a aplicaţiei.

Page 44: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

3. Sistemul de acţionare Pagina 44 din 151

Figura 54 - Configuraţia pinilor – TL7705

Durata semnalului de reset se setează cu ajutorul unei capacităţi externe în funcţie de aplicaţia specifică după formula:

td = 1.3 x 104 x CT, unde CT este valoarea în farazi a capacităţii externe.

Figura 55 - Diagrama funcţională – TL7705

3.3.4 Convertorul analog numeric ADS7822

Circuitul integrat ADS7822 este un convertor analog numeric cu o rată de eşantionare ridicată, de 75 kHz. Dacă nu este folosit la aşa o frecvenţă de eşantionare ridicată, şi în cadrul aplicaţiei curente sunt suficiente rate de eşantionare de ordinul Hertzilor şi chiar mai mici, circuitul se va afla majoritatea timpului într-un mod de consum redus. La o frecvenţă de 7.5kHz puterea disipată este de doar 60µW, astfel că circuitul este ideal pentru aplicaţii alimentate cu baterii.

Figura 56 - Configuraţia pinilor – ADS7822

Comunicaţia cu microcontrolerul se face printr-o interfaţă serială sincronă cu 3

semnale. Semnalul DCLOCK este folosit pentru sincronizare, DOUT este semnalul pe care

Page 45: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

3. Sistemul de acţionare Pagina 45 din 151

circuitul furnizează rezultatul conversiei, iar CS/SHDN este linia prin care microcontrolerul cere o conversie nouă.

Figura 57 - Diagrame de timp – comunicaţie serială cu ADS7822

3.4 Reglajul de viteză

Pentru a regla viteza motoarelor este nevoie de două componente descrise în cele ce urmează. Prima componentă este cea decizională, cea care realizează autoreglajul efectiv. Aceasta este o rutină software descrisă în 3.4.2. A doua componentă este cea executantă. Un semnal rectangular de tip PWM generat de către microcontroler acţionează asupra punţii şi implicit asupra vitezei de rotaţie a motorului.

3.4.1 Implementarea a două semnale PWM

În cele ce urmează este descris semnalul de tip PWM, împreună cu avantajele acestei soluţii.

Pentru a controla un motor de curent continuu este nevoie de o sursă de alimentare reglabilă. Totuşi, dacă se ia un motor de 12 V şi se alimentează, se observă că motorul accelerează, până ajunge la viteza nominală: motoarele de curent continuu nu răspund instantaneu. Dacă se opreşte alimentarea motorul va începe să decelereze. Dacă repetăm aceste două operaţii destul de des, motorul se va învârti cu o anume viteză, viteză ce poate fi variată între 0 şi viteza maximă.

Exact aceste operaţiuni le face şi un sistem de acţionare cu PWM. PWM este alternativa la comanda analogică, prin tensiune. PWM, prescurtarea de la Pulse Width Modulation, reprezintă un semnal rectangular cu factor de umplere variabil.

Tensiunea analogică rezultată este valoarea medie a tensiunii la ieşire. Astfel dacă creştem factorul de umplere al semnalului rectangular, creştem valoarea medie a tensiunii şi astfel creştem viteza de rotaţie a motorului de curent continuu.

Page 46: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

3. Sistemul de acţionare Pagina 46 din 151

Figura 58 - Forma de undă a mărimii controlate cu factor de umplere de A. 95% B. 50% C. 5%

Totuşi nu este suficientă pornirea şi oprirea curentului către motor, acest lucru trebuie

făcut cu o anumită frecvenţă. Dacă frecvenţa este prea mică, motorul va funcţiona într-un regim cu întreruperi, lucru ce va duce la încălzirea lui. El va genera căldură pe perioada activă, dar şi o căldură datorită frânării pe durata în care semnalul rectangular prezintă valoarea logică „0”. Datorită acestui lucru uzual frecvenţa de lucru este undeva între 1 şi 20 de kHz. Teoretic o valoare cât mai mare este avantajoasă, deoarece scade stresul motorului (constanta de timp a motorului devine mult mai mare decât perioada, astfel încât motorul „vede” o tensiune analogică la borne), scade consumul şi dispar efectele sonore, deoarece ne îndepărtăm de domeniul auzului uman. Din păcate frecvenţa maximă este limitată de elementele de comutaţie, tranzistoare MOS-FET în cazul nostru, astfel încât nu este indicat să se treaca de 15 kHz. Peste această frecvenţă tranzistoarele nu au destul timp să se satureze complet, şi lucrând într-un regim de conducţie nesaturat, se vor încălzi prea tare. Din acelaşi motiv, va creşte şi consumul, dacă nu sunt saturate rezistenţa drenă sursă este mult mai mare.

Figura 59 - Exemplu de semnale PWM

Page 47: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

3. Sistemul de acţionare Pagina 47 din 151

Pentru a realiza practic semnalul PWM pe sistemul cu microcontroler P89C51RC+, s-a folosit TIMER0. Acest timer este configurat să genereze o întrerupere de câte ori conţinutul numărătorului ajunge la valoarea maximă şi se generează o depăşire. În cadrul rutinei apelate la apariţia întreruperii conţinutul numărătorului trebuie reîncărcat. Reîncărcarea se face dintr-o variabilă a cărei valoare este calculată în cadrul rutinei de reglare a vitezei, rutină descrisă în capitolul următor.

Pentru a implementa fără dificultăţi prea mari două semnale de tip PWM, a fost nevoie de nişte limitări. S-a stabilit ca cele două semnale să aibă aceeiaşi perioadă, doar factorul de umplere să fie diferit în funcţie de necesitate.

Din acest punct de vedere în cadrul unei perioade s-au considerat 4 evenimente ce pot apare. Primul eveniment este începutul perioadei, caz în care ambele semnale trebuie să prezinte nivelul logic „0”. Următorul eveniment apare în momentul în care primul semnal PWM devine activ. Din acest punct de vedere diferenţiem trei cazuri.

#define PWM_CASE_NONE 0 #define PWM_CASE_X_FIRST 1 #define PWM_CASE_Y_FIRST 2 #define PWM_CASE_EQUAL 3

Secvenţă cod 2 - Definiţii cazuri PWM

Cazul PWM_CASE_X_FIRST apare dacă semnalul PWM aferent canalului X va fi

cel care trece primul din inactiv în activ (adică prezintă un factor de umplere mai mare). Similar cazul PWM_CASE_Y_FIRST se referă la cazul în care semnalul aferent canalului Y prezintă un factor de umplere mai mare, cum reiese şi din figură. Ultimul caz PWM_CASE_EQUAL defineşte cazul în care cele două semnale PWM sunt identice, prezintă acelaşi factor de umplere.

În fragmentul de cod ce urmează se poate observa împărţirea perioadei în intervalele de timp exemplificate mai sus.

void Timer0Int(void) interrupt 1 using 1 switch (period) case 1 : TL0=TL0_reload_1; TH0=TH0_reload_1; if (PWM_X_CHANNEL_ENABLED) X_CHANNEL_OUTPUT=OFF; if (PWM_Y_CHANNEL_ENABLED) Y_CHANNEL_OUTPUT=OFF;

if (PWM_CASE==PWM_CASE_EQUAL) period++; //sarim //peste 2 la urmatoarea executie

break; case 2 : TL0=TL0_reload_2; TH0=TH0_reload_2; switch (PWM_CASE) case PWM_CASE_X_FIRST: if (PWM_X_CHANNEL_ENABLED) X_CHANNEL_OUTPUT=ON; if (PWM_Y_CHANNEL_ENABLED) Y_CHANNEL_OUTPUT=OFF; break; case PWM_CASE_Y_FIRST:

Page 48: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

3. Sistemul de acţionare Pagina 48 din 151

if (PWM_X_CHANNEL_ENABLED) X_CHANNEL_OUTPUT=OFF; if (PWM_Y_CHANNEL_ENABLED) Y_CHANNEL_OUTPUT=ON; break; break; case 3 : TL0=TL0_reload_3; TH0=TH0_reload_3; if (PWM_X_CHANNEL_ENABLED) X_CHANNEL_OUTPUT=ON; if (PWM_Y_CHANNEL_ENABLED) Y_CHANNEL_OUTPUT=ON; period=0; break; period++;

Secvenţă cod 3 - Rutină timer 0 PWM

Se observă faptul că pentru fiecare dintre subintervalele perioadei există nişte variabile

din care se reîncarcă numărătorul aferent timerului 0. Aceste variabile TL0_reload_1, TL0_reload_2, TL0_reload_3 respectiv TH0_reload_1, TH0_reload_2, TH0_reload_3 sunt calculate în cadrul rutinei de reglaj automat al vitezei.

3.4.2 Bucla de reglaj automat al vitezei

Pentru a putea menţine şi regla viteza impusă de către utilizator este necesară informaţia despre viteza actuală. Odată ce mişcarea de rotaţie a fost transformată conform capitolului 3.2 într-un semnal rectangular de frecvenţă variabilă, frecvenţă direct proporţională cu viteza, este destul de simplu de aflat viteza de deplasare pe fiecare din axele robotului.

Calcularea vitezei momentane a axei

Compararea vitezei cu cea

prescrisă

mai mică

Se comandă o creştere a factorului de umplere al semnalului PWM direct proporţională cu diferenţa între viteza prescrisă şi cea momentană

mai mare

Se comandă o scădere a factorului de umplere al semnalului PWM direct proporţională cu diferenţa între viteza prescrisă şi cea momentană

egală

se reia procedura

Page 49: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

3. Sistemul de acţionare Pagina 49 din 151

Figura 60 - Ordinograma reglajului automat al vitezei

Semnalul rectangular este folosit ca intrare într-un circuit de numărătoare pe 24 de biţi. Cu ajutorul acestor numărătoare se înregistrează deplasarea efectuată. Derivata acesteia în raport cu timpul este viteza.

Pentru a simplifica calculele derivata s-a realizat cu ajutorul metodei diferenţelor finite. În acest scop s-a folosit al doilea timer prezent în microcontrolerul sistemului de acţionare a punţii. La momentul întreruperii generate de timer 1 se apelează rutina de reglaj automat a vitezei. Prima acţiune care este realizată este determinarea vitezei actuale pentru ambele axe ale robotului, precum reiese şi din secvenţa următoare de cod.

// get x speed P10=0; //activate LdA P10=1; //deactivate LdA //se încarcă din numărătoare în reg. pe 8 biţi tempA1=*buf4; tempA2=*buf5; x_pos=tempA2*256+tempA1; //se încarcă valoarea din numărătoare if (x_pos > old_x_pos) x_speed_get=x_pos-old_x_pos; else x_speed_get=old_x_pos-x_pos; old_x_pos=x_pos; //se calculează viteza

Secvenţă cod 4 - Calcularea vitezei X

După ce a fost calculată viteza momentană, aceasta este comparată cu viteza prescrisă.

Dacă se observă o abatere, pozitivă sau negativă, se intervine asupra semnalului PWM de comandă a punţii ce acţionează motorul. Intervenţia constă în modificarea factorului de umplere. Acest lucru nu se realizează static, ci dinamic, în sensul că la o diferenţă mare între viteza prescrisă şi cea momentană corecţia aplicată este mai mare, astfel modificarea factorului de umplere al semnalului PWM este direct proporţională cu diferenţa între cele două viteze. Acest lucru reiese şi din secvenţa de cod ce urmează.

if (x_speed_get > x_speed_set) // trebuie scăzută viteza if (PWM_X_OFF > SPEED_PAS) PWM_X_ON+=SPEED_PAS; PWM_X_OFF-=SPEED_PAS; switch ((x_speed_set-x_speed_get)/10) default: if (PWM_X_OFF > SPEED_PAS) PWM_X_ON+=SPEED_PAS; PWM_X_OFF-=SPEED_PAS; case 2: if (PWM_X_OFF > SPEED_PAS) PWM_X_ON+=SPEED_PAS; PWM_X_OFF-=SPEED_PAS; case 1: if (PWM_X_OFF > SPEED_PAS) PWM_X_ON+=SPEED_PAS;

Page 50: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

3. Sistemul de acţionare Pagina 50 din 151

PWM_X_OFF-=SPEED_PAS; case 0: break;

Secvenţă cod 5 - Reglaj dinamic al vitezei

Lucrurile stau la fel şi în cazul invers, în care viteza momentană este mai mică decât

cea prescrisă. Aceleaşi corecţii se vor face şi pentru cealaltă parte de acţionare a robotului. După ce au fost calculate perioadele de timp aferente celor două semnale PWM,

trebuie compuse cele două semnale şi trebuie determinate cazul de PWM precum şi valoarea înscrisă în variabilele TL0_reload_1, TL0_reload_2, TL0_reload_3 respectiv TH0_reload_1, TH0_reload_2, TH0_reload_3 (vezi subcapitolul anterior).

if (PWM_X_ON < PWM_Y_ON)

PWM_CASE = PWM_CASE_X_FIRST; TL0_reload_1 = (uchar) ((MAX_INT-PWM_X_ON) & 0xFF); TH0_reload_1 = (uchar) ((MAX_INT-PWM_X_ON) >> 8);

TL0_reload_2 = (uchar) ((MAX_INT-(PWM_Y_ON-PWM_X_ON)) & 0xFF); TH0_reload_2 = (uchar) ((MAX_INT-(PWM_Y_ON-PWM_X_ON)) >> 8);

TL0_reload_3 = (uchar) ((MAX_INT-PWM_Y_OFF) & 0xFF); TH0_reload_3 = (uchar) ((MAX_INT-PWM_Y_OFF) >> 8);

else if (PWM_Y_ON < PWM_X_ON)

PWM_CASE = PWM_CASE_Y_FIRST; TL0_reload_1 = (uchar) ((MAX_INT-PWM_Y_ON) & 0xFF); TH0_reload_1 = (uchar) ((MAX_INT-PWM_Y_ON) >> 8);

TL0_reload_2 = (uchar) ((MAX_INT-(PWM_X_ON-PWM_Y_ON)) & 0xFF); TH0_reload_2 = (uchar) ((MAX_INT-(PWM_X_ON-PWM_Y_ON)) >> 8);

TL0_reload_3 = (uchar) ((MAX_INT-PWM_X_OFF) & 0xFF); TH0_reload_3 = (uchar) ((MAX_INT-PWM_X_OFF) >> 8);

else //PWM_X_ON = PWM_Y_ON

PWM_CASE = PWM_CASE_EQUAL; TL0_reload_1 = (uchar) ((MAX_INT-PWM_X_ON) & 0xFF); TH0_reload_1 = (uchar) ((MAX_INT-PWM_X_ON) >> 8);

TL0_reload_3 = (uchar) ((MAX_INT-PWM_X_OFF) & 0xFF); TH0_reload_3 = (uchar) ((MAX_INT-PWM_X_OFF) >> 8);

Secvenţă cod 6 - Calcul variabile PWM

Rutina de reglaj automat al vitezei este implementată ca rutină de întrerupere şi este

apelată de fiecare dată când timer 1 generează depăşire. În practică s-au obţinut rezultate foarte bune cu perioade de reglaj de aproximativ 80-100 ms. Menţionăm că, cu cât se scade această perioadă reglajul este mai rapid, dar la un moment dat se va observa un fenomen de oscilare. Oscilarea poate fi redusă cu ajutorul unor filtre aplicate asupra mărimii vitezei momentane. S-au încercat în practică diferite filtre median care însă nu au adus îmbunătăţiri ale performanţei, care să justifice overhead-ul computaţional.

Page 51: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

4. Subsistemul de alimentare Pagina 51 din 151

4 Subsistemul de alimentare

4.1 Bateria plumb-acid

Acumulatorul, sau celula secundarã, ce poate fi reîncărcată inversând reacţia chimică, a fost inventată în 1859 de către fizicianul francez Gaston Plante. Celula lui Plante era o baterie plumb-acid, tip folosit pe scară largă astăzi. Bateria plumb-acid, care este alcătuită din trei sau şase celule conectate în serie, e folosită la automobile, avioane şi alte vehicule. Marele avantaj al său este că poate furniza un curent puternic pentru a porni un motor; totuşi, capacitatea sa [Ah] este limitată. Electrolitul este o soluţie diluatã de acid sulfuric, electrodul negativ fiind alcătuit din plumb şi cel pozitiv din dioxid de plumb. În timpul utilizării, electrodul negativ de plumb se separă în electroni şi ioni pozitivi de plumb. Electronii trec prin circuitul electric extern iar ionii pozitivi de plumb se combină cu ionii de sulfat din electrolit pentru a forma sulfatul de plumb. Când electronii reintră în celulă la electrodul pozitiv, are loc o altă reacţie chimică: dioxidul de plumb se combină cu ionii de hidrogen din electrolit pentru a forma apă, eliberând ionii de plumb în electrolit pentru a forma, din nou, sulfatul de plumb.

Un acumulator plumb-acid se consumă atunci când acidul sulfuric e transformat complet în apă iar electrozii - în sulfat de plumb. Când bateria se reîncarcă, reacţiile chimice descrise anterior se desfăşoară invers, până când chimicalele au ajuns la starea lor originalã. O baterie plumb-acid are o viaţă de aproximativ patru ani. Produce aproximativ 2V pe celulã. Recent au fost construite - pentru aplicaţii speciale - baterii cu plumb cu o viaţă de la 50 până la 70 de ani.

O altă baterie secundară des folosită este celula alcalină, sau bateria nichel-fier, construită de inventatorul american Thomas Edison în anii 1900. Principiul funcţionării este acelaşi cu cel al celulei plumb-acid exceptând faptul că electrodul negativ este alcătuit din fier, cel pozitiv din oxid de nichel, iar electrolitul dintr-o soluţie de hidroxid de potasiu. Celula nichel-fier are dezavantajul că elimină hidrogenul gazos la reîncărcare. Bateria Edison are o viaţă de aproximativ 10 ani şi produce în jur de 1.15 V.

O altă celulă alcalină, similară cu bateria lui Edison, este celula nichel-cadmiu, în care electrolitul de fier este înlocuit printr-unul de cadmiu. Are, de asemenea, aproximativ 1.15 V, iar durata sa de folosinţă atinge aproximativ 25 de ani.

Un număr mare de noi tipuri de baterii au fost produse pentru folosinţă în vehicule electrice. Versiuni îmbunătăţite ale acumulatorilor au fost produse pentru maşini electrice, dar încă suferă de dezavantajul puterii scăzute, al preţului mare, al mărimii, sau al problemelor cu mediul înconjurător.

4.2 Energia solară

4.2.1 Avantajele energiei solare

În climatul actual de creştere a cererii de energie şi a problemelor de protecţie a mediului, trebuie investigate alternative la utilizarea combustibililor fosili. Una din aceste alternative este energia solară.

Page 52: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

4. Subsistemul de alimentare Pagina 52 din 151

Figura 61 - Aplicare a tehnologiei solare

Energia solară este destul de simplu de utilizat, direct de la soare şi colectată în mod normal pe Pământ. Soarele creează energia printr-un proces termonuclear ce converteşte 650.000.000 tone de hidrogen în heliu în fiecare secundă. Procesul generează căldură şi radiaţii electromagnetice. Căldura rămâne în soare, fiind vitală în menţinerea reacţiilor termonucleare. Radiaţia electromagnetică (inclusiv lumina vizibilă, infra-roşie şi ultra-violetă) este emanată în toate direcţiile în spaţiu.

Doar o mică fracţiune din radiaţia totală produsă atinge Pământul. Radiaţia ce atinge

suprafaţa terestră este indirect sursa a aproape fiecărei forme de energie utilizată în prezent. Excepţiile sunt energia geotermală, fisiunea şi fuziunea nucleară. Chiar şi combustibilii fosili îşi datorează originea soarelui; cu mult timp în urmă, aceştia erau plante şi animale vii care depindeau de energia soarelui.

Figura 62 - Panou solar

Datorită naturii energiei solare, sunt necesare 2 componente pentru a obţine un generator solar funcţional. Aceste 2 componente sunt colectorul şi o unitate de stocare. Colectorul colectează radiaţia incidentă şi converteşte o fracţiune din ea în alte forme de energie (electricitate sau doar căldură). Unitatea de stocare este necesară datorită naturii inconstante a energiei solare, în anumite momente fiind posibilă receptarea doar a unei mici cantităţi de radiaţii. În timpul nopţii sau în zile foarte înnorate de exemplu, cantitatea de energie produsă de colector va fi infimă. Unitatea de stocare poate păstra energia suplimentară produsă în

Page 53: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

4. Subsistemul de alimentare Pagina 53 din 151

timpul perioadelor de activitate maximă şi o poate elibera în perioade cu activitate scăzută a panoului solar. În practică se mai adaugă şi o baterie de rezervă, pentru situaţiile în care cantitatea de energie necesară este mai mare decât cantitatea de energie produsă şi cea din unitatea de stocare. Metodele de colectare şi stocare a energiei solare variază în funcţie de aplicaţiile în care este utilizată. În general, există 3 tipuri de colectori şi multe forme pentru unităţile de stocare.

Cele trei tipuri de colectori sunt plani, cu focalizare şi pasivi. Colectorii plani sunt cei mai răspândiţi. Sunt de fapt matrici de panouri solare pe o

suprafaţă dreaptă. Pot avea aproape orice dimensiune iar energia produsă depinde direct de variabile precum dimensiune, orientare şi grad de curăţenie. Aceste variabile afectează cantitatea de radiaţii incidente pe colector. De multe ori, aceste panouri colectoare dispun de dispozitive automate de orientare spre soare. Energia suplimentară câştigată din repoziţionare este cu mult mai mare decât energia necesară acţionării motoarelor pentru corectarea orientării panourilor.

Figura 63 - Energia solară

Colectoarele cu focalizare sunt în esenţă colectoare plane cu dispozitive optice aranjate pentru a maximiza cantitatea de radiaţie incidentă pe colector. În prezent sunt utilizate la scară redusă în câteva locaţii. Cuptoarele solare sunt un exemplu pentru acest tip de colector. Deşi pot produce mai mari cantităţi de energie într-un singur loc, ele pierd o parte din energie pe care panourile plane nu o pierd. Radiaţia reflectată de sol este de obicei captată de colectoarele plane dar ignorată de cele cu focalizare (în regiunile înzăpezite, această energie reflectată poate fi prezentă în cantitate foarte mare). O altă problemă a colectoarelor cu focalizare este temperatura. Fragilele componente de siliciu ce absorb radiaţia incidentă îşi pierd eficienţa la temperaturi înalte, putând fi iremediabil deteriorate dacă se supraîncălzesc. Colectoarele cu focalizare, prin însăşi natura lor, pot crea temperaturi foarte înalte şi necesită protecţii pentru componentele de siliciu.

Colectoarele pasive sunt complet diferite de celelalte 2 tipuri de colectoare. Colectoarele pasive absorb radiaţia şi o convertesc în căldură în mod natural, fără a fi special concepute în acest scop. Toate obiectele au proprietatea, până la un anumit nivel, dar doar anumite obiecte (ex. pereţi) vor putea produce suficientă căldură pentru ca procesul să fie economic. De multe ori, capacitatea lor naturală de a converti radiaţia în căldură, este cumva amplificată (prin vopsire cu culoare neagră de ex.) şi se adaugă un sistem pentru transferul căldurii spre o altă locaţie.

Page 54: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

4. Subsistemul de alimentare Pagina 54 din 151

Figura 64 - Procese în cadrul materialului

Oamenii utilizează energia în diverse scopuri, însă doar câteva sunt mari consumatoare: transport, încălzire, răcire şi generarea de electricitate. Energia solară poate fi aplicată în toate aceste domenii, cu diferite nivele de succes.

Celulele fotovoltaice convertesc radiaţia în electricitate, dar operează cu o eficienţă de

doar 15%. Eficienţa teoretică maximă a unei celule fotovoltaice este de 32,3%, dar la această eficienţă, electricitate solară este foarte economică. Majoritatea celorlalte forme de generare a electricităţii au o eficienţă mai scăzută. Din păcate, realitatea se află în urma teoriei, aşa că 15% nu este considerată o eficienţă economică de majoritatea companiilor de electricitate, chiar dacă este utilizată la jucării şi calculatoare de buzunar. De curând, în laboratoare de cercetare s-a creat o celulă fotovoltaică cu o eficienţă de 28,2%. Este în prezent în curs de testare. Dacă îşi va menţine eficienţa în medii exterioare necontrolate de om şi dacă este durabilă, companiile de electricitate vor putea opta pentru această formă de energie.

4.2.2 Energia de dislocare

Când fotoni proveniţi din lumină se lovesc de celula solară, doar fotonii cu un anumit nivel de energie pot elibera electroni din legăturile atomice şi genera astfel un curent electric. Acest nivel de energie, cunoscut sub numele de energie de dislocare, se defineşte ca fiind cantitatea de energie necesară eliberării electronului din legătura covalentă şi introducerea sa într-un circuit electric.

Energia de care dispun fotonii se numeşte „energia fotonului”. Această energie trebuie să fie cel puţin la fel de mare ca şi energia de dislocare, pentru ca un foton să poată elibera un electron. Însă fotoni cu o energie mai mare vor emana restul de energie sub formă de căldură în momentul eliberării electronilor. Din acest motiv este important ca o celulă fotovoltaică să fie „reglată” (prin modificări minore în structura moleculară a semiconductorului) pentru a maximiza energia fotonilor. În final, cheia spre o celulă fotovoltaică eficientă este convertirea unei cantităţi cât mai mari de energie solară în energie electrică.

Semiconductori fotovoltaici eficienţi au valori ale energiei de dislocare cuprinse în

intervalul 1.0 – 1.6 electron-Volţi (eV). (Un electron-Volt este echivalent cu energia acumulată de un electron în momentul în care trece printr-un potenţial de 1V în vid). Aceste valori sunt utilizabile pentru că eliberează electroni fără a genera căldură suplimentară. De ex. energia de dislocare a siliconului cristalizat este 1.1 eV.

Page 55: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

4. Subsistemul de alimentare Pagina 55 din 151

Figura 65 - Energia absorbată de diferite materiale

Energia fotonilor, măsurată tot în eV, variază conform diferitelor lungimi de undă din spectrul luminos. Întregul spectru, de la infraroşu la ultraviolet, acoperă un domeniu de la aprox. 0.5 eV până la 2.9 eV. De ex., lumina roşie are o energie de aprox. 1.7 eV, lumina albastră aprox. 2,7 eV. Aprox. 55% din energia luminii nu poate fi utilizată de majoritatea celulelor fotovoltaice pentru că această energie este fie mai mică decât energia de dislocare, fie generează prea multă căldură.

Diferite materiale fotovoltaice au diferite energii de dislocare caracteristice. Fotonii cu o energie mai mare decât cea de dislocare pot fi absorbiţi pentru a crea electroni liberi. Fotoni cu energie mai mică decât cea de dislocare fie trec prin material, fie generează căldură.

4.2.3 Conversia luminii în electricitate

4.2.3.1 De la celulă la matrice de celule

Celula fotovoltaică este unitatea de bază într-un sistem fotovoltaic. O celulă individuală produce în general între 1 şi 2 W, cu mult prea puţină putere pentru majoritatea aplicaţiilor. Dar putem mări puterea, conectând mai multe celule împreună, formând entităţi mai mari numite module. Modulele, la rândul lor, pot fi conectate pentru a forma unităţi mai mari numite matrici, ce pot fi interconectate pentru a genera mai multă putere, ş.a.m.d. În acest fel, putem construi un sistem fotovoltaic pentru a genera orice cantitate de energie dorită, indiferent cât de mic sau mare.

Figura 66 - Celulă, modul, matrice

Module sau matrici individuale nu constituie un sistem fotovoltaic. Mai trebuie să dispunem şi de structuri pe care să le montăm şi îndrepta spre soare precum şi componente ce preiau curentul continuu (DC) produs de module şi matrici pentru a-l utiliza în aplicaţii specifice.

Page 56: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

4. Subsistemul de alimentare Pagina 56 din 151

4.2.3.2 De la celulă la matrice de celule : o imagine mai detaliată

Figura 67 - Celula solară

Celula solară este blocul de bază al unui sistem fotovoltaic. Celule individuale pot varia ca şi dimensiuni de la cca. 1 cm la 10 cm în diametru. O celulă produce însă doar 1-2 W, putere insuficientă pentru majoritatea aplicaţiilor. Un modul constă în general din mai multe celule solare, deşi materiale foarte subţiri precum silicon amorf şi aliaj de cadmiu cu telur pot fi concepute direct în formă modulară, evitând stadiul de celule. Aceste două module siliconice produc aprox. 50W fiecare, generând suficientă putere pentru iluminarea stradală utilizând o baterie de 12V. Acest tip de module pot fi conectate şi în formă matricială. Matricile sunt marile producătoare de putere, fiind compuse din multiple module. Ele pot produce până la câţiva megawaţi de putere.

Page 57: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

4. Subsistemul de alimentare Pagina 57 din 151

4.2.3.3 Lumina şi soarele

Figura 68 - Pământul

Energia solară este vitală pentru viaţa pe Pământ. Ea determină temperatura de la suprafaţa pământului, asigurând energia necesară pentru a pune în mişcare ecosistemul global. Deşi alte stele reprezintă surse imense de energie sub forma razelor X şi semnale radio, soarele nostru emană majoritatea energiei sale sub forma luminii. Totuşi, lumina reprezintă doar o fracţiune din totalul spectrului radiant; razele ultraviolete şi infraroşii sunt şi ele o parte semnificativă a spectrului solar.

Soarele emite aproape întreaga sa energie radiantă în spectrul lungimilor de undă ce variază de la 2x10-7 la 4x10-6. Majoritatea acestei energii se află în zona vizibilă. Fiecare lungime de undă corespunde unei frecvenţe şi unei energii; cu cât lungimea de undă este mai mică, cu atât frecvenţa e mai înaltă şi energia mai mare (exprimată în eV).

Figura 69 - Spectrul radiaţiei solare

Fiecare porţiune a spectrului solar este asociată unui alt nivel de energie. În porţiunea vizibilă a spectrului, de exemplu, lumina roşie se află la capătul cu energie redusă iar lumina violetă la cel cu energie ridicată. În zonele invizibile ale spectrului, fotonii zonei ultraviolete, ce cauzează bronzarea pielii, au mai multă energie decât cei din zona vizibilă. Analog, fotonii din zona infraroşie, pe care îi simţim sub formă de căldură, au mai puţină energie decât fotonii din zona vizibilă.

Page 58: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

4. Subsistemul de alimentare Pagina 58 din 151

4.2.3.4 Lumina şi soarele : pe Pământ

Deplasarea luminii de la o poziţie la alta poate fi cel mai simplu descrisă cercetând comportamentul unei unde, diferitele tipuri de radiaţii având lungimi de undă diferite (o lungime de undă este distanţa de la vârful unei unde până la vârful următoarei unde). Aceste lungimi de undă indică iradierea cu diferite cantităţi de energie, cu cât lungimea de undă fiind mai mare, cu atât energia este mai mică. Lumina roşie are o lungime de undă mai mare şi energia mai mică decât lumina violetă.

Figura 70 - Secţiune prin celula fotovoltaică

În fiecare secundă, soarele eliberează în sistemul solar o cantitate imensă de energie radiantă. Pământul primeşte o fracţiune infimă din această energie, cu toate acestea, o cantitate medie de 1367 W / m2 din suprafaţa exterioară a atmosferei Pământului. Atmosfera absoarbe şi reflectă o parte din această radiaţie, inclusiv majoritatea razelor X şi ultraviolete. Cu toate acestea, cantitatea de energie ce atinge efectiv suprafaţa Pământului în fiecare minut este mai mare decât întreaga cantitate de energie consumată de populaţia Pământului într-un an!

Atmosfera Pământului şi norii absorb, reflectă şi împrăştie o parte din energia solară ce pătrunde prin atmosferă. Cu toate acestea, cantităţi enorme de energie solară directă sau difuză ating suprafaţa Pământului, putând fi utilizate în scopul producerii electricităţii fotovoltaice.

4.2.4 Principiul de funcţionare: Tip P, Tip N şi câmpul electric

Pentru a induce un câmp electric într-o celulă fotovoltaică, sunt necesare 2 tipuri de semiconductori separaţi, lipiţi împreună. Semiconductorii de tip „p” şi „n” corespund denumirilor „pozitiv” şi „negativ” datorită abundenţei de goluri şi respectiv electroni (cantitatea de electroni suplimentari formează un semiconductor de tip „n”, deoarece electronii sunt încărcaţi negativ).

Page 59: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

4. Subsistemul de alimentare Pagina 59 din 151

Figura 71 - Procesul de fabricaţie al siliciului

Cu toate că ambele materiale sunt neutre din punct de vedere electric, siliciul tip „n” conţine electroni în exces iar cel de tip „p” conţine goluri în exces. Lipirea ambelor tipuri creează o joncţiune tip p/n pe suprafaţa de contact a semiconductorilor, creând astfel un câmp electric.

Figura 72 - Procesul de fabricaţie al siliciului

Când semiconductorii de tip „p” şi „n” sunt lipiţi, excesul de electroni din materialul „n” se scurg spre semiconductorul tip „p” iar golurile spre „n”. (Conceptul de gol ce se deplasează poate fi imaginat sub forma unei bule de aer ce se deplasează printr-un lichid. De fapt se deplasează lichidul, fiind mai uşor de descris modul în care bula se deplasează în direcţia opusă). Prin acest flux de electroni şi goluri, cei doi semiconductori funcţionează ca o baterie, creând un câmp electric în zona joncţiunii. Acest câmp cauzează saltul electronilor din interiorul semiconductorului spre suprafaţa acestuia, devenind disponibili pentru un circuit electric. În acelaşi timp, golurile se deplasează în direcţia opusă, spre suprafaţa pozitivă, unde aşteaptă trecerea electronilor.

Page 60: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

4. Subsistemul de alimentare Pagina 60 din 151

4.2.5 Materialele celulei solare

4.2.5.1 Siliciul

Siliciul este încă cel mai popular material utilizat la celulele solare în aplicaţiile comerciale datorită faptului că este atât de răspândit (este pe locul doi în lume ca şi abundenţă în crusta terestră, depăşit doar de oxigen!). Pentru a putea fi utilizat în celule solare, trebuie rafinat la o puritate de 99,9999%.

Într-un siliciu mono-cristalin, structura moleculară a materialului este uniformă datorită faptului că întreaga structură s-a dezvoltat din aceeaşi structură cristalină de bază. Această uniformitate este ideală pentru transferul ideal al electronilor prin material. Pentru a crea o celulă fotovoltaică eficientă, siliciul este „dopat”, devenind de tipul „n” sau „p”. Siliciul semi-cristalin, pe de altă parte, este format din mai multe cristale mici, existând mai multe suprafeţe „limită”. Aceste limite împiedică fluxul de electroni şi îi încurajează să se recombine cu golurile, reducând astfel puterea emisă de celulă. Cu toate acestea, siliciul semi-cristalin este mult mai ieftin de produs decât cel mono-cristalin, astfel că cercetătorii lucrează în prezent la alte posibilităţi de a minimiza efectele zonelor limită.

4.2.5.2 Siliciul: diferite structuri

Figura 73 - Aranjarea cristalelor de siliciu

Materialul de siliciu mono-cristalin are o structură uniformă; nu există perturbaţii în aranjarea atomică. Materialul semi-cristalin este compus din mai multe cristale. La limitele suprafeţelor dintre structuri, ordinea atomilor este întreruptă. Aici electronii se pot recombina mai uşor cu golurile, nemaiajungând în circuitul electric. Chiar şi mici cristale de siliciu pot forma celule solare, efectuându-se cercetări în domeniul siliciului policristalin, în speranţa obţinerii unor celule mai economice. Materialul policristalin conţine multiple cristale individuale cam de grosimea unui păr uman, sau aproximativ 1/1000 din grosimea materialului semi-cristalin.

Page 61: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

4. Subsistemul de alimentare Pagina 61 din 151

4.2.6 Utilizare

Figura 74 - Exemple de aplicare a tehnologiei solare

Dintre principalele utilizări ale energiei, cea mai puţin indicată este transportul. Pentru că sunt mari, vehicule relativ încete precum vapoarele s-ar putea alimenta cu ajutorul unor panouri solare de mari dimensiuni, pe când vehicule mici, rapide, n-ar putea. Singura modalitate de a alimenta o maşină strict cu energie solară ar fi prin utilizarea unei baterii încărcată de o staţie solară staţionară. Maşinile electrice alimentate parţial cu energie solară sunt deja disponibile, dar este puţin probabil că energia solară va reprezenta viitoarea sursă de energie pentru transportul persoanelor.

Figura 75 - Exemple de aplicare a tehnologiei solare

Energia solară are mari avantaje faţă de combustibilii fosili: primul avantaj este faptul că e reînnoibilă şi nu va dispărea atât de curând. Al doilea este efectul său asupra mediului înconjurător. În timp ce arderea combustibililor fosili generează o poluare masivă a atmosferei şi contribuie la probleme ecologice precum încălzirea globală şi ploile acide, energia solară este complet nepoluantă. Pentru a alimenta o fabrică de electricitate cu combustibilul dorit, sunt uneori

Page 62: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

4. Subsistemul de alimentare Pagina 62 din 151

necesare defrişări pe mari suprafeţe, singura bucată de pământ ce trebuie distrusă pentru a produce energia solară este suprafaţa pe care sunt montate panourile. Dintre toate resursele de energie disponibile, cea solară este probabil cea mai promiţătoare. Din punct de vedere numeric, este capabilă să producă cantitatea de energie necesară întregii planete. Din punct de vedere ecologic, este non-distructivă. Practic, poate fi adaptată pentru alimentarea unor diverşi consumatori, cu excepţia transporturilor, şi poate chiar şi în transporturi, prin modificări ale modului curent de deplasare. În mod clar, energia solară este resursa viitorului.

4.3 Convertizorul 12V DC – 220V AC

Pentru a putea folosi în cadrul acestei aplicaţii ca element principal de alimentare o baterie de 12 V, era necesară o soluţie pentru adaptarea tensiunii consumatorilor din cadrul sistemului. Atâta vreme cât tensiunea nominală a consumatorilor este mai mică decăt tensiunea bateriei, rezolvarea este relativ simplă. Cu ajutorul unor divizoare de tensiune, sau cu ajutorul unor regulatoare de tensiune tensiunea nominală este redusă. Acest lucru presupune însă şi pierderi, care se vor manifesta prin degajare de căldură.

Problema mai mare este obţinerea unor tensiuni superioare aceleia a bateriei. Acest lucru se poate realiza cu ajutorul unor convertoare DC-DC (relativ scumpe), cu ajutorul comutării unei baterii suplimentare în serie, sau cu ajutorul unui invertor.

Datorită faptului că o placă de bază de generaţia actuală necesită diferite tensiuni de alimentare, împreună cu exigenţe destulde mari asupra stabilităţii acestor tensiuni, s-a ales folosirea unei surse de alimentare standard de PC. Pentru a putea folosi o astfel de sursă de alimentare este însă necesară generarea unui curent alternativ, cu o frecvenţă de 50 de Hz şi o tensiune de 220V, similară cu cea prezentă în cadru sistemului casnic electric.

Acest lucru este realizat cu ajutorul unui invertor. Acesta este un dispozitiv ce chopează (cu ajutorul unor tranzistori de putere) tensiunea de la intrare, realizând astfel un semnal sinusoidal, cvasi-sinusoidal, sau rectangular. Acest semnal este amplificat cu ajutorul unui transformator ridicător şi este furnizat consumatorului.

Figura 76 - Ieşiri a diferitor tipuri de invertoare (semnal sinusoidal, cvasi-sinusoidal şi rectangular)

Page 63: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

4. Subsistemul de alimentare Pagina 63 din 151

Convertizorul ales preia însă şi conectarea panoului fotovoltaic la sistemul de alimentare. Astfel, dacă energia oferită de către panoul solar nu este necesară, aceasta este folosită la reîncărcarea bateriei principale.

Figura 77 - Convertizor sinusoidal 12V DC - 220 V AC

Page 64: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

5. Subsistemul de comunicaţii Pagina 64 din 151

5 Subsistemul de comunicaţii

5.1 Reţeaua wireless WLAN (Wi-Fi)

Wireless LAN (WLAN) este un sistem de comunicaţii de date implementat ca extensie sau alternativă pentru un LAN cablat, într-o clădire sau campus, combinând conectivitatea la viteză mare cu mobilitatea utilizatorilor, într-o configuraţie mult simplificată.

Figura 78 - Reţea wireless cu conexiune simplă punct la punct

5.1.1 Prezentare generală WLAN

Avantaje evidente, cum ar fi: mobilitate, flexibilitate, simplitate în instalare, costuri reduse de întreţinere şi scalabilitate au impus WLAN ca o soluţie tot mai mult utilizată, estimările arătând o piaţă de peste un miliard dolari numai în Statele Unite. Majoritatea sistemelor WLAN utilizează tehnologia DSSS (Direct Sequence Spread Spectrum), tehnologie dezvoltată în laboratoarele militare pentru operarea în sisteme critice, fiabile şi sigure. DSSS s-a impus definitiv în faţa alternativelor reprezentate de FHSS (Frequency Hoping Spread Spectrum) sau IR (infraroşu) prin rate mai mari de acces şi utilizare eficientă a spectrului.

Principalii producători, printre care Lucent Tehnologies, 3Com, Cisco, Intersil şi Nokia, s-au reunit în WECA (Wireless Ethernet Compatibility Alliance) şi au definitivat în 1997, standardul IEEE 802.11 pentru WLAN, standardizare ce a reprezentat un important pas în dezvoltările ulterioare ale tehnologiei. În septembrie 1999, a fost adoptat standardul IEEE High Rate, ce furnizează rate mult mai mari de transfer, menţinând protocolul 802.11. Printre facilităţile oferite de acest standard se numără: roaming între celule, power management, WEP (Wired Equivalent Privacy, cu cheie de criptare pe 64 sau 128 biţi) şi interoperabilitate.

Performanţele atinse de WLAN în ultima vreme au impus tehnologia wireless ca alternativă serioasă şi au modificat conceptul clasic de LAN. Spre exemplu, PC cardul Orinoco Turbo 11Mb de la Lucent (urmaşul lui WaveLAN) a fost primul pe piaţă cu o rată de transfer de 11Mbps, la distanţe până la 550 m. Acelaşi card, intergrat în sistemele outdoor, cu

Page 65: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

5. Subsistemul de comunicaţii Pagina 65 din 151

antene de până la 24 dB câştig, poate inteconecta două LAN-uri clasice pe distanţe până la opt km. Prin implementarea unui protocol CSMA/CA şi prin mecanisme RTS/CTS (request-to-send/clear-to-send) se obţin rate de transfer mai mari decât în cazul reţelelor clasice.

Figura 79 - Reţea wireless cu conexiuni multi-punct cu securitate

Calculatoarele ce posedă o antenă şi o cartelă WLAN pot accesa Internetul pe o rază de

sute de metri de la emiţător. În interiorul clădirilor, aria de acoperire este de circa 300 de metri, iar în exterior de circa doi km (dacă nu există bariere fizice, cum ar fi clădirile, denivelările de teren, copacii sau ploaia).

5.1.2 Ce este tehnologia wireless?

Produsele wireless, de la maşini cu telecomandă la telefoane celulare, folosesc o formă de energie cunoscută ca o radiaţie electromagnetică care transportă semnale. Semnalele pot fi modele de vibraţii pe care urechea umană le recunoaşte ca fiind sunete. Ele mai pot fi şi schimbări bruşte de frecvenţă sau intensitate utilizate pentru a coda semnale de date. Oricare din aceste forme ar fi, radiaţia electromagnetică le transportă prin spaţiul liber. Vom descrie în primul rând cele mai comune patru forme de tehnologii wireless: prin satelit, prin microunde, prin infraroşu, şi comunicaţiile radio.

Page 66: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

5. Subsistemul de comunicaţii Pagina 66 din 151

5.1.2.1 Comunicaţiile prin satelit

În mod normal, comunicaţiile prin satelit nu sunt disponibile entităţilor mici pentru conexiuni de reţea. Preţul de cumpărare al unui transponder este secret. Cu toate acestea, o excepţie viabilă este utilizarea sateliţilor pentru conectarea utilizatorilor la reţeaua Internet. Mai multe companii oferă acces Internet la viteză mare pentru clienţi particulari şi pentru agenţi economici prin instalarea unor antene parabolice mici.

În timp ce acest tip de conectivitate oferă o viteză de download de peste 400Kbps, el este un mediu strict unidirecţional. Pentru a beneficia de aceste servicii, utilizatorii trebuie să menţină o conexiune fizică ( de viteză mică ) la reţeaua Internet. În acest scenariu, cererile sunt transmise la site-urile web prin conexiunea fizică şi sunt recepţionate prin conexiunea prin satelit.

Pe de altă parte sunt explorate noi tehnologii satelit. Un nou satelit este acela numit Low-Earth-orbiting(LEO). Cu sute de astfel de sateliţi disponibili în următorii câţiva ani, costul capacităţii de transmitere/recepţionare prin tehnologie satelit ar putea scădea. Proiecte cum ar fi Iridium şi Teledesic sunt deja în plină dezvoltare. Iridium este folosit ca o alternativă la serviciul de telefonie wireless. Teledesic, cu porecla “Internet pe cer”, este setat să ofere servicii Internet wireless pentru firme, şcoli şi utilizatori. Spectrul electromagnetic complet include mai multe tipuri de lungimi de undă cu care am devenit familiari, cel puţin cu numele lor. Primul din acestea este lumina vizibilă. Alte două tipuri de lungimi de undă, situate chiar la de un capăt şi de altul al spectrului vizibil, sunt lumina infraroşie şi ultravioletă. Acestea sunt lungimile de undă care ne oferă tehnologia de vizibilitate noaptea. O altă porţiune a spectrului electromagnetic cu care vom deveni familiari sunt frecvenţele numite microunde. Acestea există sub frecvenţele infraroşu, dar peste frecvenţele radio normale. Multe servicii de comunicaţii de date oferite de marile companii de telecomunicaţii sunt suportate de tehnologiile de microunde. Deşi este o alternativă viabilă chiar şi în comunicaţiile private, are două dezavantaje. În primul rând comunicaţiile prin microunde necesită o licenţă. În al doilea rând preţul de implementare a unei tehnologii cu microunde ( infrastructură de tip turn/farfurie ) este mai mare decât cel al celorlalte opţiuni.

Pe de altă parte, comunicaţiile prin microunde sunt foarte rezistente la interferenţe.

5.1.2.2 Comunicaţiile prin infraroşu

Tehnologiile de calcul care utilizează spectrul infraroşu devin din ce în ce mai comune. De exemplu, tastaturile wireless şi receptorii sunt distribuite cu calculatoare care servesc ca bază pentru sisteme de distracţie pentru acasă. Un transmiţător infraroşu operează la o anumită frecvenţă ( fiecare producător de tastatură wireless utilizează o frecvenţă diferită ) traduce codul tastei apăsate într-un semnal infraroşu pe care îl transmite către receptor. De asemenea, unele calculatoare sunt dotate în ziua de azi cu port infraroşu care permite ca informaţia de la un PC de „buzunar” să fie transmise la PC-ul desktop.

Există şi bridge-uri de reţea / router-e care utilizează frecvenţele infraroşu pentru a transmite date. Ca şi tehnologia cu microunde, cea cu infraroşu oferă o conectivitate de viteză mare. Dar soluţiile de comunica prin infraroşu sunt cam scumpe de implementat.

În majoritatea cazurilor de infrastructură, echipamentele radio şi infraroşu oferă cele mai eficiente forme de comunicaţii wireless.

Page 67: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

5. Subsistemul de comunicaţii Pagina 67 din 151

Figura 80 - Comunicaţii prin infraroşu

5.1.2.3 Domeniile de utilizare a frecvenţelor radio

Chiar dacă fraza “reţea wireless prin radio frecvenţă” poate părea misterioasă, această tehnologie este foarte comună. Ea utilizează unde radio, aceaşi sursă de energie utilizată în transmisia radio şi TV. Radiourile cu 2 canale şi walkie-talkie-urile utilizează de asemenea această tehnologie. Programul spaţial utilizează undele radio pentru a controla calculatoarele de la bordul capsulelor spaţiale şi probelor, şi recepţionează semnale de la alte dispozitive.

Vă mai amintiţi transmisiile video de pe suprafaţa lunii? Fotografiile color ale suprafeţei lui Marte? Toate acestea au fost transformate în unde radio şi transmise către Pământ utilizând tehnologia radio. Dacă ne gândim la radiouri şi televizoare, putem să identificăm unele din componentele care fac ca reţeaua wireless cu radio frecvenţă să funcţioneze: un transmiţător radio, un receptor radio, un cablu de la antenă la transmiţător sau receptor. Se adaugă şi două componente pentru a proteja echipamentele – cum ar fi protecţie împotriva fulgerelor şi filtre de zgomot – şi astfel am alcătuit o listă cu necesarul de dispozitive.

5.1.2.4 Undele radio

Când undele radio sunt descrise ca o tehnologie utilizată pentru transmiterea programelor radio şi TV, unii oameni presupun că undele radio seamănă un pic cu undele sonore. Un sunet se produce atunci când ceva face ca aerul să vibreze. Această vibraţie este transferată câtre urechea internă când soseşte unda de sunet. Atunci vibraţia este transformată într-un semnal şi transmisă creierului nostru., unde percepem sunetul. Undele radio nu seamănă chiar deloc cu undele sonore. Ele nu creează vibraţii în ureche. Undele radio nu se bazează pe vibraţiile din aer, de fapt, ele nu au nevoie de aer pentru transmisie. În loc de a fi o vibraţie, ele sunt o formă de energie.

Ele sunt parte a ceea ce se numeşte spectrul electromagnetic. Acest spectru de energie include întreaga gamă de radiaţii create de interacţiunea electronilor şi câmpurilor magnetice. Aceste tipuri de radiaţii include unde radio, microunde, lumina infraroşie, lumina vizibilă, lumina ultravioletă şi razele X. Undele radio sunt create când electronii trec printr-un

Page 68: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

5. Subsistemul de comunicaţii Pagina 68 din 151

conductor, ca un fir electric. Curentul crează un camp magnetic. Fluctuaţiile curentului produc modificări în câmpul magnetic, creând unde de energie electromagnetică sau radiaţii. Alte forme de radiaţii electromagnetice sunt produse prin alte procese atomice.

Aceste modificări ale câmpului magnetic se numesc unde pentru că energia oscilează – creşte în intensitate până la un vârf, scade până la minim, şi apoi creşte iar până la vârf.

Toate aceste forme de energie călătoresc cu aceiaşi viteză – viteza luminii. Singura diferenţă dintre ele o reprezintă lungimile lor de undă. Undele radio sunt cele mai lungi. Razele gama sunt cele mai scurte. Deoarece razele gama sunt mai scurte, şi călătoresc cu aceiaşi viteză ca undele radio, mai multe raze pot trece printr-un anumit punct într-o secundă. Numărul de unde care trece printr-un punct într-o secundă se numeşte frecvenţa energiei. Razele gama au frecvenţe mult, mult mai înalte decât undele radio.

Frecvenţa este măsurată într-o unitate numită Hertz, după Heinrich Hertz, unul dintre primii experimentatori ai undelor radio ( numite iniţial unde Herziene ). Hertz-ul este definit în mod ca un ciclu pe secundă sau o undă pe secundă. Spectrul undelor electromagnetice sunt descrise în hertzi, abreviat Hz.

Ca şi rata de transfer de date, frecvenţele pot fi foarte largi, astfel încât unităţi standard mari sunt utilizate pentru a le nota: kilo (K), mega (M), şi giga (G). Undele radio au frecvenţe de la 150kHz la 300GHz. În contrast, undele de lumină sunt mult mai scurte şi au frecvenţe mult mai înalte. Frecvenţele undelor de lumină sunt în domeniul de 100 trilioane de Hz, sau 100THz (terahertz).

Figura 81 - Spectrul de emisie

5.1.2.5 Benzile radio

În Statele Unite pentru ca oamenii să nu interfereze între ei în ceea ce priveşte semnalele radio, Comisia de Comunicaţii Federale (FCC) este însărcinată cu asignarea de secţiuni mici de frecvenţe radio anumitori utilizatori. Acestea sunt numite frecvenţe licenţiate. Pentru a transmite semnale radio pe aceste frecvenţe trebuie depusă o cerere la FCC pentru a obţine o licenţă.

Cu toate acestea, pentru a permite utilizarea unei anumite părţi a spectrului pentru aplicaţii mici care nu necesită licenţă, FCC a alocat trei benzi radio separate de frecvenţe

Page 69: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

5. Subsistemul de comunicaţii Pagina 69 din 151

radio care poartă numele de benzi publice. Nu este necesară nici o licenţă pentru a folosi echipamentul de transmisie la aceste frecvenţe. Acestea sunt numite benzi ISM, prescurtarea de la benzi: Industrial, Ştiinţific şi Medical.

Lungimea de bandă disponibilă creşte la limitele înalte de frecvenţă. Aceste frecvenţe înalte vor suporta rate de transfer de date mari. Multe wireless bridge-uri operează la frecvenţele de 2,4GHz şi 5,7GHz. Cu cât creşte capacitatea de trecere, reţelele de calculatoare devin o posibilitate din ce în ce mai reală. Cu cât apar mai multe firme care produc produse de reţea wireless cu radio frecvenţă, cu atât preţurile vor continua să scadă, făcând reţelele wireless o alternativă viabilă la liniile de telefonie fixă în zonele locale.

Ce face ca benzile ISM nelicenţiate să devină supra-utilizate în mod egal? Există două diferenţe primare între cum sunt implementate reţelele wireless cu radio frecvenţă astfel încât să minimizeze interferenţele şi dorinţa de a folosi lungimea de bandă disponibilă. Prima diferenţă se leagă de metoda utilizată pentru transmisia semnalelor de date prin unde radio. A doua diferenţă se leagă de tipurile de antene utilizate pentru a radia şi recepţiona semnalele radio.

Figura 82 - Câştig în domeniul 2.4 GHz

5.1.2.6 Tehnologia spectrului împrăştiat

Multe tehnologii de comunicaţii cu care suntem familiari – radioul, televiziunea, radiourile cu două căi – utilizează cea ce se numeşte comunicaţii pe bandă îngustă. Fiecare staţie sau canal operează peste o bucăţică mică din spectrul radio. Deoarece fiecărei staţii îi este asignată o bandă particulară, FCC asigură că nici un transmiţător din aria locală nu va folosi aceiaşi bandă prin licenţiere, deci nu vor fi interferenţe. Domeniul fiecărei staţii este limitat, astfel încât aceiaşi frecvenţă poate fi re-utilizată la o distanţă mare fără interferenţe.

Deoarece multe dispozitive pot să utilizeze benzile ISM într-o anumită zonă, sunt necesare tehnologii adiţionale pentru a nu permite ca o varietate de semnale să interfereze una cu cealaltă. Din fericire, o tehnologie a fost dezvoltată în ultimii 50 de ani care permite “folosirea în comun” a lăţimii de bandă. Această tehnologie oferă o cale de a răspândi

Page 70: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

5. Subsistemul de comunicaţii Pagina 70 din 151

semnalele radio pe un “spectru” larg de frecvenţe radio, minimizând impactul interferenţelor de bandă îngustă. În majoritatea cazurilor numai părţi mici din transmisie sunt corupte de orice interferenţă, şi tehnicile de codare permit ca datele să fie recapturate. Această tehnologie este cunoscută azi sub numele de spectru împrăştiat. Există două tehnici diferite de împrăştiere care se utilizează. Amândouă utilizează un model codificat de comunicaţie. O unitate de recepţie este sincronizată să folosească acelaşi model şi să recepţioneze cu succes transmisia. Oricare altă unitate radio aude semnalul ca zgomot deoarece nu este programat cu codarea potrivită. Cele două tehnici sunt numite spectru împrăştiat al salturilor de frecvenţă (Frequency Hopping Spread Spectrum - FHSS) şi spectru împrăştiat al secvenţelor directe. Armata Statelor Unite a dezvoltat o tehnologie radio numită spectru împrăştiat între anii 1950 şi 1960. E evident că prima preocupare a fost ca transmisiile radio să nu fie interceptate.

5.1.2.7 Salturile de frecvenţă

A doua preocupare a fost să asigure ca comunicaţiile rachetelor ghidate să nu fie blocate de transmisiile radio inamice. Gândită, dezvoltată şi implementată de armata Statelor Unite, problema a fost adresată de Hedy Lamarr, o actriţă faimoasă din Australia între anii 1930 şi 1940. Ea împreună cu un compozitor de muzică, George Antheil, au patentat ideea în 1940. Ea nu primit nici o recompensă în bani pentru patent. Licenţa patentului a expirat înainte de apariţia implemetării guvernamentale şi comerciale a conceptului. Ideea este următoarea. Un semnal de comunicaţie (voce sau date) este împărţit în părţi separate. În loc de a transmite un semnal în mod continuu pe o bandă de frecvenţe îngustă, părţile separate sunt transmise separat pe un spectru larg de frecvenţe radio.

Un model definit dar aparent aleator de benzi nesecvenţiale este utilizat, cu părţile succesive care sunt transmise pe banda de frecvenţă următoare din model. Pe de altă parte, un receptor este configurat pentru a recepţiona semnalele din acelaşi model. Receptorul radio apoi reasamblează bucăţile în semnalul original. Deoarece pot fi dezvoltate mai multe modele distincte, este posibil să se transmită mai multe transmisii radio în acelaşi timp, dar niciodată pe aceiaşi frecvenţă în acelaşi timp.

Procesul de a sări rapid de pe o frecvenţă pe alta se numeşte salturi de frecvenţă (frequency hopping). Şi de aici tehnica se numeşte spectru împrăştiat al salturilor de frecvenţă. Saltulrile de frecvenţă au două avantaje. Zgomotul “electric” – semnale electromagnetice aleatoare care nu sunt părţi ale nici unui semnal de comunicaţii – va afecta doar o parte mică a semnalului. De asemenea, efectele oricăror alte forme de comunicaţii radio care operează în benzile înguste ale spectrului vor fi minimizate. Oricare asemenea interferenţă care apare va apărea se vor reflecta în calitatea puţin redusă a transmisiei de voce, sau o mică pierdere de date.

De îndată ce reţelele de date au confirmat recepţia cu succes a datelor, orice piesă lipsă va atrage după ea o cerere de transmitere a datei pierdute. Împrăştierea secvenţelor directe este foarte diferită de salturile de frecvenţă. În loc de a împărţi un semnal de date în bucăţi, secvenţionarea directă codează fiecare bit de date într-un şir de biţi mai lung, numit chip.

De obicei, pentru un chip se folosesc 11 până la 20 de biţi, depinde de aplicaţie. Deoarece armata cere un grad mai ridicat de securitate, se foloseşte chip-uri mult mai lungi – chiar mai lungi, de 1.000 până la 10.000 de biţi! Un chip pe 11 biţi este ilustrat mai jos:

0=10010010110 1=01101101001

Observaţi că şirul binar care codează un 0 are forma opusă a şirului binar care codează un 1 – unde un “1” este folosit într-un chip, un “0” este folosit în celălalt chip.

Chip-ul este folosit apoi pentru modularea (schimbarea) semnalului generat de transmiţătorul radio, răspândind semnalul pe o bandă largă de frecvenţe. Receptorul utilizează

Page 71: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

5. Subsistemul de comunicaţii Pagina 71 din 151

acelaşi cod şi caută semnătura unică dea lungul spectrului de frecvenţe. Apoi decodează semnalul înapoi la data originală.

Avantajul este acela că tehnologia împrăştierii spectrului permite ca mai multe semnale radio să opereze într-un mediu deschis, pe o bandă nelicenţiată cu un minim de interferenţe. De asemenea oferă securitate transmisiei.

Figura 83 - Antenă omnidirecţională

5.1.2.8 Semnalele radio ca mediu de transmisie a datelor

Reţelele de calculatoare utilizează variaţiile de curent electric pentru a transmite date de la un calculator la altul. În timp ce fiecare tip de cablu (coaxial, coaxial subţire, şi cablu cu două fire răsucite) are proprietăţi electrice proprii, există ceva în comun: modul în care semnalele electrice sunt transmise de la o placă de reţea la altă placă de reţea utilizând acest mediu. Utilizând o linie telefonică, analogică sau digitală, adaugă complexitate la acest proces, dar nu multă. Dacă utilizăm cablu cu fibră optică, care foloseşte unde de lumină ca mediu, şi semnale radio, care folosesc unde radio ca mediu, procesul este un pic mai complex.

5.1.2.9 Transceiverul radio

Pentru a creea o conexiune de reţea de calculatoare prin unde radio, este nevoie de două componente. Primul ar fi un dispozitiv de reţea ca un bridge sau un router. Bridge-ul / router-ul de reţea se ocupă cu traficul de date. Rutează cel mai potrivit semnal de date legat de reţeua de calculatoare dintr-o clădire la reţeaua de la celălat capăt a conexiunii radio. În al doilea rând este nevoie de un transmiţător şi receptor radio, numit transceiver radio. Transceiver-ul radio se ocupă cu comunicaţiile prin semnale radio dintre locaţii. Partea interesantă a acestei căsătorii de tehnologii este aceea că radiourile au avut de- a face întotdeauna cu semnalele electrice. Transmiţătorul radio modulează, sau modifică, un semnal electric astfel încât frecvenţa lui este crescută până la o frecvenţă potrivită comunicaţiilor radio.

Apoi semnalul este trimis către o antenă radio. La celălalt capăt al transmisiei, partea de recepţie a transceiver-ului radio ia semnalul radio şi îl demodulează înapoi la frecvenţa lui

Page 72: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

5. Subsistemul de comunicaţii Pagina 72 din 151

normală. Apoi semnalul electric rezultat este trimis la partea de bridge/ router pentru procesare de către reţea. În timp ce procesul actual de modulare/demodulare este tehnic, conceptul de transmisie radio este foarte simplu. Când este transmis un răspuns înapoi la site-ul originar, transceiver-ul radio comută de pe modul de recepţie pe modul de transmitere. Transceiver-ul radio de la fiecare capăt are aceste caracterictici. Transmisie-recepţie, transmisie-recepţie. El schimbă modul de oridul miilor de ori pe secundă. Aceste caracterictici duc la o întârziere în comunicaţie numită latenţă.

5.1.3 Echipamentele Wireless

Figura 84 - Echipamente Wireless

5.1.3.1 Wireless bridges

Componenta cheie al unui link al reţelei wireless este un dispozitiv numit un wireless bridge. O combinaţie între un bridge de reţea şi un radio transmiţător, bridge-ul este o componentă al unei reţele locale. Ea examinează tot traficul de date. Transmite orice dată legată de reţea de cealaltă parte a link-ului wireless către transmiţătorul radio. Transmiţătorul alterează apoi semnalul şi îl transmite către antenă, unde este transmisă la antena aflată de cealaltă parte a link-ului. Unii pot spune că se comportă ca un agent de trafic pentru datele din reţea. În timp ce funcţia tuturor wireless bridge este aceiaşi – obţinerea datelor de la o reţea prin unde radio de la o altă reţea – nu toate wireless brigde-urile sunt identice. Caracteristicile setate sunt uşor diferite. Pentru unii clienţi preţul este cel care contează, în timp ce pentru alţii contează securitatea. Pentru majoritatea contează perfomanţa transferării datelor. Producătorii au muncit foarte mult pentru a face bridge-uri uşor de configurat şi întreţinut.

Page 73: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

5. Subsistemul de comunicaţii Pagina 73 din 151

Deoarece fiecare implementare este diferită ( în funcţie de necesităţile reţelei clădiri, de mediul înconjurător ) este dificil de spus care produs este potrivit pentru o anumită situaţie. Cu toate acestea primul parametru luat în considerare ar trebui să fie capacitatea de trecere. Care produs va oferi o capacitate de trecere suficientă pentru a satisface scopurile pentru reţea ale unui client? El trebuie să se gândească la capacitatea de trecere potrivită pentru implementarea lui. Trebuie luate în considerare şi viitoarele dezvoltări ale reţelei. În situaţia ideală bridge-ul ar trebui să satisfacă nevoile pe următorii patru sau cinci ani. De exemplu, dacă un bridge de 10Mbps este prea scump, dar eşti convins că utilizarea reţelei va creşte astfel încât va fi necesară o lăţime de bandă mai mare, atunci se poate implementa acum o soluţie de 2Mbps şi se poate adăuga încă un link de 2Mbps în doi sau trei ani. Unele produse fac aceste soluţii mai uşoare.

Când este necesar un bridge de 10Mbps? Dacă se folosesc foarte des în comun baze de date de pe CD-ROM, sau alte aplicaţii, prin reţea sau dacă există un număr foarte mare de utilizatori care folosesc ocazional aceste resurse în comun, un bridge de 10Mbps este foarte important. Dacă link-ul este stabilit doar pentru a folosi în comun resurse bazate pe web, cu accese ocazionale la baze de date centralizate, un bridge de 10Mbps nu va funcţiona probabil la capacitatea maximă.

Trebuie să fie luaţi în considerare şi alţi factori.

Figura 85 - Stâlp BTS (Base Tranceiver Station)

5.1.3.2 Antene

În ziua de azi antenele transmit un semnal de la transmiţătorul radio în modul de transmisie şi recepţionează semnalul la celălalt capăt al conexiunii. Există două tipuri de antene pentru reţele wireless: direcţionale şi omni-direcţionale. O conexiune cu un singur link, punct-la-punct, utilizează antene bidirecţionale poziţionate una spre alta. Conexiunile wireless cu o locaţie centrală şi două sau mai multe locaţii temporare care sunt legate sunt numite

Page 74: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

5. Subsistemul de comunicaţii Pagina 74 din 151

conexiuni multi-punct. Conexiunile multi-punct utilizează în general o antenă omni-direcţională aflată la locaţia centrală. Deoarece aceasta transmite în toate direcţiile, toate antenele aflate la locaţiile temporale pot recepţiona semnalul. Fiecare locaţie temporală are o antenă direcţională care este poziţionată spre antena de la locaţia centrală. Deoarece energia unei antene omni-direcţionale trebuie să se propage în toate direcţiile, aceasta se pierde repede. De aceea, antenele omni-direcţionale pot transmite la fel de departe ca şi antenele direcţionale. Când distanţa între locaţia centrală şi locaţiile temporale este mai mare de trei sau patru kilometri, atunci trebuie utilizate mai multe antene direcţionale în loc să se utilizeze o singură antenă omni-direcţională.

Cu toate acestea, chiar şi antenele direcţionale au proprietăţi care variază de la o antenă la alta, care nu permit antenelor să transmită mai departe decât alte antene. În timpul survolării locaţiilor, tehnicienii determină care antene vor funcţiona mai bine în anumite situaţii particulare.

Figura 86 - Antenă direcţională

5.1.3.3 Mast-uri şi Towers

Cel mai costisitor aspect al instalării antenelor este mast-ul sau tower-ul necesar pentru a obţine o vizibilitate directă. În cazurile rare, de obicei la distanţe foarte mici, vizibilitatea directă poate fi stabilită cu antene montate direct pe acoperişurile celor două clădiri. Dar, în mod obişnuit, unele forme de mast-uri sunt necesare pentru a ridica antenele la o înălţime suficientă pentru a obţine o vizibilitate directă. În cazuri mult mai dificile sunt necesare sau sunt mai indicate turnurile radio. Aceste probleme vor fi rezolvate în timpul survolării locaţiilor.

Page 75: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

5. Subsistemul de comunicaţii Pagina 75 din 151

Figura 87 - Tower

5.1.3.4 Accesoriile

Există şi alte componente incluse în conexiunea radio wireless. Un dispozitiv de protecţie împotriva fulgerelor este conectat între antenă şi wireless bridge pentru a preveni daune ale unităţii care pot fi cauzate de un fulger. De asemenea se poate folosi un filtru de emisie pentru a reduce din zgomotele externe. În final, acolo unde sunt necesare mast-uri şi turnuri, sunt necesare cabluri de extensie pentru a conecta antenele la bridge-uri. Cablurile de extensie sunt de asemenea necesare când wireless bridge este localizat în interiorul unei clădiri departe de punctul în care cablul primar intră în clădire.

5.1.4 Avantajele WLAN

5.1.4.1 Costurile reduse

Tehnologia wireless oferă câteva avantaje. Pe departe cel mai important este costul redus. Va fi necesară actualizarea configuraţiei echipamentelor, sau problemele electrice vor duce la pierderea configuraţiei. Pentru router-e şi bridge-uri, costul întreţinerii lor va fi similar cu cel pentru orice conectivitate. Cu toate acestea, dacă se foloseşte un comutator bazat pe fibră, ne putem aştepta să aibă nevoie de mai puţină întreţinere. Pe de altă parte, vânturi puternice sau alţi factori pot cauza nealinieri sau defecte la antenele necesare pentru conectivitatea wireless.

5.1.4.2 Implementarea simplă

Achiziţionarea şi instalarea unei reţele wireless se poate face într-o săptămână.

5.1.4.3 Rata de transfer de date ridicată

Când conectivitatea prin fibră optică se dovedeşte a fi prea scumpă pentru instalarea iniţială, conectivitatea wireless oferă o conectivitate de bază foarte bună.

Page 76: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

5. Subsistemul de comunicaţii Pagina 76 din 151

5.1.4.4 Mobilitatea

Un avantaj al tehnologiei wireless va fi vizibil doar atunci când o organizaţie va dori să-şi mute sediul. Când se foloseşte conectivitate wireless se poate dovedi foarte scumpă mutarea unei conexiuni de reţea externă. În cazul utilizării fibrei optice poate fi necesară instalarea unui segment de fibră nouă complet. În conexiunile wireless, antena poate fi dată jos şi echipamentul mutat la noul sediu. Este necesar numai costul reinstalării şi setării antenei.

Figura 88 - Antenă satelit

5.1.4.5 Redundanţa

În multe cazuri, o reţea wireless poate fi stabilită ca o tehnologie mixtă. Cu cât este necesară mai multe infrastructură de cablu în viitor, cu atât va deveni mai necesară sau efectivă din punct de vedere al costului instalarea fibrei optice ca “backup” al reţelei tradiţionale. Când conexiunea wireless este actualizată cu cabluri de fibră optică, conexiunea wireless tot va juca un rol important. Dacă lăsăm legătura wireless la locul ei, aceasta va asigura conectivitatea de bază dacă legătura de fibră optică se defectează. Traficul de urgenţă poate fi în continuare rutat. Utilizarea unei legături wireless cu costurile de astăzi va oferi o legătură de „backup” în cazul unor probleme tehnice.

5.1.5 Dezavantajele

Când se iau în considerare opţiuni pentru reţele extinse, este oportun să se ia în considerare câteva dezavantaje prezentate de tehnologia wireless.

5.1.5.1 Interferenţele radio

Când mai multe antene radio sunt amplasate una în apropierea celeilalte, sau când mai multe surse puternice de spectrum larg se află într-o regiune mică, undele radio îşi pierd din eficacitate. Semnalele pot interfera una cu cealaltă, cauzând retransmiterea semnalelor sau pierderea capacităţii de trecere. Dar asemenea surse sunt neobişnuite în comunităţile rurale.

Page 77: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

5. Subsistemul de comunicaţii Pagina 77 din 151

5.1.5.2 Interferenţele de cale

Tehnologia radio wireless este adesea caracterizată ca fiind imprevizibilă la condiţiile meteorologice. Acest lucru înseamnă că particulele de ploaie, ceaţă, smog sau praf nu sunt destul de mari pentru a bloca transmisia semnalelor radio. În spectrul de frecvenţe 902-928 Mhz acest lucru este în mare parte adevărat.

Cu toate acestea, nu este întotdeuna adevărat în domeniile de frecvenţe înalte (2,4Ghz şi 5.7Ghz) utilizate pentru conexiuni wireless de viteze mari. În acestea, lungimile de undă sunt destul de scurte astfel încât astfel de fenomene legate de condiţiile meteorologice pot interfera cu anumite transmisii. Retransmisia datelor va fi necesară, ducând la scăderea per ansamblu a performanţelor.

Figura 89 - Antenă direcţională

5.1.5.3 Defectele cauzate de condiţiile meteorologice şi de accidente

Condiţiile meteorologice severe pot cauza daune acestor componente pentru că conectivitatea wireless foloseşte antene externe. Se va folosi protecţie împotriva fulgerelor pentru a preveni daune echipamentelor interne ale reţelei, dar şi în acest caz vânturile puternice pot cauza daune antenelor. Aceste tipuri de daune se pot întâmpla şi circuitelor cu fibră optică ( fibrele agăţate la polii electrici sunt rupţi sau au suferit daune în condiţii meteorologice severe, în timp ce cablurile pot să fie tăiate de alţi producători ).

5.1.5.4 Capacitatea de trecere

În timp ce conectivitatea wireless oferă o rată cost/transfer mai bună în timp decât circuitele de date, conectivitatea cu fibră optică oferă o soluţie mai bună. Are potenţial mai mare pentru capacitatea de trecere. În multe cazuri, este soluţia cea mai bună.

Page 78: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

5. Subsistemul de comunicaţii Pagina 78 din 151

Pe de altă parte, dacă unica resursă care va fi folosită în comun de mai multe comunităţi este accesul Internet, capacitatea de trecere a link-ului WAN de peste 2Mbps nu este importantă. Link-ul folosit în comun pentru Internet va fi nodul de gâtuire al reţelei. În mod normal va fi restrâns la una sau două canale de acces ( 1,5 până la 3Mbps ). În aceste cazuri, conectivitate cu fibră va fi depăşită cu excepţia cazului în care aceasta va fi fundaţia unor proiecte viitoare.

5.2 Comunicaţiile client-server cu ajutorul socket-urilor

În stadiul iniţial al proiectării socket-urilor (în sistemul de operare UNIX) s-a plecat de la ideea implementării lor ca operaţii de I/O (Input/Output) obişnuite. Se ştie că, in Sistemele tip UNIX, toate operaţiile I/O cu diverse obiecte (fişiere de pe harddisk, imprimante, unităţi de bandă, etc.) au la bază acelaşi principiu: deschide-citeşte-scrie-închide. Ca urmare, pentru a comunica cu o reţea TCP/IP, programul deschide mai întâi o conexiune cu reţeaua, apoi citeşte şi scrie date prin conexiune. La sfârşit, programul închide conexiunea.

Dezvoltarea funcţiilor API pentru socket-uri, aşa cum sunt ele în forma actuală, a fost făcută de un grup de cercetători de la Berkeley. Pe măsură ce proiectarea avansa, se "descopereau" noi probleme şi în cele din urmă s-a constatat că operaţiile I/O de reţea erau mult mai complexe decât alte tipuri de I/O. De exemplu: pentru scrierea unui program client a fost uşor de adaptat funcţiile API existente pentru fişiere. Problemele au apărut când s-a trecut la scrierea unor funcţii care să definească un program server. Serverul trebuie să aştepte, în mod pasiv, să fie contactat de programe client. Ori în UNIX funcţiile I/O normale nu încorporează prea multe facilităţi legate de operaţii I/O pasive. De aceea s-au creat noi funcţii sistem pentru a gestiona operaţiile pasive.

O altă problemă apărută a fost aceea că prin funcţiile sistem existente se puteau crea socket-uri orientate spre conexiune dar pentru socket-uri fără conexiune nu existau funcţii sistem echivalente.

Interfaţa Berkeley este doar una dintre implementările unui API pe baza modelului socket. Windows Socket (denumită şi Winsock) este o altă API bazată pe paradigma socket, inspirată, totuşi, din interfaţa Berkeley. Chiar dacă sistemele de operare Windows (Windows 9x, Windows NT) sunt proprietate a firmei Microsoft, la dezvoltarea Winsock au contribuit mulţi alţi cercetători şi programatori de la alte firme. Specificaţiile Winsock organizează biblioteca API în trei grupuri:

• funcţii Berkeley-sockets incluse în Winsock API, • funcţii de baze de date - permit programelor să interogheze reţeaua Internet pentru

informaţii despre nume de domenii, servicii de comunicaţii şi protocoale, • extensii ale rutinelor Berkeley-sockets specifice Windows.

Aceste funcţii sunt cuprinse în biblioteca cu legare dinamică WINSOCK.DLL.

5.2.1 Aspectele teoretice

Pentru a folosi o interfaţă socket programele trebuie să urmeze un proces simplu, compus din patru etape: 1. Crearea socket-ului, 2. Configurarea socket-ului pentru a putea fi folosit (conectarea la un host distant sau legarea

la un port de protocol local), 3. Transmiterea şi/sau recepţionarea datelor prin socket,

Page 79: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

5. Subsistemul de comunicaţii Pagina 79 din 151

4. Închiderea socket-ului. Creearea socket-ului. Pentru aceasta se apelează funcţia:

socket() socket_handle = socket(protocol_family, socket_type, protocol)

Secvenţă cod 7 - Apelare socket

în care:

• socket_handle - handle de socket. Specificaţiile Winsock stabileşte ca valori valide numere întregi pozitive, mai mici decât 0XFFFF (cel mai mare întreg fără semn).

• protocol_family - identifică o familie sau o colecţie de protocoale înrudite. Valorile pe care le poate lua acest parametru sunt definite în fişierul WINSOCK.H . În total sunt definite (pentru versiunea 1.1 a winsock) 18 valori, printre care:

Familii de protocoale: AF_UNSPEC 0 AF_UNIX 1 AF_INET 2 AF_APPLETALK 16 AF_NETBIOS 17

Secvenţă cod 8 - Familii de protocoale

• socket_type - indică tipul de socket folosit şi poate lua valorile SOCK_DGRAM

pentru datagrame sau SOCK_STREAM pentru fluxuri de octeţi. De asemenea, în winsock.h sunt definite şi alte valori, dar ele pot fi folosite doar cu anumite familii de protocoale,

• protocol - specifică protocolul folosit. Valorile posibile (definite în winsock.h) încep cu prefixul IPPROTO_ (IPPROTO_TCP, IPPROTO_UDP).

Când programul apelează funcţia socket(), winsock alocă memorie pentru structura de

date internă, care stochează informaţii despre socket. Simpla apelare a funcţiei nu completează câmpurile structurii de date. Acest lucru îl fac alte funcţii care vor fi prezentate ulterior.

Configurarea socket-ului. Modul de configurare depinde de tipul legăturii pe care o stabileşte programul în reţea (orientată pe conexiune sau fără conexiune) şi de scopul programului (proces client sau server). Fiecare socket necesită cinci elemente:

• adresa IP a host-ului local, • portul de protocol pentru procesul local, • adresa IP a hostului de la distanţă, • portul de protocol pentru procesul de la distanţă, • un protocol.

Funcţiile winsock API utilizate, de programe, pentru configurarea unui socket sunt

prezentate în tabelul de mai jos. Ele completează primele patru câmpuri din structura de date, ultimul, protocolul, fiind completat de apelul funcţiei socket().

Page 80: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

5. Subsistemul de comunicaţii Pagina 80 din 151

Funcţiile socket API utilizate pentru configurarea unui socket. Utilizare socket Informaţie locală Informaţie la distanţă Client orientat pe conexiune

connect connect

Server orientat pe conexiune

bind

listen, accept

Client fără conexiune bind sendto Server fără conexiune bind recvfrom Deci, în cazul programelor client orientate pe conexiune, se foloseşte instrucţiunea

connect() cu următorii parametri: connect (socket_handle, remote_socket_address,address_length).

Secvenţă cod 9 - Funcţia connect

în care:

• socket_handle - valoarea returnată de funcţia socket(), • remore_socket_address - un pointer la o structură specială de adresă socket:

struct sockaddr_in short sin_family; u_short sin_port; struct in_addr sin_addr; char sin_zero[8]; ;

Secvenţă cod 10 - Structura sockaddr_in

Structura de adresă conţine o familie de adrese, un port de protocol şi adresa host-ului

pe care rulează programul server. Înainte de apelarea funcţiei connect(), programul trebuie să memoreze în structură datele necesare. Prezentăm mai jos secvenţa de instrucţiuni utilizată de programul nostru (client) pentru a realiza conectarea:

memset((char *) &addr_Dest, 0, sizeof(addr_Dest)); addr_Dest.sin_family = AF_INET; addr_Dest.sin_addr.s_addr = inet_addr(szDestIP); addr_Dest.sin_port = htons(destport); if (connect(sock_Send, (sockaddr*) &addr_Dest, sizeof(addr_Dest)) < 0) AfxMessageBox("Eroare: functia connect() .");

Secvenţă cod 11 - Deschidere conexiune

unde addr_Dest este o variabilă de tipul sockaddr_in.

Page 81: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

5. Subsistemul de comunicaţii Pagina 81 din 151

Se observă că în cazul unui client orientat pe conexiune nu se specifică un port de protocol local, unde clientul va recepţiona răspunsul trimis de server. Acest lucru este "lăsat în seama" sistemului de operare, mai precis a modulului winsock. Cu alte cuvinte winsock selectează portul de protocol pentru programul client şi-l anunţă când sosesc date la acel port; nu este necesar ca programul să ştie ce port foloseşte winsock.

În celelalte trei cazuri (servere şi client fără conexiune) programele trebuie să specifice un port de protocol.

5.2.1.1 Transmiterea şi/sau recepţionarea datelor Interfaţa Berkeley socket include zece funcţii (cinci pentru transmiterea datelor şi cinci

pentru recepţionarea datelor). Winsock dispune doar de patru funcţii (două de transmitere şi două de recepţie), prezentate pe scurt în tabelul 3. Funcţii winsock API utilizate în lucrul cu socket-uri Funcţia winsock API Descriere Send Transmite date printr-un socket conectat,

folosind flag-uri speciale pentru a controla comportarea socket-ului.

Sendto Transmite date la o adresă de host specificată în structura de adresă socket, folosind un buffer de mesaj simplu.

Recv

Recepţionează date de la un socket conectat, folosind flag-uri speciale pentru a controla comportarea socket-ului.

Recvfrom Recepţionează date de la un socket şi înregistrează (opţional) adresa de reţea a host-ului emiţător, folosind un buffer de mesaj simplu.

Programele cu socket-uri fără conexiune pot utiliza doar funcţiile sendto() şi recvfrom().

Aceasta deoarece ele pot specifica adrese de reţea. Programele ce utilizează socket-uri cu conexiune pot utiliza toate cele patru funcţii dar sunt recomandate funcţiile send() şi recv(). În cazul utilizării funcţiilor sendto() şi recvfrom(), winsock ignoră parametrii de adresă incluşi în apelul lor.

Există cazuri când se impune scrierea unor programe care să utilizeze ambele tipuri de transfer de date (cu şi fără conexiune). În acest caz se pot scrie funcţii generice pentru executarea acestor operaţii, funcţii ce vor utiliza sendto() şi recvfrom(). În acest mod se pot utiliza funcţiile scrise pentru a transmite şi/sau recepţiona date indiferent de tipul socket-ului pe care programul îl pasează funcţiei. Un apel tipic al funcţiei send() are următoarea sintaxă:

result = send(socket_handle, message_buffer, buffer_length, special_flags)

Secvenţă cod 12 - Apel funcţie send

Când programele apelează funcţia send(), winsock preia informaţia legată de destinaţie

(adresa IP şi port de protocol) din structura de date socket internă identificată de socket_handle. Apoi, funcţia transmite datele din buffer-ul de mesaj (message_buffer).

Page 82: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

5. Subsistemul de comunicaţii Pagina 82 din 151

Parametrul buffer_length reprezintă lungimea buffer-ului de mesaj care poate fi determinată printr-un apel al funcţiei sizeof(). Parametrul special_flags poate lua următoarele valori:

• MSG_DONTROUTE - indică faptul că nu se vor folosi tabele de routare, • MSG_OOB - Out-Of-Band. Datele Out-Of-Band sunt date urgente pe care programul

trebuie să le prelucreze imediat. Funcţia recv() are următoarea sintaxă:

result = recv(socket_handle, message_buffer, buffer_length, special_flags)

Secvenţă cod 13 - Apel funcţie receive

şi preia datele de la un port de protocol local, memorându-le în buffer-ul de mesaj (message_buffer). Când se apelează recv() winsock foloseşte structura de date internă (socket_handle) pentru a comunica funcţiei la ce port de protocol se află datele. Parametrul special_flags poate lua valorile:

• MSG_OOB - datele trebuie prelucrate imediat • MSG_PEEK - permite programului să analizeze datele de intrare înainte de a stabili

cum să le prelucreze.

Se observă că cele două funcţii nu oferă informaţii despre host-ul distant. Deci, programul trebuie, mai întâi, să conecteze socket-ul la host-ul distant, apoi să-l utilizeze. Celelalte două funcţii winsock specifică, în apelul lor, informaţii despre host-ul distant:

result = sendto(socket_handle, message_buffer, buffer_length, special_flags, socket_address_structure, address_structure_length)

Secvenţă cod 14 - Apel funcţie sendto

Primii patru parametri sunt identici cu cei ai funcţiei send(). Parametrul

socket_address_structure este de tipul sockaddr:

struct sockaddr u_short sa_family; char sa_data[14]; ;

Secvenţă cod 15 - Structura sockaddr

Când programul utilizează funcţia sendto() cu un socket conectat, winsock ignoră

ultimii doi parametri iar nivelul transport va formata datele din buffer-ul de mesaje ca un segment TCP - nu ca datagrama UDP. Următoarea linie prezintă un apel tipic al funcţiei recvfrom():

result = recvfrom(socket_handle, message_buffer, buffer_length, special_flags, socket_address_structure, address_structure_length)

Secvenţă cod 16 - Apel funcţie recvfrom

Parametrii funcţiei au aceeaşi semnificaţie cu ai funcţiei sendto().

Page 83: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

5. Subsistemul de comunicaţii Pagina 83 din 151

Un program server care utilizează funcţia recvfrom() va trebui întotdeauna să extragă adresa emiţătorului pentru a şti unde să trimită răspunsul. În majoritatea cazurilor programele client nu au nevoie de adresa serverului. Dar sunt unele excepţii: clientul trebuie să confirme primirea datelor, clientul trebuie să verifice dacă datele extrase provin de la hostul dorit.

5.2.1.2 Închiderea socket-ului Această ultimă operaţie a unui program se face prin apelul funcţiei:

result = closesocket(sock_Send);

Secvenţă cod 17 - Închidere socket

Facem precizarea că variabila result (valoare returnată de funcţiile de mai sus) este de tipul int.

Page 84: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

6. Platforma experimentală Pagina 84 din 151

6 Platforma experimentală

6.1 Proiectarea, modelarea 3D

Înainte de începerea execuţiei proiectului s-a realizat o modelare tridimensională a robotului prezentat în această lucrare. S-a început cu şasiul, sistemul de acţionare, iar ulterior s-a continuat cu sistemul de alimentare. În figurile ce urmează sunt prezentate câteva etape din procesul de simulare, proiectare şi execuţie.

Figura 90 - Modelare 3D a sistemului de acţionare.

Page 85: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

6. Platforma experimentală Pagina 85 din 151

Figura 91 - Prototip şasiu simulat

Figura 92 - Wireframe prototip.

Page 86: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

6. Platforma experimentală Pagina 86 din 151

Pe baza desenului prezentat în Figura 92 s-a realizat şi practic prototipul de către secţia de prelucrări metalice.

Figura 93 - Modelare 3D a prototipului

6.2 Realizare practică. Detalii constructive

Datorită lipsei de experienţă în domeniul mecanicii al autorului, ajutorul oferit de către sisteme software de modelare 3D a fost necesar pentru a implementa practic cu succes acest proiect.

Totuşi pe parcurs au apărut mici probleme de natură mecanică ce au trebuit soluţionate. Datorită faptului că sistemul de acţionare nu este realizat perfect lanţurile, ce unesc cele două roţi motoare, prezintă o întindere inegală pe durata funcţionării. Acest lucru se datorează faptului că cele două roţi dinţate nu sunt perfect centrice. Pentru a înlătura acest neajuns, s-a adăugat o a treia roată dinţată. Aceasta aplică asupra lanţului o forţă de tensionare, astfel lanţul fiind întotdeauna la fel de întins.

Page 87: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

6. Platforma experimentală Pagina 87 din 151

Figura 94 - Realizare practică a şasiului

Figura 95 - Sistemul teleoperat

Proiectul complet al platformei robotizate se găseşte în anexa.

Page 88: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

7. Subsistemul video Pagina 88 din 151

7 Subsistemul video

7.1 Camerele video cu semnal-video-complex

Camerele folosite în cadrul acestui proiect sunt nişte camere CCD cu ieşire analogică. Modelul ales este Navigator CCD-318. Camerele au un senzor CCD alb-negru produs de SOny, ce prezintă o rezoluţie suficientă pentru aplicaţia curentă. S-au ales nişte camere alb-negru deoarece pierderea de informaţie datorită lipsei culorilor este nesemnificativă, în schimb se diminuează semnificativ cantitatea de date ce trebuie teletransmisă. Astfel pe aceeiaşi interfaţă WLAN se pot obţine îmbunătăţiri legate de numărul de cadre pe secundă, respectiv se poate reduce gradul de comprimare, astfel îmbunătăţiindu-se semnificativ calitatea imaginilor.

Figura 96 -Cameră video Navigator

Camerele sunt alimentate direct din bateria plumb-acid. Datorită faptului că sunt camere

de 12V dispare necesitatea unei adaptări a tensiunii de intrare (de ex. cu un convertor DC-DC).

7.2 Dispozitivul de mişcare a camerelor cu două grade de libertate

În aplicaţiile de teleoperare şi teleprezenţă este necesară o cunoaştere cât mai bună a condiţiilor de la faţa locului. În acest scop robotul mobil a fost echipat cu un dispozitiv de rotire şi înclinare a camerelor video.

Acesta este un dispozitiv cu două grade de libertate, ce permite o poziţionare exactă şi rapidă a camerelor pentru a supraveghea cât mai uşor aplicaţia. Cele două grade de libertate sunt realizate cu ajutorul a două motoare pas cu pas comandate de către un sistem cu microcontroler. Acesta este conectat la un calculator gazdă prin intermediul unei interfeţe seriale cu o viteză de 9600 bps.

Page 89: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

7. Subsistemul video Pagina 89 din 151

Dispozitivul primeşte pe interfaţa serială o comandă, ce poate fi de tipul (Roteşte stânga, roteşte dreapta, roteşte sus, roteşte jos). După efectuarea rotirii sistemul aşteaptă o comandă nouă.

Figura 97 - Dispozitiv de rotire (Pan-Tilt) a camerelor

Dispozitivul este în aşa fel construit ca să permită montarea a două camere video într-o

configuraţie paralelă. Acest lucru va permite ulterior implementarea unor algoritmi de stereo-viziune. Aceştia împreună cu alţi algoritmi de viziune artificială şi cu algoritmi de inteligenţă artificială vor permite modificarea robotului mobil, şi transformarea acestuia într-unul autonom.

S-a ales folosirea acestui dispozitiv de rotire/înclinare a camerelor, dispozitiv realizat în cadrul Departamentului de Ştiinţa şi Ingineria Calculatoarelor reprezentat de laboratorul DSPLabs. Alternativa o constituia folosirea unui produs comercial, lucru ce ar fi prezentat două dezavantaje. Primul dezavantaj ar fi fost cel economic, dispozitivele ce se găsesc în acest moment pe piaţă sunt mult mai scumpe. Al doilea dezavantaj ar fi fost imposibilitatea de a monta două camere video. Dispozitivele Pan/Tilt sau Pan/Tilt/Zoom sunt de obicei dimensionate pentru rotirea/înclinarea unei singure camere.

7.3 Placa de captură a semnalului video

Pentru capturarea semnalurilor video de la cele două camere analogice s-a folosit o placă de captură de tip Geovision GV250. Aceasta este o placă specializată pentru aplicaţii de supraveghere. Nu va fi descrisă mai pe larg în cele ce urmează datorită faptului că depăşeşte

Page 90: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

7. Subsistemul video Pagina 90 din 151

cadrul acestei lucrări, şi datorită faptului că dispune de un manual în limba română foarte bine structurat.

Placa se livrează împreună cu o aplicaţie specializată. Aceasta permite pe lângă supravegherea propriu-zisă şi o supraveghere de la distanţă. Aplicaţia oferă utilizatorului posibilitatea ca prin intermediul unui browser web să acceseze şi să observe în timp real semnalul de la camerele conectate.

De această posibilitate s-a făcut uz şi în cadrul proiectului curent. Datorită faptului că imaginile sunt transmise sub forma unui flux de date de tip MPEG4, datorită faptului că acesta prezintă o compresie destul de ridicată a fost posibil să se realizeze transmisia prin intermediul interfeţei radio de tip WLAN.

Page 91: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

8. Subsistemul de comandă Pagina 91 din 151

8 Subsistemul de comandă

8.1 Componenţa

Subsistemul de comandă este compus din mai multe aplicaţii soft, ce vor fi descrise în cele ce urmează.

La nivelul sistemului de acţionare rulează o aplicaţie, ce primeşte comenzi de la un calculator gazdă şi livrează informaţii despre starea sistemului pe o interfaţă serială.

Sistemul de rotire/înclinare a camerelor are la bază a aplicaţie soft ce execută o operaţiune de polling asupra unei interfeţe seriale. În momentul când primeşte o comandă, o analizează şi o execută.

Comenzile de mişcare şi de poziţionare a camerelor, le dă un PC (localizat pe platforma mobilă a robotului) pe care rulează o aplicaţie server. Aceasta are rolul de a autentifica utilizatori din reţeaua internet. După o autentificare reuşită, aceştia au posibilitatea de a manipula robotul mobil. Aplicaţia server primeşte comenzi printr-un socket şi le trimite mai departe către subsistemul de acţionare sau către sistemul de mişcare a camerelor.

Utilizatorul foloseşte o aplicaţie de teleoperare, cu o interfaţă descrisă în cele ce urmează.

8.2 Interfaţa prezentată utilizatorului

În cele ce urmează este prezentată interfaţa cu utilizatorul a aplicaţiei de teleoperare, şi sunt descrise elementele cele mai importante ale acesteia.

Figura 98 - Interfaţa prezentată utilizatorului

Page 92: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

8. Subsistemul de comandă Pagina 92 din 151

Precum se vede din imaginea de mai sus, utilizatorului este prezentată o interfaţă intuitivă. S-a încercat realizarea acestui lucru, pentru a permite folosirea sistemului de către câţi mai mulţi utilizatori, fără nevoia unei pregătiri intense.

În partea de sus a imaginii sunt prezentate în timp real imaginile de la cele două camere video montate pe robot. În imagine este prezentat un exemplu în care cele două camere sunt orientate în aceeiaşi direcţie. Acest lucru poate fi modificat pentru a obţine un câmp vizual mai mare, sau pentru a obţine diferite alte informaţii (se poate imagina un scenariu de navigare prin spaţii strâmte în care este folositoare o cameră la nivelul robotului mobil orientată spre înainte).

Pentru a reţine momente importante ambele camere sunt prevăzute cu mecanisme de capturare de instantanee, sau de înregistrare video. Acestea se realizează pe calculatorul utilizatorului de teleoperare şi nu influenţează aplicaţia în sine.

Mai este prezentă şi posibilitatea alegerii unei camere pentru afişare pe întreg ecranul. Acest lucru este util, când se doreşte inspectarea mai atentă a unei anumite zone. Datorită faptului că în acest mod nu mai sunt vizibile celelalte elemente de control, nu va fi posibilă comanda sistemului de teleoperare.

În partea din stânga jos a imaginii este prezentată o interfaţă de conectare cu aplicaţia server ce rulează pe robot. Această parte este responsabilă de transmiterea de mesaje prin socketuri. Mesajele transmise pot fi comenzi către dispozitivul de rotire/înclinare a camerelor sau către sistemul de acţionare. În plus cu ajutorul acestui sistem, mai mulţi utilizatori conectaţi la server pot comunica între ei (similar altor aplicaţii chat uzuale).

8.3 Comanda robotului cu ajutorul joystickului

Elementul central de comandă al robotului mobil este joystick-ul prezentat în capitolul următor. Folosirea acestuia este destul de simplă. În mod normal când utilizatorul acţionează joystickul, mişcarea acestuia se transformă în comenzi transmise dispozitivului de rotire/înclinare a camerelor. Dacă în plus utilizatorul acţionează şi butonul de pe joystick mişcarea acestuia este transformată în comenzi şi acestea sunt trimise sistemului de acţionare a robotului mobil.

8.3.1 Tipurile de Joy-stickuri

8.3.1.1 Varianta digitală

Cele mai uzuale joystickuri sunt cele digitale de tip Atari. Acestea sunt denumite Atari, deoarece acst tip de joystick a fost prima dată folosit la jocul Atari 2600 şi apoi adaptat şi folosit la calculatoare personale.

Page 93: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

8. Subsistemul de comandă Pagina 93 din 151

Figura 99 - Joystick digital

Joystickul în sine consta din cinci întrerupătoare, aranjate astfel încât patru dintre ele determinau o direcţie (stânga, dreapta, sus, jos) iar ultimul era folosit pe post de buton de tragere. Toate întrerupătoarele sunt normal deschise, iar în momentul în care joystickul este deplasat de pe centru unul sau două întrerupătoare sunt închise în funcţie de direcţia spre care a fost mişcat. Toate întrerupătoarele trag un pin de semnal la masă în momentul în care sunt închise.

8.3.1.2 Joystick de tip „PADDLE” Acesta este un controler foarte simplist, care constă dintr-un întrerupător şi un

potenţiometru acţionat de utilizator prin învârtire. Informaţia analogică trebuie convertită în una digitală. În ziua de azi acest lucru s-ar putea

realiza foarte simplu cu ajutorul unui convertor analog-numeric. Acest lucru însă nu era posibil la apariţia acestui tip de controler, deoarece astfel de convertoare era foarte scumpe şi greu de obţinut. Astfel s-a ales o variantă mai simplă şi mai puţin costisitoare. Informaţia analogică era transformată în lăţime de impuls, care poate fi uşor convertită numeric cu ajutorul unor circuite numărătoare. Această metodă este simplă, dar nu foarte precisă.

8.3.1.3 Joystickuri analogice Au apărut ca o combinaţie a amânduror modele prezentate mai sus. Ideea de bază este că

se măsoară mişcarea cu ajutorul unor potenţiometre, iar butoanele aferente sunt realizate tot cu întrerupătoare.

Cu ajutorul joystickurilor analogice s-a putut mări acurateţia de control, care era necesară la programe de simulare.

Joystickurile analogice nu au mai fost aşa de standardizate ca cele digitale. Fiecare producător are modelele proprii şi conectorul propriu.

Page 94: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

8. Subsistemul de comandă Pagina 94 din 151

8.3.1.4 Interfaţa PC pentru joystickuri analogice În ziua de azi cel mai uzual joystick analogic este cel de tip PC. Acest model a fost

prezentat de IBM odată cu primul IBM PC. Joystickul este unul simplu analogic, cu două butoane. Interfaţa originală avea posibilitatea cuplării a două joystickuri, dar datorită faptului că exista un singur conector era nevoie de un cablu Y pentru a putea conecta ambele joystickuri simultan. Ulterior unii producători au echipat placa de interfaţă cu doi conectori, iar alţii au ales să echipeze interfaţa pentru un singur joystick. Din fericire în ziua de azi toate plăcile de interfaţă au opţiunea de conectare a două joystickuri, la fel ca şi interfaţa originală.

Placa de interfaţă a fost gândită să fie cât mai simplă şi mia ieftină. Placa constă din

electronica de interfaţare cu bus-ul precum şi patru multivibratori monostabili. Aceste circuite erau simple circuite Timer care generau un impuls cu lăţime direct proporţională cu rezistenţa potenţiometrului. Lăţimea acestui puls era măsurată cu ajutorul unei bucle soft. Acest lucru genera o mulţime de probleme programatorilor. Pe maşini mai rapide rutina joystick nu citea semnalele în mod corespunzător, generând probleme de timing.

Joystickul constă din două potenţiometre cu rezistenţă variabilă între 0 şi 100 kohm.

Valoarea este minimă când joystickul este poziţionat în partea din stânga sus. Un capăt al potenţiometrului este conectat la +5V iar centrul potenţiometrului este conectat la ieşirea analogică a joystickului. Celălalt capăt este lăsat liber.

În cadrul joystickurilor analogice s-au folosit diferite tipuri de potenţiometre. Unele

transformă rotaţia într-o mişcare de tip linear, iar potenţiometrele sunt lineare, altele folosesc potenţiometre axiale antrenate direct de mişcare joystickului. Cel mai uzual se folosesc potenţiometre de 470 kohm şi datorită faptului că se foloseşte doar primul sfert de tură se ajunge la o gama de 0..120 kohmi. Tip Digital Analogic Tehnologie 5 întrerupătoare 2 potenţiometre şi 2

întrerupătoare Conector 9 pini D 15 pini D Alimentare Opţional 5V +5V necesari Direcţii 8 Nelimitat Autocentrare Da Da sau nu (de obicei

ajustabil) Butoane 1 (opţional 2 sau 3) 2 Joystickuri pe conector 1 1 sau 2 (cu cablu Y) Nr. de conectori 2 1 Calibrare necesară Nu Da Durabilitate Scurtă până la lungă Scurtă până la medie Limitări Doar 8 direcţii

comportament on/off Feedback prost către utilizator

Alte folosiri a portului Mouse, etc... Volan, manşă zbor, etc.

8.3.1.5 Conectorul joystick Mufă DB 15 de tip tată pe cablu

Page 95: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

8. Subsistemul de comandă Pagina 95 din 151

1 XY1 (+5v) 2 Switch 1 3 X1 4 Ground (for switch 1) 5 Ground (for switch 2) 6 Y1 7 Switch 2 8 N.C. 9 XY2 (+5v) 10 Switch 3 11 X2 12 Ground (for switch 3&4) * 13 Y2 14 Switch 4 15 N.C. * La unele interfeţe echiparea este doar pentru un singur joystick (până la pinul 7). Mai există şi unele variante unde şi la pinul 8 găsim alimentare cu 5V. În zilele noastre cel mai uzual interfaţa joystick o găsim pe plăcile de sunet împreună cu interfaţa MIDI. pin purpose 1 potentiometer common (Joy A) 2 button 1 (Joy A) 3 X coordinate potentiometer (Joy A) 4 button common (Joy A) 5 button common (Joy B) 6 Y coordinate potentiometer (Joy A) 7 button 2 (Joy A) 8 unused 9 potentiometer common (Joy B) 10 button 1 (Joy B) 11 X coordinate potentiometer (Joy B) 12 MIDI TXD (transmit) (computer -> midi) 13 Y coordinate potentiometer (Joy B) 14 button 2 (Joy B) 15 MIDI RXD (midi -> computer) În figura următoare este un exemplu standard de joystick împreună cu schema de interconectare aferentă.

Page 96: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

8. Subsistemul de comandă Pagina 96 din 151

Figura 100 - Joystick

Figura 101 - Schemă interconectare joystick cu un PC

Page 97: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

9. Funcţionarea (operarea) sistemului Pagina 97 din 151

9 Funcţionarea (operarea) sistemului

Sistemul este structurat pe mai multe nivele. Din punct de vedere al nivelului software, avem o arhitectură client/server.

Pe platforma robot rulează o aplicaţie server, care supraveghează subsistemul de poziţionare, dă comenzi de mişcare, preia informaţii de la senzorii de poziţie.

Figura 102 - Aplicaţia server

Referitor la subsistemul video aplicaţia server este responsabilă de preluarea de imagini

de la placa de captură, comprimarea acestora şi trimiterea lor căte aplicaţia client. O altă sarcină legată de subsistemul video este orientarea camerelor. Orientarea este realizată de dispozitivul de rotire/înclinare, care primeşte comenzile de la aplicaţia server.

O altă funcţie care o are aplicaţia server este autentificarea clienţilor, primirea de comenzi de la unul dintre aceştia şi furnizarea de date referitoare la starea sistemului şi a diferiţilor senzori.

Pe calculatorul clientului de teleoperare rulează o aplicaţie software, descrisă mai în amănunt în capitolul 8.2 Interfaţa prezentată utilizatorului la pagina 91. Aceasta are rolul de a prelua comenzi de la utilizator, de a le teletransmite la aplicaţia server. Mai îndeplineşte rolul de teleprezenţă, adică furnizează utilizatorului informaţii despre aplicaţia teleoperată. Utilizatorului sunt prezentate diferite informaţii în timp real, cum ar fi imaginile de la cele două camere, informaţii legate de sistemul de acţionare, etc.

Page 98: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

10. Concluzii şi perspective Pagina 98 din 151

10 Concluzii şi perspective

Lucrarea de faţă abordează o temă de interes în momentul de faţă: teleoperarea, respectiv teleprezenţa. În general în momentul de faţă trendul este spre distribuirea sistemelor, spre globalizarea aplicaţiilor. Acest lucru este posibil datorită dezvoltării tehnicii de calcul, a reţelelor de calculatoare, etc.

Implementarea practică a fost realizată punăndu-se accent pe blocuri standard, uşor accesibile, ca de exemplu elementul de comandă de pe platforma robotizată (un PC standard), dar şi elemente specifice acestei aplicaţii, cum ar fi partea de electronică de putere, logica de comandă a acţionărilor. Acestea au fost dezvoltate specific, din motive economice.

Ca posibile dezvoltări ulterioare amintim: • crearea unui sistem robotizat de dimensiuni mai reduse pentru aplicaţii specifice; • implementarea unui robot autonom, capabil de a lua decizii; • implementarea unui sistem de stereovision, cu ajutorul celor două camere prezente. Cu

ajutorul acestui algoritm implementarea punctului anterior este destul de simplă; • dotarea platformei cu diverşi senzori suplimentari, cum ar fi GPS, radar, sonar, etc.

Page 99: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

11.Bibliografie Pagina 99 din 151

11 Bibliografie

<1.> “Imaginea in sistemele multimedia“, Ing. Mihai MICEA <2.> “PC analogue joystick interface“, ePanorama.net,

http://www.epanorama.net/documents/joystick/pc_joystick.html <3.> “PC joystick interface circuits“, ePanorama.net,

http://www.epanorama.net/documents/joystick/ps_circuits.html <4.> “Bidirectional H-Bridge DC-Motor Motion Controller”, W. S. WOODWARD,

J. PETERSON; Electronic design 26 July 1999 <5.> “Brief H-Bridge Theory Of Operation”, J. Brown; DPRG.org;

http://dprg.org/tutorials/1998-04a.html <6.> “MOSFET H-Bridge Schematic & Theory Of Operation”; E. Blanchard;

http://www.cs.uwa.edu.au/~mafm/robot/blanch-h-bridge.html <7.> "Resolvers vs. Rotary Encoders", Manolis, Steve; Motion Control, March 1993

Vol. 4, No. 3 <8.> “Pulse Width Modulation”, Michael Adler and Tim Surtell <9.> “Programare socket în Windows”, Radu Stanciulescu <10.> “Turning Sunlight Into Electricity”, U.S. Department of Energy Photovoltaics

Program <11.> Constantine A. Balanis. Antenna theory: analysis and design. Wiley, 1997. <12.> Wireless Community Wireless Community Networks, Robert L. Williams,

Texas State Library and Archives Commission Library Development Division, 1999

Page 100: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

Anexa 1 Pagina 100 din 151

Anexa 1 – Proiectul platformei experimentale

Figura 103 - Subansamblu complet

Page 101: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

Anexa 1 Pagina 101 din 151

Figura 104 - Subansamblu complet

Figura 105 - Părţi componente subansamblu

Page 102: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

Anexa 1 Pagina 102 din 151

Figura 106 - Ax

Figura 107 - Bucşă

Page 103: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

Anexa 1 Pagina 103 din 151

Figura 108 - Inel

Figura 109 - Arbore

Figura 110 - Manşon de cuplare

Page 104: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

Anexa 1 Pagina 104 din 151

Figura 111 - Bucşă antrenare

Figura 112 - Suport Encoder

Page 105: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

Anexa 1 Pagina 105 din 151

Figura 113 - Placă suport

Page 106: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

Anexa 2 Pagina 106 din 151

Anexa 2 – Schema punţii „H“ pentru comanda motoarelor DC

Figura 114 - Schema punţii „H“

Page 107: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

Anexa 3 Pagina 107 din 151

Anexa 3 – Cablajul realizat aferent punţii „H“

Figura 115 - Cablajul punţii „H“ – faţa superioară

Figura 116 - Cablajul punţii „H“ - faţa inferioară

Page 108: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

Anexa 4 Pagina 108 din 151

Anexa 4 – Schema sistemului de comandă a punţii „H“

Figura 117 - Schema sistemului de comandă a punţii - detaliu - microcontrolerul

Figura 118 - Intrări separate galvanic

Page 109: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

Anexa 4 Pagina 109 din 151

Figura 119 - Ieşiri separate galvanic

Figura 120 - Formare impulsuri numărare

Page 110: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

Anexa 4 Pagina 110 din 151

Figura 121 - Una din cele trei ramuri cu numărătoare pe 24 de biţi

Page 111: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

Anexa 5 Pagina 111 din 151

Anexa 5 – Cablajul sistemului de comandă a punţii „H“. Faţa superioară

Figura 122 - Cablajul sistemului de comandă : faţa superioară

Page 112: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

Anexa 6 Pagina 112 din 151

Anexa 6 – Cablajul sistemului de comandă a punţii „H“. Faţa inferioară

Figura 123 - Cablajul sistemului de comandă : faţa inferioară

Page 113: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

Anexa 7 Pagina 113 din 151

Anexa 7 – Codul sursă al sistemului de comandă a punţii „H“ #include "main.h" #include <stdio.h> #define FALSE 0 #define TRUE 1 #define OFF 1 #define ON 0 #define FORWARD 0 #define BACKWARD 1 //#define DEBUG //#define DEBUGLEVEL2 #define MAX_INT 65500 #define TIMER_1_PRESCALE_VALUE 0 #define SPEED_PAS 5 #define TL1_RELOAD 255 #define TH1_RELOAD 128 #define PWM_CASE_NONE 0 #define PWM_CASE_X_FIRST 1 #define PWM_CASE_Y_FIRST 2 #define PWM_CASE_EQUAL 3 #define GET_BUFF_LEN 0x01 #define START 0x02 #define STOP 0x03 #define OK 0x04 #define DOWNLOAD 0x05 #define BUFFER_OVERRUN 0x06 #define GET_COUNTER 0x07 #define GET_X_POS 0x08 #define GET_Y_POS 0x09 #define RESET 0x0A #define SET_PWM 0x0B #define SET_X_SPEED 0x0C #define SET_Y_SPEED 0x0D #define START_X 0x0E #define START_Y 0x0F #define STOP_X 0x10 #define STOP_Y 0x11 #define SET_DIR_X_FORW 0x12 #define SET_DIR_X_BACKW 0x13 #define SET_DIR_Y_FORW 0x14 #define SET_DIR_Y_BACKW 0x15 #define test_INC_SPEED_X 0x31 //'1' #define test_DEC_SPEED_X 0x32 //'2' #define test_INC_SPEED_Y 0x33 //'3' #define test_DEC_SPEED_Y 0x34 //'4' #define test_INC_SPEED_GET_Y 0x35 //'5' #define test_DEC_SPEED_GET_Y 0x36 //'6' #define test_PRINT_SPEEDS_X 0x37 //'7' #define test_PRINT_SPEEDS_Y 0x38 //'8'

Page 114: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

Anexa 7 Pagina 114 din 151

unsigned int x_speed_set, y_speed_set; unsigned int x_speed_get, y_speed_get; long int x_pos,y_pos; long int old_x_pos,old_y_pos; short period=1; bit PWM_X_CHANNEL_ENABLED,PWM_Y_CHANNEL_ENABLED; unsigned char timer_1_prescale=0; unsigned char TL0_reload_1,TH0_reload_1,TL0_reload_2,TH0_reload_2; unsigned char TL0_reload_3,TH0_reload_3; unsigned long int PWM_X_ON=1500, PWM_X_OFF=1500; unsigned long int PWM_Y_ON=1500, PWM_Y_OFF=1500; short PWM_CASE; volatile unsigned char xdata *buf1=0x0500; volatile unsigned char xdata *buf2=0x0100; volatile unsigned char xdata *buf3=0x0600; volatile unsigned char xdata *buf4=0x8000; volatile unsigned char xdata *buf5=0x8400; unsigned char temp1,temp2,temp3,temp4,temp5; void msec(unsigned int x) unsigned char j; while(x-- > 0) for (j=0;j<125;j++); void Timer0Int(void) interrupt 1 using 1 switch (period) case 1 : TL0=TL0_reload_1; TH0=TH0_reload_1; if (PWM_X_CHANNEL_ENABLED) X_CHANNEL_OUTPUT=OFF; if (PWM_Y_CHANNEL_ENABLED) Y_CHANNEL_OUTPUT=OFF; if (PWM_CASE==PWM_CASE_EQUAL) period++; //sarim peste 2 //la urmatoarea executie break; case 2 : TL0=TL0_reload_2; TH0=TH0_reload_2; switch (PWM_CASE) case PWM_CASE_X_FIRST: if (PWM_X_CHANNEL_ENABLED) X_CHANNEL_OUTPUT=ON; if (PWM_Y_CHANNEL_ENABLED) Y_CHANNEL_OUTPUT=OFF; break; case PWM_CASE_Y_FIRST: if (PWM_X_CHANNEL_ENABLED) X_CHANNEL_OUTPUT=OFF;

Page 115: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

Anexa 7 Pagina 115 din 151

if (PWM_Y_CHANNEL_ENABLED) Y_CHANNEL_OUTPUT=ON; break; break; case 3 : TL0=TL0_reload_3; TH0=TH0_reload_3; if (PWM_X_CHANNEL_ENABLED) X_CHANNEL_OUTPUT=ON; if (PWM_Y_CHANNEL_ENABLED) Y_CHANNEL_OUTPUT=ON; period=0; break; period++; void Timer1Int(void) interrupt 4 using 1 int tempA1,tempA2; int tempB1,tempB2; if (timer_1_prescale < TIMER_1_PRESCALE_VALUE) timer_1_prescale++; return; timer_1_prescale=0; // get x speed P10=0; //activate LdA P10=1; //deactivate LdA tempA1=*buf4; tempA2=*buf5; x_pos=tempA2*256+tempA1; if (x_pos > old_x_pos) x_speed_get=x_pos-old_x_pos; else x_speed_get=old_x_pos-x_pos; old_x_pos=x_pos; // get y speed P11=0; //activate LdB P11=1; //deactivate LdB tempB1=*buf1; tempB2=*buf2; y_pos=tempB2*256+tempB1; if (y_pos > old_y_pos) y_speed_get=y_pos-old_y_pos; else y_speed_get=old_y_pos-y_pos; old_y_pos=y_pos; // working speed X setting // test x_speed_get against set speed #ifdef DEBUGLEVEL2 putchar('x');

Page 116: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

Anexa 7 Pagina 116 din 151

#endif if (x_speed_get > x_speed_set) // we must decrease the speed if (PWM_X_OFF > SPEED_PAS) #ifdef DEBUG putchar('d'); #endif PWM_X_ON+=SPEED_PAS; PWM_X_OFF-=SPEED_PAS; switch ((x_speed_set-x_speed_get)/10) default: if (PWM_X_OFF > SPEED_PAS) PWM_X_ON+=SPEED_PAS; PWM_X_OFF-=SPEED_PAS; case 2: if (PWM_X_OFF > SPEED_PAS) PWM_X_ON+=SPEED_PAS; PWM_X_OFF-=SPEED_PAS; case 1: if (PWM_X_OFF > SPEED_PAS) PWM_X_ON+=SPEED_PAS; PWM_X_OFF-=SPEED_PAS; case 0: break; if (x_speed_get < x_speed_set) // we must increase the speed if (PWM_X_ON > SPEED_PAS) #ifdef DEBUG putchar('i'); #endif PWM_X_ON-=SPEED_PAS; PWM_X_OFF+=SPEED_PAS; switch ((x_speed_get-x_speed_set)/10) default: if (PWM_X_ON > SPEED_PAS) PWM_X_ON-=SPEED_PAS; PWM_X_OFF+=SPEED_PAS; case 2: if (PWM_X_ON > SPEED_PAS) PWM_X_ON-=SPEED_PAS; PWM_X_OFF+=SPEED_PAS; case 1: if (PWM_X_ON > SPEED_PAS) PWM_X_ON-=SPEED_PAS; PWM_X_OFF+=SPEED_PAS; case 0: break; // working speed Y setting // test y_speed_get against set speed #ifdef DEBUGLEVEL2 putchar('y');

Page 117: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

Anexa 7 Pagina 117 din 151

#endif if (y_speed_get > y_speed_set) // we must decrease the speed if (PWM_Y_OFF > SPEED_PAS) #ifdef DEBUG putchar('d'); #endif PWM_Y_ON+=SPEED_PAS; PWM_Y_OFF-=SPEED_PAS; switch ((y_speed_set-y_speed_get)/10) default: if (PWM_Y_OFF > SPEED_PAS) PWM_Y_ON+=SPEED_PAS; PWM_Y_OFF-=SPEED_PAS; case 2: if (PWM_Y_OFF > SPEED_PAS) PWM_Y_ON+=SPEED_PAS; PWM_Y_OFF-=SPEED_PAS; case 1: if (PWM_Y_OFF > SPEED_PAS) PWM_Y_ON+=SPEED_PAS; PWM_Y_OFF-=SPEED_PAS; case 0: break; if (y_speed_get < y_speed_set) // we must increase the speed if (PWM_Y_ON > SPEED_PAS) #ifdef DEBUG putchar('i'); #endif PWM_Y_ON-=SPEED_PAS; PWM_Y_OFF+=SPEED_PAS; switch ((y_speed_get-y_speed_set)/10) default: if (PWM_Y_ON > SPEED_PAS) PWM_Y_ON-=SPEED_PAS; PWM_Y_OFF+=SPEED_PAS; case 2: if (PWM_Y_ON > SPEED_PAS) PWM_Y_ON-=SPEED_PAS; PWM_Y_OFF+=SPEED_PAS; case 1: if (PWM_Y_ON > SPEED_PAS) PWM_Y_ON-=SPEED_PAS; PWM_Y_OFF+=SPEED_PAS; case 0: break; // acum avem PWM_X_ON si _Y_ON respectiv OFF // trebuie sa vedem care dintre ON e mai scurt // daca X_ON mai scurt suntem in cazul 1 // daca Y_ON atunci cazul 2 // else daca-s egale in cazul 3

Page 118: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

Anexa 7 Pagina 118 din 151

if (PWM_X_ON < PWM_Y_ON) PWM_CASE = PWM_CASE_X_FIRST; TL0_reload_1 = (unsigned char) ((MAX_INT-PWM_X_ON) & 0xFF); TH0_reload_1 = (unsigned char) ((MAX_INT-PWM_X_ON) >> 8); TL0_reload_2 = (unsigned char) ((MAX_INT-(PWM_Y_ON-PWM_X_ON)) & 0xFF); TH0_reload_2 = (unsigned char) ((MAX_INT-(PWM_Y_ON-PWM_X_ON)) >> 8); TL0_reload_3 = (unsigned char) ((MAX_INT-PWM_Y_OFF) & 0xFF); TH0_reload_3 = (unsigned char) ((MAX_INT-PWM_Y_OFF) >> 8); else if (PWM_Y_ON < PWM_X_ON) PWM_CASE = PWM_CASE_Y_FIRST; TL0_reload_1 = (unsigned char) ((MAX_INT-PWM_Y_ON) & 0xFF); TH0_reload_1 = (unsigned char) ((MAX_INT-PWM_Y_ON) >> 8); TL0_reload_2 = (unsigned char) ((MAX_INT-(PWM_X_ON-PWM_Y_ON)) & 0xFF); TH0_reload_2 = (unsigned char) ((MAX_INT-(PWM_X_ON-PWM_Y_ON)) >> 8); TL0_reload_3 = (unsigned char) ((MAX_INT-PWM_X_OFF) & 0xFF); TH0_reload_3 = (unsigned char) ((MAX_INT-PWM_X_OFF) >> 8); else //PWM_X_ON = PWM_Y_ON PWM_CASE = PWM_CASE_EQUAL; TL0_reload_1 = (unsigned char) ((MAX_INT-PWM_X_ON) & 0xFF); TH0_reload_1 = (unsigned char) ((MAX_INT-PWM_X_ON) >> 8); TL0_reload_3 = (unsigned char) ((MAX_INT-PWM_X_OFF) & 0xFF); TH0_reload_3 = (unsigned char) ((MAX_INT-PWM_X_OFF) >> 8); #ifdef DEBUG #ifdef DEBUGLEVEL2 putchar('-'); putchar(PWM_CASE); putchar('-'); #ifdef DEBUGLEVEL3 putchar(TL0_reload_1); putchar(TH0_reload_1); putchar(TL0_reload_2); putchar(TH0_reload_2); putchar(TL0_reload_3); putchar(TH0_reload_3); #endif #endif #endif TL1=TL1_RELOAD; TH1=TH1_RELOAD; unsigned char getc() while (!RI); RI=0; return SBUF;

Page 119: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

Anexa 7 Pagina 119 din 151

void set_X_dir(bit DIR) bit temp; temp=PWM_X_CHANNEL_ENABLED; PWM_X_CHANNEL_ENABLED=FALSE; X_CHANNEL_OUTPUT=1; x_speed_set=0; msec(150); //wait 150 msecs //set direction and restore speed and status X_CHANNEL_DIRECTION=DIR; PWM_X_CHANNEL_ENABLED=temp; void set_Y_dir(bit DIR) bit temp; temp=PWM_Y_CHANNEL_ENABLED; PWM_Y_CHANNEL_ENABLED=FALSE; Y_CHANNEL_OUTPUT=1; y_speed_set=0; msec(150); //wait 150 msecs //set direction and restore speed and status Y_CHANNEL_DIRECTION=DIR; PWM_Y_CHANNEL_ENABLED=temp; void init(void) /*serial init*/ SCON=0x50; /*Enable receive*/ PCON=0x0; TCON&=0xFB; TI=1; /*Cause interrupt to start*/ RI=0; TL0=0; TH0=0x0D; T2MOD=0x00; /*Timer1 mode 2 */ // TH1=0xFD; /*9600 baud 11.059MHz */ T2CON=0x34; /*Start baud Clock*/ ET2=0; TR2=1; TL2=0xDC; //*AdrSerial19200; TH2=0xFF; RC2L=0xF5; //*AdrSerial19200; RC2H=0xFF; REN=1; EX1=0; TR0=1; EA=1; EX0=1; IT0=1; TMOD=0x11; // Timer 0 16 bit, Timer 1 16 bit TR0=1;

Page 120: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

Anexa 7 Pagina 120 din 151

TR1=1; ET0=1; //Timer 0 interrupt ET1=1; TH0=0x59; // pt. T=100.2 microsecunde /0x59 CMOD=0x05; CCON=0x40; IPH=0x42; IP=0x02; PPCH=1; void main(void) unsigned char command; unsigned char spd_x,spd_y; init(); printf("Init ok"); P12=0; P13=0; while(1) if (RI) command=getc(); //putchar(command); switch (command) case SET_PWM: printf("Waiting for PWM settings\n"); TL0_reload_1=getc(); TH0_reload_1=getc(); TL0_reload_2=getc(); TH0_reload_2=getc(); PWM_X_ON=(int)TH0_reload_1*256+(int)TL0_reload_1; PWM_X_OFF=(int)TH0_reload_2*256+(int)TL0_reload_2; printf("Settings are: %d %d %d %d\n",(int)TL0_reload_1,(int)TH0_reload_1,(int)TL0_reload_2,(int)TH0_reload_2); break; case DOWNLOAD: break; case GET_X_POS: P10=0; //activate LdA P10=1; //deactivate LdA temp1=*buf4; temp2=*buf5; printf("t1=%d t2=%d\n",(int)temp1,(int)temp2); break; case GET_Y_POS: P11=0; //activate LdB P11=1; //deactivate LdB temp1=*buf1; temp2=*buf2; printf("t1=%d t2=%d\n",(int)temp1,(int)temp2); break; case SET_X_SPEED: printf("Waiting for X speed\n"); spd_x=getc(); #ifdef DEBUG printf("got speed %c",spd_x); #endif if (spd_x < 128)

Page 121: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

Anexa 7 Pagina 121 din 151

x_speed_set=128-spd_x; if (X_CHANNEL_DIRECTION==BACKWARD) #ifdef DEBUG printf("negative X speed = -%d , reversing\n",x_speed_set); #endif set_X_dir(FORWARD); else if (X_CHANNEL_DIRECTION==FORWARD) #ifdef DEBUG printf("positive X speed, reversing\n"); #endif set_X_dir(BACKWARD); else x_speed_set=spd_x-128; break; case SET_Y_SPEED: printf("Waiting for Y speed\n"); spd_y=getc(); printf("got speed %d",spd_y); if (spd_y < 128) if (Y_CHANNEL_DIRECTION==BACKWARD) #ifdef DEBUG printf("negative Y speed, reversing\n"); #endif y_speed_set=128-spd_y; set_Y_dir(FORWARD); else if (Y_CHANNEL_DIRECTION==FORWARD) #ifdef DEBUG printf("negative Y speed, reversing\n"); #endif set_Y_dir(BACKWARD); else y_speed_set=spd_y; break; case START_X: #ifdef DEBUG printf("Channel X activated\n"); #endif PWM_X_CHANNEL_ENABLED=TRUE; x_speed_set=0; break; case START_Y: #ifdef DEBUG printf("Channel Y activated\n"); #endif PWM_Y_CHANNEL_ENABLED=TRUE; y_speed_set=0;

Page 122: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

Anexa 7 Pagina 122 din 151

break; case STOP_X: #ifdef DEBUG printf("Channel X disabled\n"); #endif PWM_X_CHANNEL_ENABLED=FALSE; X_CHANNEL_OUTPUT=1; x_speed_set=0; break; case STOP_Y: #ifdef DEBUG printf("Channel Y disabled\n"); #endif PWM_Y_CHANNEL_ENABLED=FALSE; Y_CHANNEL_OUTPUT=1; y_speed_set=0; break; case test_INC_SPEED_X: x_speed_set+=5; break; case test_DEC_SPEED_X: x_speed_set-=5; break; case test_INC_SPEED_Y: y_speed_set+=5; break; case test_DEC_SPEED_Y: y_speed_set-=5; break; case test_INC_SPEED_GET_Y: y_speed_get+=5; break; case test_DEC_SPEED_GET_Y: y_speed_get-=5; break; case test_PRINT_SPEEDS_X: printf("x_speed_set=%d x_speed_get=%d PWM_X_ON=%ld PWM_X_OFF=%ld\n",x_speed_set,x_speed_get,PWM_X_ON,PWM_X_OFF); break; case test_PRINT_SPEEDS_Y: printf("y_speed_set=%d y_speed_get=%d PWM_Y_ON=%ld PWM_Y_OFF=%ld\n",y_speed_set,y_speed_get,PWM_Y_ON,PWM_Y_OFF); break; else; ;

Page 123: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

Anexa 8 Pagina 123 din 151

Anexa 8 – Codul sursă al aplicaţiei server, care rulează pe sistemul de comandă al robotului // ServerDlg.cpp : implementation file // #include "stdafx.h" #include "Server.h" #include "ServerDlg.h" #include "UserMessage.h" static CString g_strCom1; static CString g_strCom2; static CServerDlg *g_dlg; #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif // CServerDlg dialog CServerDlg::CServerDlg(CWnd* pParent /*=NULL*/) : CDialog(CServerDlg::IDD, pParent) //AFX_DATA_INIT(CServerDlg) m_lPort = 6000; //AFX_DATA_INIT m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); void CServerDlg::DoDataExchange(CDataExchange* pDX) CDialog::DoDataExchange(pDX); //AFX_DATA_MAP(CServerDlg) DDX_Control(pDX, IDC_LIST_CONTROL, m_listControl); DDX_Control(pDX, IDC_BUTTON_START_STOP, m_buttonConnect); DDX_Control(pDX, IDC_LIST_SOCKET, m_listSocket); DDX_Control(pDX, IDC_LIST_COM2, m_listCom2); DDX_Control(pDX, IDC_LIST_COM1, m_listCom1); DDX_Text(pDX, IDC_EDIT_PORT, m_lPort); DDV_MinMaxLong(pDX, m_lPort, 0, 10000); //AFX_DATA_MAP BEGIN_MESSAGE_MAP(CServerDlg, CDialog) //AFX_MSG_MAP(CServerDlg) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(IDC_BUTTON_START_STOP, OnButtonStartStop) ON_BN_CLICKED(IDC_BUTTON1, OnButtonSocketClear) ON_BN_CLICKED(IDC_BUTTON2, OnButtonControlClear) ON_BN_CLICKED(IDC_BUTTON3, OnButtonCom1Clear) ON_BN_CLICKED(IDC_BUTTON4, OnButtonCom2Clear) //AFX_MSG_MAP END_MESSAGE_MAP()

Page 124: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

Anexa 8 Pagina 124 din 151

///////////////////////////////////////////////////////////////////////////// // CServerDlg message handlers BOOL CServerDlg::OnInitDialog() CDialog::OnInitDialog(); // Add "About..." menu item to system menu. // IDM_ABOUTBOX must be in the system command range. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) CString strAboutMenu; strAboutMenu.LoadString(IDS_ABOUTBOX); if (!strAboutMenu.IsEmpty()) pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); // Set the icon for this dialog. The framework does this automatically // when the application's main window is not a dialog SetIcon(m_hIcon, TRUE); // Set big icon SetIcon(m_hIcon, FALSE); // Set small icon // TODO: Add extra initialization here m_portCom1 = initcomm("COM1",9600); m_portCom2 = initcomm("COM2",57600); this->OnButtonStartStop(); return TRUE; // return TRUE unless you set the focus to a control void CServerDlg::OnSysCommand(UINT nID, LPARAM lParam) if ((nID & 0xFFF0) == IDM_ABOUTBOX) CAboutDlg dlgAbout; dlgAbout.DoModal(); else CDialog::OnSysCommand(nID, lParam); // If you add a minimize button to your dialog, you will need the code below // to draw the icon. For MFC applications using the document/view model, // this is automatically done for you by the framework. void CServerDlg::OnPaint() if (IsIconic())

Page 125: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

Anexa 8 Pagina 125 din 151

CPaintDC dc(this); // device context for painting SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); // Center icon in client rectangle int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; // Draw the icon dc.DrawIcon(x, y, m_hIcon); else CDialog::OnPaint(); // The system calls this to obtain the cursor to display while the user drags // the minimized window. HCURSOR CServerDlg::OnQueryDragIcon() return (HCURSOR) m_hIcon; // Called when a user tries to connect to the server. Return TRUE to accept // the connection or FALSE otherwise. The derived class must override this // method. BOOL CServerDlg::OnIsConnectionAccepted() // Accept only 20 users as an example, you can change this number or always // return TRUE; ASSERT(GetNbUsers() < 20); return (GetNbUsers() < 20); // Called when a user is connected to the server. The derived class must // override this method. void CServerDlg::OnConnect(long /*lUserId*/) // OnMessage: ChatUserJoin adds the user in the map, so nothing to do here // Called whenever a message is received from a user. void CServerDlg::OnMessage(long lUserId, CNDKMessage& message) CString strNickname; m_mapIdsNicknames.Lookup(lUserId, strNickname); switch (message.GetId()) case ChatUserJoin: CString strNickname; message.GetAt(0, strNickname); AddUser(lUserId, strNickname);

Page 126: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

Anexa 8 Pagina 126 din 151

CString strUserJoin; strUserJoin.Format(IDS_USER_JOIN, strNickname); AddSystemText(strUserJoin); SendMessageToAllUsersExceptFor(lUserId, message); break; case ChatText: CString strText; message.GetAt(0, strText); AddSocketText(strNickname + _T(": ") + strText); message.SetAt(0, strNickname); message.SetAt(1, strText); // Send the text to all other users SendMessageToAllUsersExceptFor(lUserId, message); break; case SpeedCommand: CString strText; message.GetAt(1, strText); g_strCom2 = strText; WriteCom2((LPVOID)m_portCom2); AddSocketText(strNickname + _T(": SpeedCommand: ") + strText); message.SetAt(0, strNickname); message.SetAt(1, strText); // Send the text to all other users SendMessageToAllUsersExceptFor(lUserId, message); break; case PTCommand: CString strText; message.GetAt(1, strText); g_strCom1 = strText; WriteCom1((LPVOID)m_portCom1); AddSocketText(strNickname + _T(": PTCommand: ") + strText); message.SetAt(0, strNickname); message.SetAt(1, strText); // Send the text to all other users SendMessageToAllUsersExceptFor(lUserId, message);

Page 127: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

Anexa 8 Pagina 127 din 151

break; case ChatBigMessage: break; // Called whenever a user is disconnected (the the user might have closed // the connection or an error occurs when sending a message, for example). // OnDisconnect callback isn't called when DisconnectUser or // DisconnectAllUsers is used. DisconnectUser don't // need to be called when OnDisconnect callback is called. void CServerDlg::OnDisconnect(long lUserId, NDKServerDisconnection disconnectionType) CString strNickname; m_mapIdsNicknames.Lookup(lUserId, strNickname); CNDKMessage message(ChatUserQuit); message.Add(strNickname); // Inform all users that a user is disconnected SendMessageToAllUsers(message); UINT unResId = 0; switch (disconnectionType) case NDKServer_NormalDisconnection: unResId = IDS_SERVER_CLOSE_USER; break; case NDKServer_ClientCloseConnection: unResId = IDS_USER_QUIT; break; case NDKServer_ErrorSendingMessage: unResId = IDS_ERROR_SENDING_MESSAGE; break; case NDKServer_ErrorReceivingMessage: unResId = IDS_ERROR_SENDING_MESSAGE; break; default: break; CString strUserQuit; strUserQuit.Format(unResId, strNickname); //AddSystemText(strUserQuit); DeleteUser(lUserId); // Called when the ping from the user is received. The number of // milliseconds is returned since PingUser was called. void CServerDlg::OnPing(long lUserId, long lNbMilliseconds) CString strNickname; m_mapIdsNicknames.Lookup(lUserId, strNickname);

Page 128: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

Anexa 8 Pagina 128 din 151

CString strPingReceived; strPingReceived.Format(IDS_PING_RECEIVED, strNickname, lNbMilliseconds); //AddSystemText(strPingReceived); void CServerDlg::DeleteUser(long lUserId) CString strNickname; m_mapIdsNicknames.Lookup(lUserId, strNickname); m_mapIdsNicknames.RemoveKey(lUserId); void CServerDlg::OnButtonStartStop() if (UpdateData(TRUE)) if (IsStarted()) Stop(); UpdateUI(); AddSystemText((LPCSTR)IDS_STOPPED); else if (StartListening(m_lPort)) UpdateUI(); AddSystemText((LPCSTR)IDS_STARTED); g_dlg = this; //AfxBeginThread(ReadCom1, (LPVOID)m_portCom1); else AfxMessageBox(IDS_CANNOT_START, MB_ICONSTOP); void CServerDlg::UpdateUI() BOOL bEnable = IsStarted(); if (bEnable) m_buttonConnect.SetWindowText(_T("&Stop")); else m_buttonConnect.SetWindowText(_T("&Start")); void CServerDlg::AddSystemText(const CString& strText) AddText(_T("* ") + strText + _T(" *"));

Page 129: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

Anexa 8 Pagina 129 din 151

void CServerDlg::AddText(const CString& strText) m_listControl.AddString(strText); void CServerDlg::AddUser(long lUserId, const CString& strNickname) m_mapIdsNicknames.SetAt(lUserId, strNickname); //int nPos = m_listBoxUsers.AddString(strNickname); //m_listBoxUsers.SetCurSel(nPos); void CServerDlg::AddSocketText(const CString& strText) m_listSocket.AddString(strText); HANDLE CServerDlg::initcomm(char *sport, int spd) HANDLE hCom; BOOL fSuccess; LPCOMMTIMEOUTS lpCommTimeouts=(LPCOMMTIMEOUTS)malloc(sizeof(COMMTIMEOUTS)); COMMTIMEOUTS noblock; DCB dcb; hCom=CreateFile(sport, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL ); fSuccess = GetCommTimeouts(hCom, &noblock); noblock.ReadTotalTimeoutConstant = 1000; noblock.ReadTotalTimeoutMultiplier = MAXDWORD; noblock.ReadIntervalTimeout = MAXDWORD; fSuccess = SetCommTimeouts(hCom, &noblock); fSuccess = GetCommState(hCom, &dcb); dcb.BaudRate = spd; dcb.ByteSize = 8; dcb.fParity = FALSE; dcb.StopBits = ONESTOPBIT; dcb.fRtsControl = RTS_CONTROL_DISABLE; dcb.fOutxCtsFlow = FALSE; fSuccess = SetCommState(hCom, &dcb); lpCommTimeouts->ReadTotalTimeoutConstant = 0; lpCommTimeouts->ReadTotalTimeoutMultiplier = 0; if (SetCommTimeouts(hCom,lpCommTimeouts)==0) AfxMessageBox("error setting port timeouts"); return hCom; void CServerDlg::writecomm(HANDLE hCom,char item) unsigned long ni; BOOL fSuccess; // LPDWORD lpModemStat=(LPDWORD)malloc(sizeof(PDWORD)); // EscapeCommFunction(comport,CLRRTS); fSuccess = WriteFile( hCom, &item, 1, &ni, NULL);

Page 130: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

Anexa 8 Pagina 130 din 151

// EscapeCommFunction(comport,SETRTS); char CServerDlg::readcomm(HANDLE hCom) char item; unsigned long ni; BOOL fSuccess; fSuccess = ReadFile( hCom, &item, 1, &ni, NULL); if (ni == 0) return -1; return item; UINT CServerDlg::ReadCom1(LPVOID p) while(1) char sir[1000] = 0; int i=0; char c = readcomm( (HANDLE)p ); while (c!='1') sir[i++] = c; c = readcomm( (HANDLE)p ) ; CString str; str.Format("-->> %s", _T(sir) ); g_dlg->m_listCom1.AddString(_T(str)); CNDKMessage message(ChatText); message.SetAt(0, _T("Server") ); message.SetAt(1, _T(str) ); try g_dlg->SendMessageToAllUsers(message); catch(...) AfxMessageBox("Eroare"); break; return 0; UINT CServerDlg::ReadCom2(LPVOID p) while(1) char sir[1000] = 0; int i=0; char c = readcomm( (HANDLE)p ); while (c!='1') sir[i++] = c; c = readcomm( (HANDLE)p ) ; CString str; str.Format("-->> %s", _T(sir) ); g_dlg->m_listCom2.AddString(_T(str));

Page 131: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

Anexa 8 Pagina 131 din 151

CNDKMessage message(ChatText); message.SetAt(0, _T(sir) ); message.SetAt(1, _T(sir) ); try g_dlg->SendMessageToAllUsers(message); catch(CException e) AfxMessageBox("Eroare"); return 0; UINT CServerDlg::WriteCom1(LPVOID p1) for(int i = 0; i < g_strCom1.GetLength(); i++) Sleep(3); writecomm((HANDLE)p1, g_strCom1.GetAt(i)); CString str; str.Format("<<-- %s", g_strCom1); m_listCom1.AddString(_T(str)); return 0; UINT CServerDlg::WriteCom2(LPVOID p2) for(int i = 0; i < g_strCom2.GetLength(); i++) Sleep(3); writecomm((HANDLE)p2, g_strCom2.GetAt(i)); CString str; str.Format("<<-- %s", g_strCom2); m_listCom2.AddString(_T(str)); return 0; void CServerDlg::OnButtonSocketClear() m_listSocket.ResetContent(); void CServerDlg::OnButtonControlClear() m_listControl.ResetContent(); void CServerDlg::OnButtonCom1Clear() m_listCom1.ResetContent(); void CServerDlg::OnButtonCom2Clear() m_listCom2.ResetContent();

Page 132: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

Anexa 8 Pagina 132 din 151

UserMessage.h #pragma once // Message Id shared with the client and the server enum UserMessage ChatUserJoin, ChatUserQuit, ChatText, SpeedCommand, PTCommand, ChatBigMessage ;

Page 133: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

Anexa 9 Pagina 133 din 151

Anexa 9 – Codul sursă al aplicaţiei de teleoperare // tryDlg.cpp : implementation file // #include "stdafx.h" #include "try.h" #include "tryDlg.h" #include "livex.h" #include "NDKMessage.h" #include "ChatMessage.h" #include "SpeedCommands.h" #include "PTCommands.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif // CTryDlg dialog CTryDlg::CTryDlg(CWnd* pParent /*=NULL*/) : CDialog(CTryDlg::IDD, pParent) //AFX_DATA_INIT(CTryDlg) m_strChat = _T(""); m_strEdit3 = _T(""); //AFX_DATA_INIT m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); void CTryDlg::DoDataExchange(CDataExchange* pDX) CDialog::DoDataExchange(pDX); //AFX_DATA_MAP(CTryDlg) DDX_Control(pDX, IDC_Mot_R, m_Mot_R); DDX_Control(pDX, IDC_Mot_L, m_Mot_L); DDX_Control(pDX, IDC_SLIDER2, m_slider2); DDX_Control(pDX, IDC_SLIDER1, m_slider1); DDX_Control(pDX, IDC_CHECK_BUTTON_2, m_chkButton2); DDX_Control(pDX, IDC_CHECK_BUTTON_1, m_chkButton1); DDX_Control(pDX, IDC_BUTTON_STOP_2, m_stop_2); DDX_Control(pDX, IDC_BUTTON_STOP_1, m_stop_1); DDX_Control(pDX, IDC_BUTTON_REC_2, m_rec_2); DDX_Control(pDX, IDC_BUTTON_REC_1, m_rec_1); DDX_Control(pDX, IDC_BUTTON3, m_buttonConnect); DDX_Control(pDX, IDC_Axis_y, m_axis_y); DDX_Control(pDX, IDC_Axis_x, m_axis_x); DDX_Control(pDX, IDC_EDIT2, m_editChatWindow); DDX_Control(pDX, IDC_LIVECTRL1, m_livex); DDX_Control(pDX, IDC_LIVECTRL2, m_livex2); DDX_Text(pDX, IDC_EDIT1, m_strChat); DDX_Text(pDX, IDC_EDIT3, m_strEdit3); //AFX_DATA_MAP BEGIN_MESSAGE_MAP(CTryDlg, CDialog)

Page 134: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

Anexa 9 Pagina 134 din 151

//AFX_MSG_MAP(CTryDlg) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(IDC_BUTTON1, OnButtonStartVideo) ON_WM_DESTROY() ON_BN_CLICKED(IDC_BUTTON3, OnButtonConnect) ON_BN_CLICKED(IDC_BUTTON2, OnButtonSend) ON_WM_TIMER() ON_BN_CLICKED(IDC_BUTTON4, OnButtonConfig) ON_BN_CLICKED(IDC_BUTTON_STOP_1, OnButtonStop1) ON_BN_CLICKED(IDC_BUTTON_FULL_1, OnButtonFull1) ON_BN_CLICKED(IDC_BUTTON_REC_1, OnButtonRec1) ON_BN_CLICKED(IDC_BUTTON_SNAP_1, OnButtonSnap1) ON_BN_CLICKED(IDC_BUTTON_FULL_2, OnButtonFull2) ON_BN_CLICKED(IDC_BUTTON_STOP_2, OnButtonStop2) ON_BN_CLICKED(IDC_BUTTON_REC_2, OnButtonRec2) ON_BN_CLICKED(IDC_BUTTON_SNAP_2, OnButtonSnap2) ON_BN_CLICKED(IDC_BUTTON5, OnButton5) ON_BN_CLICKED(IDC_BUTTON6, OnButton6) //AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CTryDlg message handlers BOOL CTryDlg::OnInitDialog() CDialog::OnInitDialog(); ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) CString strAboutMenu; strAboutMenu.LoadString(IDS_ABOUTBOX); if (!strAboutMenu.IsEmpty()) pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); SetIcon(m_hIcon, TRUE); // Set big icon SetIcon(m_hIcon, FALSE); // Set small icon m_splash.DoModal(); // Afisam o fereastra de splash m_joy.SetBaseDlg((CWnd *)this); // Initializam Joystick if (FAILED(m_joy.InitDirectInput())) AfxMessageBox("No Joystick found. You won't be able to control the robot.\nIf you have a joystick make sure it is registered under Gaming Options in the Control Panel.",MB_OK+MB_ICONSTOP); m_bJoystick=FALSE; else // Joystick neinitializat, nu mai facem polling SetTimer( 0, 1000 / 15, NULL ); m_bJoystick=TRUE;

Page 135: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

Anexa 9 Pagina 135 din 151

m_livex_started=FALSE; m_livex2_started=FALSE; // presetari, ce pot fi modificate ulterior configDlg.SetVideoSettings("yanor","5550","4550","guest",""); configDlg.SetSettings("juve","yanor","6000"); m_iLastRSent=0; m_iLastLSent=0; m_slider1.SetRange(-100,100,FALSE); m_slider2.SetRange(-100,100,FALSE); m_slider1.SetPos(100); m_slider2.SetPos(100); UpdateData(TRUE); poll_count=0; //com1=initcomm("COM1"); return TRUE; // return TRUE unless you set the focus to a control void CTryDlg::OnSysCommand(UINT nID, LPARAM lParam) if ((nID & 0xFFF0) == IDM_ABOUTBOX) CAboutDlg dlgAbout; dlgAbout.DoModal(); else CDialog::OnSysCommand(nID, lParam); // If you add a minimize button to your dialog, you will need the code below // to draw the icon. For MFC applications using the document/view model, // this is automatically done for you by the framework. void CTryDlg::OnPaint() if (IsIconic()) CPaintDC dc(this); // device context for painting SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); // Center icon in client rectangle int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; // Draw the icon dc.DrawIcon(x, y, m_hIcon); else CDialog::OnPaint();

Page 136: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

Anexa 9 Pagina 136 din 151

HCURSOR CTryDlg::OnQueryDragIcon() return (HCURSOR) m_hIcon; void CTryDlg::OnButtonStartVideo() CString m_strIp,m_strUsername,m_strPasswd; long m_lDataPort, m_lCommandPort; //citire valori setate din clasa config configDlg.GetVideoSettings(m_strIp,m_lDataPort,m_lCommandPort,m_strUsername,m_strPasswd); m_livex.CreateX(); m_livex.SetIpAddress(m_strIp); m_livex.SetCommandPort(m_lCommandPort); m_livex.SetDataPort(m_lDataPort); m_livex.SetAutoLogin(TRUE); m_livex.SetUserName(m_strUsername); if (m_strUsername=="guest") m_livex.SetDisablePWD(TRUE); else m_livex.SetDisablePWD(FALSE); m_livex.SetPassword(m_strPasswd); m_livex.SetDefaultCam(1); m_livex.PlayX(); m_livex_started=TRUE; m_livex2.CreateX(); m_livex2.SetIpAddress(m_strIp); m_livex2.SetCommandPort(m_lCommandPort); m_livex2.SetDataPort(m_lDataPort); m_livex2.SetAutoLogin(TRUE); m_livex2.SetUserName(m_strUsername); if (m_strUsername=="guest") m_livex2.SetDisablePWD(TRUE); else m_livex2.SetDisablePWD(TRUE); m_livex2.SetPassword(m_strPasswd); m_livex2.SetDefaultCam(2); m_livex2.PlayX(); m_livex2_started=TRUE; void CTryDlg::OnOK() CDialog::OnOK(); void CTryDlg::OnDestroy() m_livex.StopX();

Page 137: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

Anexa 9 Pagina 137 din 151

m_livex.DestroyX(); m_livex2.StopX(); m_livex2.DestroyX(); CDialog::OnDestroy(); // NDK: overrides OnMessage, OnDisconnect and OnPing void CTryDlg::OnMessage(CNDKMessage& message) switch (message.GetId()) case ChatUserJoin: CString strNickname; message.GetAt(0, strNickname); CString strUserJoin; strUserJoin.Format(IDS_USER_JOIN, strNickname); AddSystemText(strUserJoin); break; case ChatText: CString strNickname; CString strText; message.GetAt(0, strNickname); message.GetAt(1, strText); AddText(strNickname + _T(": ") + strText); break; case ChatUserQuit: CString strNickname; message.GetAt(0, strNickname); CString strUserQuit; strUserQuit.Format(IDS_USER_QUIT, strNickname); AddSystemText(strUserQuit); break; // Called whenever an unexpected disconnection occurs. The only case when // this method isn't call is when CloseConnection is used. CloseConnection // don't need to be called when when OnDisconnect is called. The derived // class must override this method. void CTryDlg::OnDisconnect(NDKClientDisconnection disconnectionType) UINT unResId = 0; switch (disconnectionType)

Page 138: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

Anexa 9 Pagina 138 din 151

case NDKClient_NormalDisconnection: unResId = IDS_DISCONNECTED; break; case NDKClient_ServerCloseConnection: unResId = IDS_SERVER_CLOSE_CONNECTION; break; case NDKClient_ServerStop: unResId = IDS_SERVER_STOPPED; break; case NDKClient_ErrorSendingMessage: unResId = IDS_ERROR_SENDING_MESSAGE; break; case NDKClient_ErrorReceivingMessage: unResId = IDS_ERROR_RECEIVING_MESSAGE; break; default: break; AddSystemText((LPCSTR)unResId); if (disconnectionType==NDKClient_ErrorSendingMessage) if (AfxMessageBox("Disconnected. Reconnect?",MB_RETRYCANCEL) == IDRETRY) OnButtonConnect(); // Called when the ping from the server is received. The number of // milliseconds is returned since PingServer was called. void CTryDlg::OnPing(long lNbMilliseconds) void CTryDlg::OnButtonConnect() // TODO: Add your control notification handler code here BOOL connected; CString m_strNickname,m_strIp; long m_lPort; if (UpdateData(TRUE)) if (connected=IsConnected()) CloseConnection(); else configDlg.GetSettings(m_strNickname,m_strIp, m_lPort); if (OpenConnection(m_strIp, m_lPort)) AddSystemText((LPCSTR)IDS_CONNECTED); CNDKMessage message(ChatUserJoin); message.Add(m_strNickname); SendMessageToServer(message);

Page 139: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

Anexa 9 Pagina 139 din 151

else AfxMessageBox(IDS_CANNOT_CONNECT, MB_ICONSTOP); connected=IsConnected(); if (connected) m_buttonConnect.SetWindowText(_T("&Disconnect")); else m_buttonConnect.SetWindowText(_T("&Connect")); void CTryDlg::AddText(const CString& strText) m_editChatWindow.SetSel(m_editChatWindow.GetWindowTextLength(), m_editChatWindow.GetWindowTextLength()); m_editChatWindow.ReplaceSel(strText + "\r\n"); void CTryDlg::AddSystemText(const CString& strText) AddText(_T("* ") + strText + _T(" *")); void CTryDlg::OnButtonSend() if (IsConnected()) if (UpdateData(TRUE)) CNDKMessage message(ChatText); message.Add(m_strChat); SendMessageToServer(message); AddText(m_strChat); m_strChat.Empty(); UpdateData(FALSE); else AfxMessageBox("Not connected",MB_OK+MB_ICONSTOP); void CTryDlg::OnTimer(UINT nIDEvent) // TODO: Add your message handler code here and/or call default CDialog::OnTimer(nIDEvent); CString m_strCommand; char m_strPTCommand; int axis_x,axis_y,mot_r,mot_l,i; unsigned char spd_x,spd_y; BOOL stopped=TRUE; char buffer[20]; axis_y=-m_joy.GetAxis(1)/10; axis_x=-m_joy.GetAxis(2)/10;

Page 140: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

Anexa 9 Pagina 140 din 151

itoa(axis_x,buffer,10); m_axis_x.SetWindowText(buffer); itoa(axis_y,buffer,10); m_axis_y.SetWindowText(buffer); m_chkButton1.SetCheck(m_joy.GetPressed(0)); m_chkButton2.SetCheck(m_joy.GetPressed(1)); if (!m_joy.GetPressed(0)) // joystick button pressed, means we must // activate PT for (i=0;i<abs(axis_x)/10;i++) if (axis_x > 10) m_strCommand+=PT_UP; else if (axis_x < -10) m_strCommand+=PT_DOWN; if (axis_x > 50) m_strCommand+=PT_SPD_UP; else if (axis_x < -50) m_strCommand+=PT_SPD_DOWN; for (i=0;i<abs(axis_y)/10;i++) if (axis_y > 0) //&& (axis_y < 50)) m_strCommand+=PT_LEFT; else if (axis_y < -10) //&& (axis_y > -50)) m_strCommand+=PT_RIGHT; if (poll_count++ > 5) SendSerial1(m_strCommand); poll_count=0; else //joystick button not pressed, must be movement // calculating speed_presets if ((abs(axis_x) > 20) || (abs(axis_y) > 20)) if (axis_x > 0) if (axis_y > 0) mot_r=axis_x-axis_y; mot_l=__max(axis_x,axis_y); else mot_r=__max(axis_x,abs(axis_y)); mot_l=axis_x+axis_y; else //if (axis_x <= 0) if (axis_y > 0) mot_r=-__max(abs(axis_x),abs(axis_y)); mot_l=axis_y+axis_x; else

Page 141: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

Anexa 9 Pagina 141 din 151

mot_r=abs(axis_y)+axis_x; mot_l=-__max(abs(axis_x),abs(axis_y)); stopped=FALSE; else mot_r=0; mot_l=0; stopped=TRUE; spd_x=(mot_l/3)+128; spd_y=(mot_r/3)+128; if (stopped) m_strCommand=STOP_X; m_strCommand+=STOP_Y; else // checking agains last value sent for left side if (m_iLastLSent != mot_l) m_strCommand=START_X; //pornim ambele motoare m_strCommand+=SET_X_SPEED; m_strCommand+=(unsigned char)spd_x; // checking agains last value sent for right side if (m_iLastRSent != mot_r) m_strCommand+=START_Y;//pornim ambele motoare m_strCommand+=SET_Y_SPEED; m_strCommand+=(unsigned char)spd_y; // if we do have a command word, we send it if (!m_strCommand.IsEmpty()) SendSerial2(m_strCommand); m_iLastLSent=mot_l; m_iLastRSent=mot_r; m_slider1.SetPos(-mot_l); m_slider2.SetPos(-mot_r); itoa(mot_l,buffer,10); m_Mot_L.SetWindowText(buffer); itoa(mot_r,buffer,10); m_Mot_R.SetWindowText(buffer); void CTryDlg::OnButtonConfig() configDlg.DoModal();

Page 142: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

Anexa 9 Pagina 142 din 151

void CTryDlg::OnButtonStop1() CString stat; if (m_livex_started) m_stop_1.GetWindowText(stat); if (stat=="Stop") m_livex.PauseX(); m_stop_1.SetWindowText("Start"); else m_livex.PlayX(); m_stop_1.SetWindowText("Stop"); void CTryDlg::OnButtonFull1() if (m_livex_started) m_livex.FullScreenX(); void CTryDlg::OnButtonRec1() CString stat; if (m_livex_started) m_rec_1.GetWindowText(stat); if (stat=="Rec") m_livex.SaveFileX("cam1.out"); m_rec_1.SetWindowText("Stop"); else m_livex.StopFileSaveX(); m_rec_1.SetWindowText("Rec"); void CTryDlg::OnButtonSnap1() if (m_livex_started) m_livex.SnapShotX(); void CTryDlg::OnButtonFull2() if (m_livex2_started) m_livex2.FullScreenX(); void CTryDlg::OnButtonStop2() CString stat; if (m_livex2_started)

Page 143: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

Anexa 9 Pagina 143 din 151

m_stop_2.GetWindowText(stat); if (stat=="Stop") m_livex2.PauseX(); m_stop_2.SetWindowText("Start"); else m_livex2.PlayX(); m_stop_2.SetWindowText("Stop"); void CTryDlg::OnButtonRec2() CString stat; if (m_livex2_started) m_rec_2.GetWindowText(stat); if (stat=="Rec") m_livex2.SaveFileX("cam2.out"); m_rec_2.SetWindowText("Stop"); else m_livex2.StopFileSaveX(); m_rec_2.SetWindowText("Rec"); void CTryDlg::OnButtonSnap2() if (m_livex_started) m_livex.SnapShotX(); void CTryDlg::OnButton5() // TODO: Add your control notification handler code here UpdateData(TRUE); CString command=START_X; command+=SET_X_SPEED; command+=m_strEdit3.GetAt(0)-'0'; SendSerial2(command); void CTryDlg::SendSerial1(CString chr) // send with socket to serial 1 CString m_strNickname,m_strIp; long m_lPort; configDlg.GetSettings(m_strNickname,m_strIp, m_lPort); CNDKMessage ptcommand; ptcommand.SetId(PTCommand); ptcommand.SetAt(0,m_strNickname); ptcommand.SetAt(1,chr); SendMessageToServer(ptcommand);

Page 144: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

Anexa 9 Pagina 144 din 151

void CTryDlg::SendSerial2(CString chr) // send with socket to serial 2 CString m_strNickname,m_strIp; long m_lPort; configDlg.GetSettings(m_strNickname,m_strIp, m_lPort); CNDKMessage sercommand; sercommand.SetId(SpeedCommand); sercommand.SetAt(0,m_strNickname); sercommand.SetAt(1,chr); SendMessageToServer(sercommand); void CTryDlg::OnButton6() // TODO: Add your control notification handler code here UpdateData(TRUE); SendSerial1(m_strEdit3); HANDLE CTryDlg::initcomm(char *sport) HANDLE hCom; BOOL fSuccess; LPCOMMTIMEOUTS lpCommTimeouts=(LPCOMMTIMEOUTS)malloc(sizeof(COMMTIMEOUTS)); COMMTIMEOUTS noblock; DCB dcb; hCom=CreateFile(sport, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL ); fSuccess = GetCommTimeouts(hCom, &noblock); noblock.ReadTotalTimeoutConstant = 1000; noblock.ReadTotalTimeoutMultiplier = MAXDWORD; noblock.ReadIntervalTimeout = MAXDWORD; fSuccess = SetCommTimeouts(hCom, &noblock); fSuccess = GetCommState(hCom, &dcb); dcb.BaudRate = 9600; dcb.ByteSize = 8; dcb.fParity = FALSE; dcb.StopBits = ONESTOPBIT; dcb.fRtsControl = RTS_CONTROL_DISABLE; dcb.fOutxCtsFlow = FALSE; fSuccess = SetCommState(hCom, &dcb); lpCommTimeouts->ReadTotalTimeoutConstant = 0; lpCommTimeouts->ReadTotalTimeoutMultiplier = 0; if (SetCommTimeouts(hCom,lpCommTimeouts)==0) AfxMessageBox("error setting port timeouts"); return hCom; void CTryDlg::writecomm(HANDLE hCom, char item) unsigned long ni; BOOL fSuccess;

Page 145: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

Anexa 9 Pagina 145 din 151

LPDWORD lpModemStat=(LPDWORD)malloc(sizeof(PDWORD)); fSuccess = WriteFile( hCom, &item, 1, &ni, NULL); SpeedCommands.h #define GET_BUFF_LEN 0x01 #define START 0x02 #define STOP 0x03 #define OK 0x04 #define DOWNLOAD 0x05 #define BUFFER_OVERRUN 0x06 #define GET_COUNTER 0x07 #define GET_X_POS 0x08 #define GET_Y_POS 0x09 #define RESET 0x0A #define SET_PWM 0x0B #define SET_X_SPEED 0x0C #define SET_Y_SPEED 0x0D #define START_X 0x0E #define START_Y 0x0F #define STOP_X 0x10 #define STOP_Y 0x11 #define SET_DIR_X_FORW 0x12 #define SET_DIR_X_BACKW 0x13 #define SET_DIR_Y_FORW 0x14 #define SET_DIR_Y_BACKW 0x15 PTCommands.h #define PT_LEFT 0x31 #define PT_RIGHT 0x32 #define PT_SPD_LEFT 0x33 #define PT_SPD_RIGHT 0x34 #define PT_UP 0x35 #define PT_DOWN 0x36 #define PT_SPD_UP 0x37 #define PT_SPD_DOWN 0x38 Joystick.cpp // Joystick.cpp: implementation of the Joystick class. // #include "tryDlg.h" #include "stdafx.h" #include "try.h" #include "Joystick.h" #ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[]=__FILE__; #define new DEBUG_NEW #endif #define SAFE_DELETE(p) if(p) delete (p); (p)=NULL; #define SAFE_RELEASE(p) if(p) (p)->Release(); (p)=NULL; LPDIRECTINPUT8 g_pDI; LPDIRECTINPUTDEVICE8 g_pJoystick;

Page 146: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

Anexa 9 Pagina 146 din 151

////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// BOOL CALLBACK EnumObjectsCallback( const DIDEVICEOBJECTINSTANCE* pdidoi, VOID* pContext ); BOOL CALLBACK EnumJoysticksCallback( const DIDEVICEINSTANCE* pdidInstance, VOID* pContext ); Joystick::Joystick() g_pDI=NULL; g_pJoystick=NULL; axis_x=0; axis_y=0; Joystick::~Joystick() HRESULT Joystick::InitDirectInput() HRESULT hr; // Register with the DirectInput subsystem and get a pointer // to a IDirectInput interface we can use. // Create a DInput object if( FAILED( hr = DirectInput8Create( GetModuleHandle(NULL), DIRECTINPUT_VERSION, IID_IDirectInput8, (VOID**)&g_pDI, NULL ) ) ) return hr; // Look for a simple joystick we can use for this sample program. if( FAILED( hr = g_pDI->EnumDevices( DI8DEVCLASS_GAMECTRL, EnumJoysticksCallback, NULL, DIEDFL_ATTACHEDONLY ) ) ) return hr; // Make sure we got a joystick if( NULL == g_pJoystick ) MessageBox( NULL, TEXT("Joystick not found. Command not possible."), TEXT("Joystick initialization routine"), MB_ICONERROR | MB_OK ); return -1; //Set the data format to "simple joystick" - a predefined data format // //A data format specifies which controls on a device we are interested // and how they should be reported. This tells DInput that we will be // passing a DIJOYSTATE2 structure to IDirectInputDevice::GetDeviceState(). if( FAILED( hr = g_pJoystick->SetDataFormat( &c_dfDIJoystick2 ) ) ) return hr; // Set the cooperative level to let DInput know how this device should // interact with the system and with other DInput applications. if( FAILED( hr = g_pJoystick->SetCooperativeLevel( base_Dlg->GetSafeHwnd(), DISCL_EXCLUSIVE |

Page 147: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

Anexa 9 Pagina 147 din 151

DISCL_FOREGROUND ) ) ) return hr; // Enumerate the joystick objects. The callback function enabled user // interface elements for objects that are found, and sets the min/max // values property for discovered axes. if( FAILED( hr = g_pJoystick->EnumObjects( EnumObjectsCallback, (VOID*)base_Dlg->GetSafeHwnd(), DIDFT_ALL ) ) ) return hr; return S_OK; void Joystick::SetBaseDlg(CWnd *dlg) base_Dlg=dlg; BOOL CALLBACK EnumJoysticksCallback( const DIDEVICEINSTANCE* pdidInstance, VOID* pContext ) HRESULT hr; // Obtain an interface to the enumerated joystick. hr = g_pDI->CreateDevice( pdidInstance->guidInstance, &g_pJoystick, NULL ); // If it failed, then we can't use this joystick. (Maybe the user unplugged // it while we were in the middle of enumerating it.) if( FAILED(hr) ) return DIENUM_CONTINUE; // Stop enumeration. Note: we're just taking the first joystick we get. You // could store all the enumerated joysticks and let the user pick. return DIENUM_STOP; BOOL CALLBACK EnumObjectsCallback( const DIDEVICEOBJECTINSTANCE* pdidoi, VOID* pContext ) HWND hDlg = (HWND)pContext; static int nSliderCount = 0; // Number of returned slider controls static int nPOVCount = 0; // Number of returned POV controls // For axes that are returned, set the DIPROP_RANGE property for the // enumerated axis in order to scale min/max values. if( pdidoi->dwType & DIDFT_AXIS ) DIPROPRANGE diprg; diprg.diph.dwSize = sizeof(DIPROPRANGE); diprg.diph.dwHeaderSize = sizeof(DIPROPHEADER); diprg.diph.dwHow = DIPH_BYID; diprg.diph.dwObj = pdidoi->dwType; // Specify the enumerated axis diprg.lMin = -1000; diprg.lMax = +1000;

Page 148: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

Anexa 9 Pagina 148 din 151

// Set the range for the axis if( FAILED( g_pJoystick->SetProperty( DIPROP_RANGE, &diprg.diph ) ) ) return DIENUM_STOP; // Set the UI to reflect what objects the joystick supports if (pdidoi->guidType == GUID_XAxis) EnableWindow( GetDlgItem( hDlg, IDC_X_AXIS ), TRUE ); EnableWindow( GetDlgItem( hDlg, IDC_X_AXIS_TEXT ), TRUE ); if (pdidoi->guidType == GUID_YAxis) EnableWindow( GetDlgItem( hDlg, IDC_Y_AXIS ), TRUE ); EnableWindow( GetDlgItem( hDlg, IDC_Y_AXIS_TEXT ), TRUE ); return DIENUM_CONTINUE; int Joystick::GetAxis(int ax_Nr) HRESULT hr; DIJOYSTATE2 js; hr = g_pJoystick->Poll(); if( FAILED(hr) ) // DInput is telling us that the input stream has been // interrupted. We aren't tracking any state between polls, so // we don't have any special reset that needs to be done. We // just re-acquire and try again. hr = g_pJoystick->Acquire(); while( hr == DIERR_INPUTLOST ) hr = g_pJoystick->Acquire(); // hr may be DIERR_OTHERAPPHASPRIO or other errors. This // may occur when the app is minimized or in the process of // switching, so just try again later return S_OK; // Get the input's device state if( FAILED( hr = g_pJoystick->GetDeviceState( sizeof(DIJOYSTATE2), &js ) ) ) return -1; // The device should have been acquired during the Poll() // Display joystick state to dialog axis_x=(axis_x+js.lX) / 2; axis_y=(axis_y+js.lY) / 2; // Axes if (ax_Nr==1) return axis_x; else return axis_y;

Page 149: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

Anexa 9 Pagina 149 din 151

int Joystick::GetPressed(int m_iButton) HRESULT hr; DIJOYSTATE2 js; hr = g_pJoystick->Poll(); if( FAILED(hr) ) // DInput is telling us that the input stream has been // interrupted. We aren't tracking any state between polls, so // we don't have any special reset that needs to be done. We // just re-acquire and try again. hr = g_pJoystick->Acquire(); while( hr == DIERR_INPUTLOST ) hr = g_pJoystick->Acquire(); // hr may be DIERR_OTHERAPPHASPRIO or other errors. This // may occur when the app is minimized or in the process of // switching, so just try again later return S_OK; // Get the input's device state if( FAILED( hr = g_pJoystick->GetDeviceState( sizeof(DIJOYSTATE2), &js ) ) ) return -1; // The device should have been acquired during the Poll() return js.rgbButtons[m_iButton] & 0x80; config.cpp void config::GetSettings(CString &str_Nickname, CString &str_Ip, long &l_Port) str_Nickname=m_nickname; str_Ip=m_ip; l_Port=atol(m_port); void config::GetVideoSettings(CString &str_Ip, long &l_dataPort, long &l_commandPort, CString &str_user, CString &str_pass) str_Ip=m_str_video_ip; l_dataPort=atol(m_str_video_datap); l_commandPort=atol(m_str_video_commandp); str_user=m_str_video_user; str_pass=m_str_video_pass; void config::SetVideoSettings(CString str_Ip, CString str_dataPort, CString str_commandPort, CString str_user, CString str_pass) m_str_video_ip=str_Ip; m_str_video_datap=str_dataPort; m_str_video_commandp=str_commandPort; m_str_video_user=str_user; m_str_video_pass=str_pass;

Page 150: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

Anexa 9 Pagina 150 din 151

LiveX.h // CLiveX wrapper class class CLiveX : public CWnd protected: DECLARE_DYNCREATE(CLiveX) public: CLSID const& GetClsid() static CLSID const clsid = 0x6aefe48c, 0xfb6c, 0x4c27, 0xa1, 0x61, 0xa0, 0xbf, 0x34, 0x38, 0x53, 0x7e ; return clsid; virtual BOOL Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext = NULL) return CreateControl(GetClsid(), lpszWindowName, dwStyle, rect, pParentWnd, nID); BOOL Create(LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CFile* pPersist = NULL, BOOL bStorage = FALSE, BSTR bstrLicKey = NULL) return CreateControl(GetClsid(), lpszWindowName, dwStyle, rect, pParentWnd, nID, pPersist, bStorage, bstrLicKey); // Attributes public: CString GetIpAddress(); void SetIpAddress(LPCTSTR); long GetCommandPort(); void SetCommandPort(long); long GetDataPort(); void SetDataPort(long); BOOL GetFixSize(); void SetFixSize(BOOL); long GetFixWidth(); void SetFixWidth(long); long GetFixHeight(); void SetFixHeight(long); BOOL GetDisablePWD(); void SetDisablePWD(BOOL); CString GetPassword(); void SetPassword(LPCTSTR); CString GetUserName(); void SetUserName(LPCTSTR); short GetDefaultCam(); void SetDefaultCam(short); BOOL GetAutoLogin(); void SetAutoLogin(BOOL); // Operations public: void PlayX(); void StopX(); void SaveX();

Page 151: Diploma Thesis

SSiisstteemm rroobboottiizzaatt mmoobbiill tteelleeooppeerraatt AAlleexxaannddrruu JJOONNII

Anexa 9 Pagina 151 din 151

void ChangeCamX(short CamNum); void ChangeQualityX(short Qual); void SnapShotX(); void ShowCamMenuX(); BOOL ChangeSizeX(long width, long height); BOOL CreateX(); BOOL DestroyX(); void DrawRectX(BOOL draw); BOOL PauseX(); BOOL ResumeX(); BOOL ShowQulMenuX(); void SetToolTipX(LPCTSTR ToolTip); BOOL FullScreenX(); void ReConnectX(); void IOControlX(); void PTZControlX(); BOOL SaveFileX(LPCTSTR path); BOOL StopFileSaveX(); void OptionX(); ; //AFX_INSERT_LOCATION // Microsoft Visual C++ will insert additional declarations immediately before the previous line. #endif // !defined(AFX_LIVEX_H__188ED032_77BD_4757_82D9_1CED512AE4BE__INCLUDED_)