Dispozitiv de Control Kinetic al Unui Calculator Folosind Microcontrolerul Atmega328

Proiect de diplomă

prezentat ca cerință parțială pentru obținerea titlului de

Inginer în domeniul Electronică și Telecomunicații

programul de studii de licență Electronică Aplicată (ETC – ELA)

TEMA PROIECTULUI DE DIPLOMĂ

a studentului Catinas Andrei, Grupa 443B

1. Titlul temei: Dispozitiv de control kinetic al unui calculator folosind microcontrolerul Atmega328

2. Contribuția practică, originală a studentului va consta în (exclusiv partea de documentare):

Proiectul va consta în proiectarea și realizarea unui sistem kinetic pentru controlarea unui calculator. Sistemul va consta într-o mănușă ce va acționa ca un mouse, pe baza mișcărilor mâinii. Mișcările vor fi capturate de un accelerometru și un giroscop și procesate de un microcontroler Atmega328 ce va transmite comenzile către calculator prin interfața serială. Pentru realizarea operației de click se vor folosi senzori tactili. Contribuția studentului va consta în proiectarea și realizarea hardware a dispozitivului, proiectarea și realizarea circuitului de alimentare și programarea microcontroller-ului și a driver-ului de interfață între microcontroller și calculator.

3. Proiectul se bazează pe cunoștințe dobândite în principal la următoarele discipline: Microcontrolere, Proiect 2, Automatizări în electronică și telecomunicații.

4. Realizarea practică/proiectul rămân în proprietatea: student/UPB

5. Proprietatea intelectuală asupra proiectului aparține: student/UPB

6. Locul de desfășurare a activității: UPB, ETTI

7. Data eliberării temei: 7 noiembrie 2013.

CUPRINS:

LISTA ACRONIMELOR:

BIOS – Basic Input Output System : Sistem de bază de Intrare/Ieșire

CDC – Connected Device Class – tip de comunicație

CD-ROM – Compact Disc – Read Only Memory : Disc compact cu memorie doar în citire

CISC – Complex Instruction Set Computer : Computer cu set complex de instrucțiuni

DOS – Disk Operating System : Sistem de operare monoutilizator ce rulează o singură aplicație la un moment dat

GND – Ground : masă

I2C – Inter-Integrated Circuit – este un tip de comunicație serială

I/O – Input/Output : Intrare/Ieșire

PCB – Printed Circuit Board – Placă cu circuit/cablaj imprimat

RAM – Random Access Memory : Memorie cu access aleator

RISC – Reduced Instruction Set Computer : Computer cu set redus de instrucțiuni

ROM – Read Only Memory : Memorie doar pentru citire / nemodificabilă

SCL – Serial clock line – linie de transmisiune serială

SDA – Serial data line – linie de transmisiune serială

SMD – Surface Mounted Device – Dispozitiv cu montaj pe suprafața cablajului imprimat

SPI – Serial Periferical Interface – tip de comunicație serială

UART – universal asynchronous receiver/transmitter –comunicație serială

UNIX – Uniplexed Information and Computing Service – Sistem de operare universal

USB – Universal Serial Bus

VCC – Alimentare

VLSI – Very Large Scale Integration : Integrare pe scară foarte largă

Wi-Fi – Rețea de internet fără cablu

INTRODUCERE

Aproape că nu ne putem imagina o zi în care să nu folosim computerul, care a devenit parte din existența noastră. Implicit, zilnic folosim și mouse-ul, element indispensabil oricărui computer. Puțină lume știe cum a aparut mouse-ul, care e istoria lui și cum a evoluat până în prezent.

M-am decis să fac ca proiect de licenta, o variantă de mouse bazată pe mișcarea mâinii utilizatorului, scopul acestuia este proiectarea noii generații de mouse.

Termenul "mouse" datează din anul 1965, atunci când a fost găsit într-o publicație englezească ce purta denumirea „Computer-Aided Display Control”.Acest termen a fost susținut și de Compact Oxford ediția a treia și ediția a patra a dicționarului american Heritage care a declarat că denumirea de "computer mice" și "computer mouses" erau forme corecte de plural pentru „computer mouse”.
Inventarea primului mouse

Cercetătorul american Douglas Engelbart, de la institutul de cercetare Standford, a inventat primul mouse în anul 1963, împreună cu colegul său Bill English.Aceest mouse avea exteriorul din lemn, și era voluminos, însă putea fi ținut cu o singura mână. Mouse-ul folosea două rotițe așezate perpendicular pentru a putea detecta mișcarea sa, și avea un singur buton.

Inventatorul Engelbart a primit brevetul US3541541 la 7 ani dupa ce a creat mouse-ul.
Primul mouse declarat oficial ca parte a unui calculator

În anul 1981 impreuna cu sistemul Xerox 8010 Star Information a fost comercializat primul mouse pentru un sistem personal. 

Evoluția și tipurile mouse-ului

Mouse-ul cu rotițe externe

Primul mouse a fost mouse-ul cu rotițe, inventat în anul 1963 de către Douglas Engelbart. Sistemul acestuia era format din doua rotițe așezate perpendicular, una peste alta, care odata ce aceestea se roteau, mouse-ul sesiza mișcarea și datele erau trimise către un sistem de afișare.

În imaginea de mai jos este primul mouse din lume, ținut în mână chiar de inventatorul său Douglas Engelbart.

Mouse-ul cu bilă

Mouse-ul cu bilă, denumit și mouse-ul mecanic are o singură bilă ce se poate roti în orice direcție și a fost inventat de către inginerul Bill English care lucra la compania Xerox PARC pentru a înlocui mouse-ul cu rotițe externe. Sistemul de detectare a mișcării acestuia este bazat pe o bilă și doua roți dințate separate, dispuse la 90 de grade. Sistemul este simplu de înțeles, o roată dințată este pusă special pentru a primi mișcările bilei înainte-înapoi iar alta pentru a le primi pe ce laterale. Odata ce roțile dințate se învârt, dinții fracționează (întrerup pe moment) fascicolele de lumină infraroșu care este trimisă către senzor de la emițător, astfel se detectează mișcarea bilei, implicit a mouse-ului

Mouse-ul optic

Mouse-ul optic este probabil cel mai utilizat mouse, care se regăsește și azi pe multe dintre birourile noastre. De această dată lucrurile sunt schimbate, mouse-ul nu mai are nimic care să se roteasca, miște sau alunece în el, deoarece folosește o dioda emițătoare și o fotodiodă care detectează mișcarea mouse-ului. Pentru primele mouse-uri optice era nevoie de un mouse pad (detaliat în cele ce urmeaza), pentru ca fotodioda să poată detecta mișcarea acestuia, deoarece mouse-ul optic nu mergea bine pe suprafețe transparente sau pe cele care reflectau lumina emisa de dioda. Odata ce mouse-ul optic a evoluat, a fost introdus un sistem de circuite integrate care proceseaza imaginile primite de la fotodiodă direct în mouse, astfel poate fi utilizat pe mai multe tipuri de suprafete și nu mai este nevoie de un mouse pad.

Mouse-ul cu laser

Am ajuns la mouse-ul laser, cel mai performant mouse de până acum, o companie pe nume Sun Microsystems și-a dotat spațile de lucru cu mouse-uri ce foloseau technologia laser încă din anul 1994.

Despre sistemul mouse-ului cu laser nu este mult de spus, deoarece folosește aceeași technologie ca și mouse-urile optice doar că în locul ledului este folosit un mic laser, care conferă o precizie mult mai mare și totodată o performanță remarcabilă.

Mouse-ul cameră 

Mouse-ul cameră are mărimea unei camere web și arată aproximativ ca aceasta. Acest tip de cameră urmarește un punct selectat de pe capul unei persoane, atunci când persoana mișca din cap este mișcat și curosul pe ecran. Probabil ne gândim că aceest tip de mouse nu poate oferi o precizie mare, dar ne înșelăm. În imaginea de mai jos este un astfel tip de camera.

Mouse-ul de picior

Este folosit de persoanele care nu își pot folosi capul sau mâinile și este comandat cu ajutorul piciorului. În imaginea de mai jos este prezentat un concept al unui astfel de tip.

Trackball-ul

Este un dispozitiv asemănător mouse-ului cu bilă, dar de această data utilizatorul mișcă bila cu ajutorul mâinii care la rândul sau mișcă cursorul. În imaginea de mai jos este prezentat un trackball produs de compania Kinesis-Ergo.

1. CONSIDERENTE TEORETICE

1.1. SENZORI DE FORȚĂ, PRINCIPIUL DE FUNCȚIONARE, TIPURI

Introducere

Senzorii de forță pot fi împărțiti în două clase: cantitativi și calitativi. Un senzor cantitativ măsoară de fapt forța și reprezintă valoarea ei sub forma unui semnal electric. Exemple de astfel de senzori sunt traductoarele tensometrice resistive (mărcile tensometrice) și celulele de sarcină. Senzorii calitativi sunt dispozitive de prag ce nu au ca scop reprezentarea cu exactitate a nivelului forței. Funcția lor este doar aceea de a indica dacă o forță suficient de puternică este aplicată sau nu, altfel spus, semnalul de ieșire indică momentul când amplitudinea forței depășește un nivel de prag predeterminat. Un exemplu de astfel de detector este tastatura unui calculator, unde o tastă face contact doar atunci când este apăsată suficient de puternic. Senzorii de forță calitativi sunt folosiți frecvent pentru detectarea mișcării și poziției.

Există diferite metode de a detecta/ simți forța :

a) Prin compararea forței necunoscute cu forța gravitațională a unei mase standard

b) Prin măsurarea accelerației masei cunoscute căreia îi este aplicată forță (F = m * a)

c) Prin compararea forței necunoscute cu o forță dezvoltată electromagnetic

d) Prin transformarea forței în presiunea corespunzătoare a unui lichid și măsurarea acelei presiuni

e) Prin măsurarea solicitării produse într-o membrană elastică de către forța necunoscută

Senzorii moderni folosesc metoda e), în timp ce metodele c) și d) sunt utilizate ocazional.

