SPECIALIZAREA TEHNOLOGIA INFORMAȚIEI FORMA DE ÎNVĂȚĂMÂNT IF PROIECT DE DIPLOMĂ COORDONATOR ȘTIINȚIFIC Ș.l. dr. ing. VANCEA FLORIN ABSOLVENT CINAR… [303798]

UNIVERSITATEA DIN ORADEA

FACULTATEA DE INGINERIE ELECTRICĂ

ȘI TEHNOLOGIA INFORMAȚIEI

SPECIALIZAREA TEHNOLOGIA INFORMAȚIEI

FORMA DE ÎNVĂȚĂMÂNT IF

PROIECT DE DIPLOMĂ

COORDONATOR ȘTIINȚIFIC

Ș.l. dr. ing. VANCEA FLORIN

ABSOLVENT: [anonimizat]

2017

UNIVERSITATEA DIN ORADEA

FACULTATEA DE INGINERIE ELECTRICĂ

ȘI TEHNOLOGIA INFORMAȚIEI

SPECIALIZAREA TEHNOLOGIA INFORMAȚIEI

FORMA DE ÎNVĂȚĂMÂNT IF

COMUNICAREA ÎNTRE DISPOZITIVE MOBILE UTILIZÂND ULTRASUNETE

COORDONATOR ȘTIINȚIFIC

Ș.l. dr. ing. VANCEA FLORIN

ABSOLVENT: [anonimizat]

2017

[anonimizat].

Pasiunea pentru inginerie m-a condus la realizarea unui proiect ce constă atât în partea hardware cât și în cea software iar ca rezultat final obținând o combinație perfectă pentru un inginer din domeniu IT (Tehnologia Informației).

[anonimizat] „wireless” [anonimizat] a crea o nouă modalitate de comunicare mi-a [anonimizat] a condus la decizia de a crea un proiect în aceast sens. Astfel, [anonimizat], fiecare la câte o plăcuță de dezvoltare Arduino UNO.

[anonimizat] (Codul Standard American pentru Schimbul de Informații), transmisia fiind realizată în cod binar prin intermediul frecvențelor ultrasonice. [anonimizat] 38 kHz vom obține 0 logic iar cea de 42 kHz reprezentând 1 logic.

[anonimizat], receptorul ultrasonic va prelua frecvențele și le va decodifica. Prin portul serial se vor afișa caracterele trimise anterior prin emițător.

[anonimizat] o baterie de 9V iar receptorul va fi alimentat direct de la plăcuța Arduino cu 5V.

Capitolul I – Noțiuni teoretice

În continuare se vor prezenta noțiunile teoretice folosite pentru elaborarea proiectului de diplomă.

I.1 [anonimizat], sunetul este doar o vibrație care trece prin materie. Astfel ne putem imagina că sunetul ar arăta ca o sinusoidă, ca un val transversal în care fiecare particulă se mișcă în sus și în jos formând forma unui șarpe (Fig. I.1) [1]

[anonimizat]. Astfel sunetul începe printr-o vibrație care va forma o undă longitudinală ce trece prin materie. (Fig. I.2)[1]

[anonimizat], ci este o [anonimizat] (Fig. I.3).[1]

[anonimizat] o experimentăm în mod normal dar se pot deplasa și prin lichide sau materii solide. Viteza deplasării undelor depinde de mediul prin care ele se deplasează. În aer viteza sunetului este de 331,5 m/s la temperatura de 0 °C, fiind de 4 ori mai lentă decât viteza pe care o are prin apă (aproximativ 1500 m/s) care la rândul ei este de 4 ori mai lentă decât viteza pe care o are atunci când trece prin materie solidă (aproximativ 5900 m/s).[1]

Urechea poate discerne multe aspecte ale sunetului dar cele mai principale sunt frecvența și intensitatea sunetului.

Frecvența se măsoară în Hertzi (Hz), care reprezintă numărul de perioade pe secundă. Urechea umană poate percepe frecvențe cuprinse între 20 Hz – având o undă cu lungimea de 17 metri – și 20.000 Hz –cu lungime de undă de 1.7 cm –.[1]

Intensitatea sunetului este determinată de amplitudinea undei de presiune. Sunetele mai puternice vor avea o oscilație mai largă între secțiunea minimă și maximă a undei de presiune iar cele mai slabe vor avea o oscilație mai mică. Intensitatea fiind măsurată în unitatea de măsură numită decibel (dB) care își dublează intensitatea cu fiecare 10 decibeli, fiind o funcție exponențială cu puteri ale lui 2. Astfel 20 dB vor fi de 2 ori mai puternici decât 10 dB, 30 dB vor fi de 4 ori mai puternici decât 10 dB iar 80 dB de 128 de ori mai puternici decât 10 dB.

În figura I.4 se poate observa atât frecvența undei de presiune cât și intensitatea sunetului iar în figura I.5 apare ilustrată diferența între o frecvență joasă și una înaltă.

I.2 Ultrasunetele

Sunetele a căror frecvență depășesc 20.000 Hz sunt numite ultrasunete, ele nemaiputând fii percepute de către urechea umană dar având o importanță practică deoarece au o lungime de undă scurtă.

