Figura 1.1 Figură explicativă sindromul de tunel carpian 3. [305394]

Cuprins

Capitolul 1.
Introducere

În anii 1970, Xerox PARC a [anonimizat]. [anonimizat], Apple Computer au lansat Apple Lisa. Totuși, [anonimizat]. Numai după lansarea lui Apple Macintosh în 1984, mouse-ul a devenit utilizat pe scară largă. Designul Macintosh a fost influent și succesul acestuia a [anonimizat]-i includă împreună cu propriile calculatoare. Adoptarea pe scară largă a interfețelor grafice în anii 1980 și 1990 au făcut din mouse un accesoriu esențial unui calculator [1]. Logitech, [anonimizat] a vândut peste 500 [anonimizat] 20 [anonimizat] 2013 [2]. [anonimizat].

Aproape că nu ne putem imagina o [anonimizat] a devenit parte din existența noastră. Implicit, [anonimizat], element indispensabil oricărui computer[2].

Cu toate acestea utilizarea zilnică a acestuia indiferent de model (optic, tactil, mecanice, etc.) duce la probleme ale articulațiilor datorită utilizării necorespunzătoare sau pentru un timp destul de îndelungat. Una dintre cele mai întâlnite afecțiuni ale celor care lucrează la computer este sindromul de tunel carpian. [anonimizat] a [anonimizat]. Nu este singura cauză a [anonimizat], [anonimizat] a [anonimizat] o boală a mouse-ului. [3].

[anonimizat], a se observa in Figura. 1.1. De-a [anonimizat] a mâinii. [anonimizat], împiedicându-l să funcționeze corect.

Figura 1.1 Figură explicativă sindromul de tunel carpian [3].

[anonimizat] o competiție foarte mare si serioasă: laptopurile, care pot fi folosite fără mouse. În ultimii ani au apărut calculatoare și alte dispozitive moderne (de ex. telefoane mobile de tip smartphone), [anonimizat] (sau și ale tastelor sau tastaturii) sunt complet înlocuite prin proprietățile tactile ale ecranului (monitorului) atașat. [anonimizat] a [anonimizat] a [anonimizat], executând anumite mișcări pentru a declanșa diverse acțiuni [2].

Scopul principal al acestui proiect este acela de a realiza un model de mouse care permite utilizarea pentru o perioada îndelungata de timp fără a crea probleme ale articulațiilor sau din punct de vedere al sănătății utilizatorului.

Astfel ideea de a [anonimizat] o [anonimizat], prin utilizarea unui mod astfel încât atât degetele mâinii sa se afle într-o [anonimizat] a mai fi nevoie sa avem puncte de sprijin ale mâinii sau brațului utilizatorului. Astfel putem exclude utilizarea acestuia in plan orizontal pe suprafețe fixe. Ideea de utilizare a unui sistem care poate prelua toate funcțiile de mouse si a le putea utiliza printr-o simpla mișcare a degetelor care vor executa diferite utilități (click stânga, click dreapta, scroll, etc.). La realizarea modelului se renunță la anumite funcțiuni care nu prezintă importanță pentru demonstrarea funcționării modelului.

Pe lângă proiectul de bază se pot adăuga si alte elemente (transmiterea datelor prin module standard ca: wireless, bluetooth si multe altele pentru a putea utiliza sau mai bine spus executa funcții de la distanță. Modelele enumerate mai sus permit astfel o libertate mai mare a utilizatorului care nu mai necesita sa fie aproape de calculator. Astfel acest model de mouse se poate utiliza în special in cazul prezentărilor Power Point, sau de ce nu, in cazul sistemelor de proiectare, aici făcând referire la arhitecții, unde utilizarea mouse-ului este indispensabilă pentru rotire a planului de lucru sau un acces mai rapid si fiabil la sistemele 3D. Ideea de a fi folosit in domeniu arhitecturii a venit de la o cunoștință, care avea mari dureri la mână datorită faptului ca utiliza mouse-ul in poziții incorecte si pe intervale mari de timp.

Acest tip de mouse este similar cu modelul dezvoltat de cei de la Super Nintendo Entertainment System, la începutul anilor 1990. Sistemul de jocuri Super Nintendo Entertainment System a devenit prima consolă comercială de jocuri care avea un mouse SNES pe lângă controlerele sale [1].

In următoarele capitole voi explicita toți pașii realizării acestui proiect. Astfel in Capitolul 2 o sa observăm evoluția mouse-urilor si principiile de funcționare. Tot in acest capitol componentele necesare realizării acestui proiect, urmând ca in Capitolul 3 să discutăm despre structura hardware si software a proiectului Arduino Glove Mouse, adică partea practică. In capitolul următor, mai exact Capitolul 4, vom avea concluziile la care am ajuns după realizarea acestei lucrări.

Capitolul 2.
Principiile de funcționare ale mouse-ului si legătura acestuia cu calculatorul

Principalele elemente care vor fi specificate in acest capitol sunt clasificările mouse-urilor, legătura acestuia cu calculatorul sau sistemul de comanda, urmând apoi sa facem o identificare a funcțiilor oferite de mouse si principiile pe care funcționează acestea. Aceste elemente sunt necesare pentru a putea identifica si definii funcțiile necesare pentru sistemul nou implementat.

Mouse-ul este unul dintre cele mai importante dispozitive periferice de introdus comenzi ale computerului (calculatorului electronic) modern. A devenit aproape un "element" hardware standard al oricărui computer. De obicei mouse-ul este un obiect mic echipat cu una sau mai multe taste, modelat astfel încât să poată fi apucat și mânuit ușor cu mâna. Principiul lui de funcționare se bazează pe recunoașterea de către computer a mișcării sale relativă la suprafața plană pe care este așezat și deplasat[1].

Mișcarea mouse-ului este detectată de un senzor situat în partea sa inferioară, preluată, digitalizată și apoi printr-o interfață adecvată transmisă computerului la care e atașat. Informația de mișcare a mouse-ului în spațiul bidimensional (2D) este convertită tot în mișcare bidimensională (2D) a unui cursor identificator-indicator grafic pe ecranul unui monitor. Altfel spus, mișcarea mausului provoacă o mișcare corespunzătoare a cursorului pe suprafața ecranului monitorului, atașat și el calculatorului. Datorită acestei funcțiuni utilizatorul mouse-ului poate decide (alege) și indica pe ecranul monitorului orice poziție dorită, ceea ce de obicei este interpretat de către computer drept o introducere de comandă, un element major al interfeței grafice cu calculatorul (Graphic User Interface, GUI). De la începutul anilor 1990 mouse-ul împreună cu tastatura și monitorul au devenit pe plan mondial una din cele mai obișnuite interfață om-mașină, prezentă aproape la orice computer [1].

2.1. Tipuri de mouse-uri si clasificarea acestora

Clasificarea mouse-urilor se poate face in funcție de mai multe criterii, după cum urmează:

– din punct de vedere al modului de conectare

– din punct de vedere al construcției

– din punct de vedere al tehnologiei

Din punct de vedere al modului de conectare la computer mouse-urile se împart in 2 categorii :

mouse-ul cu fir (cord) – conectat de computer prin fir

mouse fără fir (cordless) – conectat la computer prin infraroșii

mouse wireless – conexiunea între mouse și unitatea centrala se face prin unde radio sau infraroșii).

Din punct de vedere al construcției sau complexității funcțiilor de care facilitează produsul:

mouse cu 2 butoane – clasic

mouse cu 3 butoane (sau mai bine zis 2 butoane + scroll – scroll-ul are rol de navigare rapidă)

mouse cu funcționalitate multiplă – au așezate pe lateral alte butoane care pot avea funcționalitatea definită de utilizator.

Din punct de vedere al tehnologiei hardware:

mouse mecanic – mișcarea bilei este sesizată de senzori încorporați; necesită mouse-pad;

mouse optic – mișcarea mouse-ului este sesizată cu ajutorul unui laser, nu necesită suprafețe speciale[4].

2.2. Tipurile de conectivitate si comunicare cu calculatorul

Asemenea tuturor dispozitivelor de intrare, mouse-rile trebuie să aibă o oarecare conectivitate cu computerul pentru a putea transmite intrările. Mouse-rile tipice folosesc un cablu electric subțire, de exemplu un cablu RS-232C, IBM PS/2, ADB sau USB pentru acest scop.

Mouse-rile fără fir folosesc comunicație wireless pentru a transmite date: infraroșu, radio sau Bluetooth.

Formatul datelor transmise de mouse-rile obișnuite a variat în trecut de la un producător la altul și depinde de asemenea de interfața electrică folosită [1].