TIPURI, PRINCIPIUL DE FUNCȚIONARE

Traductoare tensometrice rezistive

Tensiunea/încordarea mecanică reprezintă deformarea unui corp fizic sub acțiunea forței aplicate.

Toate materialele rezistă la deformare, astfel este necesar să se aplice o anumită forță pentru a cauza o deformare. Prin urmare, rezistența este asociată cu forța aplicată. Această dependență se numește efect piezorezistiv și reprezintă variația rezistenței electrice a semiconductorului ca urmare a acțiunii unei solicitări mecanice asupra lui, care îi produce o deformare.

Efectul piezorezistiv se exprimă în funcție de factorul de sensibilitate: 𝑑𝑅𝑅=𝑆𝑒* 𝜀 ,

unde ε = deformația specifică longitudinală a rețelei traductorului

R = rezistența electrică a semiconductorului

Se= sensibilitatea traductorului

Pentru majoritatea materialelor Se ≈ 2, exceptând platina, pentru care Se ≈ 6.

La variații mici ale rezistenței, ce nu depășesc 2%, rezistența unui fir metalic poate fi aproximată printr-o ecuație liniară: R = R0 (1 + x),

unde R0 = rezistența atunci când nu este aplicată nici o forță și x = Se.

Mărcile tensometrice sunt senzori elastici rezistivi, a căror rezistență depinde de tensiunea mecanică aplicată. Traductoarele rezistive metalice (TER) sunt formate dintr-un fir conductor subțire, lipit pe un suport de hârtie sau material izolant(rășini epoxidice). Traductorul se lipește pe un element elastic ce se deformează datorită acțiunii forței. Această deplasare determină o variație a lungimii firului conductor, și implicit, o variație a rezistenței sale electrice.

Traductorul tensometric cu semiconductor (TES) constă dintr-un filament subțire (de regulă, un monocristal de siliciu tratat cu impurități și orientat) fixat pe un suport protector din rășină epoxidică. În figura 1.13 sunt prezentate patru tipuri de traductoare. Variantele a), b) și c), cu monocristal, diferă prin pozițiile conductorilor de legătură, iar varianta d) este un traductor dublu, constând dintr-un cristal p și unul n, legate în semipunte. De regulă, pentru lipirea TES pe piese care suportă solicitări mecanice ce trebuie evaluate, se utilizează aceiași adezivi ca și în cazul traductoarelor metalice.

Tipuri de traductoare tensometrice cu semiconductor.

Traductoarele cu semiconductoare au sensibilitate la deformație mult mai mare decât cele metalice. În funcție de tipul și cantitatea de impurități introduse în cristalul de siliciu pur, constantele traductoarelor pot avea valori foarte mari, cuprinse între 50 și 175. Însă TES au și dezavantaje precum: comportamentul neliniar, compensarea dificilă a erorilor introduse de variațiile de tempee de temperatură, necesitatea de a se lipi numai pe suprafețe plane (datorită fragilității filamentului).

Senzori tactili

Senzorii tactili pot fi împărțiți în trei subgrupe :

– senzori de atingere

– senzori spațiali

– senzori de alunecare

Senzorii de atingere detectează și măsoară forțele de contact în puncte definite. Un senzor de atingere este în general un dispozitiv de prag sau un senzor binar, numit „atinge” sau „nu atinge” .

Senzorii spațiali detectează și măsoară distribuția spațială a forțelor perpendiculare pe o suprafață senzorială prestabilită. O matrice senzorială spațială poate fi considerată ca fiind un grup ordonat de senzori de atingere.

Senzorii de alunecare detectează și măsoară mișcarea relativă a unui obiect față de senzor.

În general, senzorii tactili sunt o clasă specială de traductori de forță sau de presiune și sunt caracterizați printr-o grosime mică. Acest lucru face ca senzorii să fie utili în aplicații unde forța sau presiunea pot fi dezvoltate între două suprafețe aflate în apropiere una de cealaltă. Un exemplu de aplicație unde sunt folosiți acești senzori reprezintă domeniul roboticii, unde senzorii tactili pot fi poziționați pe „vârful degetelor” unui actuator mecanic pentru a „simți” contactul cu un obiect (asemănător cu senzorii tactili din pielea umană).

De asemenea, senzorii tactili pot fi folosiți pentru a fabrica afișaje sensibile la atingere (display-uri „touch screen”), tastaturi și alte dispozitive unde este necesar să fie simțit un contact fizic. În ingineria mecanică și civică, senzorii tactili pot fi folosiți pentru a studia forțele produse de anumite dispozitive de fixare/strângere.

Senzori piezorezistivi

Senzorii piezorezistivi fac parte din categoria senzorilor tactili. Ei sunt fabricați din materiale a căror rezistență electrică este funcție de tensiunea mecanică aplicată asupra acestor materiale. Senzorii încorporează rezistori sensibili la forță (FSR) a căror rezistență variază cu presiunea aplicată. Astfel de materiale sunt elastomerii conductivi sau cernelurile sensibile la presiune.

Un elastomer conductiv este fabricat din cauciuc siliconic, poliuretan și alți compuși care sunt impregnați cu fibre sau particule conductive. De exemplu, cauciucul siliconic poate fi fabricat prin impregnare cu pudră de carbon.

Principiile de operare ale senzorilor tactili ce conțin elastomeri sunt bazate pe variația suprafeței de contact atunci când elastomerul este strâns între două plăci conductive, sau pe schimbarea grosimii elastomerului. Atunci când forțele externe variază, suprafața de contact la interfața dintre dispozitivul de împingere și elastomer se schimbă, rezultând o micșorare a rezistenței electrice.

Structura unui senzor tactil pe bază de elastomer

La o anumită presiune, suprafața de contact atinge maximul posibil și funcția de transfer ajunge la saturație.

Funcția de transfer a unui senzor tactil elastomeric

Acești senzori au dezavantajul că dacă asupra polimerului este menținută o presiune pentru o perioadă mai îndelungată de timp rezistența poate avea variații foarte mari și din această cauză, senzorii de tip FSR sunt utilizați mai mult pentru măsurători de tip calitativ, decât cantitativ.

Prin comparație cu mărcile tensometrice, senzorii de tip FSR au o gamă dinamică mult mai largă, dar o acuratețe mult mai mică. Totuși, în multe aplicații, unde măsurarea unui nivel al forței nu este necesar să fie foarte precisă, acești senzori sunt preferați și datorită prețului mic pe care îl au. Grosimea tipică a unui senzor FSR cu polimer este de aproximativ 0.25 mm, dar există și variante ce au o grosime mult mai mică.

Senzori de atingere capacitivi

Un senzor tactil capacitiv se bazează pe principiul forței aplicate care fie schimbă distanța dintre cele două plăci ce formează condesatorul fie variază suprafața condensatorului. Într-un astfel de senzor, două plăci conductive sunt separate de un mediu dielectric care are rolul unui elastomer și dă senzorului caracteristica forță – capacitate

Structura unui senzor de atingere capacitiv

Pentru a măsura variația capacității, se pot folosi mai multe tehnici. Cea mai utilizată este cea bazată pe folosirea unei surse de curent împreună cu un rezistor și măsurarea întarzierii produse de variația capacității condensatorului. O altă metodă este integrarea senzorului într-un circuit oscilator RC sau LC și măsurarea răspunsului în frecvență. Apar însă probleme cu senzorii capacitivi dacă sunt utilizați în apropierea unor structuri metalice, deoarece acestea tind să influențeze capacitatea condensatorului, dar acest efect poate fi minimizat dacă se realizează o schemă electrică bună.

Senzorii capacitivi sunt foarte utilizați în panourile de tip „touch screen”. Aceste panouri sunt realizate din sticlă sau un polimer transparent, acoperit cu un strat subțire și transparent de conductor precum oxidul de indiu-staniu (ITO) , care combină conductivitatea electrică cu claritatea din punct de vedere optic. Deoarece și corpul uman conduce electricitatea, o atingere pe suprafața senzorului va afecta câmpul electric și va crea o schimbare a capacității dispozitivului, schimbare ce poate fi măsurată. Acești senzori funcționează în apropierea mediului conductiv (de exemplu degetul) și nu trebuie sa fie atins în mod direct ca să fie declanșat.

1.2. COMUNICATIA SERIALA

Introducere

Pentru a reduce numărul de sârme prin care se comunică între diferitele componente ale unui circuit electric, se poate apela la comunicația serială. Practic, se reduce complexitatea montajului, prețul plătit, fiind viteza ceva mai scazută de transfer de date.

Modelul comunicației seriale

ETD – Echipamente terminale de date (calculatoare, terminale de date). Acestea conțin și interfețele seriale sau controlerele de comunicație.

ECD – Echipamente pentru comunicația de date. Aceste echipamente se numesc modemuri și permit calculatorului să transmită informații printr-o linie telefonică analogică.

Funcțiile principale realizate de un modem sunt următoarele:

– conversia digital/analogică a informațiilor din calculator și conversia analog/digitală a semnalelor de pe linia telefonică analogică.

– modularea/demodularea unui semnal purtător. La transmisie, modemul suprapune (modulează) semnalele digitale ale calculatorului peste semnalul purtător al liniei telefonice. La recepție, modemul extrage (demodulează) informațiile transportate de semnalul purtător și le transferă calculatorului.

Linia de comunicație reprezintă o linie fizică sau o linie telefonică. Linia telefonică poate fi o linie comutată (conectată la o centrală telefonică) sau o linie închiriată (dedicată).

Circuitul de date cuprinde porțiunea dintre două echipamente terminale de date, deci, modemurile și linia de comunicație. Pe distanțe reduse, este posibilă comunicația serială directă între două echipamente terminale de date prin linii fizice, fără utilizarea unor modemuri. În acest caz, circuitul de date este reprezentat de aceste linii.

Legătura de date conține circuitul de date și interfețele seriale ale echipamentelor terminale de date.

În funcție de numărul de echipamente interconectate, o legătură serială poate fi punct la punct (două echipamente) sau multipunct (mai mult de două echipamente).

Parametrii comunicației seriale