Pentru a putea emite ultrasunete se poate folosi generatorul piezoelectric. Efectul piezoelectric constă în faptul că supunând un cristal la deformări de tracțiune sau comprimare după anumite direcții, pe fețele sale apar sarcini electrice egale de semne contrare care își schimbă rolul dacă înlocuim tracțiunea prin comprimare și invers. Cuvântul piezo provine din limba greacă și înseamnă „a împinge”. Efectul cunoscut sub numele de piezoelectricitate a fost descoperit de către frații Pierre and Jacques Curie la vârsta de 21 respectiv 24 de ani, în anul 1880.[3]

Generatorul piezoelectric constă dintr-o lamă piezoelectrică, ce este legată la o sursă de tensiune alternativă, lama începe să vibreze cu o frecvență egală cu cea a tensiunii aplicate. Astfel vibrațiile lamei se transmit sub formă de ultrasunete. [3]

Datorită proprietăților ultrasunetelor, ele se pot folosi într-o mare varietate de aplicații practice precum:

– Terapie/diagnostic medical

– Conservarea alimentelor

– Măsurarea adâncimii mărilor

– Diferite procese tehnologice precum: spălarea, curățarea, uscarea sau sudarea unor corpuri si de asemenea pentru prelucrarea unor piese.

– Defectoscopia ultrasonoră

Capitolul II – Echipamente utilizate

II.1 Arduino UNO

Arduino UNO este o plăcuță de dezvoltare bazată pe microcontroler-ul ATmega328P care dispune de 14 pini digitali ce pot fi folosiți atât ca și semnal de intrare cât și de ieșire. Din acei 14 pini, 6 se pot folosi ca și ieșiri PWM – Pulse Width Modulation. Cu ajutorul tehnicii PWM se poate varia tensiunea dată unui dispozitiv electronic, într-un mod controlat. Pe lângă pinii digitali, plăcuța mai dispune de 6 pini pentru intrări analogice, un quartz de cristal de 16 MHz, o conexiune USB, o mufă de alimentare, un set de pini pentru programarea de tip ICSP (In-circuit serial programming) – care este o modalitate de programare a plăcuței prin care putem scrie intrucțiuni direct pe firmware sau bootloader – și un buton de resetare.[4]

Pentru o bună funcționare a plăcuței Arduino UNO, ea trebuie să fie alimentată cu o sursă de tensiune între 7-12 V cu limita minimă de 6V iar cea maximă de 20V iar tensiunea de operare fiind de 5V. În figura II.1 se poate vedea fizic plăcuța Arduino UNO.

II.2 Microcontroler-ul Atmel ATmega 328P

Atmel ATmega este un microcontroler CMOS pe 8 biți, cu consum redus, având o arhitectură RISC îmbunătățită de AVR care prin executarea de instrucțiuni puternice într-un singur ciclu de ceas, realizează transferuri apropiate de 1 MIPS (Million Instructions per Second) per MHz. [5]

Nucleul Atmel AVR combină un bogat set de intrucțiuni, având 32 de regiștrii de lucru cu scop general care sunt direct conectați la Unitatea Aritmetică și Logică (ALU), permițându-se accesul la 2 regiștrii în același timp să fie executați într-un singur ciclu de ceas. Prin acest fel, viteza de procesare este de până la 10 ori mai mare decât microcontrolerele convenționale CISC. [5]

Un sumar al configurării microcontroler-ului se poate vedea în figura II.2, în figura II.3 se poate vedea reprezentarea grafică a diagramei bloc iar în figura II.4 se poate observa configurarea pinilor.[5]

II.3 Emițător ultrasunete

La crearea circuitului emițătorului de ultrasunete s-a folosit un traductor ultrasonic model C4016L8A402 (Fig. II.5), un tranzistor 2N3904 (Fig. II.6), cabluri pentru alimentare și pentru semnal (Fig. II.7) și o plăcuță PCB (Printed Circuit Board) de cupru pe care a fost lipit circuitul emițătorului de ultrasunete.

Traductorul ultrasonic folosit este un generator piezoelectric care are capacitatea de a trimite sunete de diferite frecvențe, având o funcționalitate optimă la frecvența de 40.0+/- 1.0 kHz și unghiul de transmitere de 40 de grade. Din codul modelului C4016L8A402 reies anumite specificații precizate de către producător și anume: litera C ne precizează că traducătorul este unul combinat, fiind atât un emițător cât și un receptor, numărul 40 precizează frecvența pe care o poate genera în kHz, numărul 16 reprezintă diametrul în milimetri, L8 înseamnă că traductorul este unul care funcționează și pe distanțe mari, A40 reprezentând unghiul de transmitere în grade iar la final cifra 2 precizează că are o carcasă de aluminiu. În figura II.8 se poate vedea graficul frecvenței în raport cu senzitivitatea.[10]

Tranzistorul 2N3904 este un model de tranzistor cu joncțiune bipolară, foarte des folosit în aplicații generale cu consum mic de putere, pe post de amplificator sau de comutator iar ca și parametrii enumerăm intensitatea de 200 mA, tensiune de 40V și putere de 625 mW. [11]

Astfel, componentele menționate mai sus au fost asamblate pe PCB-ul de cupru iar conexiunea dintre cabluri și pinii componentelor au fost create prin lipirea lor cu staniu, cunoscut și sub numele de cositor. Staniul este un element chimic care se topește la temperatura de 231,8 grade Celsius, astfel permițându-se lipirea între elemente metalice, el fiind un bun conducător de electricitate.

În figura II.9 este prezentată schema electrică a emițătorului de ultrasunete create în programul KiCad.