Mouse-urile pentru calculatoare compatibile IBM au devenit conectabile din ce în ce mai des prin intermediul unui conector rotund cu 6 pini. Conectorul, alocarea pinilor și formatul serial low-level este același cu cel folosit de o tastatură IBM PC PS/2. Pentru fiecare mișcare, apăsare de buton sau eliberare de buton, un mouse PS/2 trimite pe portul serial bidirecțional o secvență de 8 octeți. Mufele PS/2 sunt codificate pe culori astfel încât să nu se confunde portul PS/2 de tastatură cu cel de mouse. Portul de culoare verde este portul PS/2 pentru mouse, iar cel de culoare violet este portul PS/2 pentru tastatură [1], a se observa in Figura 2.1

Figura 2.1 Porturi de conectare PS/2 tastatură si mouse[5]

Spre deosebire de aceștia, dispozitivele mouse fără fir transmit datele prin radiații infraroșii sau radio, deși multe astfel de dispozitive de indicare sun conectate printr-un dispozitiv cu fir. Ȋn timp ce interfața electrică și formatul de transmitere a datelor prin dispozitive de indicare obișnuite a fost standardizată pe USB, ȋn trecut acestea variau ȋn funcție de diferiți producători[6].

Utilizarea mouse-ului ȋn aplicațiile DOS a devenit mai frecventă după introducerea mouse-ului Microsoft, ȋn mare parte pentru că Microsoft a oferit un standard deschis pentru comunicații ȋntre aplicații și driver-ul mouse-ului. Astfel orice aplicație scrisă pentru a folosi standardul Microsoft ar putea folosi un mouse cu driver compatibil Microsoft. O remarcă interesantă este faptul că standardul driver-ului Microsoft comunică mișcările mouse-ului ȋn unități standarde numite „mickeys” [6].

2.3. Funcțiile mouse-ului si aplicabilitatea acestora

Cel mai cunoscut dispozitiv de poziționare a cursorului este mouse-ul, un dispozitiv

de dimensiuni reduse care se poate ține în mână și care se mișcă pe o suprafață plană.

Mouse-urile sunt într-o mare măsură cele mai rapide dispozitive de poziționare. Mouse-urile mecanice sunt cele mai ieftine, dar au probleme legate de coeficientul de fiabilitate în exploatare, când bila începe să acumuleze impurități de pe suprafața pe care rulează (aceste mouse-uri mecanice folosesc în general senzori optici pentru a determina mișcarea bilei, astfel încât ei sunt adevărați hibrizi ai dispozitivelor optico-mecanice). Pe lângă aceasta, uneori bila alunecă, ceea ce cauzează lipsa mișcării [7], a se observa in Figura 2.2 .

Figura 2.2 Mecanismul unui mouse opto-mecanic [7]

Mouse-urile optice rezolvă aceste inconveniente prin folosirea unor fotosenzori care citesc semnalele de pe un suport hașurat. Au fost dezvoltate o mare varietate de tehnici inovatoare pentru mouse-uri. Toate aceste tehnici necesită o suprafață specială pe care trebuie să ruleze mouse-ul. Se folosește o suprafață reflectoare care conține trasate pe ea linii de două culori: o culoare pe orizontală și una pe verticală. Mouse-ul conține o sursă de lumină și doi senzori, câte unul pentru fiecare culoare. În acest mod fiecare senzor produce un impuls de fiecare dată când linia adecvată este traversată. Mouse-urile optice mai noi nu au nevoie de astfel de grile sau pad-uri speciale, deoarece senzorii lor sunt destul de sensibili pentru a detecta mișcarea, observând modelul oricărei suprafețe. Deoarece nu au părți în mișcare, mouse-urile optice nu au practic nevoie de întreținere, nu se defectează mecanic, iar mecanismul optic nu se lipește și nu alunecă.

Deseori mouse-urile mecanice aveau ieșirile sub forma unui semnal dreptunghiular. Totuși, în prezent majoritatea mouse-urilor sunt construite cu microcontrolere interne, pentru a urmări mișcarea și pentru a memora poziția X și Y. Mouse-ul este conectat cu calculatorul printr-o interfață serială standard. Poziția poate fi transmisă de fiecare dată când mouse-ul se mișcă sau numai la o cerere explicită a procesorului. De obicei, mouse-urile sunt evaluate prin rezoluția lor măsurată în impulsuri pe inch (cpi). Cele mai multe mouse-uri au o rezoluție cuprinsă între

100-200 cpi. Cu cât rezoluția este mai mare, cu atât cea mai mică mișcare obligă cursorul să se deplaseze pe o distanță stabilită, dar mai greu este să se poziționeze cursorul într-un punct exact. Rezoluția poate fi modificată de către utilizator prin software pentru a face o poziționare mai precisă prin împărțirea valorii numărătorului la scara dorită [7].

Care sunt atribuirile implicite pentru butoanele și rotița mouse-ului meu? O întrebare destul de banala la prima vedere, dar daca ne gândim mai bine nu pare așa simplu. Fiecare tip de mouse diferă in funcție de producător si așa mai departe.

Există câteva metode de intrare (introducerea datelor într-un calculator) folosind un mouse, în afară de simpla mișcarea a dispozitivului pentru a face ca și indicatorul să se miște pe ecran. Un clic de mouse reprezintă acțiunea de a apăsa un buton al mouse-lui cu scopul de a declanșa o acțiune, de obicei, în contextul unei interfețe utilizator grafice (GUI), de exemplu la un joc video pentru a trage cu arma într-un first-person shooter. Zgomotul caracteristic se datorează tehnologiei cu comutatoare folosită aproape universal în mausurile pentru calculatoare. Acest comutator se numește în engleză microswitch sau cherry switch și folosește o fâșie de metal tare, dar flexibilă, care este îndoită pentru a acționa comutatorul. Îndoirea metalului face zgomotul caracteristic mouse-ului[1].

Caracteristicile generale ale funcțiilor executate de butoanele mouse-ului sunt trecute in Tabelul 2.3 mai jos, si acestea sunt cele care se vor aplica si proiectului nostru.

Tabelul 2.1 Atribuirile implicite pentru butoanele și rotița mouse-ului [8]

2.4. Elementele componente utilizate in realizarea proiectului

Cu toate ca avem o gama larga de conectivitate, complexitate a tipurilor de mouse dezvoltate pana in prezent, modelul Arduino Glove Mouse nu se regăsește printre aceste categorii, poate parțial daca vorbim de modul de conectare, unde se poate adapta orice mod de conectare.

Proiectul se bazează pe capacitatea plăcii Arduino Pro Micro de a se comporta ca un mouse, prin combinarea acestuia cu un accelerometru pe 3 axe cu ajutorul cărora vom obține mișcările mouse-ului, iar pentru executarea funcțiilor vom folosii senzori flex. Astfel vom evita probleme generate din lipsa planului pentru mișcarea mouse-ului la coordonatele necesare si pentru executarea funcțiilor.

Înainte de proiectarea sistemului atât din punct de vedere hardware cât si software trebuie sa cunoaștem fiecare element din componența proiectului atât din punct de vedere al arhitecturii cât si din punct de vedere al utilizării.

2.4.1 Arduino Pro Micro

Pro Micro este similar cu Pro Mini, cu excepția unui ATmega32U4 la bord a se observa in Figura 2.3 . Receptorul USB din 32U4 ne permite să adăugăm conectivitate USB la bord și să eliminăm interfața USB externă.

Figura 2.3 Placă de dezvoltare Arduino Pro Micro – 5V/16Mhz[9]

Caracteristici:

ATmega32U4 funcționând la 5V / 16MHz

Suportat sub Arduino IDE v1.0.1

Conector micro-USB la bord pentru programare

4 pini ADC de 4 biți

12 x I / Os digital (5 sunt capabile de PWM)

Rx și Tx Conexiuni Serial Hardware

Cel mai mic tablou compatibil cu Arduino! [10]

Această placă mică are toate trucurile de Arduino cu care sunteți familiarizat: 4 canale ADC pe 10 biți, 5 pini PWM, 12 DIO, precum și conexiunile hardware Rx și Tx. Rulează la 16MHz și 5V, această placă vă va reaminti cu siguranța de multe alte placi compatibile cu Arduino, dar acest mic tip poate merge aproape oriunde. Există un regulator de tensiune la bord, astfel încât să poată accepta tensiunea de până la 12VDC.

Toate intrările / ieșirile de la Arduino Pro Micro și pinii de putere sunt difuzate în două plăcuțe paralele. Unii pini sunt pentru intrare sau ieșire de putere. Mai mult, pinii I / O pot avea abilități speciale, cum ar fi intrarea analogică. Iată o hartă a pinilor și ce funcții hardware speciale pot avea după cum este specificat in Figura 2.4.

Figura 2.4 Arduino Pro Micro Pinouts [11]

2.4.2 Senzor Flex

Acest senzor flexibili (Figura 2.5 ) este un rezistor variabil ca nici un alt. Rezistența senzorului crește pe măsură ce corpul componentei se îndoaie. Senzorii de genul acesta a fost utilizat pentru realizarea mănușii Nintendo Power Glove.