Viteza de comunicație (numită și debit binar) este măsurată în biți/s (bps):

[biți/s] T D 1

unde T este perioada de timp necesară pentru transmisia sau recepția unui singur bit.

Modemul reprezintă semnalele de date prin diferite stări electrice, în funcție de tipul de modulație pe care îl utilizează: frecvență, amplitudine sau fază. Fiecare stare electrică este menținută la ieșirea modemului pentru un interval de timp numit perioadă de modulație ( ).

Viteza de modulație este inversul perioadei de modulație, reprezentând numărul schimbărilor pe secundă ale stării electrice a modemului:

[baud] 1 m V

Unitatea de măsură a vitezei de modulație este baud, după numele inginerului și telegrafistului francez Jean-Maurice Baudot.

Relația dintre viteza de comunicație D și viteza de modulație Vm este:

D = Vm log2 n [biți/s]

unde n este numărul stărilor electrice distincte ale modemului. În cazul particular când există doar două stări electrice distincte ale modemului, viteza de comunicație este egală cu viteza de modulație. În general însă, există un număr mai mare de stări electrice ale modemului, astfel încât viteza de comunicație este un multiplu al vitezei de modulație.

Viteza de modulație este confundată adesea cu viteza de comunicație (debitul binar). Viteza de modulație (exprimată în baud) este rata cu care se modifică stările electrice ale modemului într-o secundă. De exemplu, dacă se utilizează modulația în frecvență, iar frecvența semnalului purtător se poate modifica de către modem cu o rată de 2400 de ori pe secundă, viteza de modulație este de 2400 baud.

Primele modemuri codificau un bit de 0 printr-o anumită frecvență și un bit de 1 printr-o altă frecvență. În acest caz particular, viteza de modulație are aceeași valoare cu viteza de comunicație.

În general însă, modemurile codifică mai mulți biți de informație printr-o stare electrică. De exemplu, dacă modemul codifică 4 biți de informație printr-o anumită frecvență, pentru exemplul anterior viteza de comunicație va fi de 4x 2400 = 9600 biți/s.

Tipuri de comunicație serială

Din punctul de vedere al direcției de transfer, se pot distinge următoarele tipuri de comunicație serială:

simplex;

semiduplex;

duplex.

În cazul comunicației simplex, datele sunt transferate întotdeauna în aceeași direcție, de la echipamentul transmițător la cel receptor. La comunicația semiduplex, fiecare echipament terminal de date funcționează alternativ ca transmițător, iar apoi ca receptor. Pentru acest tip de conexiune, este suficientă o singură linie de transmisie (două fire de legătură). Într-o comunicație duplex (numită și duplex integral), datele se transferă simultan în ambele direcții. Primele conexiuni duplex necesitau două linii de transmisie (patru fire de legătură), dar conexiunile ulterioare necesită o singură linie.

Din punctul de vedere al sincronizării dintre transmițător și receptor, există două tipuri de comunicație serială: asincronă și sincronă.

Comunicația asincronă

Pentru a asigura sincronizarea dintre transmițător și receptor, fiecare caracter transmis este precedat de un bit de START, cu valoarea logică 0 (“space”), și este urmat de cel puțin un bit de STOP, cu valoarea logică 1 (“mark”). Biții de START și de STOP încadrează deci fiecare caracter transmis; caracterul transmis între acești doi biți reprezintă un cadru de date. Un asemenea cadru reprezintă informația digitală de bază într-un sistem de comunicație serială. În cazul comunicației asincrone, intervalul de timp între transmisia a două caractere succesive este variabil, pe durata acestui interval linia de comunicație fiind în starea 1 logic. Acest mod de comunicație este numit și start-stop.

Sincronizarea la nivel de bit se realizează cu ajutorul semnalelor de ceas locale cu aceeași frecvență. Atunci când receptorul detectează începutul unui caracter indicat prin bitul de START, pornește un oscilator de ceas local, care permite eșantionarea corectă a biților individuali ai caracterului. Eșantionarea biților se realizează aproximativ la mijlocul intervalului corespunzător fiecărui bit.

Figura de mai jos ilustrează transmisia caracterului cu codul ASCII 0x61. După bitul de START, având durata T corespunzătoare unui bit, transmisia caracterului începe cu bitul cel mai puțin semnificativ b0. După transmisia bitului cel mai semnificativ b7, se transmite un bit de paritate p; în acest exemplu, paritatea este impară. Bitul de paritate este opțional, iar în cazul în care se adaugă la caracterul transmis, paritatea poate fi selectată pentru a fi pară sau impară. Există și posibilitatea ca bitul de paritate să fie setat la 0 sau 1, indiferent de paritatea efectivă a caracterului. În exemplul ilustrat, la sfârșitul caracterului se transmit doi biți de STOP s1 și s2, după care linia rămâne în starea 1 logic un timp nedefinit. Acest timp corespunde unui interval de pauză.

Comunicație asincronă

În cazul comunicației asincrone, sincronizarea la nivel de bit este asigurată numai pe durata transmisiei efective a fiecărui caracter. O asemenea comunicație este orientată pe caractere individuale și are dezavantajul că necesită informații suplimentare în proporție de cel puțin 25% pentru identificarea fiecărui character.

Comunicația sincronă

Pentru comunicatia între componentele aflate pe aceeași placă sau chiar în același echipament, se poate utiliza un protocol sincron. Acest protocol are nevoie de o sârmă auxiliară: semnalul de ceas. Un avantaj major este că aceste protocoale se pot utiliza într-o configurație one_master – multi_slave sau chiar multi_master – multi_slave. Practic, comunicația are loc pe o magistrală care unește circuitul master de circuitele slave, toată activitatea desfășurându-se sub controlul masterului.

În cazul comunicației sincrone, un cadru nu conține un singur caracter, ci un bloc de caractere sau un mesaj. Sincronizarea la nivel de bit trebuie asigurată permanent, nu numai în timpul transmisiei propriu-zise, ci și în intervalele de pauză. De aceea, timpul este divizat în mod continuu în intervale elementare la transmițător, intervale care trebuie regăsite apoi la receptor. Aceasta pune anumite probleme. Dacă ceasul local al receptorului are o frecvență care diferă într-o anumită măsură de frecvența transmițătorului, vor apare erori la recunoașterea caracterelor, din cauza lungimii blocurilor de caractere.

Pentru a se evita asemenea erori, ceasul receptorului trebuie resincronizat frecvent cu cel al transmițătorului. Aceasta se poate realiza dacă se asigură că există suficiente tranziții de la 1 la 0 și de la 0 la 1 în mesajul transmis. Dacă datele de transmis constau din șiruri lungi de 1 sau de 0, trebuie inserate tranziții suficiente pentru resincronizarea ceasurilor. Asemenea tehnici sunt dificil de implementat, astfel încât se utilizează de obicei o tehnică numită comunicație asincronă sincronizată (numită în mod simplu comunicație sincronă).

Acest tip de comunicație este caracterizat de faptul că, deși mesajul este transmis într-un mod sincron, nu există o sincronizare în intervalul de timp dintre două mesaje. Informația este transmisă sub forma unor blocuri de caractere sau a unor biți succesivi, fără biți de START și STOP. Pentru ajustarea oscilatorului local la începutul unui mesaj, fiecare mesaj este precedat de un număr de caractere speciale de sincronizare, de exemplu, caracterul SYN (0x16). Pentru menținerea sincronizării, se pot insera caractere de sincronizare suplimentare în mesajul transmis, la anumite intervale de timp.

La receptor există trei nivele de sincronizare:

sincronizare la nivel de bit, utilizând circuite cu calare de fază PLL (Phase–Locked Loop)1, pe baza tranzițiilor existente în semnalul recepționat;

sincronizare la nivel de caracter, asigurată prin recunoașterea anumitor caractere de sincronizare;

sincronizare la nivel de bloc sau mesaj, care depinde de protocolul de date utilizat.

Mai multe firme au încercat să își impună standardul pe piață. În acest moment exista 3 standarde, fiecare cu avantaje și dezavantaje.

a) I²C – Inovatia PHILIPS – IC 2 IC Comunication – sau IIC

Acest protocol inventat și dezvoltat de Philips a apărut prima oară pe placile televizoarelor. Este nevoie doar de doua sârme: SCL (ceasul) și SDA(data). Configuratiile posibile sunt multi_master, multi slave, existând mecanism de arbitrare între masteri.

Avantaje:

• configurație multi master – posibilitatea arbitrării masterilor;

• clock-stretching – perifericele lente pot “cere” un delay de la master;

• utilizarea intensiva a bit-ului ACK (acknowledge);

• detectia foarte simpla a perifericelor active (în functie de configuratia placii, avand un

soft unic, se poate detecta la start-up care sunt perifericele prezente pe magistrala);

• validarea rapida a datelor;

• doar doua sarme pentru toata magistrala.

Dezavantaje:

• viteza mică de transfer;

• selecția perifericului (prin adresa de slave) adaugă overhead la comunicație.

O variantă mai flexibilă (la nivelul legatură de date, dacă privim IIC prin prizma stivei OSI) a acestui protocol este TwoWireInterface. Microcontrolerul folosit la laborator este capabil să utilizeze acest protocol fie din postura de master fie din cea de slave.

b) SPI – Inovatie Motorola – Serial Periferical Interface

Motorola a dezvoltat aceast protocol și l-a impus prin intermediul microcontrolerelor HC11. Este un protocol foarte rapid, care însă nu permite direct prezența pe magistrală a doi sau mai mulți masteri.

Schema de arbitrare trebuie efectuată extern, folosind un circuit auxiliar. În plus, perifericele mai lente nu pot semnaliza o cerere de amânare/intârziere a comunicației. Față de IIC, mai apare o sârmă. Dacă la IIC, SDA este sârma de date și este bidirecțională, la SPI apar doua sârme, MasterOutputSlaveInput și MasterInputSlaveOutput. MOSI și MISO sunt unidirecționale. Microcontrolerul folosit la laborator este capabil să utilizeze acest protocol (implementare hardware).

Avantaje:

• viteza foarte mare;