Pe baza schemei, se lipește pinul negativ al traductorului ultrasonic pe PCB-ul de cupru, împreună cu un cablu ce va fi conectat la GND-ul de la Arduino UNO, un alt cablu la borna minus a sursei de tensiune iar toate împreună fiind conectate la emitorul tranzistorului. Borna plus a traductorului va fi legată împreună cu un rezistor de 1k Ohm la colectorul tranzistorului. La baza tranzistorului va fi legat un cablu, împreună cu un rezistor de 1k Ohm, la pinul digital 4 de pe plăcuța Arduino UNO.

Analizând circuitul de față, se observă că traductorul este alimentat la o tensiune de 9V iar tranzistorul este folosit pe bază de comutator. Prin urmare, datorită tranzistorului, traductorul va trimite impulsuri sonore doar în momentul în care la baza tranzistorului va exista semnal provenit de la Arduino UNO, ceea ce ne conduce la un produs final, acesta fiind un circuit emițător de ultrasunete.

II.4 Receptor ultrasunete

La crearea circuitului pentru recepția de ultrasunete s-a folosit un receptor de ultrasunete model 400SR10B (Fig. II.10), un amplificator operațional MCP6004 (Fig. II.11), un amplificator operațional MCP601 (Fig. II.12), un condensator de 50V cu 47 uF (Fig. II.13), doi condensatori 100nF, 100V (Fig. II.14), 4 rezistori de 10 k Ohm, un rezistor de 680 k Ohm și un rezistor de 100 k Ohm (Fig. II.15). În mod asemănător cu emițătorul de ultrasunete, cablurile și plăcuța PCB de cupru au fost folosite și la crearea circuitului pentru recepția de ultrasunete.

Receptorul ultrasonic este un generator piezoelectric care are capacitatea de a recepționa sunete de diferite frecvențe, având o funcționalitate optimă la frecvența de 40.0+/- 1.0 kHz, la un unghi de recepție de până la 72 de grade. În figura II.16 se poate observa că receptorul are o perfectă funcționalitate la frecvența de 40 kHz și bună funcționalitate între 38 și 42 kHz.[12]

Microcipul MCP6004 este un amplificator operațional creat pentru aplicații cu scop general, putând ajunge la 1 Mhz pe lățime de bandă. Acest amplificator funcționând cu o singură sursă de alimentare de minim 1.8V până la maxim 5.5V și suportă oscilații la intrări și ieșiri de tipul rail-to-rail ceea ce înseamnă că suportă tensiuni la intrare de valori foarte apropiate de tensiunea de alimentare și masă, iar ieșirea poate oscila între tensiunea de alimentare și masă. [18]

Microcipul MCP601 este un amplificator operațional cu consum mic de energie și utilizează o tehnologie avansată CMOS (Complementary metal–oxide–semiconductor) care furnizează un curent prestabilit mic, viteza de operare mare, o amplificare în buclă foarte mare și oscilații la intrări și ieșiri de tipul rail-to-rail.[19]

Condensatoarele sunt componente electronice care înmagazinează, filtrează și reglează energia electrică și fluxul curentului fiind unele dintre cele mai esențiale componente pasive care se folosesc în circuitele electrice. Ele sunt folosite în special pentru a înmagazina curentul electric încărcat, pentru a dirija curentul alternativ și pentru a bloca sau separa diferitele nivele de tensiune a unei surse de curent direct. Unitatea de măsură pentru capacitate este Farad-ul, el fiind calculate astfel: [20]

1 farad =

1 coulomb = ~ 6* electroni

Rezistoarele sunt componente electrice care se opun trecerii curentului electric, astfel rezistența la fluxul curentului este rezultată prin scăderea tensiunii prin interiorul componentei rezistorului. Rezistența este calculată dupa legea lui Ohm I=V/R, unde I este intensitatea curentului electric, măsurată în ampere, V este tensiunea, măsurată în volți iar R fiind rezistența, măsurată în Ohmi. [21]

Pentru crearea circuitului receptorului de ultrasunete s-a folosit aceeași metodă ca la emițător, prin urmare, componentele fiind conectate între ele și lipite pe un PCB de cupru. Schema electrică a receptorului de ultrasunete creată în programul KiCad poate fi analizată în figura II.17.

Logica circuitului constă în faptul că e nevoie de o ieșire saturată în mod normal de funcționare pentru a se putea trimite semnale digitale direct la plăcuța Arduino UNO. Pentru aceasta, se realizează o amplificare cu două etaje cu ajutorul a două amplificatoare operaționale, fiecare amplificând semnalul obținându-se astfel o amplificare optimă și o saturare a ieșirii necesară trimiterii semnalelor digitale. Datorită dublei amplificări se obține o amplificare foarte mare a semnalului, prin urmare egalizează semnalul primit de la receptorul ultrasonic și se păstrează lățimea de bandă atât pentru un semnal puternic cât și pentru unul mult mai slab.

În continuare, pentru o mai bună înțelegere a circuitului, se poate analiza funcționalitatea acestuia împreună cu semnalele emise. Cu ajutorul unui osciloscop au fost măsurate aceste semnale, ilustrând atât funcționalitatea circuitului pentru recepția de ultrasunete cât și cel pentru emiterea de ultrasunete. În figura II.18 se pot observa aceste aspecte.

În continuare se va prezenta fiecare semnal în parte împreună cu câteva detalii, prin urmare, în figura de mai sus există 4 semnale, fiecare măsurate în același timp:

Pe canalul 1 – semnalul desenat cu culoarea galbenă – se poate observa că este semnalul comandat de plăcuța Arduino UNO, de tipul PWM, emis de către emițătorul de ultrasunete, care trimite un impuls cu frecvența de 40 kHz timp de 5ms cu o pauză între semnale tot de 5ms.

Pe canalul 4 – semnalul desenat cu culoarea albastră – apare semnalul primit la măsurarea receptorului ultrasonic, receptorul generând semnalul brut, neprocesat de către amplificatoarele operaționale.

Pe canalul 3 – semnalul desenat cu culoarea roz – avem semnalul măsurat după primul etaj de amplificare, cea a amplificatorului operațional MCP601.

Pe canalul 2 – semnalul desenat cu coloarea turcoaz – se poate observa semnalul final al circuitului, la etajul 2 de amplificare realizată de către amplificatorul operațional MCP6004.

Acestea fiind spuse, s-a demonstrat posibilitatea de a genera ultrasunete cu o anumită frecvență la un anumit interval de timp stabilit, acestea fiind recepționate de către receptorul de ultrasunete, obținând un semnal saturat. În capitolele ce urmează se va descrie modalitatea în care aceste semnale pot fi transmise și recepționate în așa manieră încât să fie posibilă comunicarea între aceste două dispozitive.

II.5 Alte materiale și unelte utilizate

În continuare se vor prezenta uneltele utilizate pentru crearea circuitelor electrice, pentru testarea acestora cât și alte materiale necesare ducerii la bun sfârșit a părții hardware a proiectului.

Osciloscopul este un instrument de laborator utilizat frecvent pentru a afișa și analiza undele semnalelor electrice. Dispozitivul desenează graficul semnalului instantaneu de tensiune, într-o funcție de timp. Un osciloscop tipic poate afișa curent alternativ (CA) sau un curent continuu (CC) cu forma de undă pulsatorie, având o frecvență minimă de 1 hertz (Hz), ajungând până la sute de gigahertzi (GHz), în cazul osciloscoapelor moderne. Afișajul osciloscopului este împărțit în diviziuni orizontale și verticale. Timpul este afișat de la stânga la dreapta, pe scara orizontală iar tensiunea fiind afișată pe scara verticală, cu valorile pozitive mergând în sus iar cele negative în jos. În figura II.19 se poate vedea un osciloscop clasic.[22]

Stația de lipit este o stație cu termoreglare care are conectat un dispozitiv cu vârf metalic, care prin încălzire, la contact cu staniul (cositorul), îl va topi. În acest fel, putându-se realiza lipirile între părțile metalice a componentelor electrice, staniul fiind un bun conducător de electricitate. Figura II.20 ilustrează o stație de lipit.

Soluția flux este o soluție alcoolică cu adaos de activatori pe bază de rășini organice, având temperatura maximă pentru lipit de 230 grade C. Ea se folosește pentru decaparea suprafețelor metalice la lipirea cu cositor, favorizând umectarea și eliminând de pe suprafața pieselor și din aliajul de lipire a oxizilor și a impurităților care pot afecta calitatea lipirii și totodată protejează suprafețele împotriva oxidării. În figura II.21 se poate vedea imaginea unei sticluțe ce conține substanța flux.[24]

Stația de lipit cu aer cald utilizează o temperatură reglabilă în intervalul 100-480 grade C care a fost folosită în acest proiect la izolarea cablurilor și a componentelor electrice cu ajutorul unor tuburi termocontractabile. Prin încălzirea acelor tuburi, ele se contractă și se lipesc pe componentele electrice, protejându-le de scurtcircuit și de alți factori externi ce ar putea produce deteriorarea lor. In figura II.22 și II.23 se pot vedea stația de lipit cu aer cald și tuburile termocontractabile.

Capitolul III – Tehnologii Software folosite

În acest capitol se vor prezenta tehnologiile software folosite pentru programarea celor două dispozitive mobile și pentru transmiterea de date emise cu ajutorul emițătorului de ultrasunete și recepționate de către receptorul de ultrasunete.

III.1 Arduino IDE

Arduino IDE (Integrated Development Environment) este un mediu de dezvoltare integrat al companiei Arduino care conține un editor de text pentru scrierea codului, o zonă de mesaje, o consolă pentru text, o bară de instrumente cu butoane pentru funcții comune și o serie de meniuri. Se conectează la plăcuța Arduino pentru a încărca programul și pentru a comunica cu aceasta.[28]

Programele scrise in Arduino IDE sunt numite sketch-uri. Aceste sketch-uri fiind scrise în editorul de text și salvate cu extensia .ino. Zona de mesaje arată feedback-ul în timpul salvării și exportării codului către plăcuță împreună cu erorile sau avertizările, în caz că ele există. Consola furnizează informații complete legate de ieșirea obținută după executarea programului. În colțul din dreapta jos a ferestrei programului este afișat modelul Arduino ales și portul serial. Bara de instrumente permite verificarea și încărcarea programului pe plăcută, crearea, deschiderea și salvarea sketch-urilor, precum și deschiderea monitorului serial. [28]

Limbajul de programare folosit de Arduino IDE este C++, cu toate că se poate folosi și limbajul C deoarece compilatorul AVR-GCC le acceptă pe ambele. AVR-GCC este compilatorul folosit de către Arduino IDE pentru a crea codul executabil binar pentru dispozitivele AVR. Librăriile furnizate de Arduino.cc au funcții disponibile pentru lucruri precum întârzieri, ieșire de date seriale dar și altele. [29]