Figura 2.4 Senzor flex [12]

O parte a senzorului este imprimată cu o cerneală polimerică care are particule conductoare înglobate în ea. Când senzorul este drept, particulele dau cerneală o rezistență de aproximativ 30k Ohm. Atunci când senzorul este îndoit de cerneală, particulele conductive se deplasează mai departe, mărind această rezistență (la aproximativ 50k-70k Ohmi când senzorul este îndoit la 90 °, ca în Figura 2.6 [12]

Figura 2.6 Funcționalitatea senzorului flex [12]

2.4.3 MPU-6050

Familia MPU-6000 furnizează prima soluție creata în mișcare în 6 axe, Motion Processing, care elimină nealinierea dintre giroscop / accelerometru și axa transversală asociată cu soluții discrete. Dispozitivele combină un giroscop cu 3 axe și un accelerometru cu 3 axe pe aceeași matriță de siliciu, împreună cu un Digital Motion Processor (DMP) de la bord capabil să proceseze algoritmi Motion Fusion cu 9 axe complexe [23].

Algoritmii Motion Fusion integrați cu 9 axe au acces la magnetometre externe sau la alți senzori suplimentari printr-o magistrală I2C master auxiliar, permițând dispozitivelor să colecteze un set complet de date senzor fără a fi nevoie intervenția procesorului de sistem. Pentru urmărirea precisă atât a mișcărilor rapide, cât și a mișcărilor lente, piesele au o giroscopie programabilă de utilizator, cu o scală completă [13].

MPU-6050 (Figura 2.7) suportă comunicații I2C de până la 400kHz și are un pin VLOGIC care definește nivelurile de tensiune ale interfeței; Caracteristicile suplimentare includ un senzor de temperatură încorporat și un oscilator pe cip cu o variație de ± 1% în intervalul temperaturii de funcționare.

Figura 2.7 MPU-6050

Specificații [14]:

Tensiune de alimentare: 3.3V – 5V (regulator LDO inclus);

Tensiune magistrală I2C: 3.3V (MAX);

Curent: 5mA;

Range programabil giroscop: ±250, ±500, ±1000, ±2000 o/s;

Range programabil accelerometru: ±2g, ±4g, ±8g, ±16g;

Interval măsurare temperatură: -40oC – +85oC;

Frecvență maximă I2C: 400kHz

Dimensiuni: 20 * 15 * 1,6 mm.

Voi încerca să acoperim câteva subiecte de bază dar importante în acest capitol:

– ce înseamnă o măsură a accelerometrului;

– ce face un giroscop;

– cum să convertiți citirile analogice-digitale (ADC) pe care le obțineți de la aceste senzori la unități fizice (cele ar fi g pentru accelerometru, deg / s pentru giroscop );

– cum să combinați citirile accelerometrului și giroscopului pentru a obține informații exacte despre înclinarea dispozitivului față de planul de masă.

Accelerometrul. Pentru a înțelege această unitate, vom începe cu accelerometrul. Când ne gândim la accelerometre, este adesea util să imaginăm o cutie în formă de cub cu o bilă în interiorul acesteia. Îți poți imagina altceva ca o sfera sau o gogoașă, dar îmi imaginez o minge[16], la fel ca in Figura 2.8 următoare:

Figura 2.8 Accelerometru in mediu câmpuri cu gravitație 0

Dacă luăm această cutie într-un loc fără câmpuri de gravitație sau dacă nu există alte câmpuri care ar putea afecta poziția mingii, aceasta va pluti pur și simplu în mijlocul cutiei. Vă puteți imagina că cutia se află în spațiul exterior departe de orice corp cosmic sau dacă un astfel de loc este greu să găsești cel puțin o ambarcațiune spațială care orbitează în jurul planetei unde totul este în stare fără greutate. Din imaginea de mai sus puteți vedea că atribuim fiecărei axe o pereche de pereți (am îndepărtat peretele Y+, astfel încât să putem privi în interiorul casetei).

Imaginați-vă că fiecare perete este sensibil la presiune. Dacă mișcăm dintr-o dată cutia spre stânga (o accelerăm cu o accelerație de 1g = 9,8m / s ^ 2), bila va lovi peretele X-. Apoi măsuram forța de presiune pe care mingea o aplică pe perete și scoate o valoare de -1g pe axa X [16], la fel ca in Figura 2.9.

Figura 2.9 Efect mișcare stânga accelerometru

Rețineți că accelerometrul va detecta de fapt o forță direcționată în direcția opusă vectorului de accelerație. Această forță este adesea numită Forță Inerțială sau Forță Fictivă. Un lucru pe care ar trebui să-l însușiți este că un accelerometru măsoară accelerația indirect printr-o forță care se aplică unui zid al său (conform modelului nostru ar putea fi un izvor sau altceva în accelerometrele din viața reală). Această forță poate fi cauzată de accelerație, dar după cum vom vedea în exemplul următor, aceasta nu este întotdeauna cauzată de accelerare[16].

Dacă luăm modelul nostru și îl punem pe Pământ, mingea va cădea pe peretele Z- și va aplica o forță de 1g pe peretele de jos, așa cum se arată în Figura 2.10.

Figura 2.10 Efectul Forței gravitaționale la accelerometru

În acest caz caseta nu se mișcă, dar mai avem încă o citire de -1g pe axa Z. Presiunea pe care mingea a aplicat-o pe perete a fost cauzată de o forță de gravitație. Teoretic ar putea fi un tip diferit de forță – de exemplu, dacă vă imaginați că mingea noastră este metalică, plasarea unui magnet lângă cutie ar putea mișca mingea astfel încât să lovească un alt perete. Acest lucru a fost spus doar pentru a dovedi că, în esență, accelerometrul măsoară forța nu accelerația 16].

Valoarea reală a accelerometrelor triaxiale provine din faptul că pot detecta forțe inerțiale pe toate cele trei axe. Să ne întoarcem la modelul casetei noastre și să rotăm caseta la 45 de grade spre dreapta. Bilele vor atinge 2 pereți acum: Z- și X-, cum se arată în Figura2.11 de mai jos:

Figura 2.11 Efectul forței la accelerometru

Valorile de 0,71 nu sunt arbitrare, sunt de fapt o aproximare pentru rădăcina pătrata lui 1/2). Acest lucru va deveni mai clar pe măsură ce introducem modelul următor pentru accelerometru[16].

In modelul anterior am fixat forța de gravitație și ne-am rotit cutia imaginară. În ultimele 2 exemple am analizat rezultatul în 2 poziții diferite ale cutiei, în timp ce vectorul de forță a rămas constant. Acest lucru a fost util în înțelegerea modului în care accelerometrul interacționează cu forțele exterioare, este mai practic să efectuăm calcule dacă fixăm sistemul de coordonate pe axele accelerometrului și imaginăm că vectorul de forță se rotește în jurul nostru [16].

Figura 2.12 Axa de coordonate XYZ

Vă rugăm să aruncați o privire la modelul de mai sus (Figura 2.12), am păstrat culorile axelor, astfel încât să puteți face o tranziție mentală de la modelul anterior la cel nou. Imaginați-vă că fiecare axă din noul model este perpendiculară pe fețele respective ale cutiei din modelul anterior. Vectorul R este vectorul de forță pe care accelerometrul îl măsoară (ar putea fi fie forța de gravitație, fie forța inerțială din exemplele de mai sus sau o combinație a celor două). Rx, Ry, Rz sunt proiecția vectorului R pe axele X, Y, Z.

Însă ne putem folosi si de anumite funcții matematice pentru a afla rezultate. Principalele formule matematice ale unghiurilor formate (cos, arccos) folosite de accelerometru sunt următoarele[17]:

R2= Rx2 + Ry2 + Rz2 – teorema lui Pitagora in spațiu;

cos(Axr) = Rx / R, cos(Ayr) = Ry / R, cos(Azr) = Rz / R;

Axr = arccos(Rx/R), Ayr = arccos(Ry/R), Azr = arccos(Ry/R).

După un lung preambul al teoriei, ne apropiem de accelerometrele din viața reală. Valorile Rx, Ry, Rz sunt de fapt liniare legate de valorile pe care le va produce accelerometrul din viața reală și pe care le puteți utiliza pentru efectuarea calculelor diferite.

Giroscop. Folosește efectul Coriolis pentru a transforma o viteză unghiulară într-o deplasare. Forța Coriolis acționează perpendicular pe axa de rotație și pe viteza corpului în cadrul rotativ Fc = -2m Ω x v. Deplasarea induce o schimbare a capacității dintre masă și carcasă, transformând astfel intrarea ratei unghiulare în giroscop într-o ieșire electrică[17].