• selecția directă a slave-lui (dar, pentru fiecare slave, este nevoie de o nouă sârmă);

• simplitate în utilizare (la nivelul legatură de date OSI).

Dezavantaje:

• chiar cu un singur slave, este nevoie de 4 sârme iar cu 2 slave, este nevoie de 5 sârme;

• lipsa arbitrării între masteri;

• lipsa clock-stretching-ului – perifericele lente nu au ce căuta pe această magistrală;

• lipsa unui bit de ACK – validarea pachetelor trebuie facută la un nivel superior.

c) 1Wire – Inovatia Maxim – sau Button Wire interface

Maxim a vrut să simplifice și mai mult viața designerilor de PCB-uri (Printed Circuit Board), și a pus la dispoziție acest protocol. Avantajul este unul singur: este nevoie de o singura sârmă între slave și master. Este posibilă configurația multi_slave, dar multi_master se poate realiza numai cu o schemă de arbitrare externă. Este un protocol greu de implementat (se poate considera ca fiind un protocol asincron).

Avantaje:

• un singur fir (slave-ul se poate chiar alimenta din acest fir).

Dezavantaje:

• viteza mică de transfer;

• greu de implementat;

• patent Maxim – puține periferice suportă acest protocol.

I2C (Inter-Integrated Circuit Bus) – detaliere

Protocolul folosit de mine în acesta licenta, pentru transmisia seriala este modul I2C

Ce este protocolul I2C (Inter-Integrated Circuit Bus)

Magistrala I2C a fost creată în ani '80 de către Philips semiconductors. Ea î-și propunea sa fie o cale usoara de a conecta CPU cu circuitele integrate periferice folosite intr-un TV.

Magistrala I2c constă fizic în două linii active (SDA și SCL) și una de masă(GND) prin care comunică două sau mai multe componente după niște reguli precise pe care le vom defini pe scurt în continuare.

Liniile active SDA (Serial DAta line) și SCL (Serial CLock line) sunt bidirecționale.

Fiecare componentă conectată la magistrală are o adresă unică indiferent daca este CPU, RTC, EEPROM, LCD, etc.

Componentele conectate la magistrală pot funcționa fie ca receptor fie ca emițător (la momente de timp distincte).

Controlul magistralei va aparține (la un moment dat) unui singur dispozitiv Master, care va adresa un singur dispozitiv Slave .

Masterul este dispozitivul care va iniția transferul (printr-o condiție de START), va genera impulsurile de ceas pe linia SCL și tot el va încheia transferul generând condiția de STOP .

Transferul de date pe magistrală se face în pachete de 8 biti (1 byte).

Viteza de transfer pe magistrală poate fi de 100kbit/sec sau 400kbit/sec…

Adresa dispozitivelor I2c este formată din 7 biti (de regula).

Interfața la magistrală este construită întodeauna dintr-un buffer (pentru intrare) și un tranzistor cu colector sau drenă în gol (pentru ieșire). Deci la ambele linii (SDA și SCL) trebuiesc conectate rezistoare PULL-UP (între SDA și +5V și între SCL și +5V).

Condițiile întâlnite pe magistrală:

Deci, cu exceptia conditiilor de START și STOP, este permisa schimbarea stări liniei SDA numai pe perioada în care SCL se afla în starea "0".

Odata ce masterul generează condiția de START va începe să transmită către slave primul byte (octet) care reprezintă adresa dispozitivului slave și tipul de transfer (scriere sau citire). Acesta se transmite începând cu cel mai semnificativ bit (a nu se confunda bit cu byte care reprezintă 8 biti) și terminând cu cel mai puțin semnificativ bit (bit 0 ). Bitul 0 din primul Byte de date trimis după condiția de START reprezintă tipul de acces catre SLAVE:

Bitul 0 din primul Byt trimis după condiția de START reprezintă tipul de acces către SLAVE:

– 0 = Write

– 1 = Read

Dacă la magistrală se află conectat un dispozitiv a cărui adresă corespunde cu cea trimisă de Master, acest dispozitiv va răspunde pe durata impulsului ACK generat de master pe SCL.

ACK reprezintă recunoașterea recepționării datelor de către receptor (Master sau Slave) și constă în ținerea în "0" a liniei SDA pe durata impulsului de ceas corespunzător, generat de Master.

Dacă după recepția ultimului bit (bit0) dispozitivul Slave nu pune linia SDA în 0 (acest fapt se numeste NO ACK). Masterul este nevoit să genereze condiția de Stop.

După recepția ultimului byte (octet) de catre Master, acesta va genera un NOT ACK înainte de condiția STOP.

NOT ACK constă în punerea unui "1" pe linia SDA, în timpul unui ciclu de ceas ASK (pe SCL), de către Master.

1.3. DE LA MICROCALCULATOR LA MICROCONTROLER

Introducere microcalculatoare

Microcalculatoarele sunt dispozitive electronice care conțin un microprocesor ce îndeplinește funcția de unitate centrală de prelucrare. Microprocesorul execută toate operațiile aritmetice și logice. Alături de microprocesor, sistemul mai conține o memorie de tip ROM (este o memorie din care se poate doar citi, este înscrisă în momentul construcției și conține programe de bază denumite BIOS ), o memorie de tip RAM folosită pentru citirea/scrierea programelor și datelor utilizatorului precum și dispozitive de intrare/ieșire(I/O) folosite pentru comunicarea cu mediul exterior și cu utilizatorul. Din categoria dispozitivelor I/O pot face parte tastatura, mouse-ul, imprimanta, monitorul, CD-ROM-ul etc .

De asemenea, în memoria ROM este înscris în momentul fabricației microcalculatorului un interpretor, care este un program ce traduce în limbaj mașină și execută fiecare instrucțiune, odată ce aceasta a fost scrisă în memorie.

Microcalculatoarele sunt dispozitive interactive și pot fi folosite de un singur utilizator la un moment dat (dispozitive monoutilizator).

Sistemul de operare cel mai răspândit al microcalculatoarelor este DOS. Acesta are la bază primul sistem de operare al microcalculatoarelor și a fost îmbunătățit cu principii din UNIX (cum ar fi structura arborescentă a directoarelor).

Microcontrolerele au fost dezvoltate din nevoia de a controla procese și de a interacționa cu mediul exterior fără intervenția operatorului uman. Utilizarea acestora a dus la o reducere semnificativă a costurilor și a dimensiunilor echipamentelor în care acestea sunt folosite.

Microcontrolerele sunt utilizate în toate aplicațiile ce fac parte din categoria sistemelor încapsulate-integrate, cunoscute sub numele de “embedded systems”.

Un microcontroler reprezintă de fapt un microcalculator integrat pe un singur chip și al cărui nucleu de procesare este tot microprocesorul.

Deoarece microprocesorul, memoria, dar și celelalte resurse sunt amplasate pe același chip (figura de mai jos), gradul de integrare este mare și sarcinile sunt executate foarte rapid.

Schema generală a unui microcontroler

Semnalele de intrare provin de obicei de la comutatoare, de la traductoare ori senzori (de temperatură, de lumina, de presiune, traductoare specializate). De asemenea, intrările pot fi digitale sau analogice. Intrările digitale vehiculează semnale discrete, informația "citită" fiind informația ce se eșantionează la momentul citirii liniei respective. Intrările analogice vehiculează informații exprimabile prin funcții continue de timp. "Citirea" acestora de către microcontroler presupune prezența unor circuite capabile să prelucreze aceste informații, fie comparatoare analogice, fie convertoare analog-numerice, ale căror ieșiri sunt citite de către microcontroler.

Ieșirile pot fi analogice, caz în care reprezintă de fapt ieșiri ale convertoarelor numeric-analogice, sau pot fi ieșiri digitale, caz în care informația este în general memorată pe acestea până la o nouă scriere operată de către procesor la un port al microcontrolerului. Ieșirile pot comanda dispozitive de afișare, relee, motoare, difuzoare, etc.

Un microprocesor prelucrează datele cu ajutorul instrucțiunilor. În funcție de numărul de instrucțiuni implementate deja în ele, microprocesoarele pot fi clasificate în 2 categorii: CISC și RISC.

Microprocesoarele care utilizează arhitectura CISC au un număr mare de tipuri de instrucțiuni, ceea ce ajută la economisirea timpului de procesare. Timpul este salvat deoarece instrucțiunile necesare sunt disponibile direct din microprocesor și nu este nevoie ca acesta să le preia din programul stocat în memoria externă. De asemenea, datorită setului complex de instrucțiuni, set uzual de peste 80 de instrucțiuni, multe din ele foarte puternice și specializate, aceste microprocesoare prezintă posibilități de lucru extinse.

Arhitectura RISC presupune existența unui set redus de instrucțiuni care se pot executa foarte rapid și eficient, obținându-se o reducere a complexității microcircuitului, astfel suprafața liberă poate fi utilizată în alte scopuri.

Printre caracteristicile definitorii ale arhitecturii RISC se pot enumera:

– unitatea centrală este realizată prin “logică de tip cablat”

– instrucțiunile se execută în intervale de timp identice (fiecare instrucțiune durează o stare a microprocesorului)

– numarul de instrucțiuni este redus

– instrucțiunile au un format uniform, toate instrucțiunile ocupă același spațiu de memorie.

– modurile de adresare sunt mult mai restrictive, microprocesorul oferă un număr redus de moduri de adresare

– existența mai multor registre de uz general, cel puțin 32 de registre.

Arhitectura RISC are unele avantaje față de arhitectura CISC și anume :

• realizarea fizică în structuri VLSI – acest avantaj derivă din faptul că aria cipului a fost minimizată și s-a mărit aria cipului dedicate registrelor generale

• viteză de procesare mărită datorită existenței unui număr mare de registre generale, (reducându-se astfel traficul cu memoria), existenței mecanismului pipeline precum și datorită realizării de tip cablat

• suportul oferit pentru limbajul de programare de nivel înalt – acest avantaj derivă din faptul că realizarea compilatoarelor este mai simplă decât în cazul arhitecturii CISC, deoarece toate instrucțiunile de prelucrare de date se realizeză folosind registre generale.