În figura III.1 este prezentată fereastra principală a programului Arduino IDE.

Un sketch tipic Arduino scris în C/C++ este compus din două funcții principale, acestea fiind funcția setup() și funcția loop(). Funcția setup() este apelată în momentul în care sketch-ul este executat. Ea este folosită pentru a inițializa variabilele, pentru a stabili modul în care pinii vor fi folosiți, pentru a începe utilizarea anumitor librării, etc. și va fi executată o singură dată în momentul alimentării plăcuței sau după fiecare resetare.[30]

Funcția loop() este o funcție care se va executa repetitiv până la oprirea alimentării plăcuței, fiind executată prima dată după momentul în care funcția setup() a fost executată și terminată.[31]

III.2 C++

C++ este un limbaj de programare orientat pe obiecte cu scop general, dezvoltat de către Bjarne Stroustrup și este o extensie a limbajului C. Este considerat fiind un limbaj de programare de nivel mediu care încapsulează atât caracteristici de nivel înalt cât și de nivel scăzut. Principala caracteristică a limbajului se datorează colecției de clase predefinite care sunt tipuri de date ce pot fi instanțiate de mai multe ori, limbajul oferind posibiliatea de a crea clase definite de către utilizator. Clasele pot încorpora funcții membre pentru a implementa funcționalități specifice. Obiectele pot fi definite ca instanțe, create în momentul execuției. Printre conceptele esențiale din limbajul C++ se numără polimorfismul, funcții prieten și funcții virtuale, templates, namespaces și pointeri. [32]

III.3 Comunicarea serială

Pentru comunicarea între plăcuța Arduino și un computer se folosește comunicarea serială, utilizând portul serial integrat. Acest lucru este posibil utilizând monitorul serial integrat în Arduino IDE care face ca fiecare bit dintr-un byte (grup de 8 biți) de informație, să fie transferați unul câte unul, într-o secvență sincronizată pe un singur fir. [33]

În cazul în care se dorește o comunicare bidirecțională, va fi nevoie utilizarea a doi pini Tx (transmitere) și Rx (recepție). Acești pini pot fi identificați pe plăcuța de dezvoltare Arduino UNO, respectiv pinul 0 și 1. Ledurile TX și RX integrate pe plăcuță, semnalizează starea celor doi pini (1/0). În figura III.2 este ilustrat modul de comunicare serial.

Capitolui IV – Prezentarea aplicației

În acest capitol se va prezenta aplicația realizată, împreună cu structura logică de funcționare, montajul sistemului cât și implementarea software atât a emițătorului de ultrasunete cât și a receptorului.

IV.1 Structura logică

Principiul logic de funcționare constă în faptul că se realizează o comunicare între cele două dispozitive prin intermediul ultrasunetelor. Cu ajutorul monitorului serial integrat în programul Arduino IDE se trimit caractere sau șiruri de caractere codificate sub standardul ASCII, ele fiind trimise în cod binar sub formă de octeți, un octet fiind un șir de 8 biți. Astfel, pentru a trimite valoarea de 1 logic se va utiliza frecvența de 42 kHz iar valoarea de 0 logic, frecvența de 38 kHz. In acest fel se poate realiza transmiterea de date prin trimiterea de octeți, reprezentând caractere diferite, în funcție de combinația binară aferentă fiecărui caracter.

Prin urmare, funcționalitatea receptorului este una similară, el receptând frecvențele cu care au fost codificate caracterele. Pe măsură ce detectează frecvențele, le decodifică, transformând frecvența de 42 kHz în 1 logic iar cea de 38 kHz în 0 logic, creând octeți care reprezintă caractere diferite, astfel afișând pe monitorul serial caracterul sau șirul de caractere recepționate.

În figura IV.3 se prezintă schema bloc a funcționalității aplicației realizate.

IV.2 Montajul sistemului

Pentru realizarea aplicației s-au folosit două plăcuțe Arduino UNO, unul fiind utilizat la conexiunea cu emițătorul de ultrasunete, celălalt la receptorul de ultrasunete.

Circuitul emițătorului se alimentează cu o sursă de tensiune externă între 9-12 V, în cazul de față folosindu-se o baterie de 9V. Pinul de la baza tranzistorului se conectează la pinul digital cu numărul 6 de pe plăcuța Arduino UNO, fiind un pin ce suportă semnal PWM. În figura IV.1 se poate vedea fizic circuitul emițătorului.

Circuitul receptorului se alimentează direct la plăcuța Arduino UNO la tensiunea de 5V iar cele două cabluri ce sunt legate la ieșirea finală a celor două amplificatoare operaționale se conectează la pinii digitali cu numărul 4 și 2. Pinul cu numărul 4 este folosit pe post de numărător iar pinul cu numărul 2 este folosit la întreruperi pentru a putea primi semnal în momentul în care se face transmisia de date de către emițător. În figura IV.2 se poate vedea fizic circuitul receptorului.

Cele două plăcuțe Arduino UNO se conectează prin USB (Universal Serial Bus) la calculator, urmând a fi programate cu ajutorul programului Arduino IDE în care se va scrie separat codul pentru fiecare circuit în parte.

IV.3 Implementarea software

Pentru ca tot ansamblul să fie funcțional este necesară implementarea unui software adecvat, așadar pentru programarea celor două circuite se va utiliza programul Arduino IDE și se vor scrie codurile pentru fiecare dispozitiv în parte în două sketch-uri diferite, folosindu-se în mod direct microcontroler-ului Atmel ATmega 328P, utilizând regiștrii acestuia.