Fiecare giroscop măsoară rotația în jurul unei axe:

Axz – este unghiul dintre Rxz (proiecția planului R pe planul XZ) și axa Z

Ayz – este unghiul dintre Ryz (proiecția lui R pe planul YZ) și axa Z

Giroscoapele măsoară rata de schimbare a acestor unghiuri, iar pentru o imagine de ansamblu mai buna urmăriți Figura 2.13.

Figura 2.13 Unghiurile de rotație ale giroscopului

Calculul rotație dat de accelerometru:

Tan(Axz) = Rx/Rz => Axz = arctan2(Rx,Rz).

Calculul rotației dat de giroscop:

Axz(n-1) = atan2( RxEst(n-1) , RzEst(n-1) );

Axz(n) = Axz(n-1) + RateAxz(n) * T, T – constanta de timp.

Relația accelerometru si giroscop. Un accelerometru măsoară forța inerțială, cum ar fi gravitatea (și, în mod ideal, numai gravitația), dar poate fi cauzată și de accelerația (mișcarea) dispozitivului. Chiar dacă accelerometrul este relativ stabil, este foarte sensibil la vibrații și zgomot mecanic.

Un giroscop este mai puțin sensibil la mișcările mecanice liniare, tipul de zgomot de care suferă accelerometrul. Giroscoapele au alte tipuri de probleme, cum ar fi driftul (nu se întoarce la valoarea ratei zero atunci când rotația se oprește).

Medierea datelor provenite de la accelerometre și giroscoape poate produce o estimare mai bună a orientării decât cea obținută utilizând numai datele accelerometru.

Combinarea celor 2 funcții este evidențiată in Figura 2.14.

Figura 2.14 Combinarea giroscopului si accelerometrului

Informațiile sunt trimise la unitatea de prelucrare prin serial I2C după cum este specificat

in figura 2.15.

Figura 2.15 Comunicare I2C

2.5 Comentarii privind sistemul analizat

După analiza sistemului s-a ajuns la concluzia că pentru a face o modelare completa trebuie sa avem in discuție următoarele puncte:

Sistemul realizat trebuie sa fie într-o structura mobila. Astfel modelul nu necesita elemente suplimentare de transport.

Sistemul realizat trebuie sa fie compatibil cu orice sistem de comunicare pe USB, iar in cazuri speciale acesta sa conțină driver-ul necesar instalării acestui. Sistemul realizat in acest proiect nu necesita alte instalări software pentru compatibilitatea cu calculatorul.

Sistemul realizat trebuie sa execute funcțiile mouse-ului principale: clic stânga, clic dreapta si scroll. Totuși aceste funcții trebuie sa permită o precizie foarte buna.

Sistemul realizat trebuie sa poate fi utilizat de orice persoana. In cazul acestui proiect nu se va crea un sistem adaptabil la orice tip de utilizator. Pentru a crea o mânușă pentru montarea elementelor proiectului care sa poate fi adaptata la orice utilizator nu se va lua in calcul.

Având aceste condiții stabilite, modelul care se va implementa trebuie sa îndeplinească cele 3 funcții enumerate mai sus, iar la acestea se pot adăuga funcții auxiliare derivate din acestea.

Selectarea componentelor si definirea codului s-au bazat pe 2 proiecte deja existente, unul dintre acesta fiind realizat de Martin Millmore [24], si de un utilizator al site-ului „Instructable”, având user-ul: Gabry295[26]. Aceștia au realizat un proiect in care puteai sa îți controlezi mișcările mouse-ului si anumite funcții prin mișcări generate de un accelerometru si giroscop.

Acesta era legat de cap si prin conectare cu Arduino interpreta mișcarea capului in modificarea poziție cursorului mouse-ului. Aceasta funcție era aplicata in cazul lor pentru o îmbunătățire la nivel de utilizare in aplicații de gaming pentru o performanta mai buna sau in cazul utilizării persoanelor cu dezabilitați.

Realizarea acestui proiect este din punct de vederii al funcționalității acestuia pentru a putea crea un sistem mai ușor de utilizat, adaptabil oricărui mediu de utilizare, astfel pe viitor mouse-ul actual poate fii înlocuit de un sistem de acest principiu.

Capitolul 3.
Proiectarea sistemului Arduino Glove Mouse

O mănușă cu fir (denumită și "dataglove" sau "cyberglove") este un dispozitiv de intrare pentru interacțiunea om-calculator purtată ca o mănușă.

Diverse tehnologii senzor sunt utilizate pentru a capta date fizice, cum ar fi îndoirea degetelor. Adesea, un dispozitiv de urmărire a mișcării, cum ar fi un dispozitiv de urmărire magnetică sau un dispozitiv de urmărire inerțială, este atașat pentru capturarea datelor globale privind poziția / rotația mănușii. Aceste mișcări sunt apoi interpretate de software-ul care însoțește mănușa, astfel încât orice mișcare poate fi interpretata. Gesturile pot fi apoi clasificate în informații utile, cum ar fi recunoașterea limbajului semnelor sau a altor funcții simbolice.

Mănuși scumpe de înaltă calitate pot furniza, de asemenea, feedback haptic, care este o simulare a simțului atingerii. Acest lucru permite ca o mănușă cu fir să fie folosită și ca dispozitiv de ieșire. În mod tradițional, mănușile cu cablu au fost disponibile numai la un cost ridicat, senzorii de îndoire a degetelor și dispozitivul de urmărire trebuind să fie cumpărate separat[15].

Mănușile cu cablu sunt adesea folosite în mediile de realitate virtuală și pentru a imita mișcarea mâinilor umane de către roboți.

Scopul acestui proiect este de a realiza un sistem funcțional care permite imitarea funcțiilor oferite de mouse-urile standard. Având in vedere faptul in capitolul anterior am aflat modul de functionare al elementelor necesare din punct de vedere teoretic al lucrării, putem acum realiza partea practica a proiectului.

Pentru realizarea modelului s-au respectat următoarele etape:

Legătura hardware a componentelor;

Proiectarea conceptuala a proiectului;

Proiectarea si implementarea parții software;

Testarea sistemului.

In cele ce urmează vom dezvolta si prezenta detaliat aceste 4 etape de realizare ale proiectului .

3.1 Legătura hardware a componentelor si asamblarea finala

Sistemul realizat va executa funcțiile de baza ale mouse-urilor si anume: clic stânga, clic dreapta si scroll-ul (rotita mouse-ului). Astfel fiecare senzor flex va executa una din funcțiile enumerate anterior, mai sus.

Deci vom avea nevoie de:

O placa de dezvoltare Arduino Pro Micro;

3 x senzori flex (clic stânga, clic dreapta si respectiv scroll);

MPU-6050 (deplasarea mouse-ului).

Am renunțat astfel la conectarea fără fir, deoarece in acest proiect urmăresc funcționalitatea proiectului din punct de vedere al aplicabilității.

In urma informațiilor evidențiate pana in acest punct sistemul nostru va fi structurat in scheme bloc realizat in schema bloc din Figura 3.1.

Figura 3.1 Schema bloc a sistemului

Din figura 3.1.1 rezulta ca din punct de vedere al structurii electronice modelul realizat are doua elemente care interacționează cu utilizatorul. In cazul acestor 2 componente ale sistemului nostru avem o relație de timp om-mașina. Informațiile generate de utilizator reprezintă date de intrare in cazul nostru (Input data), astfel acestea sunt transformate in limbaj cod prin intermediul celor doua elemente: senzorul flex si accelerometru si giroscopul.

3.1.1 Unitatea centrala de procesare a informațiilor

Unitatea centrala de procesare a informațiilor reprezintă de fapt placa de dezvoltare de tip Arduino Pro Micro. Pro Micro este similar cu Pro Mini, cu excepția unui ATmega32U4 la bord cu o memorie interna de 32kB. La fel ca Pro Mini, Pro micro vine de asemenea in doua modele diferite, de exemplu, 3.3V si 5V.Pro micro 3.3v modelul are 8MHz oscilator cristal in bord, in timp ce modelul Pro 5v are un oscilator 16MHz care le diferențiază.

De asemenea, notați partea din spate a plăcii în care numărul modelului este marcat fie 5v, fie 3.3v.Dacă ambele semne au eșuat, verificați jumperul (J1) din colțul din stânga jos al plăcii, care este închis pentru 5V și deschis pentru 3.3 V(Figura 3.1.1.1).

Figura 3.2 Arduino Pro Micro 5V/ 16 MHz

Pentru realizarea acestui proiect sa adaptat folosirea plăcii de dezvoltare Arduino Pro Micro 5V/ 16MHz. Astfel referirile care se vor face din punct de vedere al conectării acestui model. Daca pentru realizarea acestui proiect se vor utiliza alte placi de dezvoltare se va consulta schema electrica si pinout placi aferente. Schema pinout a placi de dezvoltare de poate observa in figura 2.4, din capitolul 2.