Cu toate acestea, arhitectura RISC prezintă și dezavantaje :

• datorită numărului mare de registre de uz general apare o creștere a suprafeței cipului, timpul pentru a decodifica registrul vizat crește și de asemenea sunt necesare tehnici complicate de gestionare a registrelor

• datorită numărului redus de instrucțiuni, programele RISC sunt cu 30% mai lungi decât același program de tip CISC, astfel ocupându-se memorie mai multă

• datorită realizării de tip cablat, unitatea centrală este mult mai puțin flexibilă, mai greu de modificat.

2. REALIZARA PRACTICĂ

2.1 INTRODUCERE

Având toată acestă istorie în spate, m-am decis să fac ca proiect de licenta, o varianta de mouse bazată pe mișcarea mâinii utilizatorului, scopul acestuia este proiectarea noii generații de mouse. Acest mouse se remarcă prin faptul că este foarte ușor de folosit și distractiv de utilizat. Controlarea pointerului de pe ecran se va face utilizând doar gesturi.

Pentru aceasta voi folosi:

– o placuță de dezvoltare Arduino Leonardo

– un giroscop (acelerometru inclus) cu 3 axe (L3G4200D) ce va fi montat pe o placuță de dezvoltare. Deoarece giroscopul are 3 axe, voi folosi axele X și Y pentru a mișca mousul pe ecran , X = stânga-dreapta , Y = sus-jos, iar axa Z o voi folosi pentru apropiere-depărtare .

– două butoane BRICK ce for fi conectate la pinii digitali ai placuței Arduino Leonardo.

Giroscopul și butoanele BRICK se va aplica pe o manușă.

Rolul dispozitivului creat este: captarea mișcării mâinii și salvarea acestora în regiștrii proprii ai microcontrolerului în vederea transmisiei informației către calulator. Microcontrolerul ATmega32 va citi periodic aceste valori (în funcție de frecvența ceasului propriu și de viteza de procesare a datelor) de la dispozitivul giroscop, și le va trimite calculatorului prin interfața serială. Controlerul va trebui să se comporte ca un dispozitiv mouse și să implementeze protocolul de comunicare cu PC-ul.

Principalele probleme de rezolvat sunt:

controlarea și comunicarea cu giroscopul(L3G4200D)

calcularea mișcării pointerului bazându-mă pe datele giroscopului

implementarea protocolului de comunicație prin interfața serială

2.2 ALEGEREA COMPONENTELOR

Componentele utilizate în acest proiect le-am ales astfel încât sistemul de control să fie unul fiabil, eficient, dar să aibă și un cost relativ scăzut.

Senzorii utilizați pot fi folosiți atât în scop educațional, dar și la realizarea unor proiecte practice, utile.

Toți senzorii utilizați au fost achiziționați de la firma RoboFun, deoarece se găsesc sub o formă care îi face foarte ușor de folosit împreună cu placa de dezvoltare Arduino și de asemenea prezintă și circuite de protecție.

Senzorii tactili de tip Brick

Acești senzori sunt produși de catre SparkFun. Am folosit acest tip de senzor tactil deoarece sunt pe o placuță ce conține: un rezitor de 220 Ω, pini pentru Vcc GND și Out și nu în ultimul rând pentru că sunt stabili și merg foarte bine atașați pe mănușă.

Majoritatea senzorilor tactili (butoane), datorită contactului mecanic din interiorul butonului în momentul acționării acestuia, semnalul trimis către microcontroler nu este unul “curat” pornit/oprit ci este o trecere continuă între pornit/oprit până la stabilizarea pe una dintre cele două stări. Efectul este de cele mai multe ori nedorit. Spre exemplu: în momentul în care apeși un buton trebuie să se deschidă o poartă iar în momentul când îl apeși din nou vrei ca poarta respectivă să se închidă. Fără o procedură adecvată de debounce poarta ta va oscila între închis/deschis făcând din butonul respectiv o comandă nesigură.

Butoanele alese de mine au efectul de bouce ținut în cote minime, deoarece placuța pe care este așezat butonul conține acel rezitor de 220 Ω.

Dimensiuni : 4 cm X 2 cm 

Pinul de semnal (OUT) se cuplează la pinul digital 7 al plăcii Arduino; 

Pinul de alimentare (VCC) se cuplează la pinul VCC al plăcii Arduino; 

Pinul de masă (GND) se cuplează la pinul GND al plăcii Arduino; 

2.3. NOTIUNI DESPRE ARDUINO

ARDUINO LEONARDO

Ce este Arduino Leonardo?

ARDUINO este una dintre cele mai simple de utilizat platforme cu microcontroller.

Te poți gândi la el ca la un minicalculator (are puterea de calcul a unui computer obișnuit de acum 15 ani), fiind capabil să culeagă informații din mediu și să reacționeze la acestea.

ARDUINO Leonardo este o platform ce se bazează pe un microcontroller ATmega32. Acesta conține 20 pini digitali I/O, 12 intrări analogice, un oscilator de 16Mhz, un conector microUSB, un jack de alimentare și un buton de reset.

“Leonardo” reprezintă familia platformei ARDUINO.

Specificații tehnice:

Microcontroller: ATmega32u4

Operating Voltage: 5V

Input Voltage (recommended): 7-12V

Input Voltage (limits): 6-20V

Digital I/O Pins: 20 (of which 7 provide PWM output)

Analog Input Pins: 12

DC Current per I/O Pin: 40 mA

DC Current for 3.3V Pin: 50 mA

Flash Memory 32 KB of which 4 KB used by bootloade

SRAM 2,5 KB

EEPROM 1 KB

Clock Speed 16 MHz

Alimentare :

ARDUINO Leonardo poate fi alimentat prin intermediul conexiunii microUSB, cu ajutorul unui adaptor AC/DC sau cu ajutorul unei baterii( 12 V).

Placa poate opera în parametrii normali daca este alimentata în intervalul de 7-12 V, în afara intervalului placa devine instabilă, putandu-se ajunge chiar la distrugerea acesteia

Pinii de alimnetare sunt : Vin, 5V, 3v3, GND.

Memorie:

ATmega32 are 32KB de memorie flash pentru stocare de coduri. Are de asemenea 2,5KB de memorie SRAM și 1KB de memorie EEPROM (ce poate fi citită sau scrisă cu ajutorul bibliotecii EEPROM library).

Input / Output:

Fiecare dintre cei 20 pini digitali pot fi folosiți ca intrări sau ieșiri, utilizand comenzile : pinMode(), digitalWrite() și digitalRead(). Pinii functionează la tensiune de 5V și pot da sau primi un current de maxim 40mA

Unii pini au funcții speciale :

– 0(Rx) și 1(Tx) care ajută transmiterea datelor seriale

– 0,1,2, 3și 7 sunt pini ce pot fi configurați să introducă întreruperi

– TWI: 2 (SDA) și 3 (SCL), suportă comunicația TWI cu ajutorul bibliotecii de fire (Wire library )

– SPI: acest tip de comunicație nu este suportat de Leonardo nativ, este nevoie de o componentă de tip „shield” pentru a folosi acest tip de comunicație.

Arduino Leonardo are 20 intrări analogice, fiecare oferind o rezolutie de 10 biți. Pinii 2(SDA) și 3(SCL) suportă conexiunea I2C(TWI) folosind biblioteca Wire library.

Transfer de date:

Arduino Leonardo poate comunica cu un computer, cu alte platforme Arduino cât și cu alte microcontrolere. ATmega32 vine cu o platform de comunicare seriala UART TTl(5V) ce este diponibilă pe pinii 0(Rx) și 1(Tx)

Softul Arduino permite transmisia de date de pe acesta platformă către un alt dispoztiv cu ajutorul conectorului microUSB, fiecare transfer este semnalat cu ajutorul unui LED.

Arduino Leonardo diferă de toate celelalte platforme Arduino deoarece are înglobat într-un singur cip capabilitatea de comunicare USB, dandu-i lui Leonardo posibilitatea de a aparea pentru PC ca și cum ar fi un dispozitiv de tip Mouse sau Keyboard, folosind comunicația de tip Connected Device Class (CDC) .

ATmega32 suportă și comunicații de tip I2C și SPI

Programare:

Arduino UNO poate fi programat cu ajutorul unui soft dedicat. ATmega32 vine cu un bootloader ce permite utilizatorului să introducă secvențe de cod fără a folosi alte dsipozitive externe, comunicarea se face cu ajutorul protocolului STK500. De asemenea se poate programa controlerul cu ajutorul ICSP (În-Circuit Serial Programming).

În jurul lui Arduino exista un ecosistem de dispositive extrem de bine dezvoltat. Orice fel de informație ți-ai dori sa culegi din mediu, orice fel de conexiuni cu alte sisteme ai avea nevoie, exista o șansă foarte mare să găsești un dispozitiv pentru Arduino capabil să îți ofere ceea ce ai nevoie.

Astfel, dacă discutăm despre preluarea de informații din mediu, mai jos sunt doar cateva exemple de senzori: senzori ce determină nivelul de alcool în aerul respirat, senzor de incediu,

gaz GPL, monoxid de carbon, accelerații ale dispozitivelor în mișcare, curent consumat de diverse dispozitive casnice, forța de apăsare, gradul de rotire, distanțe, nivel de iluminare, direcția nordului, prezența umană, sunet, temperatură, umiditate, presiune atmosferică.

Daca ne referim la posibilitatea de a ne conecta cu alte sisteme, există plăci de rețea Ethernet pentru Arduino capabile să comunice informații prin Internet, dispozitive capabile să transmită date prin conexiune radio, plăci de retea WIFI, dispozitive GSM pentru Arduino (capabile să trimită / receptioneze SMS-uri, să inițieze apeluri de voce sau să trimită date prin rețeaua 3G) sau conectori Bluetooth pentru conectarea Arduino cu telefonul mobil sau laptop.

În zona mecanică, există motoare de curent continuu (utilizate pentru robotică), motoare pas cu pas (utilizate de obicei în zona industrială) sau servomotoare, controlate foarte exact. Pentru

