Platformă robotică controlată prin Wi-Fi [307873]
Universitatea “Politehnica” [anonimizat]-Fi
Proiect de diplomă
prezentat ca cerință parțială pentru obținerea titlului de
Inginer în domeniul domeniul Electronică și Telecomunicații
programul de studii de licență Electronică Aplicată
Conducător științific Absolvent
S.I. Dr. Ing. [anonimizat] 2017
Listă figuri
Fig. 1- 1 [anonimizat] 15
Fig. 1- 2 Modelul TCP/IP în relație cu diverse protocoale cunoscute 17
Fig. 1- 3 Microcontroler Intel 24
Fig. 1- 4 Schema simplificată a unui microcontroler 25
Fig. 1- 5 Unitatea de memorie 26
Fig. 1- 6 Unitatea centrală de procesare 26
Fig. 1- 7 Bus-ul 27
Fig. 1- 8 Unitate intrare/ieșire 27
Fig. 1- 9 Unitatea timer 28
Fig. 1- 10 Watchdog-ul 29
Fig. 1- 11 [anonimizat] 29
Fig. 1- 12 Unitate serială folosită pentru a [anonimizat] 30
Fig. 1- 13 [anonimizat] 35
Fig. 1- 14 Motoare electrice de diferite puteri în comparație cu o baterie de 9V 36
Fig. 1- 15 Rotorul motorului electric(stânga) și statorul motorului electric(dreapta) 36
Fig. 1- 16 Schema electrică a motorului de curent continuu cu excitație independentă(în derivație) 37
Fig. 1- 17 Schema electrică a motorului cu excitație serie 38
Fig. 1- 18 Schema electrică a unui motor cu excitație mixtă 38
Fig. 2- 1 Placă de dezvoltare Arduino UNO 40
Fig. 2- 2 Una dintre primele plăcuțe Arduino cu interfață de comunicații serială RS-232 41
Fig. 2- 3 Plăcuță Arduino cu descrierea pinilor de I/O 41
Fig. 2- 4 Un sketch Arduino ce conține funcțiile setup() și loop() 42
Fig. 2- 5 Un modul ESP8266 negru 43
Fig. 2- 6 Conectare ESP8266 [anonimizat] 44
Fig. 2- 7 Distribuția pinilor la ESP8266 44
Fig. 2- 8 Modul L298N 46
Fig. 2- 9 Schema unei punți H pe scurt 47
Fig. 2- 10 Kit Robot cu 2 Motoare CC 47
Fig. 2- 11 Suport smartphone 48
Fig. 2- 12 Pinii de pe plăcuța Android care se conectează la modulul L298N 49
Listă tabele
Tabel 1 Tabel OSI vs. TCP/IP 18
Tabel 2 . Lista comenzilor AT suportate de ESP8266 45
[anonimizat] (attention commands)
CC – [anonimizat] D/A – convertor digital analogic.
DHSS – Direct-[anonimizat] – [anonimizat] – Frequency-[anonimizat] – [anonimizat] – Half duplex
I/O – In /Out – intrare / [anonimizat] – [anonimizat] – [anonimizat] – [anonimizat] – multiplexare cu divizare în frecvențe ortogonale
Pop3 – Protocol post office
REVma – O altă denumire a standardului 802.11ma
REVmb – O altă denumire a standardului 802.11[anonimizat] – [anonimizat]/IP – Protocol al transmisiei / [anonimizat] a [anonimizat] – [anonimizat]
WLAN – Wireless local area network
Introducere
Lucrarea de față își propune controlul prin intermediul Wi-Fi-ului a unei platforme robotice, programate în Arduino. Mai exact, prin intermediul unei pagini HTML, va fi controlat un Rover, ce va avea atașat un dispozitiv Android prin intermediul căruia se va filma zona de interes. Datele vor fi trimise pe pagina principală HTML într-un chenar ce va afișa exact fluxul video filmat de camera dispozitivului Android atașat pe robotul nostru.
Pagina HTML va fi împărțită în două jumătăți: în cea stângă vom avea afișat chenarul ce arată în timp real ce înregistrează smartphone-ul, atât video cât și audio, alături de un câmp în care va fi introdus ip-ul telefonului. În partea dreaptă vom avea un alt câmp text în care va fi introdus de această dată ip-ul dispozitivului ESP8266, care suporta comunicații Wi-Fi, cel atașat pe robot, conectat la plăcuța Arduino.
Practic proiectul de licență poate fi delimitat în două părți: una se bazează pe conexiunea dintre computer si telefonul Android (ce va poseda aplicația IpWebcam), cealaltă parte fiind constituită din comunicația dintre computer și robotul Arduino.
Motivația ce m-a ghidat în alegerea unei astfel de teme este plaja largă de utilități ce o posedă. De-a lungul timpului s-a încercat dezvoltarea cât mai multă și cât mai complexă a sistemelor de supraveghere. Fie ca vorbim de o simplă cameră atașată în curtea unei case, sau de un rover complex care studiază medii greu accesibile, ambele presupun înregistrarea unui și transmiterea unui flux video către utilizator. Un alt motiv pentru care am ales acest proiect a fost dorința mea de a construi ceva fizic, la sfârșitul facultății
Principalul avantaj al unui astfel de Rover este acela că poate pătrunde în zone greu accesibile, sau în zone periculoase și transmite informații fără a pune în pericol utilizatorul. În ziua de astăzi, astfel de Rovere, dezvoltate la o scară mai largă sunt folosite în: detectarea și identificarea victimelor în urma unor cutremure, explorarea unor zone periculoase, spionaj și chiar explorarea unor spații extraterestre (exemplu: Roverul Curiosity care explorează diverse zone ale planetei Marte înca din anul 2012).
Lucrarea este structurată pe trei capitole principale:
După scurta introducerii în lucrarea de licență, în primul capitol vor fi prezentate diverse considerente teoretice ale componentelor sau paradigmelor ce au legătura cu proiectul de licență. Voi descrie diverse protocoale de comunicații, microcontrolere, motoare de curent continuu.
Al doilea capitol va face referire la realizarea practică a proiectului. Va fi detaliat procesul, se va vorbi despre componentele folosite, fiindu-le detaliate caracteristicile. Voi motiva alegerea componentelor. Va exista o schemă electrică alături de schema bloc. Va fi atașată și o organigramă a codului, alături de rutine mai importante din cod detaliate și explicate.
În ultimul capitol al documentației vor fi menționate rezultatele obținute în urma proiectării, testării și utilizării robotului. Voi încheia cu concluziile și eventualele îmbunătățiri ce ar putea fi aduse proiectului.
Considerente teoretice
1.1 Wi-Fi (Protocoale de comunicații)
1.1.1 Protocoale de comunicații (generalități)
În telecomunicații, un protocol de comunicații este un sistem care permite a două sau mai multor entități să își transmită informație. Informația poate fi transmisă printr-un mediu de orice tip. Protocoalele reprezintă standardele care definesc sintaxa și semantica mesajului, sincronizarea comunicației și posibilele metode de detecție și corectare ale erorilor (multe canale de comunicații sunt sensibile la zgomot, fapt ce ar putea introduce erori la transmisia de la emițător la receptor). Daca nu ar exista protocoale, șirul de biți, sau altfel spus, mesajul transmis de la un calculator la celălalt nu ar putea fi construit sau reconstruit în formatul original.
Sistemele de comunicații folosesc formate bine definite, sau altfel spus protocoale, pentru a transmite și a interschimba diverse mesaje, ținând astfel cont de anumite reguli și specificații tehnice. În sistemele de operare digitale, aceste reguli pot fi exprimate prin intermediul algoritmilor sau a stucturilor de date. Exprimarea algoritmilor într-un limbaj de programare portabil face ca protocolul software al sistemului de operare să fie independent.
Pentru a implementa un protocol de rețea, modulele protocolului sunt interfațate cu un framework ce există sau este instalat pe sistemul de operare al mașinăriei. Framework-ul implementează funcții și funcționalități de rețea ale sistemului de operare. Cele mai cunoscute modele de framework sunt modelele: TCP/IP și OSI. [1]
Exista anumite cerințe pe care protocoalele trebuie sa le îndeplinească:
Format de dată pentru schimbul de date: mesajele digitale sunt interschimbate sub formă de șiruri de biți. Fiecare șir de biți este divizat în diferite segmente. Din punct de vedere conceptual, un șir de biți este divizat în două segmente: cel aferent antetului și cel aferent datelor. Mesajul este stocat în segmentul data, segmentul antet conținând câmpurile mai relevante pentru protocol. [1]
Format de adresă pentru schimbul de date: Adresele sunt utilizate pentru a identifica atât emițătorul cât și receptorul. Adresele sunt stocate în segmentul antet al șirului de biți, permițându-i receptorulu să analizeze și să decidă dacă șirul respectiv îi este lui adresat și trebuie procesat, sau daca trebuie ignorat. O conexiune dintre un emițător și un receptor poate fi identificată utilizând o pereche de adrese (emițător adresă, receptor adresă). În general, anumite valori specifice ale adreselor au anumite semnificații, sau determină executarea unor funcții diferite. Spre exemplu valoare -1 pe toate adresele poate reprezenta adresarea tuturor stațiilor la rețea. Așadar, trimiterea valorii de -1 ca adresă poate rezulta într-o difuzare a rețelei locale. [1]
Maparea de adrese: uneori protocoalele au nevoie să mapeze adresele unei anumite scheme peste adresele unei alte scheme. Ca exemplu putem menționa cazul în care o adresă logică IP specificată de aplicație trebuie tradusă unei adrese Ethernet hardware. Acest procedeu mai este numit și mapare de adrese.
Routarea: vorbim despre routare atunci când sistemele nu sunt conectate în mod direct. Între emițător și receptor, mai există si alte sisteme plasate pe ,,ruta” respectivă, care au rolul de a propaga mesajul. În Internet, rețelele sunt interconectate cu ajutorul ruterelor. Această metodă de a face conexiunea dintre rețele se mai numește si internetworking
Detecția transmisiei de erori: este necesară rețelelor care nu pot garanta transmisia lipsită de erori.
Confirmarea recepției pachetelor este necesară pentru comunicarea orinetată pe conexiune (connection-oriented communication). Confirmările sunt trimise de către receptor înapoi către emițător. [1]
Pierderea de informații: atunci când vorbim de timeout-uri (timpi de expirare) și retransmiteri. Pachetele se pot pierde de-a lungul rețelei sau pot suferi din cauza unor întârzieri foarte mari. Pentru a se putea lucra cu așa ceva, în cadrul anumitor protocoale, cel care trimite trebuie să primească un mesaj, sau o confirmare de la receptor, că transmisia a fost corect făcute. Această confirmare trebuie primită într-un timp util. În cazul timpilor de expirare, cel care trimite trebuie să intuiască faptul că pachetele nu au fost trimise și să încerce retransmiterea lor. În cazul unui link blocat permanent (permanent broken link), retransmisia este inutilă, nu are niciun efect, așa că numărul retransmisiunilor este limitat. [1]
Direcționarea fluxului de informații: trebuie adresată dacă transmisa se poate produce doar într-o singură direcție în cadrul unui interval de timp, așa cum este cazul link-urilor half duplex. Half Duplex (HDX) este un sistem ce poate susține comunicarea în ambele direcții, însă nu simultan. La un moment de timp t, transmisia se poate produce doar într-un sens, sau în celălalt. Spre exemplu, dacă un dispozitiv începe și recepționează un mesaj, trebuie să aștepte până când transmițătorul termină procedeul de transmisie a datelor, pentru a putea răspunde. Un exemplu unui sistem half duplex pot fi dispozitivele pereche walkie-talkie. În acest caz, unul dintre utilizatori trebuie să folosească un cuvânt cheie, care să indice faptul că dispozitivul a terminat de emis și că celălalt dispozitiv (the other party) poate începe transmisia.
Comunicația half duplex este utilizată și în sistemul Walkie-Talkie:
Fig. 1- 1 Comunicație half duplex specifică sistemelor Walkie-Talkie
În acest caz, prin direcționarea fluxului de informații, sunt făcute setările necesare în cazul în care două entități vor să transmită în același timp.
Controlul de secvență: după cum am menționat anterior, șirurile de biți sunt divizate și împărțite în segmente și apoi trimise în rețea în mod individual. Aceste segmente ar putea să se piardă pe parcurs, ar putea suferi întârzieri, sau ar putea lua diverse trasee pe anumite tipuri de rețele. Ca rezultat, ar putea ajunge diverse segmente, goale, fără șir de biți. Retransmiterea lor nu este o soluție, pentru că în acest caz ar putea apărea duplicarea. Soluția o reprezintă deci marcarea acelor segmente prin informație secvențială la emitere, pentru ca receptorul să poată realiza și determina ce parte din mesaj a fost pierdută, sau duplicată. Astfel el poate se poate orienta spre a cere cu exactitate informația de care are nevoie pentru a reasambla mesajul.
Controlul fluxului: este necesar atunci când transmițătorul trimite flux informațional mai repede decât receptorul, sau un alt aparat intermediar poate procesa. În acest caz, controlul fluxului informațional poate fi implementat printr-o serie de mesaje dintre emițător și receptor. [1]
Protocoalele reprezintă pentru comunicații ce reprezintă algoritmii sau limbajele de programare pentru calculatoare. Analogia are consecințe importante în ceea ce privește structura (design-ul) și dezvoltarea protocoalelor. Trebuia luat în considerare că atât algoritmii, cât și protocoalele sunt diverse metode de a descrie comportamentele în cadrul interacțiunilor dintre diverse entități.
În ciuda numărului mare, protocoalele de rețea nu variază foarte mult. Majoritatea protocoalelor folosesc aceleași principii și concepte în aceleași modalități. Un limbaj de protocol potrivit și optimizat ar avea o sintaxă restrânsă, de ajuns cât să specifice anumiți parametrii sau moduri opționale ale operațiunilor ce sunt desfășurate.
Protocoalele de rețea oprerează în medii eterogene, foarte variate, în care se constituie diverse tehnologii de rețea, cu un set, sau cu seturi foarte bogate de aplicații. Din această cauză un protocol universal ar fi foarte greu de proiectat și de implementat. De aceea, IETF (Internet Engineering Task Force) a decis reducerea complexității prin proiectarea unei arhitecturi de rețea relativ simple care permite descompunerea unui protocol universal unic în două protocoale generice: TCP și IP; și existența a două clase specifice protocoalelor: una care se ocupă de detaliile low-level și una care lucrează cu detaliile high-level ale aplicației de rețea cu care se lucrează. [2]
1.1.2 Proiectarea protocoalelor de comunicații
Cunoștințele tehnologice au fost aplicate pentru a crea un set comun de principii de proiectare ale protocoalelor de comunicații. Sistemele de comunicații comunică și operează în paralel. Tehnicile de programare care se ocupă cu rezolvarea problemelor de comunicații în paralel fac parte din ceea ce se numește programare concurentă. Acest tip de programare rezolvă ceea ce înseamnă sincronizarea comunicațiilor. Sintaxa și semantica unei comunicații guvernate de un protocol low-level sunt în general de o complexitate modestă, așadar putând fi codate, relativ, cu ușurință. [3]
Sistemele nu folosesc un singur protocol pentru a comunica, ci o serie de protocoale ce cooperează, numite de cele mai multe ori familie sau suită de protocoale. Pentru a coopera, protocoalele trebuie să comunice între ele printr-o modalitate, sau alta și de aceea este necesară existența unui framework ce face posibilă comunicarea.
Protocoalele sunt organizate pe mai multe nivele (sau layere). Acesta este un concept de proiectare ce divide designe-ul protocolului în mai multe părți mai mici, fiecare îndeplinind, rezolvând o subrutină și interacționând cu celelalte părți mai mici ale protocolului într-un număr definit de modalități.
Protocoalele de comunicații ce se folosesc de Internet sunt proiectate să funcționeze în contextul unor setări cât mai variate și cât mai complexe. Pentru a ușura designe-ul, protocoalele sunt structurate pe nivele, conform unei scheme de bază. În loc de utilizarea unui protocol universal, se lucrează cu un set de protocoale ce cooperează, după cum sunt prezentate și în schema de bază. Schema cu structura pe nivele ce se folosește este numită modelul TCP/IP. Protocoalele folosite sunt denumite în mod colectiv suita de protocoale Internet. Acest design este proiectat de către Internet Engineering Task Force (IETF). [3]
Fig. 1- 2 Modelul TCP/IP în relație cu diverse protocoale cunoscute
Un concept teoretic de structurare pe nivele este reprezentat de stiva OSI pe șapte nivele. Cele șapte nivele ale modelului OSI sunt:
Nivelul 1 – Nivelul Fizic
Nivelul 2 – Nivelul Legătură de Date
Nivelul 3 – Nivelul Rețea
Nivelul 4 – Nivelul Transport
Nivelul 5 – Nivelul Sesiune
Nivelul 6 – Nivelul Prezentare
Nivelul 7 – Nivelul Aplicație [4]
Deși OSI a fost primul model, în momentul în care a fost publicat, modelul TCP/IP era în curs de dezvoltare. TCP/IP a avut mult mai mult succes și a fost implementat. Deși modelul OSI a influențat foarte mult creșterea și dezvoltarea modelului TCP/IP și multă terminologie OSI este aplicată și în TCP/IP, cele două standarde diferă substanțial. Dacă modelul OSI prezintă 7 nivele, după cum am prezentat mai sus, modelul TCP/IP are doar patru. Acestea sunt: [5]
Nivelul 1 – Nivelul Acces la Rețea: Rezolvă problemele ce pot apărea în urma transmiterii unui pachet IP pe o legătură fizică.
Nivelul 2 – Nivelul Rețea (Internet): Inițial, acest nivel avea ca scop asigurarea rutării pachetelor în interiorul unei singure rețele. După ce au apărut interconexiuni între rețele, au mai fost adăugate funcționalități ce ajută la comunicarea între o rețea sursă și o rețea destinație.
Nivelul 3 – Nivelul Transport: Se ocupă cu tot ceea ce înseamnă controlul fluxului, corecția de erori și problemele legate de siguranță.
Nivelul 4 – Nivelul Aplicație: Acest nivel face referire la protocoalele de nivel înalt ce sunt folosite în majoritatea aplicațiilor. Exemplu: terminalul virtual (TELNET), transfer de fișiere (FTP) și poștă electronică (SMTP).
În continuare avem o imagine ce prezintă în paralel structurarea pe nivele ale modelelor TCP/IP și OSI, alături de protocoalele aferente fiecărui nivel:
Tabel 1 Tabel OSI vs. TCP/IP
De-a lungul timpului s-au dezvoltat și diverse organizații pentru formularea și stabilirea standardelor în ceea ce privește protocoalele de rețea. Unele dintre aceastea sunt: International Organization for Standardization (ISO), International Telecomunication Union (ITU), Institute of Electrical and Electronics Engineers (IEEE) și Internet Engineering Task Force (IETF). IETF se ocupă cu protocoalele ce se folosesc de internet. IEEE controlează multe protocoale software și hardware din industria electonicii pentru dispozitive de consum sau comerciale. ITU este o organizație de ingineri în telecomunicații care se ocupă cu proiectarea multor sisteme de comunicații radio. [5]
1.1.3 Wi-Fi
Wi-Fi este numele comercial pentru tehnologiile construite pe baza standardelor de comunicații din familia IEEE 802.11, ce sunt folosite pentru realizarea rețelelor locale de comunicație (LAN), fără fir (wireless LAN). Aceste rețele prezintă viteze de transfer apropiate, sau echivalente cu cele ale rețelelor fără fir de tip Ethernet. Suportul pentru Wi-Fi este oferit de o gamă largă de dispozitive hardware și de o multitudine de sisteme de operare moderne pentru calculatoare, rutere, telefoane mobile, console de jocuri și cele mai avansate televizoare.
IEEE 802.11 este un standard ce face referire la protocoale de rețea aflate pe nivelul gazdă-rețea al modelului TCP/IP și la cele aflate pe nivelurile fizic și legătură de date ale modelului OSI. IEEE 802.11 este deci un standard ai cărui implementări se ocupă cu primirea pachetelor IP (de la protocoalele de nivel de rețea) și transmiterea lor mai departe, încercând să evite posibilele coliziuni cu alte stații de doresc să transmită. [8]
802.11 aparține unei familii de standarde pentru comunicațiile în rețelele locale, care au fost elaborate de IEEE. Tot din această familie de standarde, elaborată de IEEE, mai face parte și standardul 802.3 pentru Ethernet. S-a dorit ca noul standard să fie compatibil cu standardul Ethernet, deoarece acesta era foarte popular și folosit în perioada anilor 1990. [8]
Standardul a fost elaborat în 1990 de către IEEE și a fost definitivat în 1997. Au apărut versiuni noi, îmbunătățite: 802.11 a/b/g, care au fost publicate între anii 1999 și 2001. 802.11n este o nouă versiune la care se lucrează din 2004, versiune implementată de unii furnizori de echipamente. Versiunea 802.11i este cea recomandată din punct de vedere al securității de către IEEE și Wi-Fi Alliance.
O limitare a acestui standard este din cauza faptului ca nu este folosit firul, fapt ce face ca rețelele IEEE 802.11 să fie mai lente decât cele cablate, cum ar fi Ethernet. O alta limitare provine și din folosirea unei benzi de frecvență de 2.4 GHz împărțită în 12 canale care se suprapun două câte două parțial. Consumul mare de energie, precum și reglementările în privința puterii electromagnetice emise reprezintă o altă serie de limitări. Din cauza acestor aspecte, nu sunt posibile acoperiri mai mari de câteva sute de kilometrii, mobilitatea în cadrul rețelelor fiind una restrânsă.
1.1.4 Stiva de protocoale IEEE 802.11
În 1997, prima specificație IEEE 802.11 prevedea 3 moduri de transmisie fără fir a biților.
Una dintre acele metode era transmiterea biților prin infraroșu, metodă furnizată de către o tehnologie optică asemnănătoare cu cea implementată de telecomenzile diverselor aparate electronice. Deși limita zona de funcționare la încăperea în care era instalată, acest aspect putea fi privit ca unul pozitiv din punctul de vedere al securității. Acestă tehnologie optică oferea o viteză de maximum 1-2 Mbps. [8]
Celelalte două modalități de transmisie erau tehnologii radio cu banda de 2,4 GHz, bandă ce nu impunea licențe de utilizare. Datorită libertății acestei benzi mai există și alte tehnologii care fac uz de ea, precum telefoanele fixe fără fir (cordless), sau tehnologia Bluetooth, implementată de multe telefoane celulare din trecut și de smartphone-urile din ziua de astăzi. Cu toate acestea viteza lor de comunicație este una redusă.
FHSS este una dintre acele 2 tehnologii. Abrevierea vine de la Frequency-Hopping Spread Spectrum, care în traducere liberă înseamnă spectru împrăștiat cu salturi de frecvență. Pentru a face o alocare eficientă a benzii de 2,4 GHz, tehnologia presupune schimbarea periodică a frecvenței de transmisie. Periodicitatea acestor schimbări este dată de generarea pseudo-aleatoare a unor numere de către stațiile care comunică.
DHSS este cealaltă tehnologie. Abrevierea vine de la Direct-Sequence Spread Spectrum, care în traducere liberă înseamnă spectru împrăștiat cu frecvență directă. Ambele tehnologii oferă rate de transfer 1 -2 Mbps.
În anul 1999, IEEE a mai standardizat încă două tehnologii de transmisie. Scopul acestor două noi modalități era mărirea ratei de trasnfer. Vorbim aici de OFDM și HR-DSSS.
OFDM este abrevierea de la Orthogonal Frequency-Division Multiplexing, care în traducere liberă înseamnă multiplexare cu divizare în frecvențe ortogonale. Tehnica presupunea faptul ca transmisia se făcea simultan pe mai multe frecvențe. [9]
HR-DSSS este abrevierea de la High Rate Direct Sequence Spread Spectrum. Tehnologia este similară cu cea a spectrului împrăștiat cu secvență directă. Cu toate acestea prezintă o rată mai ridicată de transmitere a fragmentelor, în bandă mai îngustă. [10]
În mod teoretic, prin OFDM se pot atinge viteze de transfer de până la 54 de Mbps, fiind standardizată sub numele de IEEE 802.11a. HR-DSSS poate atinge viteze de 1,2, 5,5 sau 11 Mbps, între care poate baleea pe parcursul transmisiei. Acest standard a primit denumirea de IEEE 802.11b. În anul 2001, IEEE a mai publicat înca un standard: IEEE 802.11g. Această specificație reprezintă o combinație dintre OFDM și HR-DSSS: folosește banda îngustă a tehnicii HR-DSSS cu tehnica de modulație OFDM. [8]
1.1.5 Protocoalele 802.11 de comunicații Wi-Fi
După cum am prezentat anterior, IEEE 802.11 este o familie de standarde ce sunt folosite pentru comunicațiile fără fir, specifice Wi-Fi-ului. În continuare voi detalia multiplele protocoale specifice familiei 802.11:
802.11-1997
Versiunea originală a standardului IEEE 802.11 a fost lansată în 1997 și clarificată în 1999. După cum am menționat anterior, aceasta specifica 3 metode de transmitere fără fir a șirurilor de biți:
Prin infraroșu: care opera la 1Mbps
FHSS – spectrul împrăștiat cu salturi de frecvență: care opera la 1-2 Mbps
DHSS – spectrul împrăștiat cu frecvență directă: opera tot la 1-2 Mbps. [8]
802.11a (unda de modulație OFDM)
Inițial descrisă drept clauza 17 din specificația 1999, unda de modulație OFDM în banda de 5,8 GHz este definită în clauza 18 din specificațiile 2012. Această undă oferă protocoale care permit transferul de date la viteze de la 1,5 până la 54 Mbps. A fost implementată la nivel global, mai ales în mediul corporatist. Chiar dacă amendamentul original nu mai este valid, termenul de 802.11a este încă folosit de producătorii de routere wireless pentru a descrie interoperabilitatea sistemelor respective în banda de 5GHz cu viteze de 54Mbps. 802.11a folosește același nivel, cel legătură de date, precum standardul original. Operează în banda de 5GHz cu o viteză maximă de transfer de 54Mbps.
Din moment ce banda de 2,4 GHz era foarte des utilizată, până la punctul de a deveni aglomerată, folosirea benzii libere de 5 GHz îi dă standardului 802.11a un avantaj reprezentativ.
Cu toate acestea, frecvența purtătoare mare aduce și un mare dezavantaj. Aria de acoperire a standardului 802.11a este mult mai mică decât cea a 802.11b sau g. În teorie, semnalele 802.11a sunt mult mai mult absorbite de către pereți și alte obiecte solide ce se găsesc în calea lor de propagație, din cauza lungimii lor de undă foarte mici. Așadar ele nu se pot propaga la distanțe atât de mari precum o fac cele din gama 802.11b sau g. În practică, în mod normal, 802.11b are o arie mai mare de acoperire la viteze mult mai mici.
802.11b reduce viteza la 5,5 Mbps sau chiar la 1 Mbps atunci când semnalul este slab. 802.11a suferă de asemenea și de fenomenul numit interferență, dar la nivel local foarte puține semnale care pot interfera. [8]
802.11b
Standardul 802.11b are atinge viteze de 11Mbps. A apărut la începutul anilor 2000, având în vedere faptul că acest standard era o extensie a tehnicii de modulație definită în standardul original. Prețul scăzut și faptul că tranziția către acest standard se putea face foarte ușor, au făcut din 802.11b standardul definitiv în ceea ce înseamnă tehnologia LAN wireless.
Dispozitivele ce foloseau 802.11b puteau fi afectate de interferența cu alte dispozitive ce operau pe aceeași bandă, de 2,4 GHz, cum ar fi: cuptoarele cu microunde, dispozitivele Bluetooth, telefoanele fără fir (cordless) și unele echipamente radio pentru amatori. [8]
802.11g
În Iunie 2003, un al treilea standard a fost aprobat: 802.11g. Acest standard lucrează în aceeași bandă de frecvență, de 2,4 GHz precum 802.11b, dar folosește tehnica OFDM specifică standardului 802.11a. La nivelul fizic, operează la o viteză maximă de 54Mbps. Acest standard este perfect compatibil din punct de vedere hardware cu versiunea mai veche, 802.11b.
Până în Ianuarie 2003, standardul fusese deja adoptat datorită necesității de a avea o viteză mai mare de transfer a datelor. Costurile erau de asemenea reduse. Asemenea standardului 802.11b și 802.11g suferă de interferențe cu alte dispozitive ce folosesc banda de 2,4 GHz. Exemplu: tastaturile wireless. [8]
802.11-2007
În 2003, grupul TGma a fost autorizat să modifice anumite amendamente existente în versiunea anilor 1999 a standardului 802.11. REVma sau 802.11ma, după cum era numit, a creat un singur document care îmbina 8 amendamente: 802.11a, b, d, e, g, h, i, j cu standardul de bază. În cadrul publicației de pe 8 Martie 2007, noul standard era denumit IEEE 802.11-2007. [8]
802.11n
802.11n este un amendament care îmbunătățește versiunea anterioară 802.11 prin adăugarea antenelor MIMO. MIMO, abrevierea de la Multiple-Input Multiple Output, care în traducere liberă înseamnă intrare multiplă – ieșire multiplă, este o soluție tehnică folosită pentru creșterea lățimii de bandă de transmisie fără fir prin utilizarea mai multor antene, sau altfel spus, a unei matrice de antene, la ambele capete ale legăturii.
Amendamentul 802.11n operează în lărgimi de bandă de 2,4 Ghz și 5 GHz. Vitezele maxime de transfer sunt între 54 Mbps și 600 Mbps. Acest amendament a fost aprobat de IEEE și a fost publicat în Octombrie 2009. [8]
802.11-2012
În Mai 2007, grupul Tgma a fost autorizat să modifice multe dintre amendamnetele din versiunea 2007 a standardului 802.11. REVmb sau 802.11mb, după cum era numit, au creat un singur document care alinia 10 amendamente: 802.11k, r, y, n, w, p, z, v, u, s cu standardul de bază 2007. În publicația din 29 Martie 2012, se făcea referire la noul standard ca la IEEE 802.11-2012. [8]
802.11ac
IEEE 802.11ac este un amendament la IEEE 802.11, publicat în Decembrie 2013, care se bazează pe 802.11n. Printre multele schimbări ce le prezenta amendamentul, față de versiunea anterioară 802.11n, putem menționa canalele de comunicații mult mai largi în banda de 5 GHz: 80 sau 160 de MHz în comparație cu 40 MHz. [8]
802.11ad
IEEE 802.11ad este un amendament care definește un nou nivel fizic în care rețelele 802.11 să poată opera în spectrul de undă milimetric de 60GHz. Această bandă de frecvență are caracteristici de propagare diferite față de benzile 2,4 GHz și 5 GHz în care rețelele Wi-Fi operau. Produsele ce implementau 802.11ad sunt aduse pe piață sub brandul WiGig. Certificatul este acum dezvoltat de Alianța Wi-Fi (Wi-Fi Alliance). Rata de vârf a transmisiei este de 7Gbps.
TP-Link a anunțat dezvoltarea primului router 802.11ad din lume în Ianuarie 2016. [8]
802.11af
IEEE 802.11ah, care face referire la ,,White-Fi”, sau la ,,Super Wi-Fi”, este un amendament, aprobat în Februarie 2014, care permite lucrul cu VHF și UHF.
VHF este acronimul de la Very High Frequency, care în traducere liberă înseamnă frecvență foarte înaltă și reprezintă banda 30 MHz – 300 MHz.
UHF este acronimul de la Ultra High Frequency, care în traducere liberă înseamnă frecvențe ultra înalte și reprezintă banda 300 MHz – 3000 Mhz (3 GHz). Cele 2 benzi de radio, VHF și UHF, sunt utilizate pe scară largă în televiziune, radio FM, telefoane mobile, pagere, stoc mașină de informare, de comunicare cu microunde și radar.
802.11ah
Datorită caracteristicilor favorabile de propagare a spectrului de joasă frecvență, 802.11ah oferă o arie de transmisie net îmbunătățită în comparație cu convenționalul 802.11. Operează pe 2,4 și 5 GHz. Poate fi folosită la o gamă largă de scopuri cum ar fi: rețelele de senzori de scară mare, arie foarte bună de acoperire pentru hotspot și Wi-Fi. Acest protocol tinde spre a face un consum scăzut, comparabil chiar cu cel al Bluethooth-ului. [8]
802.11ai
IEEE 802.11ai este un amendament la standardul 802.11 care oferă mecanisme pentru o configurare inițială a link-ului mai rapidă.
802.11aj
IEEE 802.11aj este o versiune rebranduită a standardului 802.11ad care permite utilizarea benzii nelicențiate de 45 GHz, valabilă in anumite regiuni ale lumii, în special în China.
802.11aq
IEEE 802.11aq este un amendament la standardul 802.11, ce conține anumite funcționalități îmbunătățite a variantei 802.11u, ce permit descoperirea de servicii ce rulează pe un anumit dispozitiv sau un baza unei rețele. [8]
802.11ax
IEEE 802.11ax este succesorul versiunii 802.11ac și va îmbunătăți eficiența rețelelor WLAN. Se dorește ca 802.11ax să aibă o viteză de tranziție de 4 ori mai mare decât 802.11ac. Este programat să fie lansat publicului în 2019.
802.11ay
IEEE 802.11ay este un standard ce încă se află în procesul de dezvoltare. E un amendament ce definește un nou nivel fizic pentru rețelele 802.11 pentru a opera în spectrul de undă de 60 GHz. Va fi o extensie a existentului 802.11ad, cu scopul de a crește viteza de transmisie, aria de acoperire și cazurile de utilizare. Rata maximă de trasnfer va fi de 20Gbps. Distanța de transmisie va fi undeva la 300-500 de metri. Lansarea acestui standard este programată pentru Iulie 2017. [8]
802.11-2016
IEEE 802.11-2016 este o versiune revizuită a IEEE 802.11-2012, ce incorporează 5 amendamente: 11ae, 11aa, 11ad, 11ac, 11af
1.2 Microcontrolere
Termenul de ,,controller” definește un dispozitiv ce poate acționa sau controla un proces sau o interacțiune cu mediul exterior, fără a fi nevoie de intervenția umană.
Inițial, controlerele au fost realizate de tehnologii pur analogice, fiind folosite componente electronice discrete sau componente electromecanice, cum ar fi releele. Cele care totuși se foloseau de tehnica modernă numerică au fost realizate la început pe baza logicii cablate și cu ajutorul electronicii analogice, uneori destul de complexe. Cu toate acestea, existau numeroase dezavantaje precum dimensiunile mari, consumul pe măsură și fiabilitatea scăzută.
Apariția și implementarea microprocesoarelor a dus la o reducere a costurilor, a dimensiunilor, scăderea consumului și creșterea fiabilității.
La modul general, un microcontroler este un microcircuit ce incorporează o unitate centrală, prescurtată CPU și o memorie împreună cu resurse care-i permit interacțiunea cu mediul exterior.
Fig. 1- 3 Microcontroler Intel
Totalitatea aplicațiilor ce fac uz de microcontrolere sunt încadrabile în categoria sistemelor încapsulate-integrate, sau embedded systems, așa cum sunt cunoscute la scară internațională.
Există o gamă largă de domenii în care microcontrolerele sunt utilizate, cum ar fi: în industria de automobile, unde controlu, sau aprinderea motorului sunt controlate de tehnologia microcontrolerelor, climatizarea, diagnoza, sistemele de alarmă, ștergătoarele de parbriz cu temporizator. O altă industrie este cea așa numita industrie a electronicii de consum. Exemplu: camere video, televizoare, sisteme audio, GPS-uri, telefonie mobilă, jocuri electronice, videocasetofoane. Aparatura electrocasnică face și ea uz de microcontrolere: aspiratoare, frigidere, mașini de spălat, cuptoare cu microunde. Microcontrolerele pot fi găsite și in industria de control e mediului și a climatizării cum ar fi sere, locuințe, hale industriale. Mijloacele moderne de măsurare folosesc microcontrolere conținute în instrumentația cu care se lucrează: senzori și traductoare inteligente, aparate de măsură. Alte domenii în care microcontrolerele sunt întâlnite sunt în industria aerospațială, în medicină, la realizarea de periferice pentru calculatoare. [11]
Ca exemplu concret al utilității microcontrolerelor putem da automobilele BMW seria 7, sau Mercedes din clasa S, care încă de la nivelul din 1999 foloseau fiecare 65, respectiv 63 de microcontrolere. În ziua de astăzi este greu de menționat un domeniu, în care microcontrolerele să nu fie folosite.
În continuare, prezentăm schema simplificată a unui microcontroler:
Fig. 1- 4 Schema simplificată a unui microcontroler
Intrările pot fi digitale sau analogice și pot fi reprezentate de diverse semnale venite de la senzori care măsoară diferite mărimi sau fenomene fizice. Exemplu: traductoare specializate, traductoare foto, traductoare de temperatură, traductoare de presiune, traductoare de forță.
Ieșirea poate fi reprezentată de sonerii, relee, diode LED, motoare, sau chiar un difuzor dacă se face o conversie D/A.
După cum se poate observa și în figură, un aspect important fără de care microcontrolerul nu poate funcționa este/sunt programul/programele stocat/stocate în memoria microcontrolerului.
Un MC poate fi privit ca un program de calcul complet integrat pe un singur chip. Părțile componente ale acestuia sunt:
Unitatea centrală CPU
Generatorul de tact (la care se adaugă în general un cristal de cuarț sau un circuit RC)
Memorie RAM
Memorie ROM/PROM/EPROM/EEPROM
Dispozitive I/O seriale și paralele
Controller de întreruperi, controller DMA, numărătoare/temporizatoare (timers), convertoare A/D și D/A
Periferice [12]
1.2.1 Structura unui microcontroler
Unitatea de memorie
În memorie se găsesc toate locațiile de memorie și pentru a ne putea adresa ei, trebuie selectată o locație de memorie. Într-o memorie trebuie să poată fi permisă atât citirea cât și scrierea într-o locație de memorie.
Fig. 1- 5 Unitatea de memorie
Unitatea centrală de procesare (CPU)
Unitatea centrală de procesare are o organizare structurată pe locații de memorie, fiecare dintre ele având diverse proprietăți încorporate cum ar fi: operațiile de înmulțire, împărțire, adunare, scădere, permițând chiar și mutarea conținutului dintr-o locație în alta. [12]
Fig. 1- 6 Unitatea centrală de procesare [12]
Bus-ul
Acesta reprezintă un grup de 8, 16 fire, sau mai multe fire reprezentând calea de comunicație. Există două tipuri de bus:
De adresă: conține tot atâtea linii ca numărul de cifre binare, făcând transmisia adreselor de la unitatea centrală de procesară la memorie.
De date: transmite datele și folosește la conectarea tuturor blocurilor din interiorul microcontrolerului.
Fig. 1- 7 Bus-ul [12]
Unitatea de intrare-ieșire
Numite și porturi, există porturi de intrare, de ieșire și porturi pe două căi.
Fig. 1- 8 Unitate intrare/ieșire
Unitatea timer
Bazată pe un contor cu registru a cărui valoare numerică crește, unitatea timer are scopul de a da infomrați despre timp. Din punct de vedere funcțional, contorul își crește valoarea numerică cu unu la intervale egale, spre exemplu T1 și T2. Se face diferența dintre cele două intervale de timp și se determină intervalul de timp trecut.
Fig. 1- 9 Unitatea timer [12]
Watchdog-ul
Este un bloc care urmărește execuția corectă a programului și funcționarea acestuia fără defecte. De fiecare dată când programul se execută corect, acest bloc, care de fapt este un contor, va scrie un zero. Daca programul se blochează, blocul nu va mai scrie zero, iar microcontrolerul se va reseta la atingerea valorii sale maxime. Elementul este crucial pentru programele care trebuie să fie fiabile fără supravegherea omului.
Fig. 1- 10 Watchdog-ul
Convertorul Analog-Digital
Convertorul Analog-Digital face conversia dintr-o mărime analogică într-una digitală.
Fig. 1- 11 Convertorul Analog-Digital [12]
Comunicație serială
Comunicația serială ajută și este folosită la comunicarea dintre un microcontroler și alte echipamente. Comunicația serială este o interfață asincronă ce se poate folosi în mai multe moduri. Cel mai frecvent se utilizează modul clasic care este compatibil cu toate interfețele asincrcone existente.
Fig. 1- 12 Unitate serială folosită pentru a trimite date, pe trei linii
1.2.2 Caracteristici arhitecturale ale unității centrale ale unui microcontroler
După cum am menționat anterior, unitatea centrală a unui microcontroler este de o importanță crucială, de aceea trebuie avută în vedere mereu arhitectura unității centrale în analiza oricărui sistem de calcul. În general, principalele concepte sunt următoarele:
Arhitectura de tip ,,von Neumann
Majoritatea microcontrolerelor sunt realizate pe tipul de arhitectură ,,von Neumann”. Microcontrolerele ce folosesc o astfel de arhitectură au proprietatea că folosesc un singur spațiu de memorie atât pentru memorarea codului instrucțiunilor cât și a datelor ce fac obiectul lucrării. Posedă deci o singură magistrală internă (bus), folosită atât pentru prelucrarea instrucțiunilor (fetch și opcod) cât și a datelor. Un dezavantaj îl reprezintă faptul că executarea secvențială a celor două operații separate încetinește operațiile. [13]
Arhitectura de tip ,,Harvard”
Această arhitectură folosește spații diferite pentru program și date. În consecință ar trebui să existe și magistrale separate pentru codul instrucțiunilor, respectiv pentru date. Așadar, din punct de vedere principial, ne putem gândi aici la execuția cvasiparalelă, adică suprapunerea celor două operații la care s-a făcut referire anterior. În timp ce se execută operațiile datei aferente instrucțiunii anterioare, poate fi preluat în memorie codul următoarei instrucțiuni. O astfel de complexitate ridicată a microcircuitului da posibilitatea, cel puțin în teorie, unei execuții mai rapide, mai ales atunci când există și un pipe-line. Aceasta reprezintă arhitectura folosită de procesoarele numerice de semnal. O astfel de arhitectură, Harvard, presupune un cost mare pentru a fi implementată. De aceea, de cele mai multe ori, în practică este întâlnită arhitectura Harvard modificată. Aceasta presupune spații diferite de memorie pentru program și date, dar prezintă magistrale comune pentru adrese și date. [13]
CISC
CISC este abrevierea de la Complex Instruction Set Computer și reprezintă arhitectura de bază în cazul realizării majorității unităților centrale de procesare. Acest lucu presupune un set de 80 de instrucțiuni foarte diferite și foarte puternice: unele instrucțiuni lucrează cu anumite spații sau registre, altele permit doar anumite moduri de adresare.
RISC
RISC este abrevierea de la Reduced Instruction Set Computer. Acest concept de realizare a unităților centrale de procesare a început să fie folosit și implementat și în cadrul realizării microcontrolerelor, având tot mai mult succes. RISC presupune un set redus de instrucțiuni, ce se execută rapid, eficient și care poate fi implementat cu ușurință. Acest lucru duce la obținerea unei complexități reduse a microcircuitului, suprafața rămasă liberă putând fi folosită în alte scopuri.
1.2.3 Aspecte privind implementarea memoriei microcontrolerelor
Exceptând memoria locală RAM, mai există și alte aspecte ce au legătură cu implementarea fizică a memoriei de program, utilizându-se o memorie nevolatilă. În mod clasic, memoria ROM era implementată. Existau 2 variante folosite: EPROM pentru producție la scară mică și mask – ROM aferentă producției în masă. Alte concepte noi apărute de-a lungul timpului sunt:
OTP
Multe micrcocontrollere folosesc memoria OTP, care înseamnă One Time Programmable. Structura este asemnănătoare cu cea a EPROM-ului, doar că lipsește cristalul de cuarț pentru ștergere, ceea ce face aceste memorii mai ieftine. [13]
FLASH EPROM
Este o soluție viabilă în detrimentul EPROM-ului propriu-zis atunci când vorbim de un volum mare de memorie program, nevolatilă. Acest tip de memorie, EPROM, este mai rapidă și are un număr mare de cicluri de programare, de ștergere/scriere, circa x10000. De asemenea acest tip de memorie este mai flexibilă din punct de vedere al programării.
EEPROM
Acest tip de memorie este destinat unui număr limitat de parametrii care trebuiesc memorați și eventual modificați din timp în timp. Din punctul de vedere al scrierii, EEPROM-ul este o memorie lentă, dar cu un număr de cicluri de ștergere/scriere mai mare decât cel al FLASH EPROM-ului, aproximativ x100000. [13]
NOVRAM (RAM nevolatil)
Este folosită atunci când este nevoie de un volum mare de memorie de program și date nevolatilă, fiind mai rapidă decât celelalte tipuri de memorie și fără limitări ca număr de cicluri.
1.2.4 Interfața externă (Sistemul de intrări și ieșiri)
Microcontrolerele au un număr de intrări (Inputs) și un număr de ieșiri (Outputs), ieșiri numerice. Această structură este organizată sub forma unor porturi de I/O. Conexiunile exterioare sunt unidirecționale, bidirecționale sau multi-funcționale. Exceptând această structură, mai există o varietate de sisteme pentru inferfața cu mediul exterior, ce oferă diverse facilități. În continuare, vom prezenta câteva dintre acestea:
UART
UART este abrevierea de la Universal Aynchronous Receiver Transmitter și permite implementarea unui protocol clasic de comunicare asincron, fiind un port serial bidirecțional. Din acest punct de vedere, USART, abrevierea de la Universal Synchronous Asynchronous Receiver Transmitter, este la rândul lui un port, dar care permite și folosirea unui protocol sincron, oferind viteze mai mari de comunicație. SCI, abrevierea de la Serial Communication Interface, este o versiune îmbunătățită a circuitului UART, definit și utilizat de firma Freescale (Motorola). LIN, abrevierea de la Local Interconnect Network este implementarea particulară a unui protocol de comunicație asincron.
Porturi seriale sincrone dedicate
Sunt folosite atunci când avem nevoie de o viteză mare de transfer a datelor, cu ajutorul unor periferice specializate: sisteme de afișare, convertoare analog-numerice. Aceste tipuri de porturi implică și implementarea, mai mult sau mai puțin complexă a unor protocoale de comunicații, fiind vorba de o magistrală serială. În cadrul aceste structuri, trebuie să se gasească și un semnal de ceas pentru a face sincronizarea datelor. Exemple de implementări răspândite: SPI (Serial Peripheral Interface), Microwire/Microwave Plus, I2C (Inter Integrated Circuit bus), CAN (Controller Area Network). [13]
Conectivitate Ethernet/Web
Presupune existența unor trăsături care să permită integrarea unui protocol TCP/IP. Aceste trăsături pot fi hardware sau software care presupun viteză de calcul. Asadar pot exista stive hardware sau stive software. Pe baza acestor stive se poate realiza o conectivitate de tip: HTTP, FTP, STMP, POP3.
Conectivitatea USB
Pentru a permite conectarea cu ușurință a diverselor periferice la PC (cu rolul gazdă – host) și transferul de date a fost creată magistrala serială USB – Universal Serial Bus. Există mai multe variante de USB care variază una față de alta în special prin viteza maximă de transfer pe care o oferă. Un model este USB 1.1, cu o rată de transfer de 12Mbytes/s, sau varianta USB 2.0 cu o rată de 480 Mbytes/s În prezent, pe piață, majoritatea firmelor oferă microcontrolere cu o conectivitate USB, în general compatibilă cu USB 1.1. Fiabilitatea este una bună având în vedere costul minim pentru componentele hardware și software. Ca exemple de astfel de firme putem menționa Microchip, Atmel, Infineon, Intel, majoritatea producției orientându-se către realizarea de periferice USB și mai puțin pe USB host. [13]
Conectivitate Wireless
Face referire la anumite resurse ce permit microcontrolerului să fie integrat într-o rețea wireless. Exemple de astfel de rețele: Bluetooth (IEEE 802.15.1) și Zigbee (IEEE 802.15.4).
1.2.5 Familii de microcontrolere reprezentative
În continuare voi prezenta cele mai cunoscute familii de microcontrolere, pe 8 respectiv 16 biți.
8048 (Intel MCS – 48) [14]
Este prima versiune de microcontroler lansată de intel în 1976, microcontroler pe 8 biți, fiind înca folosit. Unele caracteristici arhitecturale ale lui 8048 se regăsesc în următoarea generație, 8051.
8051 (Intel MCS-51, Atmel, Philips, Infineon, Cygnal și mulți alții) [14]
Este e doua generație de microcontrolere, pe 8 biți a firmei Intel. Deși a apărut acum 20 de ani, încă este folosit pe piață. Este destul de puternic și relativ ușor de programat. În arhitectură se regăsesc spații de memorie separate pentru program și date. Poate adresa 64 Kbytes memorie de program și 64 Kbytes memorie de date externă, accesibilă indirect. Are 128 de octeti de RAM local, plus un număr de registre speciale pentru lucrul cu dispozitivele periferice locale. Tot Intel a dezvoltat și un model ,,super 8051”, numit în mod generic ,,,80151”. În prezent există o multitudine de companii care dezvoltă diverse variante ale acestui model. Ex: Atmel, Dallas, Infineon, Philips.
80C196 (Intel MCS – 96)
Acest tip de microcontroler face parte din generația a treia de microcontrolere produse de Intel. Din punct de vedere structural, acest microcontroler prezintă o arhitectură de tip von Neumann, având o unitate de intrări/ieșiri de mare viteză. Are un spațiu de adresare de 65 Kbytes, ieșiri PWM, convertor analog numeric, timer watchdog. Ulterior au aparut mai multe variante, net superioare versiunii inițiale, una dintre ele fiind 80C296 (MCS – 296).
80C186, 80C188
Aceste tipuri de microcontrolere derivă din 8086/8088 și au incluse 2 canale DMA, un sistem de întreruperi, un controller DRAM și 2 numărătoare/timere pe același microcircuit.
68HC05 (Freescale/Motorola)
Acest model de microcontroler este derivat din microprocesorul M6800. Caracteristicille tehnice ale acestui model sunt următoarele: Prezintă un spațiu de memorie unic de 64 Kbytes în care sunt plasate registrele perifericelor (I/O, timere) cu un indicator de stivă (SP) hard pe 5 biți. Unele variante prezintă memorie EEPROM, CAN sau port serial.
68HC11, 68HC12, 68HC16 (Freescale)
68HC11 este un microcontroler de 8 biți, ce a fost produs de Motorola. Din punct de vedere structural, acesta prezintă un spațiu de adrese unic de 64K. De asemenea conține și un program de încărcare rezident (boostrap loader în ROM intern). Prin intermediul acestui program, la reset, o parte din memoria RAM externă poate fi ocupată cu cod program prin intermediul portului serial. Acest model de microcontroler prezintă și 2 modele evoluate. Este vorba de 68HC12 și 68HC16.
68HC12 , generic considerat un ,,super 68HC11”, are la bază o nouă unitate centrală, numită CPU12. Aceasta este extensia la 16 biți a arhitecturii inițiale HC11.
683xxx (Freescale) [15]
Sunt microcontrolere pe 32 de biți, ce conțin microprocesoare cu o putere de calcul comparabilă sau mai mare decât cea a lui Intel 80386.
PIC (Microchip) [16]
Familia de microcontrolere PIC a avut ca prim microcontroler varianta PIC 1650, apărut în urmă cu mai bine de 20 de ani. De-a lungul vremii, aceste microcontrolere au cunoscut o explozie uriașă, în prezent ele existând sub forma a șase serii: PIC10, PIC12, PIC14, PIC16, PIC17, PIC18. Printre aceste modele întâlnim si variante ce prezintă memorie de program de tip OTP și FLASH. Ca particularități structurale, putem menționa faptul că dimensiunea cuvântului pentru program este de 12, 14, sau 16 biți. Cuvântul cheie este de 8 biți, iar ca arhitectură aceste modele prezintă arhitectura Harvard. Pe baza celor 6 serii prezentate anterior, s-au dezvoltat o multitudine de variante, cele mai multe dintre ele vizând un cost redus, consumul redus prin faptul că prezintă un număr mic de conexiuni exterioare (pini) rezulând astfel un model de dimensiuni mici.
dsPIC30F este ultimul produs al firmei Microchip, din punct de vedere cronologic. Utilitatea lui este aceea de a controla motoarele electrice, fiind un procesor numeric de semnal pe 16 biți, conținând o periferie optimizată pentru lucrul cu moatoarele. Firma Ubicom, produce unele versiuni clone ale modelului PIC, mult mai rapide decțât originalele.
AVR (Atmel) [18]
Familia AVR, produsă de firma Atmel, face concurență familiei de microcontrolere PIC. AVR-urile sunt oarecum asemănătoare cu PIC-urile, din punct de vedere structural și au performanțe asemănătoare sau chiar mai bune. Deși au arhitecturi diferite, ambele au unitatea centrală de tip RISC, având cuvântul de date de 8 biți și cuvântul de program de 16 biți.
COP400 și COP800
COP400, produs de National Instruments, este un microcontroler de 8 biți, ce ocupă un segment oarecum important al pieții. Din punct de vedere tehnic, acesta prezintă următoarele caracteristici: 2K ROM local, 32×4 până la 160×4 RAM local, numărătoare/timere, tensiune de alimentare de 2,3 – 6 V, număr mic de pini.
COP800 este o variantă pe 8 biți, cu un preț scăzut, o versiune relativ fiabilă. Arhitectură seamănă cu cea a lui 8051, dar setul de instrucțiuni este similar cu cel al lui Z80.
Z8 (Zilog)
Deși derivă din Z80, nu este compatibil cu acesta nici ca set de instrucțiuni nici cu perifericele standard, fiind un compozit de mai multe arhitecturi diferite. Din punct de vedere tehnic, Z8 prezintă următoarele caracteristici: conține trei spații de adrese: program, date și un masiv de registre. Mai prezintă UART, DMA, sistem de întreruperi cu până la 37 de surse.
Z180 (Zilog), Rabbit (Rabbit Semiconductors)
Z180, se aseamănă oarecum cu Z80, având un CPU îmbunătățit. Acesta prezintă resurse locale precum: USART, 2 canale DMA, managament de memorie, timere, sisteme de întreruperi, instrucțiuni suplimentare față de Z80, cum ar fi înmulțirea.
Rabbit 2000 sau 3000 este un microcontroler ce are la bază un nucleu de Z180. Versatilitatea este una crescută, acest tip de microcontroler poate fi cu ușurință integrat în diverse aplicații. Pe baza acestui microcontroler au fost dezvoltate și diverse module, care adaugă și memorie de tip FLASH ROM și RAM.
TMS370 (Texas Instruments) [19]
Acest microcontroler, produs de Texas Instruments, este de 8 biți și prezintă mai multe asemănări cu modelul 8051, din punctul de vedere al modului de adresare, a stivei și a memoriei de date locale.
80386EX (Intel)
A fost introdus pe piață în August 1994, fiind cu succes adoptat și folosit de câțiva sateliți de orbită și microsateliți. Ca resurse locale, acest model prezintă porturi I/O seriale, controler pentru întreruperi, controler pentru RAM dinamic, DMA, timere, numărătoare. Aceste modele nu prezintă memorie locală.
80C16X (Infineon) [20]
Acest model este foarte utilizat în Europa, fiind un microcontroler de 16 biți. Prezintă CPU cu arhitectură RISC și poate fi întâlnit sub diverse variante: 80C165, 80C166, 80C167.
MSP430 (Texas Instruments) [19]
Acest model face parte din familia de microcontrolere de 16 biți oferită de Texas Instruments. În general aceste modele sunt folosite în aplicațiile portabile. Prezintă un spațiu de adresare de 64Kbytes, iar memoria internă de program poate fi organizată în variante diverse: OTP sau FLASH.
1.3 Motoare de curent continuu (cc)
Motorul electric este un dispozitiv ce convertește energia electrică în energie mecanică. Procesul invers, conversia energiei mecanice în energie electrică, este realizat de generatoarele electice. Ca principiu de funcționare, majoritatea motoarelor electrice au la bază un conductor parcurs de curent electric aflat în câmp magnetic și asupra căruia se acționează cu forțe electromagnetice. Există totuși și motoare piezoelectrice sau motoare electrostatice construite pe baza forței Coulomb. [21]
Fig. 1- 13 Motorul de inducție trifazat, cel mai răspândit motor electric
Aceste tipuri de motoare sunt utilizate într-o paletă largă de aplicații: motoare pentru componente hard disc, imprimantă, pompe, locomotive, macarale.
Fig. 1- 14 Motoare electrice de diferite puteri în comparație cu o baterie de 9V
Indiferent de tipul motorului, toate au din punct de vedere funcțional două părți componente principale: stator și rotor. Statorul reprezintă partea fixă a motorului, cea exterioară. Include: carcasa, bornele de alimentare, armătura feromagnetică statorică și înfășurarea statorică. În interior, se găsește rotorul care reprezintă partea mobilă a robotului. Acesta conține un ax și o armătură rotorică ce susține înfășurarea rotorică. Întrefierul este porțiunea goală, cu aer, dintre stator și rotor, permițând mișcarea rotorului față de stator.
Fig. 1- 15 Rotorul motorului electric(stânga) și statorul motorului electric(dreapta)
1.3.1 Clasificarea motoarelor
În funcție de tipul de curent cu care sunt parcurse, motoarele se clasifică în două categorii: motoare de curent continuu și motoare de curent alternativ. În funcție de numărul de faze cu care funcționează, motoarele pot fi monofazate sau polifazate (cu mai multe faze).
Motoarele de curent continuu pot fi împărțite în patru categorii în funcție de modul de conectare al înfășurării cu excitație: cu excitație derivație, cu excitație serie, cu excitație mixtă, cu excitație separată.
Motoarele de curent alternativ pot fi sincrone și asincrone. [21]
1.3.2 Particularități ale motorului de curent continuu
Zenobe Gramme este cel care a inventat motorul de curent continuu, în 1873, conectând un generator de curent continuu la un generator asemănător. Astfel, el a observat că mașina se rotește, făcând conversia energiei mecanice în energie electrică. Câmpul magnetic de excitație al motorului este datorat polilor magnetici de pe stator și a bobinelor polare concentrate. Pe axul motorului, se găsește un colector care schimbă sensul curentului prin înfășurarea rotorică. În acest fel, câmpul magnetic de excitație va exercita în mod constant o forță față de rotor.
Modul în care înfășurarea de excitație este conectată dă o clasificare în patru categorii a motoarelor de curent continuu. [21]
Motor cu excitație independentă (în derivație) – unde înfășurarea statorică și înfășurarea rotorică sunt conectate la două surse separate de tensiune. Pe scurt, schema unui astfel de motor este următoarea:
Fig. 1- 16 Schema electrică a motorului de curent continuu cu excitație independentă (în derivație)
Motor cu excitație paralelă – aici, înfășurarea statorică și înfășurarea rotorică sunt legate în paralel la aceeași sursă de tensiune.
Motor cu excitație serie – atât înfășurarea statorică cât și înfășurarea rotorică sunt legate în serie. Schema unui motor cu excitație serie este următoarea:
Fig. 1- 17 Schema electrică a motorului cu excitație serie
Motor cu excitație mixtă – înfășurarea statorică este împărțită în două înfășurări, una conectată serie și cealaltă paralel. Schema acestui motor este următoarea:
Fig. 1- 18 Schema electrică a unui motor cu excitație mixtă
La motoarele de curent continuu, turația lor este direct proporțională cu tensiunea ce este aplicată înfășurării electrice și invers proporțională cu câmpul magnetic de excitație. Turația poate fi reglată prin varierea tensiunii aplicate motorului. Turații mai mari se obțin prin slăbirea câmpului de excitație.
Cuplul dezvoltat de motor este direct proporțional cu curentul electric prin rotor și cu câmpul magnetic de excitație. Schimbarea sensului de rotație se face schimbând sau sensul câmpul magnetic de excitație, sau polaritatea tensiunii de alimentare.
Realizare practică
2.1 Schema bloc
2.2 Componente folosite
Arduino UNO
Arduino este o companie ce produce plăcuțe de dezvoltare ce au la bază microcontrolere. Tot Arduino se ocupă și de dezvoltarea părții software ale acestor plăcuțe. Plăcile Arduino oferă utilizatorului pini de Intrare/Ieșire (I/O), digitali și analogici, ce pot fi conectați cu o multitudine de alte plăcuțe, numite scuturi sau shield-uri. Plăcile conțin USB pentru a putea fi încărcate pe ele programul utilizatorului și conțin și interfețe de comunicații seriale. Ca sintaxă, codul scris în Arduino se aseamănă și are funcții similare cu cele din C și C++.
Fig. 2- 1 Placă de dezvoltare Arduino UNO
Inițial, Arduino a început în anul 2005 ca proiectul unui student al Institutului de Interacțiune a Designului din Ivrea, Italia. Numele de ,,Arduino” vine de la numele unui bar din Ivrea, unde obișnuiau să se întâlnească fondatorii.
Din punct de vedere Hardware, o plăcuță Arduino conține un microcontroler Atmel AVR, pe versiune de 8,16 sau 32 de biți. Un alt avantaj al lui Arduino este acela că dispune de conectori standard, permițând, așa cum am menționat și mai sus, conectarea unei palete largi de shielduri. Unele shield-uri se pot conecta cu ajutorul pinilor, altele sunt adreabile direct pe magistrala I2C, folosirea mai multor module în paralel fiind astfel posibilă. [24]
Până în anul 2015, plăcuțele Arduino au fost în mod oficial cipuri Atmel, din seria megaAVR. Exemplu: ATmega8, ATmega168, ATmega1280, ATmega2560. După anul 2015, au fost adăugate cipuri și ale altor producători. Majoritatea plăcuțelor includ un regulator liniar de 5V și un oscilator cu cuarț de 16MHz.
Programarea tuturor plăcuțelor se face prin conexiunea serială. La unele plăcuțe Arduino, au fost implementate și convertoare pentru a realiza conversia dintre nivelele logice RS-232 și cele TTL. Plăcuțele Arduino din prezent sunt programabile prin USB. [24]
Fig. 2- 2 Una dintre primele plăcuțe Arduino cu interfață de comunicații serială RS-232 [26]
Plăcuțele Arduino pun la dispoziție 14 pini digitali de intrare/ieșire (I/O), la care se pot conecta și alte circuite sau dispozitive.
Fig. 2- 3 Plăcuță Arduino cu descrierea pinilor de I/O
Din punct de vedere software, programele Arduino pot fi scrise în orice limbaj de programare ce conțin un compilator capabil să producă un cod de mașină binar. Mediul de dezvoltare Arduino suporta cod C și C++, cu reguli speciale de organizare și conține o librărie specială, numită Wiring care oferă proceduri comune de intrare ieșire. Orice sketch Arduino, conține by default două funcții: setup() și loop().
Fig. 2- 4 Un sketch Arduino ce conține funcțiile setup() și loop()
Funcția setup() se execută o singură dată, la începutul programului și ea are rolul de a face setările inițiale.
Funcția loop() se execută la infinit (de aici și numele), sau mai exact spus cât timp există curent în plăcuța Arduino.
Ca motivație, am ales să folosesc plăcuța Arduino drept una dintre componentele proiectului meu dintr-o multitudine de motive. În primul rând este foarte ușor de programat, are o structură hardware intuitivă, codurile Arduino fiind și ele la rândul lor intuitive. În al doilea rând, pe internet există o multitudine de tutoriale, îndrumare și proiecte ce înlesnesc cu mult înțelegerea și dezvoltarea unui proiect Arduino. În al patrulea rând, există o multitudine de piese și circuite, compatibile cu aceste plăcuțe, foarte ușor de găsit și de procurat de pe piața electronicii. În ultimul rând, prețul unui Arduino este foarte ofertant, la unele magazine putând fi procurat și cu 30 de RON.
ESP8266
ESP8266 este un modul Wi-Fi low cost (se găsește la prețul de 2-3 USD – Dolari Americani), conține un microcontroler și stiva TCP/IP. Acest dispozitiv este produs de compania chinezească Espressif Systems. Modulul permite microcontrolerelor să se conecteze la o rețea Wi-Fi și să facă conexiuni simple de tipul TCP/IP. Pemite comenzi de tipul AT, comenzi ce au fost introduse în 1977 de firma Hayes. [27]
Fig. 2- 5 Un modul ESP8266 negru
Din punct de vedere tehnic, ESP8266 are următoarele specificații:
Tensiune de alimentare de 3,3V
Curent consumat: de la 70 de mA în sus
Protocol 802.11 b/g/n
Stivă TCP/IP
Comunicație UART la 115200 bps
Curent consumat în modul power down <10uA
Memorie Flash: 1MB
Securitate WPA sau WPA2
Dimensiuni: 14.3 x 24.8 mm [28]
Utilizarea ESP-ului împreună cu Arduino se realizează prin comunicații prin protocolul serial UART la o frecvență ridicată (baudrate 115200), 1MB memorie Flash și doi pini GPIO (General Purpose Input Output) – ce pot fi folosiți în mod similar pinilor digitali de pe plăcuța Arduino.
Ca orice alte componente mai mici și modulul ESP funcționează alimentat la 3,3 V. Acesta poate fi furnizat în siguranță de către plăcuța Arduino. Pentru restul conexiunilor este totuși necesară utilizarea unui convertor de niveluri logice, de la 5V la 3,3V, altfel putem risca să ardem ESP-ul. Dacă totuși nu se folosește un convertor, se poate folosi un divizor rezistiv, format din două rezistențe. [28]
Un exemplu de conectare a unui ESP la Arduino este prezentat în schema următoare:
Fig. 2- 6 Conectare ESP8266 la Arduino folosindu-se un divizor de tensiune
Distribuția pinilor la un modul ESP8266 este vizibilă în următoarea schemă:
Fig. 2- 7 Distribuția pinilor la ESP8266
Lista comenzilor AT, pe care ESP-ul le suportă:
Tabel 2 . Lista comenzilor AT suportate de ESP8266
Am ales sa folosesc ESP8266 pentru faptul că reprezintă o soluție practică atunci când vreau să am conectate componentele la o sursă de internet și pentru a controla robotul cu prin intermediul Wireless-ului.
Modul cu Driver de Motoare Dual L298N (Punte H)
Modulul cu Driver de Motoare Dual L298N este folosit pentru a controla motoare (două) mici și medii.
Fig. 2- 8 Modul L298N
Caracteristicile tehnice sunt următoarele:
Tensiune motoare: 5-35 V
Tensiune circuite logice: 5V
Curent motoare: 2A(maxim)
Frecvență maximă PWM: 40kHz
Dimensiuni: 43x43x27 mm [29]
Driver-ul conține și un limitator de tensiune liniar, astfel încât în cazul în care tenisunea de alimentare a motoarelor este mai mare de 7 V, nu mai este nevoie să alimentăm separat partea logică.
Acest driver funcționează pe baza unei punți H. Puntea H este un circuit electronic ce face posibilă aplicarea unei tensiuni pe o sarcină în orice sens. Tipul acesta de circuite sunt folosite în general în domeniul roboticii (cum este cazul și la noi) pentru a permite deplasarea înainte și înapoi. [29]
Modul de funcționare al unei punți H este următorul: Când întrerupătoarele S1 și S4 (prezentate în figura următoare) sunt închise, iar întrerupătoarele S2 și S3 sunt deschise, la nivelul motorului va fi aplicată o tensiune pozitivă. Când se deschid întrerupătpareșe S1 și S4 și se închid întrerupătoarele S2 și S3, tensiunea aplicată va fi inversă, așadar motorul va avea o funcționare inversă. Ca observație, înrerupătoarele S1 și S2 nu trebuie închise în același timp, pentru că o astfel de situație ar duce la un scurt-circuit la sursa de tensiune Vin, după cum va fi notată în figură.
Același lucru se întâmplă și dacă S3 și S4 s-ar închide simultan. În practică, întrerupătoarele S1, S2, S3 și S4 sunt în general tranzistoare bipolare sau MOS-FET. [30]
Fig. 2- 9 Schema unei punți H pe scurt [30]
L-am ales pentru că este foarte ușor de programat, costă puțin și comunică foarte bine cu motoarele CC din Kit-ul pe care l-am folosit.
Kit Robot cu 2 Motoare CC
Fig. 2- 10 Kit Robot cu 2 Motoare CC
Acest Kit conține:
Un șasiu
Două roți
Două motoare CC ce pot fi dotate cu sistem de encoder
O a treia roată care nu este acționată de motor și se poate mișca și pe axa orizontală
Soclu 4 baterii AA
Dimensiunile sunt de 15cm x 20cm. La cele 2 motoare va fi conectată puntea H (modulul L298) pentru a le acționa.
Suport pentru smartphone
Fig. 2- 11 Suport smartphone
2.3 Realizare hardware
Vom explica felul în care s-a realizat proiectul, din punct de vedere hardware și cum au fost conectate componentele între ele.
Am conectat modulul L298N atât la plăcuța Arduino cât și la cele două motoare de curent continuu. Pinii IN3 și IN4 de pe L298 sunt pinii care dau direcția (IN3 mers înapoi, IN4 mers înainte) în cazul meu pentru motorul aferent roții din dreapta. Ei se conectează plăcuța de Arduino la pinii 7 și 6. 7 pentru înainte și 6 pentru mers înapoi, de aceea au și fost definiți în program M2_înainte și M2_înapoi, M2 fiind aferent motorului roții drepte. Analog, pinii IN2 (înainte) și IN1(înapoi), sunt conectați pe plăcuța de arduino la pinii 5, respectiv 4, fiind specifici pentru motorul roții din stânga (M1_înainte și M2_înapoi).
Fig. 2- 12 Pinii de pe plăcuța Android care se conectează la modulul L298N
OUT3 a fost dus la motorul drept și OUT2 la cel stâng, după cum am specificat anterior.
Cu ajutorul bateriilor am alimentat apoi atât modulul L298N cât și plăcuța Arduino, am conectat cablul roșu al bateriei (pozitiv) pe pinul pozitiv al modulului L298N. De acolo am tras si un fir care să ducă către un Vin al plăcuții Arduino. La fel am făcut cu firul negru (ground-ul) care pornea de la baterie. În felul ăsta cu ajutorul bateriei am alimentat atât modulul L298N, cât și plăcuța Arduino. Bateria scoate 6V (4×1.5V). L298N este alimentat de la baterie, precum și Arduino, care poate fi alimentat la 7-12 V.
De la 3,3V din Arduino, vom alimenta ESP-ul. Conectarea a fost făcută cu ajutorul unui video informativ de pe Youtube. În principiul, 3,3 V au mers la pinul de Vcc al ESP-ului, pinul de Ground la Ground. De la 3,3 V, un cablu a mai fost conectat către pinul CH_PD al ESP-ului. S-a folosit un divizor de tenisune, pentru ca nivelul logic al Arduino-ului este de 5V, iar cel al ESP-ului de 3,3V. S-au folosit 2 rezistențe de aproximativ 1 și 2 kOhmi. Făcând calculele, vom avea (2 x 5)/3, obținand în final aproximativ 3,3V. Pinul 2(RX) de la Arduino, cade pe divizorul de tenisune de pe placă. De la tenisunea oținută au pornit cabluri către RXD. TXD a fost conectat direct la pinu 3(TX) al Arduino. Toate aceste conexiuni sunt arătate în schema electrică. [32]
2.4. Schemă electrică
2.5 Organigramă cod
NU DA
NU DA
2.6 Realizare software
Proiectul de licență este divizat în două părți principale. O parte va fi reprezentată de comunicația dintre telefon (aplicația Ip Webcam) și Calculatorul Desktop. Cealaltă parte a proiectul este reprezentată de comunicația dintre Calculator și Roverul Arduino.
Vom începe mai întâi cu legătura dintre telefon și calculator.
S-a dezvoltat o aplicație în cod HTML, cu apelare de funcții din JavaScript, aplicația fiind dezvoltată în mediul de programare (IDE) NetBeans.
Vom începe prin a descrie pagina principală, programată în HTML, anume index.html.
Pagina a fost divizată în două părți, folosindu-se tagul <div></div>. Fiecare a primit câte o denumire prin intermediul unui id unic pentru a fi mai ușor de identificat. Secțiunea din partea stângă ce va comunica cu telefonul, a fost denumită în mod intuitiv ,,video_si_audio”, pe când secțiunea din dreapta ce va comunica cu roverul, ,,comanda”.
În interiorul divului ,,video_si_audio” vom avea un formular, cu metoda get pe Action Event. În interiorul formularului va exista un câmp text, în care va fi încarcat by default ip-ul telefonului, alături de un buton marcat cu ,,Încarcă”, la care apăsare va fi apelată o funcție în Javascript. Funcția ,,incarcareTelefon” primește ca parametru variabila form, și în momentul în care este apelată va stabili conexiunea cu telefonul, preluând ip-ul.
În locul unde funcția ,,incarcaTelefon” este apelată, ea primește ca parametru variabila this.form, parametrul this făcând referire asupra instanției în care este localizată funcția. În cazul nostru, form va devenit myform și va avea stocat în el toate componentele definite: câmpul text camp_text_Telefon și butonul ,,Incarca”. Pentru realizarea comunicațiilor din cadrul aplicației JavaScript, a fost descărcată librăria jQuery 3.2.1 de pe site-ul lor oficial, ce va fi adăugat în bibliografie. [31]
În Javascript, în interiorul funcției ,,incarcaTelefon”, în variabila ,,variabilaIp” este stocat textul din text-box-ul aferent formularului apelat. În cazul nostru, în ,,variabilaIp” va fi stocat ip-ul telefonului.
function incarcareTelefon (form) {
variabilaIp = form.camp_text_Telefon.value;
variabilaVideo = "http://"+variabilaIp+":8080/video";
variabilaAudio = "http://"+variabilaIp+":8080/audio.opus"; document.getElementById("parte_video").setAttribute('data',variabilaVideo); document.getElementById("parte_audio").setAttribute('data',variabilaAudio);
}
În variabilele ,,variabilaVideo’’ și ,,variabilaAudio’’ vor fi stocate partea video respectiv audio a ceea ce înregistrează telefonul. Datele sunt trimise prin intermediul protocolului http, cu ajutorul portului 8080.
În index.html vor fi definite două variabile de tip object, unul pentru partea video, unul pentru partea audio. În funcția JavaScript vor fi identificate cele două părți, prin intermediul id-urilor lor unice ,,partea_video” și ,,partea_audio”. [22] Tot aici, variabila ,,data” din fiecare, care la momentul inițial este nulă, va fi înlocuită cu ,,variabilaVideo”, respectiv ,,variabilaAudio” cu ajutorul carora se va afișa fluxul video și cel auditiv în cele două object-uri definite în index.html. Metoda de setare a variabilelor se face cu ajutorul funcției predefinite în JavaScript, setAttribute(nume_variabilă_ce_trebuie_inlocuită, nume_variabilă_cu_care_inlocuiesc).
Variabila ,,object” în HTML, este folosită, pentru a fi stocată în ea un flux video sau audio, iar una dintre proprietăți, este data, care stochează URL-ul aferent, prin care se încarcă fluxul video sau audio.
Trecem acum la partea în care stabilim conexiunea dintre Calculator și Roverul Arduino. Roverul Arduino va fi controlat prin intermediul săgeților de la tastatură. De aceea, în fișierul JavasScript, celor două funcții deja predefinite, onkeydown și onkeyup, funcțiile scrise în fișierul JavasScript: whenKeyPressed, respectiv whenKeyReleased. [23]
Atunci când se verifică dacă vreo tastă a fost apăsată, în funcția whenKeyPressed, testează ce tastă a fost apăsată, prin verificarea valorii a.keyCode, unde keyCode returnează codul caracter al tastaturii ce a fost apăsate. Caracterele specifice pentru săgeată sus, jos, stânga, dreapta, sunt: 38, 40, 37 și respectiv 39. Acestor caractere le-au fost asociate un set de caractere, un șir, care să reprezinte comanda pentru față, spate, stânga, dreapta, respectiv staționare. Avem ,,cm1” pentru mers în față, ,,cm2” pentru mers în spate, ,,cm3” pentru mers spre stânga, ,,cm4” pentru mers în dreapta, respectiv ,,cm5” pentru staționare. [23]
Prin intermediul unui switch se va testa valoarea keyCode. În funcție de valoarea obținută, se va trimite o comanda (cm1, cm2, cm3, cm4, cm5) ESP-ului cu ajutorul unui apel jQuerry, $.get(), ce primește ca parametru adresa, și parametrul ce trebuie trimis. În cazul nostru se trimite către ESP, una dintre cele 5 comenzi.
variabila_Text = formular_control.camp_ip_ESP.value;
variabila_Arduino = "http://" + variabila_Text + ":80";
$.get( variabila_Arduino, { "cm3": 1000 }) ;
{Connection: close};
Comanda cm5 pentru staționare a fost definită analog în funcția ,,nimic” care este apelată atunci când utilizatorul ridică degetul de pe tastă. Această funcție este apelată cu ajutorul funcției setTimeout.
function whenKeyReleased(e) {
var a = e || window.event;
if ((a.keyCode == '38')||(a.keyCode == '40')||(a.keyCode == '37')||(a.keyCode == '39')) {
setTimeout(nimic, 300);
}
}
Dacă una degetul este ridicat de pe una dintre cele 4 săgeți, setTimeout va apela funcția ,,nimic”, după un interval de 300 de milisecunde.
Când una dintre săgeți a fost apăsată, prin intermediul funcției JavaScript se trimite un cod către ESP, care la rândul lui comunică cu plăcuța Arduino.
La celălalt capăt, în Arduino, modulul ESP va fi mai întâi de toate inițializat. Avem nevoie de două seriale pentru a se face comunicația dintre plăcuța Arduino și Calculator și comunicația dintre Arduino și ESP. Arduino are deja o comunicație serială (cea pe pinii 0 și 1 care comunică prin USB), care a fost setată pe viteza de 115200 kbps, în timp ce pentru comunicația dintre Arduino și ESP a fost definită o nouă serială, folosindu-se pinii 2 și 3. Viteza de comunicație a fost definită la 9600kbs pentru că altfel nu funcționează.
Mai întâi de toate, modulul ESP trebuie inițializat. Există o serie de comenzi standard care se fac pentru a putea stabili comunicația cu modulul ESP. Inițializarea se face printr-o serie de comenzi AT, comenzi ce au fost prezentate și anterior într-un tabel. Vom prezenta câteva mai importante dintre ele: ”AT+RST” – resetează modulul ESP; ” AT+CWMODE=1” – valoarea 1 înseamnă că setează ESP-ul în modul stație (adică client Wi-Fi); AT+CWJAP care primește ca parametru parola și numele sursei de internet (AP – Wireless Access Point) la care se conectează ESP-ul; AT+CIFSR – are rolul de a returna adresa ip pe care Routerul o asignează ESP-ului; AT+CIPSERVER=1,80 – îî dă ESP-ului rolul de server pentru a comunica pe portul 80. AT+CIPSERVER primește deci ca parametrii modul (1 – crează serverul, 0 – îl șterge), alături de portul pe care dorește să se realizeze comuncația. Portul default este 333.
În funcția loop se va verifica dacă seriala software este available și dacă a recepționat un mesaj. În cazul în care a fost recepționat un mesaj, înseamnă ca avem primită o comandă.
Cheia programului constă în analiza comenzilor primite. Cu ajutorul funcției ,,substring”, am spart șirul de caractere primit de la interfața HTML, prin intermediul ESP-ului și am păstrat doar cifra aferentă fiecărei comenzi (1,2,3,4 și 5). Comenzile sunt cele descrise în paragraful în care descriu fișierul JavaScript (cm1, cm2, cm3, cm4, cm5). Așadar cifrele ce au fost salvate în variabila ,,mesajTest” de tip String(Șir de caractere). Se va face o conversie către tipul int (întreg), pentru ca variabila să poată fi folosită ca parametru pentru o funcție ,,switch”.
Se obține așadar variabila mesajTestat. (,,int mesajTestat = mesajTest.toInt())
Se face un switch pe variabila respectivă și în funcție de valoarea primită se va executa una dintre cazurile definite. Voi exemplifica pe o porțiune de cod, celelalte cazuri fiind asemănătoare.
switch(mesajTestat){
case 1: {
digitalWrite(M1_inainte, HIGH);
digitalWrite(M2_inainte, HIGH);
}
break;
case 4: {
digitalWrite(M1_inainte, HIGH);
}
Prin constantele M1_inainte, M1_inapoi, M2_inainte, M2_inapoi au fost definiți pinii de utilizare, respectiv 5,4,7,6. M1 corespunde roții din stânga, în timp ce M2 roții din dreapta. Când constantele M1_inainte și M2_inainte sunt HIGH, roțile se mișcă în față. Cazul ,,1” este pentru deplasarea robotului în față. Daca dorim să se deplaseze spre stânga, vom face HIGH constanta M2_inainte (aferentă roții drepte), în timp ce roata stângă va staționa. În funcție de aceste combinații vom declara cazurile de utilizare ale robotului (față, spate, stânga, dreapta). Cazul comenzii ,,cm5” este pentru când degetul se ridică de pe tastatură și toți pinii sunt făcuți LOW (nicio roată nu se rotește). Pentru simplificare, în codul Arduino, cazul comenzii cm5, a fost definit ca default, adică cazul de staționare.
default: {
digitalWrite(M1_inainte, LOW);
digitalWrite(M2_inainte, LOW);
digitalWrite(M1_inapoi, LOW);
digitalWrite(M2_inapoi, LOW);
}
În încheierea programului, este definită funcția trimiteMesaj, apelată la început pentru a trimite comenzile de tip AT ESP-ului.
Rezultate obținute
Robotul prezintă o funcționare bună. Cu toate acestea există câteva aspect ce ar putea fi îmbunătățite. Finalizând proiectul, am observat următoarele rezultate:
În primul rând, atunci când recepționez fluxul audio și video pe pagina de HTML, trimise prin aplicația
IpWebcam, disponibilă pe Google Play, există un defazaj între fluxul audio și cel video. Mai exact defazajul este de 4 secunde. Recepționez imaginea și la 4 secunde după aceasta recepționez și semnalul sonor.
De multe ori robotul, sau mai bine spus, modulul ESP8266 nu recepționează în mod corect unele comenzi. Modulul Wi-Fi le mai pierde, fapt ce duce la prelungirea la infit a comenzii ce a fost dată anterior. Exemplu concret: Dacă țin apăsată săgeata față, spate, stânga, dreapta mai mult de 8 secunde, robotul se blochează pe comanda respective, nerecepționând faptul că eu am ridicat degetul de pe tastatura respectivă. Se resetează, în general, în momentul în care ii trimit altă comandă.
Dacă plasez laptopul pe o masa și robotul pe jos, având o sursă de internet atașată (există deci în acest caz o înăltime de aproximativ 1 metru între laptop și robot) nu prea reușesc să stabilesc legătura dintre laptop și robot. În general trebuie să se gasească la același nivel pentru stabilirea inițială a conexiunii.
Există cazuri în care reușesc foarte greu să stabilesc conexiunea dintre ESP și laptop. Ori laptopul nu detectează sursa de Wi-Fi, ori modulul ESP nu reușește să se conecteze la modulul Wi-Fi, caz în care este resetată plăcuța Arduino și reîncărcat codul pe aceasta.
În cazul rotirilor spre stânga sau dreapta ale robotului, initial programasem o roată să meargă în față și una în spate, fapt ce ducea la niște rotații foarte violente. De aceea am lăsat funcționarea doar a unei singuri roți în cazul rotirilor.
Datorită neîmbinării perfecte dintre componente, chiar dacă țin în mod constat apăsată săgeata ,,față”, robotul nu se deplasează drept, ci se abate spre stânga de la traiectoria dreaptă.
Uneori ESP-ul recepționează cu întârziere anumite comenzi, fapt ce poate face ca platforma robotică să se deplaseze puțin, chiar dacă utilizatorul nu a apăsat nicio tastă.
Dacă sursa de internet, în cazul nostrum, telefonul, este atașat de robot, atunci modulul ESP este capabil să capteze comenzile până la o distanță maximă de aproximativ 5-6 metri. Când sursa de internet este lângă laptop, esp-ul captează comenzile și la o distanță de 9-10 metri.
Comunicația dintre laptop și robot, sau mai bine spus: conxiunea inițială dintre laptop și robot se realizează mai bine și cu mai multă ușurință dacă robotul la același nivel cu laptopului.
Concluzii
În concluzie, construcția și finalizarea proiectului a necesitat cunoștințe de microcontrolere, programare în Arduino, programare Web (HTML, JavaScript).
Robotul poate avea diverse cazuri de utilizare, după cum am menționat și în debutul lucrării de licență, ar putea fi folosit pentru a capta imagini din locuri greu accesibile și a le transmite mai departe. Conexiunea dintre dispozitivul Android și interfața HTML, ar putea face din telefonul Samsung, o bună cameră de supraveghere.
Pe parcursul acestei lucrări am descoperit utilitatea modulului Wi-Fi ESP8266, mai ales în ceea ce privește proiectele Arduino ce se doresc a fi controlate de la distanță. Piața este într-o continuă dezvoltare, mai ales in ceea ce privește industria IoT (Internet of Things), ceea ce mă face să cred că se va pune din ce în ce mai mult accent pe dezvoltarea și perfecționarea unor astfel de componente, precum ESP8266.
Există o serie de îmbunătățiri ce pot fi aduse la proiectul dezvoltat în cadrul acestei lucrări de licență. În primul rând mi-aș dori sa pot îmbunătăți conexiunea dintre aplicația HTML și modulul ESP, pentru a elimina acele cazuri în care robotul rămâne blocat într-o comandă, din cauza faptului că modulul Wi-Fi pierde anumite comenzi trimise.
De asemenea o altă îmbunătățire ce ar putea fi adusă proiectului, ar fi o mai bună realizare Hardware, pentru a evita cazul de față, în care robotul, deși ar trebui să păstreze o traiectorie dreaptă, se deplasează în timp spre stânga.
Interesantă ar fi și dezvoltarea unei aplicații Android, prin care cu ajutorul unor săgeți să poată fi controlată direcția de deplasare a robotului. Mi-aș dori să pot reduce și delay-ul dintre fluxul video și cel audio înregistrate cu camera dispozitivului Samsung și trimise pe pagina HTML-ului.
În concluzie, proiectului i-ar putea fi aduse îmbunătățiri semnificative, atât prin apariția unor componente noi, cât și prin lărgirea propriilor mele cunoștințe de proiectare și programare. Desigur, proiectul reprezintă doar un caz demonstrativ de utilizare a ceea ce înseamnă conceptul și utilitatea unui Rover.
Bibliografie
[1]Connection oriented communication https://en.wikipedia.org/wiki/Connectionoriented_communication accesat la data 6/05/2017 ora 14:20
[2] Descrierea topologiilor rețelelor de date http://www.afahc.ro/ro/facultate/cursuri/retele_note_curs.pdf accesat la data 6/05/2017 ora 14:30
[3] Communications protocol https://en.wikipedia.org/wiki/Communications_protocol accesat la data 6/05/2017 ora 15: 00
[4] TCP / IP https://ro.wikipedia.org/wiki/TCP/IP accesat la data 7/05/2017 ora 12:00
[5] Comparație între TCP și OSI http://www.omnisecu.com/tcpip/tcpip-model.php accesat la data 7/05/2017 ora 13:10
[8] IEEE 802.11 https://en.wikipedia.org/wiki/IEEE_802.11 accesat la data 9/05/2017 ora 17:20
[9] Ortogonal frequency – division multiplexing https://en.wikipedia.org/wiki/Orthogonal_frequency-division_multiplexing accesat la data 9/05/2017 ora 21:40
[10] Very high frequency https://en.wikipedia.org/wiki/Very_high_frequency accesat la data 9/05/2017 ora 21:50
[11] Microcontroler https://ro.wikipedia.org/wiki/Microcontroler accesat la data 16/05/2017 ora 10:30
[12] Microprocesoare și automate programabile accesat la data 17/05/2017 ora 12:10
http://elth.ucv.ro/student1/Cursuri/Bratu%20Cristian/MAP/002%20-%20Curs%20002%20 %20MAP%20-%20Microcontrolerul%202.pdf
[13] Microcontrolere http://web.ulbsibiu.ro/laurean.bogdan/html/Microcontrolere%20introducere.pdf accesat la data 26/05/2017 ora 15:25
[14] Intel www.intel.com accesat la data 26/05/2017 ora 18:15
[15] NXP Solutions www.freescale.com accesat la data 30/05/2017 ora 19:05
[16] Microchip site www.microchip.com accesat la data 30/05/2017 ora 22:15
[17] Qualcomm site www.ubicom.com accesat la data 5/06/2017 ora 10:45
[18] Atmel www.atmel.com accesat la data 6/06/2017 ora 18:15
[19] Texas Instruments www.national.com accesat la data 7/06/2017 ora 10:10
[20] Infineon www.infineon.com accesat la data 8/06/2017 ora 13:00
[21] Motor electric https://ro.wikipedia.org/wiki/Motor_electric accesat la data 8/06/2017 ora 13:00
[22] HTML Audio/Video Dom Reference https://www.w3schools.com/tags/ref_av_dom.asp accesat la data 15/06/2017 ora 16:00
[23]Onkeydown event https://www.w3schools.com/jsref/event_onkeydown.asp accesat la data 15/06/2017 ora 17:15
[24]Arduino https://en.wikipedia.org/wiki/Arduino accesat la data 15/06/2017 ora 18:10
[25] Curs Arduino, Introducere în Arduino : Programarea microcontrollerelor din familia Intel, Aplicații practice hardware, Alexandru Vasile, Sever Pasca, Elisabeta Buzoianu, Editura Man-Dely, București 2009.
[26] Imagine Arduino https://ro.wikipedia.org/wiki/Arduino#/media/File:Arduino_Uno_-_R3.jpg accesat la data 15/06/2017 ora 21:35
[27] ESPP8266 https://en.wikipedia.org/wiki/ESP8266 accesat la data 16/06/2017 ora 09:45
[28] Optimus Digital https://www.optimusdigital.ro/wireless-wifi/222-modul-wi-fi-esp-01-negru.html?search_query=esp+01&results=10&gclid=Cj0KEQjwhMjKBRDjxb31j-aesI4BEiQA7ivN-KpGxuc2pq2gjfbtm7YmpOLL0SQFMO6CFDQvrVTRzBgaAmdX8P8HAQ accesat la data 16/06/2017 ora 10:45
[29] Optimus Digital https://www.optimusdigital.ro/drivere-de-motoare-cu-perii/145-driver-de-motoare-dual-l298n.html?search_query=L298N&results=4 accesat la data 16/06/2017 ora 11:25
[30]Ce este puntea H? http://www.electronicstefan.ro/2012/01/ce-este-puntea-h/ accesat la data 18/06/2017 ora 12:15
[31] JQuerry http://jquery.com/download/ accesat la data 18/06/2017 ora 15:45
[32] Basic Serial Communication using ESP 8266 accesat la data 19/06/2017 ora 10:45
https://www.youtube.com/watch?v=BXbDAyR5cIU&t=24s
Anexă
index.html
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Interfata html</title>
<script src="librarie.js"></script>
<script src="javascriptt.js"></script>
</head>
<body>
<div id="main">
<div id="video_si_audio" style="position: absolute; top: 50px; width:25%">
<form name="formular1" action="" method="GET">
<input type="text" name="camp_text_Telefon" ></input>
<input type="button" name="butonIncarca" value="Incarca" onclick="incarcareTelefon(this.form)"></input>
</form>
<object id="parte_video" type="text/html" data=""
style="position: absolute; width:100%; height:480px;">
</object>
<object id="parte_audio" type="text/html" data=""
style="position: absolute; width:388px; height:30px; left:8px; top:425px;">
</object>
</div>
<div id="comanda" style="position: absolute; top: 50px; left:35%; width:65%">
<form name="formular_control" action="" method="GET">
<input type="text" name="camp_ip_ESP" value="192.168.0.5"></input>
<input type="button" name="butonESP" value="Test" onclick="testare_Conexiune(this.form)"></input>
</form>
</div>
</div>
</body>
</html>
Script.js
$.ajaxSetup({timeout:100});
var verifica = false;
function incarcareTelefon (form) {
variabilaIp = form.camp_text_Telefon.value;
variabilaVideo = "http://"+variabilaIp+":8080/video";
variabilaAudio = "http://"+variabilaIp+":8080/audio.opus";
document.getElementById("parte_video").setAttribute('data', variabilaVideo);
document.getElementById("parte_audio").setAttribute('data', variabilaAudio);
}
function testare_Conexiune (form) {
variabila_Text = formular_control.camp_ip_ESP.value;
variabila_Arduino = "http://" + variabila_Text + ":80";
$.get( variabila_Arduino, { "cm3": 7000 }) ;
{Connection: close};
}
document.onkeydown = whenKeyPressed;
document.onkeyup = whenKeyReleased;
function whenKeyPressed(e) {
var a = e || window.event;
switch(a.keyCode) {
case 38:
if (verifica == false) {
variabila_Text = formular_control.camp_ip_ESP.value;
variabila_Arduino = "http://" + variabila_Text + ":80";
$.get( variabila_Arduino, { "cm1": 1000 }) ;
{Connection: close};
verifica = true;
}
break;
case 40:
if (verifica == false) {
variabila_Text = formular_control.camp_ip_ESP.value;
variabila_Arduino = "http://" + variabila_Text + ":80";
$.get( variabila_Arduino, { "cm2": 1000 }) ;
{Connection: close};
verifica = true;
}
break;
case 37:
if (verifica == false) {
variabila_Text = formular_control.camp_ip_ESP.value;
variabila_Arduino = "http://" + variabila_Text + ":80";
$.get( variabila_Arduino, { "cm3": 1000 }) ;
{Connection: close};
verifica = true;
}
break;
case 39:
if (verifica == false) {
variabila_Text = formular_control.camp_ip_ESP.value;
variabila_Arduino = "http://" + variabila_Text + ":80";
$.get( variabila_Arduino, { "cm4": 1000 }) ;
{Connection: close};
verifica = true;
}
break;
}
}
function whenKeyReleased(e) {
var a = e || window.event;
if ((a.keyCode == '38')||(a.keyCode == '40')||(a.keyCode == '37')||(a.keyCode == '39')) {
// up arrow
setTimeout(nimic, 300);
}
}
function nimic(){
variabila_Text = formular_control.camp_ip_ESP.value;
variabila_Arduino = "http://" + variabila_Text + ":80";
$.get( variabila_Arduino, { "cm5": 1000 }) ;
{Connection: close};
verifica = false;
}
Codul Arduino
#include <SoftwareSerial.h>
SoftwareSerial esp8266(3, 2);
#define DEBUG true //flag stare
#define M1_inainte 5
#define M1_inapoi 4
#define M2_inainte 7
#define M2_inapoi 6
void setup()
{
pinMode(M1_inainte, OUTPUT);
pinMode(M1_inapoi, OUTPUT);
pinMode(M2_inainte, OUTPUT);
pinMode(M2_inapoi, OUTPUT);
Serial.begin(115200);
esp8266.begin(9600);
Serial.println("Start config");
trimite_comanda("AT+RST\r\n", 2000, DEBUG);
Serial.println("resetare modul");
trimite_comanda("AT+CWMODE=1\r\n", 1000, DEBUG);
trimite_comanda("AT+CWJAP=\"VladM\",\"12345678\"\r\n", 2000, DEBUG);
Serial.println("se conecteaza la reteaua wi-fi…");
while(!esp8266.find("OK")) {
}
Serial.println("conectat");
trimite_comanda("AT+CIFSR\r\n", 1000, DEBUG);
trimite_comanda("AT+CIPMUX=1\r\n", 1000, DEBUG);
trimite_comanda("AT+CIPSERVER=1,80\r\n", 1000, DEBUG);
Serial.println("Initializare completa");
Serial.println();
}
void loop()
{
if (esp8266.available())
{
if (esp8266.find("+IPD,"))
{
String mesaj;
esp8266.find("?");
mesaj = esp8266.readStringUntil(' ');
String comanda = mesaj.substring(0, 3);
String valoareMesaj = mesaj.substring(4);
String mesajTest = comanda.substring(2,3);
int mesajTestat = mesajTest.toInt();
if (DEBUG) {
Serial.println(comanda);
Serial.println(valoareMesaj);
}
switch(mesajTestat){
case 1: {
digitalWrite(M1_inainte, HIGH);
digitalWrite(M2_inainte, HIGH);
}
break;
case 2: {
digitalWrite(M1_inapoi, HIGH);
digitalWrite(M2_inapoi, HIGH);
}
break;
case 3: {
digitalWrite(M2_inainte, HIGH);
}
break;
case 4: {
digitalWrite(M1_inainte, HIGH);
}
break;
default: {
digitalWrite(M1_inainte, LOW);
digitalWrite(M2_inainte, LOW);
digitalWrite(M1_inapoi, LOW);
digitalWrite(M2_inapoi, LOW);
}
break;
}
}
}
}
String trimite_comanda(String comanda, const int timeout, boolean debug)
{
String raspuns = "";
esp8266.print(comanda);
long int time = millis();
while ( (time + timeout) > millis())
{
while (esp8266.available())
{
char caracter = esp8266.read();
raspuns += caracter;
}
}
if (debug)
{
Serial.print(raspuns);
}
return raspuns;
}
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Platformă robotică controlată prin Wi-Fi [307873] (ID: 307873)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