Alimentarea sistemului: Placa de dezvoltare poate fi alimentată atât prin intermediul USB, cât și prin intermediul unei surse externe de putere. Sursa de putere este selectată în mod automat. La rândul ei, sursa externă de alimentare poate fii atât o sursă dotată cu o punte pentru a redresa curentul alternativ în curent continuu, cât și o baterie. Există un regulator de tensiune la bord, astfel încât să poată accepta tensiunea de la 5V de până la 12VDC. Dacă furnizați energie nereglementată la placă, asigurați-vă că vă conectați la pinul "RAW" nu pe VCC.

Pro Micro este un mic microcontroler compatibil cu Arduino, centrat în jurul unui ATmega32U4 – un AVR pe 8 biți foarte asemănător cu ATmega328, cu o mare atenție: ATmega32U4 este echipat cu un transmițător USB de mare viteză. Deci acum, când conectați Arduino la computer, acestea sunt conectate direct prin magistrala USB. Pro Micro poate fi programat pentru a emula orice dispozitiv USB pe care l-ați putea imagina. Puteți programa chiar să acționeze ca un mouse, tastatură sau alt dispozitiv USB de clasă HID.

Ce este HID s-ar putea întreba? Este una dintre numeroasele clase de dispozitive USB definite. Fiecare dispozitiv USB are o clasă de dispozitive, care definește exact scopul său general. Există o mulțime de clase: imprimante, hub-uri, difuzoare și camere web pentru a menționa câteva, dar acesta se va specializa în HID: Interface Human Device. S-ar putea să țineți un dispozitiv HID într-o singură mână acum, în timp ce cealaltă mână se deplasează pentru utilizarea altuia.

Deci ATmega32U4 are grijă de obstacolul hardware-ului USB, dar tot trebuie să ștergem și firmware-ul. Din fericire pentru noi, Arduino există și, odată cu lansarea lui, vine cu suport încorporat pentru ATmega32U4 și miezul USB. Suportul USB include funcționalitate HID. Din nefericire, acele chestii HID sunt oarecum ascunse (sau chiar blocate) departe de noi. Scopul acestor informații este de a explica modul de utilizare a bibliotecii HID Arduino, astfel încât să puteți profita la maxim de Pro Micro.

Aceste biblioteci de bază permit o placă bazată pe ATmega32u4 sau placa Due și Zero să apară ca mouse-ul nativ la un computer conectat.

Un cuvânt de precauție cu privire la utilizarea bibliotecilor mouse-ului: dacă biblioteca Mouse rulează în mod constant, va fi dificil să programați bordul. Funcțiile precum Mouse.move() vor muta cursorul la un computer conectat și ar trebui să fie apelate numai când sunteți gata să le gestionați. Se recomandă utilizarea unui sistem de control pentru a activa această funcționalitate, ca un comutator fizic sau pentru a răspunde doar la o anumită intrare pe care o puteți controla.

Când utilizați biblioteca Mouse, este mai bine să testați mai întâi ieșirea folosind Serial.print(). În acest fel, puteți fi sigur că știți ce valori sunt raportate. Consultați exemplele mouse-ului pentru câteva modalități de abordare a acestora.

Funcțiile mouse-ului permit o mișcare a cursorului de pe un computer conectat. Când actualizați poziția cursorului, este întotdeauna relativ la locația anterioară a cursorului.

3.1.2 Senzori flex

Așa cum am precizat, funcțiile butoanelor mouse-ului se vor executa prin interpretarea senzorilor flex. Am stabilit executarea celor 3 funcții de baza mai exact clic-stânga, clic dreapta si scroll.

O proprietate a senzorilor de îndoire este de remarcat faptul că îndoirea senzorului la un punct cu un unghi prescris nu este cea mai eficientă utilizare a senzorului. De asemenea, îndoirea senzorului la un punct la mai mult de 90˚ poate deteriora permanent senzorul. În schimb, îndoiți senzorul în jurul unei raze de curbură. Cu cât raza de curbură este mai mică și cu cât este mai mare întreaga lungime a senzorului, cu atât va fi mai mare rezistența (care va fi mult mai mare decât rezistența obținută dacă senzorul este fixat la unul dintre capete și se îndoaie brusc la 0 Grad ridicat). Din punct de vedere electric schema de functionare a senzorului flex [18] se regăsește in figura 3.2.3.

Figura 3.3 Schema electrica senzor flex

Fiecare senzor flex va executa una cele 3 funcții enumerate mai sus. In cele ce urmează o sa explicam principiul de functionare. Datorita costului ridicat a acestor tipuri de senzori flex am folosit in acest proiect Senzor Îndoire 5.5cm brick [19]. Aceasta varianta vine împreună cu un rezistor de 10kΩ, iar schema electrica este in Figura 3.2.4, realizata in Fritzing [20].

Figura 3.4 Pini conectare senzor flex

Din punct de vedere electric cei 3 pini se vor lega la placa de dezvoltare Arduino după cum urmează:

Pinul de semnal (OUT) se cuplează la un pin analogic al plăcii Arduino;

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

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

Varianta brick a acestui senzor flex (Figura 3.5) include deja rezistenta de 10kΩ pentru GND. Astfel intern, sub plasticul roșu acesta conține rezistenta necesară conectata pe GND, formând astfel o configurație de divizor de tensiune. Varianta brick Acesta reprezintă un avantaj din punct de vedere al conexiuni la placa Arduino Pro Micro.

Figura 3.5 Pini conectare senzor flex brick

Având in vedere faptul ca senzorii flex trebuie legați la pini de intrare analogica a plăcii Arduino Pro Micro, se va consulta schema de configurare a pinilor, pe care o puteți găsi in Datasheet-ul[21] acestei placi, conform cu figura 2.6, care reprezintă varianta simplificata a plăcii de dezvoltare. Având toate datele referitoare la modul de conectare al senzorilor flex la placa de dezvoltare Arduino am realizat schema electrica reprezentata in Figura 3.6, utilizând programul Fritzing [20],a pentru cei 3 senzori flex care urmează a fi utilizați.

Figura 3.6 Schema de principiu senzori flex

Din schema de principiu a conectări senzorilor flex rezulta următoarele legături efectuate cu placa Arduino Pro Micro, aceasta sa realizat pe baza informațiilor oferite din schema de pinout a plăcii de dezvoltare, după cum urmează:

A0 (Analog input) – OUT Senzor 1: toate valorile generate de acest senzor flex pe acest pin vor executa funcția de clic stânga;

A1 (Analog input) – OUT Senzor 2: toate valorile generate de acest senzor flex pe acest pin vor executa funcția de clic dreapta;

A2 (Analog input) – OUT Senzor 3: toate valorile generate de acest senzor flex pe acest pin vor executa funcția de scroll.

Astfel in realizarea codului programului se vor prelucra informațiile oferite de pinii analogici ai placi de dezvoltare numerotați: A0, A1, A2, astfel aceștia oferă informațiile necesare executării celor 3 funcții ale proiectului.

3.1.3 MPU-6050

După cum am discutat in capitolul 2 la descrierea MPU-6050 acesta este format dintru giroscop pe 3 axe si un accelerometru pe 3 axe, care poate interpreta foarte ușor si rapid mișcarea in spațiu. Astfel o sa putem transforma si interpreta cu ajutorul placi de dezvoltare in informații care cu ajutorul funcție mouse.move() aferent librăriei Mouse.

Citirea valorilor brute pentru accelerometru și giroscop este ușoară. Modul de somn trebuie să fie dezactivat și apoi pot fi citite registrele pentru accelerometru și giroscop. Dar senzorul conține, de asemenea, un tampon FIFO de 1024 octeți. Valorile senzorului pot fi programate pentru a fi plasate în tamponul FIFO. Iar tamponul poate fi citit de Arduino.

Tamponul FIFO este utilizat împreună cu semnalul de întrerupere. Dacă MPU-6050 plasează datele în tampon FIFO, semnalează Arduino cu semnalul de întrerupere, astfel încât Arduino știe că există date în memoria tampon FIFO care așteaptă să fie citite.

Un pic mai complicat este capacitatea de a controla un al doilea dispozitiv I2C. MPU-6050 funcționează întotdeauna ca un modul slave pentru Arduino cu pinii SDA și SCL conectați la magistrala I2C [22].

Lucrurile devin foarte complexe cu "DMP". Senzorul dispune de un " Digital Motion Processor" (DMP), denumit și "unitate de procesare a mișcării digitale". Acest DMP poate fi programat cu firmware și este capabil să facă calcule complexe cu valorile senzorului. Pentru acest DMP, InvenSense[23] are o politică de descurajare, prin faptul că nu furnizează suficiente informații despre cum să programeze DMP. Cu toate acestea, unii au folosit inginerie inversă pentru a captura firmware-ul. DMP ("Digital Motion Processor") poate face calcule rapide direct pe chip. Aceasta reduce sarcina pentru microcontroler (cum ar fi Arduino).