afișarea informațiilor preluate, există ecrane LCD pentru Arduino, începând cu cele mai simple (LCD text cu 16 caractere) până la ecran LCD grafice.

2.4. NOTIUNI DESPRE GIROSCOP

Ce este un giroscop

Giroscopul convențional care intră în compunerea sistemelor mecanice, este un corp solid căruia i se imprimă o mișcare de rotație (în jurul unei axe de simetrie, de obicei), menținând direcția inițială a axei de rotație față de un sistem de referință inerțial, având scopul de a indica o anumită direcție (fixă în spațiu).

Giroscoapele se utilizează pentru masurarea înclinarilor, direcțiilor, vitezelor unghiulare, accelerațiilor liniare și unghiulare, cuplurilor, vibrațiilor, etc. având ca domenii de utilizare busole, piloți automați de pe nave și aeronave, mecanismele de direcție, echipamente stabilizatoare pe nave de mari dimensiuni, precum și sisteme de ghidare inerțiale.

Scurt istoric

Cel mai vechi giroscop despre care există referințe scrise a fost construit în 1817 de către Johann Bohnenberger. Pe atunci nu exista termenul de giroscop, astfel că inventatorul și-a botezat creația foarte simplu. L-a numit "Mașinăria". Matematicianul francez Pierre-Simon Laplace i-a recomandat dispozitivul în scop didactic lui Léon Foucault, creatorul mult mai celebrului pendul. Acesta l-a folosit în 1852 în cadrul unui experiment care studia rotația Pământului, ocazie cu care dispozitivul și-a căpătat și actualul nume, pe baza termenilor grecești skopeein – a vedea și gyros – cerc sau rotație.

În jurul anului 1860, motoarele electrice au transformat conceptul într-unul fezabil, ceea ce a dus la apariția primului prototip de girocompas; primul girocompas funcțional folosit în navigația maritimă a fost dezvoltat între 1905 și 1908 de către inventatorul german Hermann Anschütz-Kaempfe. Americanul Elmer Sperry a venit cu propriul design în 1910, iar alte națiuni au conștietizat și ele foarte repede importanța militară a acestei invenții – într-o epocă în care supremația militară pe mări și oceane era de o importanță deosebită – creând propriile industrii de giroscoape. Compania de giroscoape Sperry s-a extins curând în domeniul giroscoapelor pentru avioane, model urmat repede și de alți dezvoltatori.

Un giroscop convențional este alcătuit dintr-un rotor (de obicei de forma unui disc), fixat într-un cadru astfel încât să se poată roti în jurul oricăreia dintre cele trei axe (în cazul unui giroscop cu trei grade de libertate). Punctul de fixare este în principiu centrul de masă și de simetrie, adică centrul discului.

Funcționarea giroscopului se bazează pe conservarea impulsului Am ales să folosesc acest giroscop deoarece :

– Pot selecta ce axa vreau să măsor( 200/500/2000 dps )

– Pot utiliza interfețele I2C/SPI

– Datele se pot transmite pe 16 biți

– Alimentare între : 2.4V – 3.6V

– Sleep mode programabil

– Senzor de temperatură

– Funționează într-o gamă largă de tepmperaturi (-400C și +850C )

– Cod de resetare automată

– Rezistență la șocuri

– Preț convenabil un corp care se rotește în jurul propriei axe tinde să-și păstreze această axă de rotație și se va opune unui impuls perturbator cu un altul, de-a lungul unei axe perpendiculare pe axa de rotație și pe axa impulsului perturbator.

Însa tehnologia a putut fabrica un giroscop de tip electric(digital) care nu necesita un rotor, dimensiunile acestei component nu depasesc dimensiunile unei monede.

Caracteristici generale ale unui giroscop digital:

Gama: gama de valori pe care un dispozitiv este capabil să o măsoare. Evident că un accelerometru 24g nu te-ar ajuta foarte mult să măsori mișcările unui corp omenesc, dar nici cu un accelerometru 1g nu poți măsura de exemplu lansarea unei rachete, deci gama se măsoară în “g” sau multiplii ai acestuia. Gama unui giroscop ce măsoară accelerații rotaționale, are ca unitate de măsura “grade” sau “rotații/minut”

Interfata: este metoda prin care se trimit și se receptionează date între un controller și un dispozitiv. Există mai multe standarde disponibile pe piață, fiecare cu avantajele și dezavantajele sale. Semnalele analogice sunt ușor de citit și se pot măsura ușor de către un microcontroller cu ajutorul unor simple linii de cod. Comunicația serială, în cazul giroscopului este UART și necesită mai multă procesare, însa este capabilă să transporte mai multă informație fată de semnalele analogice. Comunicația serială sau I2C este folosită în cazul în care avem mai multe axe ce trebuiesc citite de către controller. I2C este o interfata serială formată din doua fire ce permite dispozitivelor să împartă aceeași memorie BUS, deci permite dispozivitvelor să comunice între ele, și ea este o interfață obișnuită pentru microcontrolere.

Axe: acestea se referă la numărul de direcții pe care accelerometrul le poate măsura. Accelerometrele măsoară accelerația dea lungul unei axe în vreme ce giroscoapele măsoara deviația fata de axe.

Puterea consumata: reprezinta puterea consumata de dispozitiv pentru a realiza diferite cerinte, sistemul trebuie sa asigure cel putin valaorea minima necesara dispozitivului sa funcționeze în parametri normali. Mute dispositive au moduri economice de functionare pentru a consuma mai puțin atunci când nu este neceră îndeplinirea unei sarcini.

Giroscopul : L3G4200D

L3G4200D este un giroscop triaxial digital, cu tensiune de alimentare între 2.4V-3.6V. Acesta comunică serial prin SPI/I2C. Include microsenzori și o interfață cu circuite integrate capabile să măsoare rata unghiulară și să o afișeze printr-o interfață digitală ( I2C/SPI). Microsenzorii sunt fabricați de STMicroelectronics și sunt de fapt senzori inerțiali. Interfața IC este fabricată folosind tehnologia CMOS, aceasta permițând integrarea unui numar mare de componente pe o suprafață restrânsă.

L3G4200D este integrat pe o grila de plastic (LGA = land grid array), dispozivitul fiind functional între -400C și +850C.

Specificații:

Scala variabilă: (250/500/2000 grade/s)

Interfața : I2C/SPI

Ieșire :16 bit

Senzor de temperatură :8 bit

Tensiune de alimentare 2.4-3.6V

Sleep mode

Rezistent la șocuri

Diagrama bloc și descrierea pinilor

a) Diagrama bloc

b) Descrierea pinilor

Caracteristici mecanice

Caracteristici electrice

Caracteristici termice

CS activează portul serial, el fiind controlat de SPI. Trece pe modul Low la începutul transmisiunii și revine pe High la finalul acesteia. SPC este portul serial ceas și este și el controlat de către SPI, rămâne setat pe High atunci când CS este pe high (nu există transmisiune). SDI și SDO reprezintă porturile de intrare respectiv de ieșire.

Operațiile de citire și scriere se se realizează în 16 tacte de ceas sau în perechi de 8 în cazul de citiri/scrieri intercalate. Durata de bit este timpul dintre doua fronturi descrescătoare ale SPC-ului. Primul bit(bit 0) începe la primul front descrescător al SPC-ului după frontul descrescător al CS-ului în timp ce ultimul bit (bit 15) începe după ultimul front descrescător al SPC-ului chiar înainte de frontal crescător al CS-ului.

Bit 0 : RW bit : Când bitul este 0, datele DI (7:0) sunt scrise pe dispozitiv. Când bitul este 1, datale DO(7:0) sunt citite de pe dispozitiv, în final SDO este setat la începutul bitului 8 .

Bit 1: MS: Când bitul este 0, adresa rămâne neschimbată în procesele de citire/scriere. Când bitul este 1, adresa este incrementată automat în procesele de citire/scriere.

Bit 2-7: AD(5:0). Aceasta este adresa registrului index

Bit 8-15: DI(7:0) (mod scriere): Acestea sunt datele ce se scriu pe dispozitiv

Bit 8-15: DO(7:0) (mod citire): Acestea sunt datele ce sunt citite de pe device

Am ales sa folosesc acest giroscop deoarece :

Pot selecta ce axa vreau să măsor (200/500/2000 dps )

Pot utiliza interfețele I2C/SPI

Datele se pot transmite pe 16 biți

Alimentare între : 2.4V – 3.6V

Sleep mode programabil

Senzor de temperatură

Funționează într-o gamă largă de tepmperaturi (-400C și +850C )

Cod de resetare automată

Rezistență la șocuri

Preț convenabil

2.5. CONECTAREA TUTUROR COMPONENTELOR

Schema electrică a montajului

Schema practică /bloc a montajului

În fugura bloc sunt ilustrate conexiunile realizate pe machet. Arduino, giroscopul și butoanele sunt montate în diferite zone ale mănușii cum ar fi pe degete și pe dosul palmei.

Schema bloc și cea electrică a circuitului este realizată cu programul “Fritzing”. Aceasta este o aplicație de tip open-source, se poate descărca gratis de pe site-ul oficial „http://www.fritzing.org” și pe care oricine o poate îmbunătăți. Aplicația a fost dezvoltată pentru a putea fi utilizată în proiecte ce folosesc plăci de dezvoltare din familia Arduino. Fritzing are o bază de date ce conține componente din foarte multe categorii: senzori, componente electronice pasive, microcontrolere, plăci de expansiune GPS/GSM și multe altele.

2.6. FUNCTIONAREA SISTEMULUI

Diagrama functionala