În continuare se va prezenta și explica codul de la fiecare dispozitiv în parte, explicându-se întâi pe module, pe urmă se va face detalierea lui.

IV.3.1 Codul sursă al emițătorului de ultrasunete

Funcționalitatea emițătorului este prezentată în codul descris mai jos.

Se începe prin definirea frecvenței procesorului la 16 Mhz și definirea librăriei pentru funcțiile de întârzierile ale ciclurilor de așteptare.

Pe urmă se creează funcția care trimite frecvențe în funcție de biții ce compun octetul caracterului. Dacă variabila x este 1, funcția va trimite frecvența de 42 de kHz iar dacă este 0, se va trimite frecvența de 38 kHz.

OCR0A reprezintă Output Compare Register, fiind activat în cazul de față timer-ul 0 de pe registrul A. Valoarea 188/205 reprezintă valoarea setată registrului iar în momentul în care timer-ul ajunge la această valoare, comută ieșirea. Valoarea 188/205 fiind calculată în felul următor: [35]

=> => ~188.

=> => ~205

TCCR0B reprezintă Timer/Counter Control Register iar prin atribuirea valorii de 0b00000001, acesta va activa ultimul bit, bitul 0 al registrului, acesta activând timer-ul.[36]

_delay_ms(5) activează o întârziere de 5 ms (milisecunde) pe urmă făcându-se resetarea timer-ului prin asignarea valorii de 0b00000000 lui TCCR0B.[35]

Pe urmă se creează funcția sendByte care trimite biții, unul câte unul, formând octetul fiecărui caracter în parte. La fiecare iterație se asignează, începând cu bitul cel mai nesemnificativ prin deplasarea pe biți la stanga a valorii 1, făcându-se pe urmă operația de SI pe biți, generând la final octetul caracterului.

În funcția setup() inițializează variabilele și stabilește modul în care pinii vor fi folosiți. La început se setează ca ieșire pinul PB0 prin asignarea valorii 1 a ultimului bit de pe registrul DDRB (Data Direction Register). În mod asemănător se setează ca ieșire pinul 6 de pe portul D, fiind pinul cu numărul 6 de pe plăcuța Arduino UNO.

TCCR0A setează timer-ul 0 pe mod ctc (clear time on compare) și comută registrul OC0B în momentul în care ajunge la valoarea specificată. [35]

Funcția Serial.begin(115200) setează rata de date în biți la valoare optimă iar funcția Serial.println(“TRANSMITTER READY!”) afișează pe monitorul serial mesajul scris între ghilimele.

Variabila x este declarată ca fiind o variabilă de tipul unsigned int cu o lungime de 8 biți, iar faptul că este de tipul unsigned ne spune că va avea doar valori pozitive iar lungimea de 8 biți este folosită pentru a reprezenta caracterele.

În funcția loop() este scris codul care se va repeta de atâtea ori până în momentul în care se oprește alimentarea plăcuței Arduino UNO.

Se citește de la tastatură prin monitorul serial caracterul sau șirul de caractere și se apelează funcția sendByte() cu o pauză de 5 ms, toate acestea fiind executate doar în momentul în care în memoria buffer (tampon) a portului sunt stocate date. Acest lucru se utilizează pentru a trimite câte un octet deodată pentru a preveni ieșirea din buclă după primul bit a octetului.

Ca un sumar ar codului se poate spune că se trimite bit cu bit valoare binară a caracterelor ASCII, caractere ce sunt reprezentare în octeți. Fiecare bit fiind transformat în frecvențe ce vor fi emise de către emițătorul de ultrasunete.

IV.3.1 Codul sursă al receptorului de ultrasunete

Funcționalitatea receptorului este prezentată în codul descris mai jos.

Pentru o lizibilitate îmbunătățită a codului s-au definit 4 macroconstante ce conțin intervalele de valori ce reprezintă intervalul minim și maxim a frecvențelor pentru recepționarea valorilor logice 1 si 0.

Pe urmă se inițializează variabila dataDetected de tipul volatile int, asignându-i-se valoarea 0, fiind o variabilă care instruiește compilatorul să încarce variabila din memoria RAM (Random Acces Memory), nu din registrul de stocare. Șirul de întregi cnt[8] va stoca valoarea la care ajunge counter-ul și va fi comparată cu intervalul valorilor predefinite pentru recepționarea frecvențelor.

Funcția ISR (Interrupt Service Routine) cu argumentul INT0_vect indică faptul că se vor utiliza întreruperile interne iar prin dezactivarea registrului EIMSK (External Interrupt Mask) se obțin întreruperi doar la începutul fiecărui octet, nu la fiecare rising edge. [36]

În funcția setup(), asemănător ca în codul pentru emițător, se inițializează variabilele, regiștrii și se stabilește modul în care ele funcționează. Prin instrucțiunea DDRD = 0x00 se setează portul D ca intrare, pe urmă TCCR0B = 0x00 va inițializa counter-ul la 0 iar OCR0A = 0xff setează registrul Output Compare Register ca intrare.[36]

Pe urmă se setează rata de date în biți la valoare optimă prin funcția Serial.begin(115200), urmat de o întârziere de 3000 ms. Serial.println(“HELLO”) afișează pe monitorul serial mesajul scris între ghilimele.