Valorile accelerometru și giroscop sunt numite valori "brute", însă pentru o prelucrare mai ușoară de utilizat exista biblioteci definite numite I2Cdevlib pentru accesarea dispozitivului MPU-6050 scrise de diferite persoane. Acestea nu sunt realizate de producători, ducând astfel la mici calibrări care trebuie făcute. Astfel acestea ne permit sa preluam datele generate de mișcările giroscopului si sa le decodificam mai ușor pentru a fi transpuse in cazul nostru in mișcări ale mouse-ului.

Din punct de vedere al principiului de functionare schema finala, realizata in Fritzing[21] este reprezentata in Figura 3.7.

Figura 3.7 Schema de principiu Arduino Glove Mouse

Astfel MPU-6050 are comunicare I2C cu placa de dezvoltare, iar comunicarea acestora se face prin legarea pinilor SDA si SCL la pini de comunicare I2C al plăcii de dezvoltare D2 si respectiv D3.

3.1.4 Schema electrica a sistemului

După realizarea schemei de principiu a acestui proiect am realizat si schema electrica in Figura 3.8, realizata in Fritzing[20] pentru a putea vedea conectarea si înțelegerea acestuia la nivel fizic in momentul asamblării pe mânușa. Ca notație sau legenda a firelor sa păstrat aceleași conotații din schema de principiu.

Figura 3.8 Schema electrica Arduino Glove Mouse

Din schema avem următoarele componente care formează proiectul nostru iar pentru o identificare in capitalele următoare a ceea ce reprezintă acestea in corespondenta cu partea fizica si schema de principiu.

Astfel senzorul 1 reprezintă rezistenta R1 a schemei electrice. Senzorul flex este de fapt o rezistenta din punct de vedere electric dar acesta are proprietatea de as schimba valoarea in funcție de unghiul de îndoire. Senzorul are legata pe GND rezistenta R2 cu valoarea de10kΩ, conform principiului de conectare din capitolul anterior a divizorului de tensiune.

Principiul de conectare este aplicat si in cazul celorlalți 2 senzori flex, mai exact senzorul 2 are corespondenta rezistenta R3 din schema electrica, având ca rezistata pentru divizarea tensiuni rezistenta R4. Același lucru este si in cazul senzorului 3 căruia ii corespunde rezistenta R5 pentru divizarea de tensiune.

In cazul MPU-6050 se poate observa cu ușurință conexiunile care trebuie realizate.

3.1.4 Asamblarea finala a produsului.

Conform schemelor electrice si principiului de functionare am realizat montarea componentelor care formează sistemul nostru, mai exact cei 3 senzori flex de 5 cm si MPU-6050, pe o mânușa normala conform cu figura 3.9, pentru evitarea contactului cu pielea. Tipul mănușii utilizate trebuie nu este unul standard. Se pot utiliza alte tipuri de mânuși dar in principiu se recomandă utilizarea unor mănuși de tip ESD, pentru a prevenii descărcarea electrostatica si a izolarea sistemului pentru scurtcircuit.

Mânușă utilizata este definita pentru mana dreapta, aceasta a utilizat conceptul de folosire a mouse-ului cu mana dreapta. Se poate adapta si pentru utilizarea pe mana stânga cu mici modificări.

Figura 3.9 Montarea componentelor pe mănușa

Ținând cont de toate considerentele am realizat asamblarea mănușii conform următoarelor etape:

s-au fixat cei 3 senzori pe partea din spate a degetelor

s-a fixat MPU-6050 tot in partea din spate a mâinii(se poate utiliza si alta poziționare).

Cei 3 senzori după cum observam in Figura 3.10 de mai jos, vor trasmite informatii placi de devoltare prin modificarea valorii in momentul indoirii degetelor sau modificarii pozitiei initiale.

Figura 3.10 Identificarea senzorilor de pe manusa

Conform figurii 3.10, am stabilit ca degetele care vor executa funcțiile sunt următoarele:

degetul mare – Senzor 3. Degetul mare se poate roti la 90ș pe plan perpendicular cu palma, de aceea acesta va putea fii folosit pentru executarea funcțiilor scroll up si down.

Degetul arătător – Senzor 1. Aceste deget s-a definit deoarece pentru comanda de clic stânga care este executata de mouse-ul normal, acest deget are deja o deprinde pentru utilizatori.

Degetul mediu – Senzor 2. Acest deget s-a definit conform conceptului de utilizare a mouse-ului normal pentru executare comenzii clic dreapta, având astfel ca in cazul degetului arătător o deprindere a utilizatorilor.

MPU6050 – acesta va transmite poziția mâinii care va fi transformata in poziționarea cursorului de placa de dezvoltare Arduino pro micro.

O sa observam in capitolele următoarea mici inconveniențe care au generat repoziționarea senzorilor datorita informațiilor incorecte sau care nu puteau fi procesate. Acestea sunt generate din cauza sensibilității senzorilor flex atât la temperatura, umiditate sau altor factori care pot influenta funcționalitatea sistemului nostru.

Astfel in urma conectării si a placi de dezvoltare Arduino Pro Micro am realizat asamblarea finala a produsului nostru, după cum este ilustrat si in figura 3.10.

Figura 3.10 Asamblarea finala a modelului Arduino Mouse Glove

3.2 Proiectarea și implementarea pârții software

Proiectarea software se referă la stabilirea arhitecturii software a sistemului. Aceasta se realizează conform principiilor prezentate în [12], [20], [24], [25], [26].

3.2 Testarea modelului Arduino Glove Mouse

Testarea acestei mănuși presupune verificarea funcționarii fiecărei funcții independent de sistemul general. Se va verifica existenta in program a fiecărei funcții, după care se va testa executarea corecta a funcțiilor. Aplicațiile se vor executa independent prin apelarea conditiei care se va printa utilizand din aplicația Arduino IDE[27], opțiunea „Serial Print Monitor”, unde sunt monitorizate datele printate in urma execuție. Toate funcțiile programului se vor genera într-o funcție infinita, care va prelua continuu date de la sistemele de intrare.

In momentul alimentarii modelului acesta va conduce la inițializarea variabilelor si stabilirea valorilor maxime ale senzorilor flex, care se vor normaliza pentru o procesare mai ușoară. Astfel înainte de alimentarea modelului se recomanda ca mănușa sa fie deja montata pe mana pentru as primi valorile maxime. Pentru o utilizare cat mai buna a mănușii se recomanda ca poziționarea degetelor sa fie la fel ca in Figura 3.11, într-o poziție relaxanta fără a fii îndoite. Se recomanda ca poziția degetului mare sa fie paralela cu celelalte degete pentru o functionare cat mai buna a senzorului 3 care va trimite date la scroll.

Figura 3.12 Poziționarea degetelor in momentul alimentarii

Daca inițializarea primei valori citite de la senzori nu reprezintă varianta maxima a senzorilor, atunci funcționalitatea programului va avea de suferit, deoarece partea software se bazează pe prima valoare citita de la senzorul flex ca fiind valoare de referința maxima din capul de valori generate de acesta. Aceasta prima valoare urmând apoi normalizata pentru utilizarea mai buna a datelor. Daca inițializarea nu este corecta si au existat mișcări bruște ale mâine atunci acesta trebuie deconectat si alimentat de la sursa pentru reinițializarea valorilor.

Daca tot procesul sa efectuat conform specificațiilor de mai sus atunci putem trece la prima funcție executata de sistemul nostru.

Prima funcție care este apelata in structura programului este mouse.move(). Aceasta prima structura va muta cursorul mouse-ului in funcțiile de valorile primite de la MPU-6050. Informațiile oferite de acesta sunt prelucrate de placa de dezvoltare cu ajutorul bibliotecilor, apoi executate.

Sa presupunem ca funcțiile de mutare ale cursorului se regăsesc pe 2 axe (X0Y). Astfel poziționarea MPU-6050 se va face pe mana astfel încât utilizatorul sa nu inverseze sensul acestuia de mișcare. Astfel mișcarea mâinii sau inclinarea se va identifica prin îndoirea mâinii in stânga si in dreapta după cum este ilustrat in Figura 3.13. pentru deplasarea pe axa X.

Figura 3.13 Mișcarea necesara deplasării pe axa X a mouse-ului

Pentru deplasările necesare pe axa Y se va îndoii mana in sus si in jos pentru mutarea cursorului la noile valori, după cum este specificat in figura 3.14.

Figura 3.14 Mișcarea necesara deplasării pe axa Y a mouse-ului

Pentru utilizarea celor 3 funcții inițiale stabilite, clic stânga, clic dreapta si scroll, vom testa independent funcționarea.