Faza de inițializare a microcontrolerului ATmega32u4 se realizează prin conectarea plăcii Arduino Leonardo la sistemul de calcul cu ajutorul unui cablu microUSB. După ce are loc conectearea , cu ajutorul softului dedicat familiei de plăci Arduino , se scrie un cod ce poate fi uploadat direct pe microcontroler pentru a deservi un anume scop, în cazul nostru, codul trebuie să conțina instrucțiuni de citire și afișare de date provenite de la giroscop și butoane (rotații unghiulare și stării High – LOW ). Tot în partea de cod trebuie să se inițializeze regiștrii giroscopului , modul de trimitere serială a datelor ( I2C ) către sistemul de calcul, cât și funcțiile de inițializare ale butoaneler (citirea valorilor acestora). Inițializarea giroscopului L3G4200D se face prin conectarea acestuia la plăcuța Arduino Leonardo, astfel alimentarea giroscopului, Vcc-ul, se va conecta la pinul de 3.3V de pe plăcuța Arduino, CS ce reprezintă semnalul de activare a comunicației seriale, se va conecta și el la 3.3V, semnalele de clock, data SCL și SDA se vor conecta la pinii SCL și SDA de pe plăcuța Arduino și nu în cele din urma , GND-ul se va conecta la GND-ul de pe Arduino.

Comunicația serială cu calculatorul se realizează dupa ce se conectează plăcuța Arduino Leonardo la calculator prin intermediul USB-ului. Arduino Leonardo are functii prestabilite de dispozitiv USB implementate direct pe cip, astfel, după conectarea ascestuia la calculator prin USB, calculatorul va căuta să instaleze un driver, ce este de fapt o instanță a comunicației seriale (CDC = Connected Device Class ) iar dupa instalarea driverului, plăcuța Leonardo va fi vazută ca și un dispozitiv periferic conectat la portul USB al mediului de calcul.

Citirea axelor de la giroscop se face cu ajutorul instrucțiunilor de cod uploadate pe cipul ATmega 32u4. În cod se definesc 3 variabile corespunzătoare celor 3 axe de rotație ale giroscopului. Astfel ele sunt initializate cu valoarea 0 și orice miscare este o rotație unghiulară, și se va citi și afișa în consola monitor.

Dupa ce se citesc valorile corespunzatoare axelor x y z, se incepe deplasarea în direcția în care avem valori: X = + – valoare , y = + – valoarea , z= + – valoare. Se calculează distanța față de 0 și se începe deplasarea cursorului pe ecran. Deplasarea ține cont de pixeli, dacă avem un numar mare comparativ cu 0 atunci cursorul va „sări” multi pixeli în direcția rotației , daca valarea citită e una apropiata de 0 , atunci mișcarea va fi una cursivă.

Tot în codul sursă avem și algoritmul de citire a instanțelor în care se afla butoanele. High dacă butonul este apăsat (această stare permite implementarea procesul de „drug and drop”, sau de selecție multiplă), și LOW dacă butonul nu este apăsat, instanța LOW a fost evitată în acest program datorită funcției „if else” .

Datele sunt preluate de microcontroler și transmise mai departe către calculator prin internediul conexiunii seriale, iar ciclul se repetă până când semnalul de la unul din dispozitive este inexistent sau se intrerupe voit .

3. CONCLUZIILE PROIECTULUI

Lucrearea de față își propune realizarea unei variante de mouse kinect ce se bazează pe mișcarea mâinii utilizatorului. Scopul acestuia este proiectarea noii generații de mouse care se remarcă prin faptul că este foarte ușor de folosit și distractiv de utilizat.

În urma realizării acestui proiect mi-am dezvoltat cunoștințele de programare deoarece tot sistemul se bazează pe monitorizarea și acționarea unor componente cum ar fi cei doi senzori tactili cât și transmisia datelor recepționate de la giroscop către Arduino, totul cu ajutorul unui program software. De asemenea mi-am îmbogățit cunoștințele despre Arduino și modalitatea prin care acesta poate interacționa cu alte componente, pentru a crea aplicații mai complexe.

În realizarea proiectului am întâmpinat mai multe dificultăți, atât în programarea sistemului, cât și în realizarea practică a machetei, dar am reușit în cele din urmă să obțin ceea ce mi-am propus. Un prim obstacol a fost programarea giroscopului L3G4200, deoarece a necesitat o profunda studiere a registrelor sale, în special a celor ce setează modul de comunicare serial . O altă problema a constiuit-o programarea placuței de dezvoltare Arduino. La inceput de proiect am folosit ca placuță de dezvoltare Arduino UNO însă nu am reușit să o programez pentru a putea fi văzută de către calculator ca și un dispozitiv USB. Producătorii placuței Arduino aveau ca soluție crearea unui mediu virtual de dezvolatare pe o mașinărie ce rulează ca system de operare LINUX și în acel mediu să pot instala anumite drivere pentru a da posibilitate sistemului să-mi recunoscă placuța Arduino ca mouse. Am încercat să fac acest lucruru însa nu am reusit.

Cautand soluția pentru acestă problemă am descoperit pe saitul producatorului de plăci Arduino faptul că modelul Leonardo are implementat în cipul sau o instanță de comunicare USB, ce este ușor detectată de un sistem de calcul ce ruleaza Windows, așa că am optat să folosesc acest model în vederea realizării proiectului. În cazul giroscopului, am ales modelul L3G4200D, deoarece era cel mai stabil în testele realizate de diverse companii și era și cel mai raspândidt de pe piața românească. Acest model are foarte multe foi de catalog, fiindu-mi mult mai ușor să caut și să găsesc tot ce aveam nevoie să știu pentru a-l putea folosi împreună cu o placuță Arduino.

Acest proiect se poate îmbunătății schimbând codul sursă de pe microcontrolerul Arduino pentru a nu mai avea acele “spike-uri” când giroscopul înregistrează valori foarte mari. O mediere a valorilor înregistrate de Leonardo ar fluidiza mișcarea mousului pe ecranul calculatorului. De asemenea se pot adauga mai mulți senzori tactili, pentru a le da diferite atrbuțiuni, de exemplu un senzor cu atribuție de “scrool “ ar putea fi implementat în proiect – poate fi un senzor de presiune – cum își deplasează utilizatorul degetul pe el, așa să deruleze într-o anumită aplicație .

Un astfel de sistem kinect este inovativ, ușor de folosit de orice persoană și poate fi foarte util persoanelor cu diferite dizabilități.

Bibliografie

[1] Jacob, F., Handbook of modern sensors, Editura Springer, Ediția a 4-a, New York, 2010

[2] http://dlnmh9ip6v2uc.cloudfront.net/datasheets/Sensors/Gyros/3-Axis/L3G4200D-Breakout-v10.pdf

[3] Ion, B., Compendiu de fizică, Editura Științifică și Enciclopedică, București, 1988

[4] Ș.l. Rodica, C., Curs microcontrolere – anul 2, București, ETTI

[5] http://www.roroid.ro/comunicarea-i2c.html

[6] Arduino pentru începători, Editura robofun.ro, 2012

[7] Glenn Turner „ Gyroscopes – An Introduction for Students, Engineers and Pilots”, New York 2012

[8] Massimo Banzi „Getting Started with Arduino„ , O`Reilly , 2011

[9] Dan Nicula „Electronică digitală – Vol. I, Vol. II, Editura Tehnică, 2005

[10] Ioan Rusu „ Metode numerice în electronică cu splicații în limbaj C”, Editura Matrix Rom, 2009

[11] Doru Suciu „Electronică de putere. Principii și aplicații”, Editura Matrix Rom, 2009

[12] M. Drăgulinescu, A. Manea „Materiale pentru electronică”, Editura Matrix Rom, 2009

[13] Sever Pașca, Niculae Tomescu, Istvan Svtojanov, „Electronică analogică și digitală”, Vol. I, Vol. II, Vol. III, Editura Albastră, 2008

[14] Cristian Pârvu „Note de aplicație – electronică digitală”, Editura Albastră, 2005

[15] Aurelian Chivu, Florin Mareș, Dragoș Cosma, Doina Dick „Electronică – tehnologii și măsurări”, Editura CD prest, 2007

Anexa 1

Program principal mouse “mouse_v2.ino”

#include <Wire.h>

#define CTRL_REG1 0x20

#define CTRL_REG2 0x21

#define CTRL_REG3 0x22

#define CTRL_REG4 0x23

int Addr = 105; // I2C address of gyro

int x, y, z;

//up-down Y: + for forward, – for back

//left-rigth X: – for right, + for left

int range = 1; // speed

int responseDelay = 1; // response delay of the mouse, in ms

int upState = 0;

int downState = 0;

int rightState = 0;

int leftState = 0;

int mouseLeftBtn = 5;

int mouseRigthBtn = 6;

void setup(){

Wire.begin();

Serial.begin(9600);

writeI2C(CTRL_REG1, 0x1F); // Turn on all axes, disable power down

writeI2C(CTRL_REG3, 0x08); // Enable control ready signal

writeI2C(CTRL_REG4, 0x80); // Set scale (500 deg/sec)

delay(100); // Wait to synchronize

pinMode(mouseLeftBtn, INPUT);

pinMode(mouseRigthBtn, INPUT);

Mouse.begin();

}

void loop(){

getGyroValues(); // Get new values

int xDistance = x * range;

int yDistance = y;

// diferite de zero

if ((xDistance != 0) || (yDistance != 0)) {

Mouse.move(xDistance, yDistance, 0);

Anexa 1

}

int leftClickState = digitalRead(mouseLeftBtn);

int rigthClickState = digitalRead(mouseRigthBtn);

if (leftClickState == HIGH) {

// if the mouse is not pressed, press it:

if (!Mouse.isPressed(MOUSE_LEFT)) {

Mouse.press(MOUSE_LEFT);

Serial.println(„Click stanga”);

}

} else {// else the mouse button is not pressed:

if (Mouse.isPressed(MOUSE_LEFT)) {

Mouse.release(MOUSE_LEFT);

}

}

if (rigthClickState == HIGH) {

Mouse.click(MOUSE_RIGHT);

Serial.println(„Click dreapta”);

} else {// else the mouse button is not pressed:

if (Mouse.isPressed(MOUSE_RIGHT)) {

Mouse.click(MOUSE_RIGHT);

}

}

// Serial.print(„X:”);

// Serial.print(x);

// Serial.print(„ || Y:”);

// Serial.println(y);

// Serial.print(„ Raw Z:”);

// Serial.println(z / 114);

// delay(100); // Short delay for Serial Monitor

delay(responseDelay); // short delay for usage

}

void getGyroValues () {

byte MSB, LSB;

MSB = readI2C(0x29);

LSB = readI2C(0x28);

x = ((MSB << 8) | LSB);

x = x / 450;

MSB = readI2C(0x2B);

LSB = readI2C(0x2A);

y = ((MSB << 8) | LSB);

y = y / 114;

Anexa 1

// MSB = readI2C(0x2D);

// LSB = readI2C(0x2C);

// z = ((MSB << 8) | LSB);

}

int readI2C (byte regAddr) {

Wire.beginTransmission(Addr);

Wire.write(regAddr); // Register address to read

Wire.endTransmission(); // Terminate request

Wire.requestFrom(Addr, 1); // Read a byte

while(!Wire.available()) { }; // Wait for receipt

return(Wire.read()); // Get result

}

void writeI2C (byte regAddr, byte val) {

Wire.beginTransmission(Addr);

Wire.write(regAddr);

Wire.write(val);

Wire.endTransmission();

}

Anexa 2

Imagini capturate dupa ce am lipit pinii pe placuta

Anexa 2

Imagini capturate la final de proiect

Anexa 3

Bibliografie

[1] Jacob, F., Handbook of modern sensors, Editura Springer, Ediția a 4-a, New York, 2010

[2] http://dlnmh9ip6v2uc.cloudfront.net/datasheets/Sensors/Gyros/3-Axis/L3G4200D-Breakout-v10.pdf

[3] Ion, B., Compendiu de fizică, Editura Științifică și Enciclopedică, București, 1988

[4] Ș.l. Rodica, C., Curs microcontrolere – anul 2, București, ETTI

[5] http://www.roroid.ro/comunicarea-i2c.html

[6] Arduino pentru începători, Editura robofun.ro, 2012

[7] Glenn Turner „ Gyroscopes – An Introduction for Students, Engineers and Pilots”, New York 2012

[8] Massimo Banzi „Getting Started with Arduino„ , O`Reilly , 2011