Instrucțiunea EICRA = 0b00000011 (External Interrupt Control Register A) generează cereri de întrerupere la rising edge al portului INT0 iar EIMSK |= (1<<INT0) va permite pinului INT0 să genereze întreruperi. La final, macroinstrucțiunea sei() activează întreruperile globale.[366]

În funcția loop() se află o instrucțiune de decizie if(dataDetected == 1), care dacă e adevărată va executa două instrucțiuni de ciclare for, în prima fiind citite frecvențele, memorându-le sub forma de octeți, cea de-a doua traducând frecvențele recepționate în biți, creând octeți, care pe urmă vor fi afișati sub formă de caractere prin monitorul serial.

Detaliând explicația pentru prima instrucțiune for, care se iterează de 8 ori iar la fiecare iterație se setează counter-ul la 0 pentru a-l pregăti pentru noul bit, pe urmă îl pornește, iar la final se memorează valoarea la care a ajuns iar la final se oprește counter-ul.

Pentru a doua instrucțiune de iterare se declară variabilele necesare, prin urmare se declară variabila „c” de tipul „uint8_t”, asignându-i-se valoarea 0 în formatul hexazecimal, o variabilă b de tipul int (intreg), o variabilă errorFlag, inițializată cu 0 și folosită pentru detectarea erorilor.

A doua instrucțiune de iterare are ca scop crearea octeților în funcție de frecvențele detectate și memorate în șirul cnt care le compară cu valoarea minimă și maximă, astfel dacă frecvența detectată are valoarea memorată în counter între 205 și 215, se va memora în variabila b valoarea 1 iar dacă frecvența detectată are valoarea memorată în counter între 190 și 200, se va memora în variabila b valoarea 0. La finalul celor 8 iterații se va obține un șir de 8 biți, formând octetul care va fi reprezentat ca un caracter. În cazul în care frecvența detectată se află în afara valorilor minime și maxime, se va afișa un mesaj de eroare împreună cu valoarea zecimală a frecvenței.

La final se face afișarea caracterului sau șirului de caractere recepționate împreună cu o întârziere de 2 ms, necesare receptorului ultrasonic să se stabilizeze și se resetează întreruperile.

Capilotul V – Ghid de utilizare

Pentru utilizarea sistemului se va prezenta pas cu pas modul în care acesta trebuie manipulat pentru o bună funcționare. Se va prezenta metoda de alimentare a dispozitivelor, conectarea pinilor pe plăcuțele Arduino UNO, rularea aplicațiilor software și transmiterea de date prin monitorul serial.

V.1 Alimentarea dispozitivelor

Fiecare plăcuță se conectează utilizând un cablu de alimentare de tipul AB care la un capăt are port USB iar la celălalt un port tip B, portul B conectându-se la mufa plăcuței. Acest lucru se poate observa în figura V.1 .

După ce s-a realizat conectarea mufelor plăcuțelor, se vor conecta pinii dispozitivelor la pinii plăcuței. Pentru conectarea emițătorului, se conectează cablul de la baza tranzistorului la pinul digital 6 iar cablul legat la masa dispozitivului se va conecta la pinul GND, pinul colector-ului se conectează la borna plus ( + ) a bateriei iar pinul emitor-ului la borna minus ( – ). Conectarea receptorului se face prin conectarea cablului de alimentare la pinul de alimentare cu 5V de pe plăcuță iar masa circuitului la pinul GND. Cei doi pini de comandă al circuitului se conectează la pinul 2 și la pinul 4. Pe urmă se va conecta fiecare plăcuță la câte un port USB al calculatorului. În figura V.2 este prezentat sistemul conectat și pregătit de funcționare.

În continuare se vor deschide două ferestre ale programului Arduino IDE și se va scrie codul pentru fiecare dispozitiv în parte. Pe urmă, din meniul Tools->Boards se va selecta Arduino/Genuino UNO iar din meniul Tools->Port se va selecta câte un port pentru fiecare dispozitiv, în cazul de față utilizându-se portul COM5 pentru emițător iar portul COM4 pentru receptor. După ce au fost alese aceste configurații, se vor încărca codurile pe fiecare plăcuță prin selectarea butonului de upload, evidențiat în chenarul negru. (Fig V.3).

Următorul pas, după ce s-a realizat încărcarea codurilor, se vor porni monitoarele seriale pentru ambele dispozitive, acest lucru făcându-se din meniul Tools și selectând Serial Monitor. În câteva secunde se va afișa textul „TRANSMITTER READY” la monitorul serial al emițătorului iar textul „HELLO” la monitorul serial al receptorului, acest lucru anunțând faptul că atât emițătorul cât și receptorul sunt pregătite de funcționare.

Pentru a putea începe transmisia de date, trebuie selectat din colțul din dreapta jos al monitorului serial rata de transfer „115200 baud”. Pe urmă se poate introduce textul dorit a fi trimis iar la final tastându-se tasta ENTER sau făcând click pe butonul SEND. În fereastra monitorului serial va apărea textul introdus în cazul în care nu au apărut erori pe parcurs.

În figurile V.4 si V.5 se poate observa modalitatea de comunicare între cele două dispozitive utilizând monitoarele seriale.

Capitolul VI – Experimente și rezultate

Pe parcursul implementării proiectului s-au realizat diverse experimente, calcule si obținându-se diferite rezultate.