Pentru executarea funcției de clic stânga, trebuie ca senzorul aferent, adică senzor 1, sa își modifice starea. Funcția se va apela in momentul schimbării valorii citite de la acest senzor. Pentru executarea aceste funcții am stabilit ca o îndoire a senzorului flex trebuie preluata in momentul in care aceasta valoare normalizata este mai mare de 0.5 fata de valoarea inițiala a senzorului. Si interpretata astfel: daca valoarea noua normalizata este mai mare de 0.5 fata de valoarea inițiala si noua valoare citita de la senzor este mai mica cu 0.3 fata de valoarea inițiala a senzorului, atunci executam clic stânga (Figura 3.15). Daca degetul nu se va menține îndoit de va executa funcția de apăsare care o putem folosi in cazul in care dorim sa selectam mai multe elemente pe calculator.

Aceasta funcție sa generat in urma structurării software a programului in procesul de testare.

Figura 3.15 Executarea funcției clic stânga

Condițiile de : mai mare ca 0.5 si mai mic ca 0.3 au fost stabilite in urma testării produsului astfel încât sa existe posibilitatea executării funcției dublu clic.

Pentru apelarea funcție de clic dreapta se va prelucra informația senzorului 2 care este legat pe degetul arătător. Astfel in urma condițiilor impuse pentru clic stânga, acestea sunt adaptabile si in acest caz, după cum este specificat si in Figura 3.16. Acești 2 senzori sunt identici atât din punct de vedere al structuri cat si din punct de vedere al codului de execuție, însă fiecare cu o funcție diferita.

Figura 3.16 Executarea funcției clic dreapta

Pentru apelarea funcție de scroll trebuie ca senzorul aferent, senzorul 3, verificat conform condițiilor impuse in cod se vor executa următoarele funcții. sa fie interpretat conform anumitor condiții. Având in vedere faptul ca acest tip de senzor accepta îndoirea doar intra-un singur sens conform specificațiilor, însă acești senzori înregistrează si valori diferite mai mari ca valoarea maxima daca este îndoit invers sensului. M-am folosit de aceasta mica variabila pentru e executa funcția de scroll up. Procesul fizic este reprezentat in Figura 3.17.

Figura 3.17 Executarea funcției scroll

Valorile citite de la senzorul 2 vor fii luate in considerate pentru scroll down pentru valori mai mari ca 0.2 si pentru valori mai mici de -0,5, aici făcând referire la valorile normalizate.

In cazul celor 3 funcții principale, codul a fost executat corect, după calibrarea MPU-6050 si a normalizării senzorilor, însă acest lucru nu poate fi exemplificat prin figuri având in vedere faptul ca nu pot fi prezentate prin imagini sugestive. Acesta va executa codul aferent într-o bucla infinita.

Utilizarea valorilor brute oferite de senzorii flex ca condiție pot crea mari probleme in execuția funcțiilor. Pe parcursul testării sa observat înregistrări cu valori diferite al limitelor maxime ale senzorilor la fiecare alimentare. Valorile maxime ale senzorilor sunt independente, astfel a fost nevoie ca pentru fiecare senzor sa se creeze o valoare de maxim, chiar daca aceștia sunt identici din punct de vedere electric si nu numai. Acești senzori își pierd valorile inițiale după o perioada scurta de utilizare.

Fiecare testare sau utilizare a senzorilor flex presupunea o noua calibrare, însă am scăpat de aceasta calibrare de fiecare data prin înregistrarea primei valori oferite de senzor in moment de repaus.

În finalul capitolului se poate spune că după o proiectare completă in care s-au realizat parții electronice si parții software si s-a asamblat întregul sistem am putut realiza testarea si funcționarea acestuia. Bineînțeles ca pe parcursul testării au fost anumite dificultăți, cum ar fi calibrarea senzorilor si a MPU-6050 pentru funcționalitatea sistemului, având astfel mari probleme la acest capitol. Pentru rezolvarea unor astfel de probleme s-a apelat implementarea anumitor algoritmi, după cum se poate observa din consultarea codului anexat lucrării.

Capitolul 4.
Concluzii

Proiectul realizat implementează un model funcțional al unui concept de realizare pe viitor sau de utilizare a funcțiilor mouse-ului, fiind adaptat a orice operator care va deține controlul total al sistemului. Din punct de vedere al aplicabilității acesta poate fii adaptat in orice tip de sistem pentru a executa si alte funcții pe lângă funcția de baza a mouse-ului.

Lucrarea este conceputa cu o prezentare teoretica la început atât din punct de vedere al tehnologiei mouse-ului si a elementelor folosite in realizarea aceste lucrări. In cadrul aceste prezentări teoretice am stabilit modelul, elementele componente si comportamentul acestuia cat mai aproape de un mouse normal. Am implementat doar unele funcții ale librăriei doar pentru a putea demonstra funcționalitatea acestuia. Am implementat astfel 3 funcții de baza ale mouse-ului, la care ulterior s-a adăugat funcția secundara ( mouse.press).

Modelul sistemului Arduino Glove Mouse s-a realizat in mai multi pasi. In primul rând s-a analizat tipul elementelor componente necesare ale sistemului. Astfel pentru interpretarea mișcării sau îndoiri degetelor s-a găsit mai multe variante, fiind aleasa varianta senzorilor flex de 2.2”. Chiar daca calitatea acestor produse nu este ridicata, s-au realizat toate funcțiile propuse care trebuie executate de sistemul nostru si anume:

Clic stânga, care a fost realizata prin citirea si interpretarea valorilor a unui senzor flex montat pe degetul arătător al mâini drepte;

Clic dreapta, care la rândul lui a fost realizat prin citirea si interpretarea valorilor a unui senzor flex montat pe degetul inelar al mâini drepte;

Scroll, care a fost realizat prin citirea si interpretarea valorilor a unui senzor flex montat pe degetul mare al mâini drepte;

Poziționarea cursorului, care a fost realizata prin citirea si interpretarea valorilor a accelerometrului si giroscopului lui MPU-6050 si transformarea acestora in coordonate de poziționarea a mouse-ului.

Pentru realizarea mișcării cursorului mouse-ului aveam nevoie de un element care sa înregistreze toate modificările de mișcare care erau generate de mana si sa le transmite rapid fără a pierde date către placa de dezvoltare, fiind astfel ales MPU-6050.

In faza de început s-a analizat posibilitatea realizări acestuia, pe baza analizei componentelor necesare si funcțiilor care trebuie îndeplinite. Apoi s-a făcut o analiza la nivel de comunicare a prelucrării informațiilor a plăcilor de dezvoltare care apelează funcțiile mouse-ului. Însă trebuia ales un sistem care permite conectarea a 3 senzori flex pe conexiune analogica pentru a putea fii interpretați si a MPU-6050.

In urma analizării tutuitor informațiilor s-a decis folosirea plăcii de dezvoltare Arduino Pro Micro 5V/ 16 MHz cu un procesor de comanda ATmega32U4, foarte rapid care putea comunica cu unitatea centrala prin transmitere USB.

Ultima etapa de realizare si anume verificarea funcționarii modelului s-a realizat in partea practica a lucrării, unde am discutat de executate funcțiilor stabilite si de problemele generate a senzorilor flex care nu au ajuns la un nivel stabil de generare de date. Mai mult ne-am folosit de intervale de valori generate pentru a exclude erorile apărute.

Analizând cele prezentate până acum se poate spune că proiectul și-a atins scopul. Au fost implementate toate funcțiile principale ale sistemului, iar acestea funcționează în condiții corecte. În plus se poate spune că pe durata realizării sistemului s-au atins diverse noțiuni de utilizarea a microcontrolerelor.

Costuri, limitări și posibile implementări ulterioare

Modelul realizat Arduino Glove Mouse are mai multe limitări. Proiectul a fost realizat prin implementarea celor 3 funcții si anume: clic stânga, clic dreapta si scroll, iar pe parcursul programului sa adaptat si funcția de mouse.press. In primul rând modelul a fost creat cu echipamente cu cost de realizare scăzut. Costul realizării unui proiect cu o calitate mai buna a procesării informații si a aspectului este influențat de calitatea si funcțiile componentelor. Daca am înlocuii senzorii flex cu o varianta mai buna din punct de vedere al acuratei informatiilor oferite se pot realiza mai multe functii pe acelasi senzor, insa capacitatea celor utilizati in sistem este limitata dupa cum am specificat mai sus.

Acelasi lucru putem spune si despre utilizarea lui MPU-6050 care ofera prea multe informatii, dar bibliotecile actuale inca nu sunt adaptate pentru utilizarea datelor corecte. Astfel miscarile mouse-ului actuale se bazeaza mai mult pe inclinarea axelor, avand o sensibilitate ridicata. Acest aspect fiind un inconvenient in cazul persoanelor care nu au o mana „fixa” pentru utilizare. Bineînțeles ca se poate crea o interpretare mai buna a informațiilor trimise de MPU-6050, dar nu acesta este scopul acestei lucrării.