[9] Dan Nicula „Electronică digitală – Vol. I, Vol. II, Editura Tehnică, 2005

[10] Ioan Rusu „ Metode numerice în electronică cu splicații în limbaj C”, Editura Matrix Rom, 2009

[11] Doru Suciu „Electronică de putere. Principii și aplicații”, Editura Matrix Rom, 2009

[12] M. Drăgulinescu, A. Manea „Materiale pentru electronică”, Editura Matrix Rom, 2009

[13] Sever Pașca, Niculae Tomescu, Istvan Svtojanov, „Electronică analogică și digitală”, Vol. I, Vol. II, Vol. III, Editura Albastră, 2008

[14] Cristian Pârvu „Note de aplicație – electronică digitală”, Editura Albastră, 2005

[15] Aurelian Chivu, Florin Mareș, Dragoș Cosma, Doina Dick „Electronică – tehnologii și măsurări”, Editura CD prest, 2007

Anexa 1

Program principal mouse “mouse_v2.ino”

#include <Wire.h>

#define CTRL_REG1 0x20

#define CTRL_REG2 0x21

#define CTRL_REG3 0x22

#define CTRL_REG4 0x23

int Addr = 105; // I2C address of gyro

int x, y, z;

//up-down Y: + for forward, – for back

//left-rigth X: – for right, + for left

int range = 1; // speed

int responseDelay = 1; // response delay of the mouse, in ms

int upState = 0;

int downState = 0;

int rightState = 0;

int leftState = 0;

int mouseLeftBtn = 5;

int mouseRigthBtn = 6;

void setup(){

Wire.begin();

Serial.begin(9600);

writeI2C(CTRL_REG1, 0x1F); // Turn on all axes, disable power down

writeI2C(CTRL_REG3, 0x08); // Enable control ready signal

writeI2C(CTRL_REG4, 0x80); // Set scale (500 deg/sec)

delay(100); // Wait to synchronize

pinMode(mouseLeftBtn, INPUT);

pinMode(mouseRigthBtn, INPUT);

Mouse.begin();

}

void loop(){

getGyroValues(); // Get new values

int xDistance = x * range;

int yDistance = y;

// diferite de zero

if ((xDistance != 0) || (yDistance != 0)) {

Mouse.move(xDistance, yDistance, 0);

Anexa 1

}

int leftClickState = digitalRead(mouseLeftBtn);

int rigthClickState = digitalRead(mouseRigthBtn);

if (leftClickState == HIGH) {

// if the mouse is not pressed, press it:

if (!Mouse.isPressed(MOUSE_LEFT)) {

Mouse.press(MOUSE_LEFT);

Serial.println(„Click stanga”);

}

} else {// else the mouse button is not pressed:

if (Mouse.isPressed(MOUSE_LEFT)) {

Mouse.release(MOUSE_LEFT);

}

}

if (rigthClickState == HIGH) {

Mouse.click(MOUSE_RIGHT);

Serial.println(„Click dreapta”);

} else {// else the mouse button is not pressed:

if (Mouse.isPressed(MOUSE_RIGHT)) {

Mouse.click(MOUSE_RIGHT);

}

}

// Serial.print(„X:”);

// Serial.print(x);

// Serial.print(„ || Y:”);

// Serial.println(y);

// Serial.print(„ Raw Z:”);

// Serial.println(z / 114);

// delay(100); // Short delay for Serial Monitor

delay(responseDelay); // short delay for usage

}

void getGyroValues () {

byte MSB, LSB;

MSB = readI2C(0x29);

LSB = readI2C(0x28);

x = ((MSB << 8) | LSB);

x = x / 450;

MSB = readI2C(0x2B);

LSB = readI2C(0x2A);

y = ((MSB << 8) | LSB);

y = y / 114;

Anexa 1

// MSB = readI2C(0x2D);

// LSB = readI2C(0x2C);

// z = ((MSB << 8) | LSB);

}

int readI2C (byte regAddr) {

Wire.beginTransmission(Addr);

Wire.write(regAddr); // Register address to read

Wire.endTransmission(); // Terminate request

Wire.requestFrom(Addr, 1); // Read a byte

while(!Wire.available()) { }; // Wait for receipt

return(Wire.read()); // Get result

}

void writeI2C (byte regAddr, byte val) {

Wire.beginTransmission(Addr);

Wire.write(regAddr);

Wire.write(val);

Wire.endTransmission();

}

Anexa 2

Imagini capturate dupa ce am lipit pinii pe placuta

Anexa 2

Imagini capturate la final de proiect

Anexa 3

Similar Posts

  • Procedee Complexe de Analiza Si Evaluare a Moleculelor de Acizi Nucleici Si Proteine

    PROCEDEE COMPLEXE DE ANALIZĂ ȘI EVALUARE A MOLECULELOR DE ACIZI NUCLEICI ȘI PROTEINE 5.1. METODE DE INVESTIGAȚIE BAZATE PE PCR (Polymerisation Chain Reaction) O dată cu dezvoltarea tehnicilor de investigație în biologia moleculară, tehnica PCR a suferit o serie de modificări, care permit lărgirea posibilităților de utilizare. În continuare vor fi prezentate cele mai importante…

  • Sanatatea Tenului

    Sanatatea tenului ne vorbeste despre rolul sanatatii intregului organism,de aceea este necesar de a duce un mod sanatos de viata, deoarece orice afectiune a pielii este o complicatie majora care necesita tratata. De asemenea, sanatatea determina si o stare psihologica,fiziologica si aspectul estetic al persoanei. Deseori consideram ca anume pigmentarea pielii nu este o problemа…

  • Determinarea Dimensiunii Tumorii Hemamgiom pe Baza Unui Centimetru Gradat (in Imagine)

    CUPRINS LISTA FIGURILOR…………………………………………………………………………………….11 LISTA ACRONIMELOR……………………………………………………………………………..13 INTRODUCERE………………………………………………………………………………………….15 1.Imagini Medicale……………………………………………………………………………………….17 Detalierea conceptului de Imagini Medicale…………………………………………..17 Clasificare Imagini…………………………………………………………………………….18 Formate de Imagini……………………………………………………………………………19 2 .Hemangiomul……………………………………………………………………………………………21 2.1 Generalitati……………………………………………………………………………………..21 2.2 Cauze………………………………………………………………………………………………21 2.3 Simptomatologie……………………………………………………………………………….22 2.4 Investigații Paraclinice ……………………………………………………………………..22 3. Spații de culoare si segmentare………………………………………………………………….24 3.1 Definirea spatiului de culoare …………………………………………………………….24 3.2 RGB………………………………………………………………………………………………26 3.3 Lab…………………………………………………………………………………………………28 3.4 HSV………………………………………………………………………………………………..29 4. Detaliera Proiectului……………………………………………………………………………………35 4.1 Mediul de lucru………………………………………………………………………………..35…

  • Curs de Puericultura

    TEMATICA DETALIATA A CURSULUI DE PUERICULTURA 1. Trimestrul III de sarcina Schimbari anatomice si fiziologice Evolutia sarcinii Igiena vietii gravidei Alimentatie Schimbari psiho-emotionale Semne de alarma 2. Despre nastere Procesul nasterii Tipuri de nasteri Semne care anunta nasterea La maternitate Pregatirea psihologica pentru nastere Primele zile ale copilului Pregatirea camerei Ingrijirea mamei Nevoile psiho-emotionale ale…

  • Studiu Clinico Statistic al Traumatismelor la Dintii Frontali

    Studiu clinico-statistic al traumatismelor la dinții frontali CUPRINS INTRODUCERE CAPITOLUL I.NOȚIUNI GENERALE I.1 Clasificarea fracturilor I.2 Clasificarea luxțiile I.3 Clasificarea leziunilor gingiei si mucoasei orale I.4 Etiologie I.5 Complicațiile traumatismelor CAPITOLUL II. Diagnosticul traumatismelor dento-parodontale II.1 Evaluare medicală II.2 Anamneza II.3 Examenul clinic obiectiv II.4 Examenul radiologic II.5 Diagosticul traumatismelor dentare CAPITOUL III.Principii terapeutice III.1…