Ca o implementare inițială s-a realizat un circuit pentru recepția de ultrasunete folosind un singur amplificator operațional LM324, circuitul fiind alimentat cu o sursă de tensiune de 9V. După măsurarea semnalelor la ieșire, cu osciloscopul, s-a constatat că semnalul nu este amplificat suficient, fiind anevoioasă încercarea de a-l procesa cu ajutorul capabilității hardware oferite de Arduino UNO. În figura VI.1 se prezintă circuitul inițial al receptorului de ultrasunete.

A doua implementare și cea finală a receptorului, realizată cu două amplificatoare operaționale, are la ieșire un semnal amplificat și saturat, care a putut fi procesat. Necesitatea de a avea două amplificatoare operaționale se poate analiza comparând rezultatele măsurătorilor de pe canalele 2,3 și 4 din figurile VI.2 și VI.3. În ambele figuri, canalul 4 reprezentând semnalul primit la măsurarea receptorului ultrasonic, receptorul generând semnalul brut, neprocesat de către amplificatoarele operaționale. Astfel în figura VI.2 se observă că la o tensiune de 400mV, semnalul este saturat chiar și după primul etaj de amplificare iar în figura VI.3 se observă faptul că la o tensiune de 20mV, semnalul este saturat abia după al doilea etaj de amplificare.

În momentul testării cu osciloscopul a semnalului la ieșire, s-a constatat că generatorul piezoelectric al receptorului de ultrasunete are nevoie de o perioadă de timp pentru a se egaliza semnalul. În figura VI.4 este prezentat momentul în care au fost testate semnalele iar în figura VI.5 se poate observa egalizarea semnalului în momentul pornirii circuitului. Aceste semnale au fost obținute când distanța dintre emițător și receptor a fost de 2 cm.

O altă măsurare s-a făcut cu ajutorul funcției automate FFT (Fast Fourier Transform) a osciloscopului, în care putem vedea momentul când se recepționează valoarea maximă pentru valoarea de 1 logic, fiind 42.28 kHz precum și valoare minimă pentru valoarea de 0 logic, fiind 38.83 kHz, având diferența de frecvență de la vârf la vârf de 3.45 kHz. Acest aspect se poate vedea în figura VI.5.

Concluzii

Prin realizarea acestui proiect, s-a demonstrat posibilitatea de a comunica între dispozitive mobile prin intermediul ultrasunetelor. Acest lucru fiind posibil prin realizarea a două circuite, unul pentru emițătorul de ultrasunete și unul pentru receptorul de ultrasunete.

Circuitul emițătorului a constat într-un generator piezoelectric comandat printr-un tranzistor 2N3904 iar generarea de semnale fiind manipulate de către microcontroler-ul Atmel ATmega 328P integrat pe plăcuță de dezvoltare Arduino UNO.

Circuitul receptorului fiind realizat cu ajutorul a două amplificatoare operaționale, MCP601 și MCP6004, din necesitatea de a avea două etaje de amplificare a semnalului și totodată pentru obținerea unui semnal saturat, semnal ce a fost manipulat tot cu ajutorul microcontroler-ului Atmel ATmega 328P.

Prin urmare, logica ce a stat la baza comunicării între aceste două dispozitive a fost că s-au trimis date prin intermediul emițătorului de ultrasunete care a generat frecvența de 42kHz pentru reprezentarea valorii de 1 logic iar frecvența de 38 kHz pentru reprezentarea valorii de 0 logic, datele reprezentând caractere ASCII. Aceste date au fost recepționate de către receptorul de ultrasunete care a decodificat frecvențele într-un mod invers emițătorului, transformând frecvențele recepționate în valorile logice 1 și 0.

Pentru programarea acestor două dispozitive s-a folosit programul Arduino IDE în care au fost scrise codurile, fiind încărcate ulterior pe plăcuțele Arduino UNO.

Comunicarea a fost realizată prin utilizarea a două monitoare seriale al programului Arduino IDE, unul fiind utilizat pentru trimiterea caracterelor iar celălalt pentru afișarea caracterelor recepționate.

Implementări și testări viitoare în cadrul proiectului:

Testarea semnalelor la trecerea prin diferite materiale precum fier, lemn, plastic, etc.

Crearea unei comunicări securizate

Implementarea unor noi dispozitive, utilizând generatoare piezoelectrice de o performanță ridicată

Realizarea unei încapsulări a dispozitivelor pentru o comunicare „secretă”.

Anexe

DECLARAȚIE DE AUTENTICITATE A

LUCRĂRII DE FINALIZARE A STUDIILOR

Titlul lucrării

COMUNICAREA ÎNTRE DISPOZITIVE MOBILE UTILIZÂND ULTRASUNETE

Autorul lucrării

Cinar Ioan

Lucrarea de finalizare a studiilor este elaborată în vederea susținerii examenului de finalizare a studiilor organizat de către Facultatea de Inginerie Electrică și Tehnologia Informației din cadrul Universității din Oradea, sesiunea iulie a anului universitar 2016-2017.

Prin prezenta, subsemnatul Cinar Ioan, CNP 1940131242269, declar pe proprie răspundere că această lucrare a fost scrisă de către mine, fără nici un ajutor neautorizat și că nici o parte a lucrării nu conține aplicații sau studii de caz publicate de alți autori.

Declar, de asemenea, că în lucrare nu există idei, tabele, grafice, hărți sau alte surse folosite fără respectarea legii române și a convențiilor internaționale privind drepturile de autor.

Oradea,

Data 5.07.2017 Semnătura

Similar Posts