Cu toate acestea acest proiect si-a atins scopul propus inițial. Acest proiect poate fi adaptat si pentru alt tip de comunicare cum ar fii tastatura sau orice alt element care presupune relaționarea cu utilizatorul si captarea mișcării.

Costul total al componentelor este de aproximativ 600 lei, plus minus. Cea mai scumpa componenta a proiectului o reprezintă senzorul flex, care încă nu sa făcut cunoscut pentru multe proiecte. Este un element nou cu posibilități de aplicare nelimitate.

Acest sistem poate fi folosit in activitate de dezvoltare si implementare viitori, care presupune montarea a 2 mănuși care interpretează si tastatura.

Bibliografie

Maus – https://ro.wikipedia.org/wiki/Maus – consultat la data de 07.06.2017.

DOCUMENTAR Istoria si evoluția mouse-ului https://www1.agerpres.ro/lifestyle/2013/12/08/documentar-istoria-si-evolutia-mouse-ului-11-04-47- consultat la data de 07.06.2017.

Sindromul tunelului carpian – boala folosirii mouse-ului la birou. Cum apare si cum o evitam – https://www.cariereonline.ro/inspiratie/wellbeing/sindromul-tunelului-carpian-boala-folosirii-mouse-ului-la-birou-cum-apare-si-cum-o-evitam – consultat la data de 07.06.2017.

Clasificarea mouse-urilor http://www.rasfoiesc.com/educatie/informatica/calculatoare/CALCULATORUL-FARA-SECRETE44.php – consultat la data de 07.06.2017.

Conectorul PS/2 – http://ro.saferpedia.eu/wiki/Conectorul_PS/2 – consultat la data de 10.06.2017.

Mouse -http://ro.saferpedia.eu/wiki/Mouse#Conectivitate_.C8.99i_protocoale_de_comunicare consultat la data de 10.06.2017.

Format PDF Lucrarea 10 – Echipamente pentru introducerea datelor http://www.cs.ucv.ro/staff/cpatrascu/SIE/Lucrarea%2010.pdf – consultat la data de 10.06.2017

Ghiduri de utilizarea: Butoanele implicite ale mouse-ului

https://www.microsoft.com/accessories/ro-ro/support/how-to/mouse/default-assignments

– consultat la data de 10.06.2017.

Placa de dezvoltare Pro Micro -5V/16MHz – https://ardushop.ro/ro/electronice/296-placa-de-dezvoltare-pro-micro-5v16mhz.html?search_query=pro+micro&results=108 – consultat la data de 10.06.2017

Placa de dezvoltare Pro Micro -5V/16MHz – https://www.sparkfun.com/products/retired/11098 – consultat la data de 10.06.2017

Pro Micro & Fio V3 Hookup Guide – https://learn.sparkfun.com/tutorials/pro-micro–fio-v3-hookup-guide – consultat la data de 10.06.2017.

Flex Sensor Hookup Guide – https://learn.sparkfun.com/tutorials/flex-sensor-hookup-guide – consultat la data de 10.06.2017

MPU-6050 – https://www.elecrow.com/wiki/index.php?title=MPU-6050 – consultat la data de 10.06.2017

Modul giroscop + Accelerometru 3 axe MPU 6050 – https://ardushop.ro/ro/electronice/179-modul-giroscop-accelerometru-3-axe.html?search_query=mpu6050&results=1 – consultat la data de 10.06.2017.

Wired glove – https://en.wikipedia.org/wiki/Wired_glove – consulat la data de 10.06.2017

How dose an accelerometer and gyroscope work – http://www.starlino.com/imu_guide.html – consultat la data de 10.06.2017

Using the MPU-6050 – http://www.cs.unca.edu/~bruce/Fall13/360/IMU_Wk8.pptx – Consultat la data de 11.06.2017.

Datasheet Force Flex – https://cdn.sparkfun.com/datasheets/Sensors/ForceFlex/FLEX%20SENSOR%20DATA%20SHEET%202014.pdf – consultat la data de 11.06.2017.

Senzor Indoire 5.5cm Brick – https://www.robofun.ro/senzor-indoire-mic-brick – consultat la data de 12.06.2017;

Turn your ProMicro into a USB Keyboard/ Mouse – https://www.sparkfun.com/tutorials/337 – consultat la data de 12.06.2017.

Software proiectare electronica – http://fritzing.org/home/ – consultat la data de 12.06.2017.

MPU-6050 – https://playground.arduino.cc/Main/MPU-6050 – consultat la data de 13.06.2017.

Invent Sense – https://en.wikipedia.org/wiki/InvenSense – consultat la data de 13.06.2017.

Head Mouse – Game Controller or Disability Aid – http://www.instructables.com/id/Head-Mouse-Game-controller-or-disability-aid/ – consultat la data de 13.06.2017.

Molnar-Matei, F., Sisteme încorporate, notițe de curs, 2013

Head Mouse with MPU6050 and arduino micro – http://www.instructables.com/id/Head-Mouse-With-MPU6050-and-Arduino-Micro/ – consultat la data de 12.06.2017.

Stanciu, I.R., Molnar-Matei, F., Sisteme de monitorizare și control în timp real, Editura Eurostampa, Timișoara 2013, ISBN 978-606-569-542-9[27].

Anexa 1.
Codul sursa aferent intregului sistem

//–––––––––––––––––-

// Libraries

//–––––––––––––––––-

#include <Mouse.h>

#include <Wire.h>

#include <I2Cdev.h>

#include <MPU6050.h>

// initializare variabile

bool SENZOR_INITIALIZED = false;

int SENZOR_0_MAX_VALUE = -1;

int SENZOR_1_MAX_VALUE = -1;

int SENZOR_2_MAX_VALUE = -1;

const int RANGE_VALUE = 100;

MPU6050 mpu;

int16_t ax, ay, az, gx, gy, gz;

int vx, vy, vx_prec, vy_prec;

bool left_click_enable = false;

bool right_click_enable = false;

//========================================

// SETUP

//========================================

void setup() {

Serial.begin(9600);

Wire.begin();

mpu.initialize();

if (!mpu.testConnection()) {

while (1);

}

}

//=========================================

// LOOP

//=========================================

void loop() {

int senzor_0 = analogRead(0);

int senzor_1 = analogRead(1);

int senzor_2 = analogRead(2);

if (!SENZOR_INITIALIZED) {

SENZOR_0_MAX_VALUE = senzor_0;

SENZOR_1_MAX_VALUE = senzor_1;

SENZOR_2_MAX_VALUE = senzor_2;

SENZOR_INITIALIZED = true;

}

// Preia informatii de la MPU6050

mpu.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);

//Valorile de calibrare pe axa gx pentru varianta folosita – 100

vx = (gx – 100) / 300;

//Valorile de calibrare pe axa gz pentru varianta folosita +100

vy = -(gz + 100) / 300;

Mouse.move(vx, vy); // Pozitionare cursor

//left click check

float senzor_0_normalized = normalize(senzor_0, SENZOR_0_MAX_VALUE);

if (senzor_0_normalized > 0.5 && !left_click_enable) {

left_click_enable = true;

Mouse.press();

Serial.println("Mouse press");

}

float value_left_click = normalize(senzor_0, SENZOR_0_MAX_VALUE);

if (left_click_enable && value_left_click < 0.3) {

Mouse.click(MOUSE_LEFT);

Serial.println("Clic stanga");

left_click_enable = false;

}

//right click

float senzor_1_normalized = normalize(senzor_1, SENZOR_1_MAX_VALUE);

if (senzor_1_normalized > 0.5 && !right_click_enable) {

right_click_enable = true;

Mouse.press();

Serial.println("Mouse press");

}

float value_right_click = normalize(senzor_1, SENZOR_1_MAX_VALUE);

if (right_click_enable && value_right_click < 0.3) {

Mouse.click(MOUSE_RIGHT);

Serial.println("Clic dreapta");

right_click_enable = false;

}

//scroll check

float senzor_2_normalized = normalize(senzor_2, SENZOR_2_MAX_VALUE);

if (senzor_2_normalized > 0.2 || senzor_2_normalized < -0.5) {

Serial.println("Scroll");

float val = -1;

if (senzor_2_normalized < 0) {

val = 1;

}

Mouse.move(vx, vy, val);

}

delay(20);

}

// Normalizarea valorilor generate de senzori

float normalize ( float value, float SENZOR_MAX_VALUE) {

return 1 – ( value – (SENZOR_MAX_VALUE – RANGE_VALUE)) / (SENZOR_MAX_VALUE – (SENZOR_MAX_VALUE – RANGE_VALUE));

}

Similar Posts