PROGRAMUL DE STUDIU CALCULATOARE FORMA DE ÎNVĂȚĂMÂNT IF PROIECT DE DIPLOMĂ COORDONATOR ȘTIINȚIFIC Ș. L. DR. ING. POSZET OTTO ABSOLVENT CUCU ALEXANDRU… [308698]

UNIVERSITATEA DIN ORADEA

FACULTATEA DE INGINERIE ELECTRICĂ ȘI TEHNOLOGIA INFORMAȚIEI

PROGRAMUL DE STUDIU CALCULATOARE

FORMA DE ÎNVĂȚĂMÂNT IF

PROIECT DE DIPLOMĂ

COORDONATOR ȘTIINȚIFIC

Ș. L. DR. ING. POSZET OTTO

ABSOLVENT: [anonimizat]

2017

UNIVERSITATEA DIN ORADEA

FACULTATEA DE INGINERIE ELECTRICĂ ȘI TEHNOLOGIA INFORMAȚIEI

PROGRAMUL DE STUDIU CALCULATOARE

FORMA DE ÎNVĂȚĂMÂNT IF

PROIECT DE DIPLOMĂ

COORDONATOR ȘTIINȚIFIC

Ș. L. DR. ING. POSZET OTTO

ABSOLVENT: [anonimizat]

2017

UNIVERSITATEA DIN ORADEA

FACULTATEA DE INGINERIE ELECTRICĂ ȘI TEHNOLOGIA INFORMAȚIEI

PROGRAMUL DE STUDIU CALCULATOARE

FORMA DE ÎNVĂȚĂMÂNT IF

SMARTWATCH ARDUINO

COORDONATOR ȘTIINȚIFIC

Ș. L. DR. ING. POSZET OTTO

ABSOLVENT: [anonimizat]

2017

Introducere

Microcontrolerele sunt un astfel de circuite integrate care au încapsulate pe lângă procesor memorie volatilă și nevolatilă. Astfel pentru funcționare au nevoie doar de alimentare iar pentru comunicarea cu acestea se utilizează diversele interfețe care sunt implementate în ele. [anonimizat] o mare putere de calcul. Există o [anonimizat] o alegere potrivită pentru aplicația dorită.

[anonimizat] 8 și 32 biți[1]. [anonimizat][2].

Motivarea alegerii

Am ales această soluție deoarece Arduino este o platformă Open Source care produce plăci de dezvoltare ce pot fi programate cu ajutorul unui mediu de programare numit Arduino Studio prin portul USB al calculatorului. [anonimizat]. Există o [anonimizat]-uri, shield-uri și o gamă largă de sensori. Pentru fiecare dintre acestea este propusă documentația și bibliotecile necesare astfel programarea devine foarte simplă iar programatorul este scutit de detaliile tehnice interne fiecărei componente.

[anonimizat] a fost extinsă astfel încât este suportată de telefoanele mobile Android cu funcționalitate USB OTG1. Astfel utilizatorii pot utiliza telefonul mobil pentru a scrie programe și a programa plăcile.

Un dezavantaj ale plăcilor Arduino este forma și dimensiunea. [anonimizat]. Pentru aceasta este nevoie de o gamă de componente electronice foarte mici și care se montează pe suprafață unde cel mai important este microcontrolerul în sine. [anonimizat].

Ce se propune spre realizare

Realizarea cablajului imprimat modificat privind conectarea unei baterii de 3.7 V;

Adăugarea butoanelor pentru controlul ceasului;

Conectarea unui modul Bluetooth;

Conectarea unui modul display;

Conectarea unui senzor accelerometru;

Conectarea unui încărcător de baterie cu tensiune stabilă la ieșire;

Conectarea unui modul ceas de timp real;

[anonimizat];

Schimbarea de mesaje cu telefonul mobil.

Capitolul I. Partea hardware

Realizarea ceasului de mână presupune elemente miniature pe o placă destul de mică încât montajul întreg să fie de dimensiune acceptabilă a unui ceas real. Dificultatea majoră este lipsa unor astfel de plăci Arduino care să fie mici și multifuncționale, iar pentru rezolvarea acestei probleme am propus reproiectarea plăcii Arduino Leonardo prin modificarea circuitului de alimentare astfel încât să existe suport hardware pentru conectarea unei baterii și electronica aferentă pentru încărcarea acesteia. Placa Arduino Leonardo are la bază microcontrolerul AtMega32-U4[3] (Anexa 1 pag. 48) care are avantajul unui port USB 2.0 integrat.

Figura 1.1 – Interconectarea componentelor

Schema generală de ansamblu este prezentată în Figura 1.1. Placa Arduino are interconectate următoarele componente:

Modul display OLED2 – modelul SSD1306[4] (Anexa 2 pag. 51) cu rezoluția 128×64 pixeli monocrom;

Modul Bluetooth – SPP-c[5]3 (Anexa 3 pag. 52) v 2.1 cu EDR4 low power;

Butoane – trei butoane simple;

Modul ceas de timp real RTC[6] – acesta dispune de un circuit integrat DS3231N cu un cristal de 32,768 KHz integrat. De asemenea dimensiunea modului este acceptabilă 20×20 mm2;

Accelerometru – model MPU-6050[7] cu 3 axe;

Modul încărcător baterie – TP4056[8];

Modul DC-DC – adaptarea tensiunii de la baterie de 3,7 V la 5 V pentru placă.

Mod de funcționare

La conectarea tensiunii de alimentare de la baterie sau portul USB, prima dată se va afișa pe ecran ora, data, starea bateriei și semnalului bluetooth.

Dacă nu se face nici o operațiune externă, după 30 secunde va intra în mod sleep și se va opri display-ul. Astfel se v-a economisi energia bateriei.

La conectarea telefonului cu modulul Bluetooth, se vor transmite mesaje către placa Arduino. Aceste mesaje sunt:

Data și ora exactă;

Evenimente de tip apel sau mesaj cu informații ulterioare;

Alte mesaje prin terminal.

Mesajele se vor trata intern unde se vor realiza operațiile corespunzătoare.

Ieșirea din modul de așteptare se poate întâmpla la acționarea butoanelor sau când intră un mesaj de tip eveniment de la modulul bluetooth.

Modulul de tip accelerometru va avea funcționalitatea de recunoaștere a gestului efectuat când utilizatorul dorește să vadă ora sau alte date pe display.

La conectarea cu telefonul sau calculatorul prin cablu microUSB va realiza încărcarea automată a bateriei.

Proiectarea schemei electronice

Proiectarea schemei electronice se va realiza în programul OrCAD v16. Programul permite proiectarea atât a schemelor electronice cât și a cablajelor imprimate. Ca referință am luat schema electronică a plăcii Arduino Leonardo (Anexa 4 pag. 53).

Lista de componente necesare pentru realizarea schemei este enumerată în Tabelul 1.1.

Schema electronică se va desena în OrCAD Capture. Primul pas este să se creeze un nou proiect unde se specifică numele, ce tip de proiect este (schemă – schematic) și calea către directorul de lucru. Toate componentele vor fi de tipul SMT5 înafară de conectori care vor fi de tipul THT6.În Figura 1.2 am ilustrat procedeul de creare a proiectului.

Figura 1.2 – Crearea proiectului

După aceasta în fereastra principală se deschide proiectul care are componentele afișate în Figura 1.3.

b)

Figura 1.3 – Componentele OrCAD Capture: a) Managerul de navigare, b) Paleta de instrumente rapide

Managerul de navigare a proiectului conține cele două moduri de organizare a structurii proiectului, orizontală (submeniul director – file) și ierarhică (hierarchy). Deoarece proiectul este de dimensiuni mici, voi utiliza structura orizontală. În directorul rădăcină a structurii orizontale se găsește proiectul cu următoarele componente:

Director cu fișiere de tip schemă;

Cache-ul proiectului;

Director de librărie locală;

Director cu fișiere de tip Output;

Director cu proiectele referite.

Paleta de instrumente rapide este utilizată la desenarea schemelor și conține plasarea de componente, fire, magistrale, puncte de conexiune și altele. Devine activă când este deschisă o pagină de tip schemă.

Fiecare fișier de tip schemă are un nume, implicit se numește PAGEi, unde i = 1 la numărul de pagini contorizate. Redenumirea se realizează prin click dreapta pe pagină -> Rename, apoi se specifică numele. Am denumit pagina cu numele MiniPro.

OrCAD Capture dispune de un set de librării de componente care se află în directorul programului. Dacă nu se găsește componenta necesară aceasta se poate crea în librăria locală a proiectului. Librăria locală a proiectului păstrează toate componentele create de către proiectant. Pentru aceasta este necesar de creat o nouă librărie: File -> New -> Library, unde apoi se specifică calea către proiectul la care este necesar să se anexeze. Librăria are un nume implicit care se poate modifica ulterior. În Figura 1.4 am ilustrat managerul cu librăria nouă.

Figura 1.4 – Librăria atașată

Mai multe componente din schema electrică de principiu a plăcii Arduino Leonardo lipsesc și anume: microcontrolerul AtMega32U4, stabilizatorul de tensiune NPC1117 și LP2985, controlerul de încărcare a bateriei TP4056 și amplificatorul operațional LMV358. Crearea unei noi componente se efectuează astfel: click dreapta pe librărie -> New Part. Următorul pas este specificarea numelui componentei, prefixul, calea către amprenta fizică, numărul de elemente identice pe capsulă, tipul încapsulării, tipul de numerotare și dacă este vizibilă numerotarea pinilor. După aceasta se deschide editorul de componente unde se realizează desenul componentei. În acest caz se pot plasa pini, vectori de pini și figuri pentru structura simbolică. În Figura 1.5 am reprezentat procedeul de creare a unei noi componente.

Figura 1.5 – Crearea simbolului microcontrolerului

După aceasta se deschide fereastra de editare a componentei, instrumentele disponibile în acest caz devin mai puține. În Figura 1.6 am ilustrat fereastra de editare a noii componente.

Figura 1.6 – Componenta nouă Figura 1.7 – Plasarea unui pin

Cunoscându-se simbolul componentei aceasta se desenează utilizând figuri geometrice și pini. Plasarea pinilor urmărește anumite proprietăți:

Nume;

Număr;

Figură;

Tip;

Lățime (scalar sau magistrală);

Pin vizibil.

Tipul pinului este util în partea de verificare și simulare a schemei, această proprietate este ajutătoare pentru verificarea funcționalității schemelor. Deoarece nu voi utiliza simularea schemei, pot selecta tipul pinilor ca pasivi, astfel la verificare nu v-or apărea probleme legate de corectitudinea conexiunilor în schemă. Totuși este de dorit ca tipul pinilor să fie selectați corespunzător pentru a evita ulterioare greșeli de proiectare a schemei. În Figura 1.7 am ilustrat fereastra de editare a proprietăților unui pin.

Pentru trasarea conturului și elementelor de pe simbol se utilizează plasarea de dreptunghiuri, elipselor, arcurilor și liniilor. Astfel componenta este desenată și salvată în biblioteca locală. În Figura 1.8 am afișat simbolul microcontrolerului AtMega32U4.

Figura 1.8 – Simbolul microcontrolerului

Utilizând procedeul de mai sus am desenat toate componentele lipsă. Un caz special este amplificatorul operațional integrat cu două componente identice. Pentru acest simbol trebuie specificat două componente per capsulă și din meniul de editare a componente trebuie selectat din View -> Package unde se alege a doua componentă căreia i se specifică numerotarea pinilor explicit. În Figura 1.9 am ilustrat vederea componentei.

a) b)

Figura 1.9 – a) Selectarea submeniului Package; b) Vederile componentei integrate

În cele din urmă rezultă schema completă (Anexa 5 pXX) și librăria de componente.

Proiectarea cablajului

Deoarece nu există toate footprint-urile componentelor ce vor fi utilizate în proiect, acestea trebuie create. Înainte de a putea trece la proiectarea cablajului, am realizat capsulele tuturor componentelor conform specificațiilor de pe site-urile producătorilor.

Proiectarea footprint-urilor începe cu plasarea formelor și a pad-urilor. Dacă pad-ul nu este în librăria de pad-uri acesta trebuie desenat, apoi poate fi plasat în cadrul componentei. Pentru aceasta, pad-ul poate fi creat de la zero sau este posibil să se modifice un pad existent și salvat cu un nume nou. Am utilizat ce-a de a-doua metodă deoarece există pad-uri pentru componente SMT. Am luat ca referință o componentă SMT existentă din librăria oferită de Cadence și am desenat primul footprint a microcontrolerului AtMega32-U4. Microcontrolerul e încapsulat în capsula QFN44_7x7 care are două pad-uri, pad-ul pentru pin care are dimensiunea de 300×700 microni și pad-ul din centrul componentei care are 4000×4000 microni. Crearea pad-urilor se face din meniul Tools->Padstack->Modify Library Padstack. În fereastra ce se deschide am selectat ca referință un pad SMT. Acesta are două straturi din submeniul Layers: BEGIN_LAYER și SOLDERMASK_TOP. În coloana Regular Pad am completat valorile ce reprezintă dimensiunile fizice ale pad-ului. După aceasta am salvat fiecare pad în parte cu numele ce reprezintă valorile dimensiunilor pentru a fi ușor de găsit la etapa de proiectare a footprint-urilor. În Figura 1.10 am ilustrat fereastra de editare a pad-urilor.

Figura 1.10 – Editarea pad-urilor

Odată disponibile toate pad-urile se poate desena footprint-ul componentei. Pentru a realiza conturul am folosit figurile disponibile cum ar fi linii, cercuri și dreptunghiuri. Pentru aceasta, fiecare element trebuie să fie de un anumit tip și plasat pe un anumit strat. Deoarece planific să realizez cablajul în tehnologia dublustrat, voi folosi doar cele două straturi. Pad-urile și formele geometrice se vor afla pe un singur strat în cazul elementelor SMT, excepție vor face componentele de tip conector și găurile de trecere prin straturi. Rezultă trei elemente a footprint-ului unei componente SMT:

Padurile;

Elemente informative (tip și id) din cupru;

Elemente informative (tip, id și poziția componentei) din vopsea termică.

Pad-urile și elementele informative din cupru sunt de pe layer-ul ETCH, iar cele din vopsea din ASSEMBLY_TOP. Astfel la proiectarea cablajului pe mașini speciale rezultă o placă conform standardului industrial.

Pe baza acestui principiu am realizat toate componentele SMT, iar pentru conectori am luat ca referință conectori cu diametrul găurii interne de 700 microni.

În Figura 1.11 am ilustrat o componentă SMR Package finalizată care are incorporate 4 rezistențe. Se poate observa legătura mai bine utilizând View Footprint din cadrul OrCad Capture.

b)

Figura 1.11 – Componenta SMR Package: a) PCB Designer, b) OrCad Capture

Dacă schema electronică a fost realizată complet în Orcad Capture, atunci primii pași ce trebuie realizați este de a verifica schema cu Design Rules Check, de a genera lista de materiale cu Bill Of Materials și generarea netlist-ului cu Create Netlist. Pentru aceasta, din fereastra managerului proiectului se selectează fișierul general *.dsn, după care se pot realiza operațiile de mai sus. Dacă nu sunt erori de proiectare în schemă, atunci după generarea corectă a netlist-ului se deschide automat proiectul în PCB Designer. În Figura 1.12 am ilustrat conținutul proiectului din PCB Designer, unde este proiectul ales ca referință.

Figura 1.12 – Interfața PCB Designer a proiectului

Pentru a începe lucrul în primul rând este nevoie de curățarea suprafeței de lucru. Am șters toate elementele de pe cablajul de referință deoarece nu am nevoie de acestea. Componentele proiectului meu se pot adăuga automat sau manual pe suprafața de lucru. Adăugarea automată are nevoie de setări mai speciale cum ar fi limitele desenului și proprietățile componentelor cum ar fi temperatura de lucru, dimensiunile, protecția împotriva câmpului electrostatic sau electromagnetic pe care nu le am specificate, astfel voi folosi plasarea manuală. Pentru aceasta, din bara de instrumente se selectează Place Manual, unde se pot plasa componentele pe suprafața de lucru. Plasarea componentelor pe suprafața plăcii se va realiza urmărind aceeași logică ca la plăcile Arduino, elementele pe o singură parte a plăcii, conectorii la periferia plăcii, LED-urile și butonul în un loc cât mai potrivit. Astfel cel mai util este de a plasa microcontrolerul în centrul plăcuței, elementele de alimentare lângă conectorul de alimentare, LED-urile lângă conectorul USB. În Figura 1.13 am ilustrat toate componentele plasate pe suprafața de lucru.

Figura 1.13 – Aranjarea componentelor

După aceasta începe lucrul pentru rutarea plăcii, programul PCB Editor dispune de un ruter automat, pentru ca acesta să funcționeze și să ruteze placa cât mai corect este nevoie de o configurare. Pentru aceasta trebuie să se cunoască detaliile tehnice ale tuturor componentelor de pe placă, detaliile de funcționare cum ar fi curenții care circulă prin trasee, impendanțe și alte detalii de care nu dispun în acest moment deoarece placa este un prototip. În vederea acestor probleme am ales rutarea manuală ca fiind mai optimă în acest caz deoarece numărul de trasee nu este mare. Dimensiunile plăcii vor fi de 4.5 x 3.5 cm, unde se încadrează display-ul și se poate conecta la pinii plăcii fără a fi nevoie de a modifica conexiunile sau poziția display-ului.

Plasarea traseului se realizează prin selectarea cu mouse-ul a unei legături dintre două componente, iar grosimea se poate schimba cu un click dreapta -> Options -> Line Width. Grosimea minimă pe care am utilizat-o este de 300 microni, fiind chiar grosimea unui pad al microcontrolerului, cea tipică de 500 microni pentru interconectarea tuturor componentelor iar maximă de 700 microni pentru liniile de alimentare. În Figura 1.14 am ilustrat placa rutată parțial, traseele albastre sunt pe stratul TOP, cele cu roșu pe BOTTOM.

Figura 1.14 – Placa rutată

Capitolul II. Partea software

Funcționarea se va baza pe două module de program, Arduino și Android.

În conexiunea bluetooth smartphone-ul este master iar smartwatch-ul este slave. Conexiunea este unidirecțională, smartwatch-ul doar primește mesajele și le tratează intern. Ora internă a smartwatch-ului este sincronizată periodic sau la dorința utilizatorului.

Programarea smartwatch-ului

Programul pentru placa Arduino Leonardo îl voi realiza comform următorilor pași:

Funcționalități de bază:

Afișarea orei, datei, informațiilor despre mesaje și apeluri;

Comunicarea prin modulul bluetooth cu smartphone-ul android;

Controlul cu ajutorul butoanelor;

Sesizarea gesturilor;

Realizarea schemelor logice generale;

Scrierea, redactarea și testarea programului pe placă;

Testarea în diferite condiții de exploatare.

Comform documentației microcontrolerul AtMega32-U4 dispune de 2.5 Ko SRAM7 și 32 Ko de memorie Flash8. Deoarece memoria este foarte limitată, în acest sens trebuie realizate funcțiile cât mai compacte din punct de vedere al memoriei. Întrucât proiectul este realizat în scopul de a fi un ceas de mână cu baterie, programul trebuie scris astfel încât să se execute cât mai eficient.

Pentru început, voi realiza funcționalitatea display-ului.

Programul se va realiza și testa pe placa Arduino Leonardo din motiv că placa este realizată conform standardelor și este complet funcțională. În acest mod se evită eventualele defecte care pot apărea pe placa creată în condiții casnice.

Funcția de bază a plăcii este afișarea datei și orei exacte cât și comunicarea cu telefonul mobil. Ecranul este împărțit în două regiuni: partea de sus cu înălțimea de 16 pixeli de culoare galbenă și partea de jos are 48 pixeli de culoare albastră. În acest sens am împărțit ecranul în două cadrane orizontale:

Partea superioară indică ora exactă, starea semnalului și bateriei;

Partea inferioară indică data curentă, informații despre mesaje sau apeluri pierdute.

În Figura 2.1 am ilustrat aproximativ această delimitare.

Figura 2.1 – Ecranul principal

În funcție de mesaje sau apeluri pierdute se afișează sau nu iconițele respective. Dacă smartphone-ul primește un apel sau mesaj atunci în regiunea albastră a ecranului se afișează numărul și numele apelantului. În cazul primirii unui mesaj, informația se reține pe ecran o perioadă scurtă de timp, după care se revine la ecranul principal indicând o iconiță sub forma de plic. În cazul primirii unui apel, informația se reține pe toată perioada apelului, când încetează apelul se afișează imediat ecranul principal cu iconița de apel pierdut. Cu ajutorul butoanelor Up și Down se pot revizualiza aceste informații. În Figura 2.2 am ilustrat ambele cazuri.

a)

b)

Figura 2.2 – a) Mesaj primit, b) Apel primit

Limitarea principală este numărul de caractere ce se pot afișa pe ecran. Dacă numărul sau numele depășește un anumit număr de caractere atunci mesajele nu se mai afișează corect. Acest dezavantaj poate fi evitat prin truncarea textului sau afișarea la o dimensiune mai mică a caracterelor. Astfel voi trimite mesaje la dimensiunea corespunzătoare.

Ceasul are modul sleep care prevede oprirea display-ului după o anumită perioadă de timp. Ieșirea din modul sleep o voi realiza astfel: când se acționează butoanele, sosesc date prin modulul bluetooth și când se realizează gestul de vizualizare a orei de către utilizator.

Gestul de vizualizare a orei va fi de tipul unei simple rotații pe o axă. Astfel o rotație bruscă în ambele direcții este destul de comună ca gestul efectuat de utilizator. În Figura 2.3 am ilustrat aproximativ procedeul, rotația se face conform axei Y.

Figura 2.3 – Recunoașterea gestului

Arduino Studio

Programul principal este alcătuit din două funcții de bază:

setup() – executată o singură dată, utilă pentru efectuarea setărilor plăcii;

loop() – funcție care se execută într-un ciclu infinit imediat după ce s-a executat funcția setup().

Există două modalități de a realiza programul principal: în mod structurat sau în mod obiectual. Deoarece memoria internă este limitată și nu este o mare necesitate de a proteja accesul la date am ales programarea structurată. În acest mod codul sursă va fi mai greu de scris însa efortul se va merita deoarece economia de memorie este vitală, iar execuția programului va fi mai rapidă și economicoasă.

Pentru comanda display-ului voi utiliza interfața I2C pentru care există bibliotecile Adafruit. Modul de funcționare a acestora este prezentat în documentația distribuitorului[15]. Interfața este strict unidirecțională, transferul se face doar către bufferul display-ului. Pentru afișare este nevoie de un buffer de memorie RAM cu o dimensiune conform formulei 2.1

. (2.1)

Deci este nevoie de 1 Ko de memorie numai pentru bufferul display-ului. Pentru afișarea imaginilor este necesar să fie plasate în memoria program sub formă de vector de octeți. Pentru aceasta orice imagine trebuie să fie convertită în imagine monocromă iar imaginea monocromă convertită în șir de octeți. Conversia în șir de octeți o voi realiza cu programul LCD Asistant propus în documentația Adafruit[15]. În Figura 2.4 am ilustrat interfața programului.

Utilizarea este destul de simplă: deschid imaginea monocromă (File -> Load Image), specific orientarea octeților Horizontal, numele tabelei în căsuță după care salvez conținutul (File -> Save Output). Șirul de octeți îl copiez în codul sursă al programului principal. Cu ajutorul funcției drawBitmap() se poate afișa imaginea dorită la locația dorită pe ecran.

Pentru interfață vor exista mai multe iconițe care vor reprezenta o informație. Le voi desena în MicroSoft Paint deoarece este mult mai simplu în acest mod. Pentru indicatorul bateriei va fi utilizată o imagine de 8×16 pixeli de forma unei baterii verticale, în interior va fi desenat un dreptunghi cu înălțimea de 10 pixeli care va reprezenta procentul curent al bateriei. Astfel vor fi 11 stări posibile, în Figura 2.5 am ilustrat câteva stări: 0%, 20%, 40%, 80% și 100%.

Figura 2.5– Iconița bateriei în diferite stări

Iconița semnalului bluetooth va avea o rezoluție de 16×16 pixeli. Va indica puterea semnalului în 5 trepte: 0%, 25%, 50%, 75% și 100% iar o stare separată va fi lipsa conexiunii. În Figura 2.6 am ilustrat desenele realizate a acestor stări.

Figura 2.6 – Stările pentru indicatorul semnalului

Iconițele specifice pentru indidcarea unui SMS sau apel sunt de formele corespunzătoare. Pentru indicarea unui SMS voi desena un plic cu rezoluția de 16×20 pixeli. Deoarece rezoluția nu este standardă (putere a lui 2) aceasta o voi desena cu primitive de tip linie. Respectiv pentru indicarea unui apel primit, voi desena o inconiță sugestivă cu un receptor de telefon cu o rezoluție de 24×24 pixeli. În Figura 2.7 am ilustrat desenele realizate.

b)

Figura 2.7– a) Mesaj primit, b) Apel primit

Cele două funcții ale programului principal le voi folosi astfel: inițierea interfețelor, pinilor și timer-elor în funcția setup(); funcția loop() va fi folosită pentru afișare și tratarea butoanelor. În acest scop, LED-ul integrat este conectat la pin-ul 13 al plăcii și va avea funcționalitatea de a indica tratarea întreruperilor bluetooth. Pentru cele trei butoane voi folosi trei pini: 8,9 și 10. Aceștia vor fi setați la valoarea HIGH intern, iar la trecerea acestei valori la LOW prin scurtcircuitarea la masă va fi simulată prin verificarea lor prin interogare. Voi inițializa interfața serială asincronă pentru modulul bluetooth, iar pentru display este utilizată interfața I2C. Deoarece nu am avut disponibil modulul RTC bazat pe DS3231N am decis să realizez funcționalitatea ceasului intern. În acest scop am dedicat funcționalitatea ceasului pe baza unei întreruperi de timp pe baza timer-ului 1. Pentru ceasul intern voi folosi timer-ul 1 pe 16 biți. Numărătorul intern face un ciclu complet în aproximativ 4.125 secunde, astfel pot realiza două regimuri, unul normal care va întrerupe la 1 secundă iar celălalt la fiecare 4 secunde fiind un regim mai ergonomic. Realizând calculele reiese pentru întreruperea la secundă sunt necesare 15624 tacturi iar pentru 4 secunde 62496 tacturi. În Figura 2.8 am ilustrat operațiile în funcția setup().

Figura 2.8 – Funcția setup()

Funcția loop() are proprietatea să se execute într-un ciclu infinit. Pentru că realizez afișarea pe display în această funcție, din motiv că nu se poate realiza spre exemplu în funcțiile întreruperii de timp deoarece display-ul folosește de asemenea întreruperi pentru comunicare iar întreruperea în altă întrerupere duce la pierderea contextului, am decis să utilizez variabile booleene pentru controlul comunicării. În acest sens transmiterea datelor va fi condiționată de întreruperea de timp, care validează afișarea. După ce s-a transmis bufferul către display, se invalidează afișarea. Astfel la fiecare întrerupere de timp se va transmite noul buffer procesat către display economisind energia și resursele interne. Deci framerate-ul va fi

Figura 2.9 – Schema logică a funcției loop()

limitat la 1 frame pe secundă, ce este destul pentru o bună funcționare. Tratarea butoanelor o voi realiza prin interogare deoarece nu pot folosi întreruperi, acestea au fost ocupate de modulul bluetooth. Astfel la fiecare ciclu al funcției se vor interoga stările pinilor 8, 9 și 10. Dacă starea unuia dintre aceștia a fost schimbată la Low, atunci se consideră ca și acționat și se iau măsurile necesare. La acționare butoanelor se va ieși din modul sleep și se va afișa pe ecran informațiile interne. Butoanele Up și Down vor avea funcția de a ilustra ultimul SMS primit și ultimul apel primit respectiv. Dacă se actionează în acest interval al afișării butonul Menu atunci se va șterge contextul SMS-ului sau apelului, altfel butonul Menu va scoate pe un scurt timp display-ul din modul sleep. În Figura 2.9 este ilustrată schema funcției loop().

Comanda modulului bluetooth o voi realiza prin interfața serială. Acest lucru se poate realiza în două moduri: prin interogare sau prin întrerupere. Microcontrolerul dispune de pini dedicați care pot fi utilizați pentru întreruperi externe, fiecare întrerupere dispune de propriul vector de întrerupere. Conform specificației este dat Tabelul 2.1unde sunt specificați toți pinii care suportă întrerupere.

Astfel pentru realizarea întreruperilor pot fi folosiți toți 5 pini.

Comunicarea serială prin întrerupere are un dezavantaj prin faptul că mesajele se sparg în subșiruri. Pentru aceasta am realizat un scurt protocol de comunicare care primește trei tipuri de mesaje. Cu ajutorul informațiilor de cadrare, am realizat protocolul în următorul mod:

mesaj de tip SMS;

mesaj de tip apel;

mesaj de tip setare ora.

Un mesaj este construit sub forma:

[caracter tip mesaj]partea 1 mesaj[caracter separator]partea 2 mesaj[sfârșit mesaj]

unde:

caracter tip mesaj:

# – SMS,

$ – apel,

* – setare dată și oră;

caracterul separator este virgula ”,”;

sfârșit mesaj semnul ”>”.

Exemple de mesaje:

SMS: #0700123456,Nume expeditor>;

Apel: $0700123456,Nume apelant>;

Setare dată și oră: *110717,120000>, unde data și ora este în formatul {zzllaa,hhmmss}.

Deoarece modul de primire asincron pierde contextul, informațiile de cadrare se utilizează pentru a păstra contextul sub formă de variabile booleene. Astfel, la un mesaj sosit, el se atribuie la tipul corespunzător conform informațiilor de cadrare. Schema logică a protocolului de comunicare bluetooth este ilustrată în Figura 2.11.

Realizarea ceasului intern se poate realiza prin modulul de ceas de timp real RTC. Acest modul poate funcționa și în cazul lipsei alimentării pe baza bateriei interne CR2032. La alimentarea modului RTC acesta va încărca bateria și va fi disponibil pentru accesul datei și orei. Modulul are interfața serială I2C, astfel conectarea se va face la aceeași interfață a plăcii, accesul fiind controlat prin logică suplimentară.

Întreruperea de timp este ce-a mai importantă întrerupere a smartwatch-ului – actualizarea datei și orei. În acest scop am realizat un calculator al datei și orei împreună cu actualizarea valorilor ce vor fi afișate. Calculul este realizat în două moduri: pentru regimul normal care actualizează starea la fiecare secundă și regimul de economisire a energiei care actualizează starea la fiecare 4 secunde. În acest mic calculator am integrat și actualizarea tuturor variabilelor temporizoare care au funcționalități importante cum ar fi intervalele pentru modul sleep, afișarea unor informații pe o durată scurtă de timp și altele. Rutina de tratare a întreruperii este declanșată atunci când timerul intern generează flag-ul de overflow. Se va întrerupe programul principal, adică funcția loop() cu salvarea stării programului, se va trata rutina și apoi se va restaura starea programului principal care se va continua de unde a fost întrerupt. Astfel tratez actualizarea timpului în interiorul acestei rutine. De asemenea, după finalizarea tuturor operațiilor de calcul validez afișarea și astfel datele apar pe display. În Figura 2.10 am ilustrat rutina de tratare a întreruperii.

Figura 2.10 – Întreruperea de timp

Funcționarea programului a fost testată cu ajutorul unui bluetooth terminal instalat pe smartphone-ul Android, cu ajutorul căreia am avut posibilitatea să transmit mesaje către smartwatch.

Figura 2.11 – Întreruperea bluetooth

Programarea smartphone-ului

Aplicația pentru telefonul mobil trebuie să realizeze următoarele funcționalități:

Să se conecteze către module bluetooth pentru plăci Arduino;

Să captureze evenimente de tip primire apel sau SMS și să le trimită către smartwatch prin bluetooth;

Să conțină un terminal pentru trimiterea directă de mesaje;

Să funcționeze în fundal;

Să trimită ora curentă din telefon către smartwatch.

Pentru început am schițat o interfața simplă cu un sliding menu, unde va conține pentru fiecare element din meniu câte o pagină separată. Voi realiza următoarele pagini:

Bluetooth – aici se va realiza conexiunea cu module bluetooth;

Terminal – va fi un simplu terminal care trimite și primește mesaje prin bluetooth;

Setări – cum ar fi setarea datei și orei a smartwatch-ului;

Despre aplicație – o pagină informativă unde se descrie utilizarea aplicației.

Trimiterea datelor prin bluetooth o voi realiza exact după protocolul implementat în smartwatch, voi include informațiile de cadrare și mesajele astfel vor fi recunoscute de smartwach.

Ionic 2

Pentru a realiza aplicația pentru telefonul mobil voi utiliza framework-ul Ionic 2[16]. Acesta are mai multe avantaje:

Țintește mai multe platforme – Android, IOS, Widows;

Rulează în aplicație de tip browser – elemente de design HTML și SCSS9;

Programarea mult mai simplă – scapă programatorul de detaliile tehnice specifice fiecărei platforme.

Pentru a începe lucrul este nevoie să se instaleze pe calculator Node JS[17]. Acest utilitar permite instalarea framework-ului Ionic 2 și Cordova din linia de comandă în următorul mod:

npm install –g ionic;

nmp install –g cordova.

Aplicația ionic are paginile realizate în HTML și stilizate cu SCSS având funcțiile realizate în fișiere TS. Fiecare pagină este plasată în folder cu același nume în umrmătorul mod:

pagină_1

pagină_1.html

pagină_1.scss

pagină_1.ts

pagină_n

pagină_n.html

pagină_n.scss

pagină_n.ts

Acest mod de organizare este implementat în funcționalitatea aplicațiilor Ionic 2 și este definit în modulul aplicației prin declarațiile ulterioare. Paginile sunt declarate și importate în modulul aplicației și se inițializează în componentele aplicației.

Aplicația va trebui să realizeze următoarele:

Să caute noi module bluetooth;

Să se conecteze la module bluetooth Arduino;

Să trimită mesaje către modulul bluetooth la care este conectat;

Să trimită data și ora curentă;

Să trimită notificări de la telefon și mesagerie.

Crearea unui proiect se realizează cu ajutorul liniei de comandă, mai întâi se parcurge la directorul unde se dorește să se creeze aplicația după care se rulează comanda de instalare a unei aplicații ionic – ionic start {nume_aplicație} {prototip_aplicație}. Ionic 2 dispune de mai multe prototipuri de aplicație, cel mai simplu este blank – aplicație cu o singură pagină goală, am utilizat sidemenu[18] ca schelet al aplicației.

Deoarece am nevoie de un sliding menu care navighează la câteva pagini, am utilizat prototipul sidemenu. Această aplicație are o navigare destul de simplă și comodă, meniul se poate accesa de pe orice pagină având posibilitatea de a accesa orice pagină se dorește.

Voi realiza în aplicație 4 pagini:

Bluetooth – pagina unde se va realiza conectarea la modulul bluetooth;

Terminal – un mini terminal care trimite mesaje la modulul bluetooth Arduino;

Setings – setările aplicației, aici voi realiza testarea cu mesaje de tip SMS și apel telefonic, deasemenea setarea datei și orei în smartwatch;

About – o scurtă descriere a aplicației.

Pagina meniului va conține o listă de elemente separate între ele cu linii. La atingerea unui element, se va trece la pagina aleasă. Ascunderea meniului se poate face prin glisare în stânga. Am adăugat deasemenea butonul hide care ascunde meniul prin atingerea lui.

Am ilustrat meniul aplicației după modificarea conținutului și a paginilor în Figura 2.12.

Figura 2.12 – Meniul aplicației

Implicit aplicația va deschide pagina About.

Pagina Bluetooth va afișa elementele sub formă de listă. Această listă va conține o imagine, numele și un adresa MAC. Deoarece am decis să fac conectarea și căutarea de noi module, voi avea nevoie de două liste de acest gen. Există liste deja implementate în Ionic care conțin imagine, titlu și comentariu, această listă are numele ion-list. pentru a afișa un oarecare număr de elemente care depășește înălțimea ecranului, lista este scrol-abilă. În interiorul listei vor exista mai multe elemente, pentru a face acest lucru voi folosi un ngFor care are proprietatea de a genera mai multe elemente de tipul ion-item. Iconițele folosite în listă vor fi o imagine cu simbolul bluetooth. Obiectele pe care le va afișa sunt de tipul unei liste de elemente care trebuie parcursă element cu element. Astfel sintaxa pentru ngFor este “let item of list-items”, unde din obiectul list-items se preia câte un element item și îl generează pe pagină. La atingerea unui element se v-a executa conectarea la dispozitivul selectat. Aceasta am realizat folosind un buton, acesta va executa o funcție care primește ca argument elementul selectat din listă. În Figura 2.13 am ilustrat pagina Bluetooth

Figura 2.13 – Lista de device-uri din pagina Bluetooth

În fișierul .ts am realizat funcționalitatea din spatele paginii. Prima etapă la deschiderea paginii se va executa o funcție care va împrospăta pagina. Această funcție va fi executată la fiecare operațiune în cadrul paginii. Astfel când se va produce o oarecare modificare, aceasta va fi afișată imediat. Prima operație care se va face este verificarea dacă bluetooth-ul este pornit. Dacă este pornit se va afișa lista cu device-urile împerecheate. La selectarea unui device din listă se va verifica dacă este conectat smartphone-ul la un device, dacă este conectat se va realiza deconectarea și apoi conectarea la noul device. Pentru descoperirea noilor device-uri voi realiza un buton care are această funcție. Dacă se vor găsi, acestea vor fi afișate în pagină. Pentru a urmări operațiile din spatele paginii, am realizat un simplu log care va afișa aceste informații care sunt:

Acțiune – conectarea, căutarea, împrospătarea;

Stare – conectat, deconectat;

Erori – eroare de conectare, nu s-au găsit deviceu-ri.

Pagina Terminal va conține un simplu terminal care va avea afișat și istoricul mesajelor trimise. Am realizat un textbox unde se vor scrie mesajele, la acționarea tastei OK de pe tastatură mesajul va fi trimis către device-ul bluetooth și va apărea în log. Dacă nu este conectat la nici un device bluetooth automat se va deschide pagina Bluetooth unde se va conecta la device-ul dorit. Lista de mesaje trimise va fi afișată în textbox-ul de mai sus care are mai multe linii în vederea de a facilita listarea istoricului. În caz de incompatibilitate a versiunilor Android am plasat un buton care are menirea să execute comanda de trimitere a mesajelor. În Figura 2.14 am ilustrat pagina terminalului, golirea input-ului se va realiza automat la fiecare expediere.

Figura 2.14 – Expedierea unui mesaj

În pagina de setări voi realiza câteva funcții cum ar fi:

Setarea datei și orei smartwatch-ului;

Trimiterea unui mesaj de test de tip apel sau SMS.

Pentru realizarea funcției de trimitere a datei și orei se va folosi data și ora internă a smartphone-ului. În acest sens se pot colecta toate datele necesare și astfel am asamblat unui mesaj conform protocolului implementat în programul de pe placa Arduino. Precizia ceasului realizat programatic în placa Arduino este destul de bună, poate avea o abatere ± 1 minută maxim în 24 ore. În schimb pentru o mai bună precizie voi realiza o sincronizare prin setarea datei și orei odată pe zi din telefon în mod automat. Această funcționalitate va fi realizată într-un serviciu care va funcționa chiar și atunci când aplicația este închisă.

Mesajele de test de tip SMS și apel sunt utile pentru a verifica funcționarea modulului bluetooth. Dacă comunicarea este reușită, smartwatch-ul va afișa pe ecran aceste mesaje. Este important de asemenea să nu se depășească lungimea de 10 caractere al numărului de telefon și 11 caractere al numelui apelantului deoarece astfel mesajele nu vor mai fi afișate consistent și corect pe ecranul smartwatch-ului. Pentru realizarea acestor funcționalități am folosit butoane. Alinierea butoanelor o voi face la dreapta pentru comoditatea utilizării când utilizatorul folosește aplicația cu o singură mână. În Figura 2.15 am ilustrat conținutul paginii.

Figura 2.15 – Pagina Settings

Pentru funcționalitatea din spatele aplicației au fost adăugate mai multe extensii:

cordova-plugin-background-mode[19];

cordova-plugin-bluetooth-serial[20];

cordova-plugin-calltrap[21];

cordova-plugin-console;

cordova-plugin-device;

cordova-plugin-spalshscreen;

cordova-plugin-whitelist;

cordova-plugin-storage[22];

cordova-plugin-phonecalltrap[23].

Acestea realizează cele mai importante funcții cum ar fi tratarea modulului bluetooth intern, rularea aplicației când este în background, detaliile smartphone-ului cum ar fi rezoluția și diagonala ecranului, stocarea datelor în memoria permanentă, tratarea listelor și nu în ultimul rând tratarea evenimentelor de tip apel telefonic și SMS.

Motorul din spatele aplicației doresc să în realizez pe baza unui serviciu deoarece acesta rulează permanent chiar și în momentul când aplicația este închisă. În pagina index.html se poate include un fișier .js care va avea această funcționalitate. În browser această metodă este utilă pentru tratarea funcțiilor mai lungi în background astfel degrevând interfața de tratarea lor explicită. Deoarece pe smartphone-ul Android nu sunt suportate includeri de fișiere JavaScript din considerente ale securității, acestea nu se pot folosi. Framework-ul deocamdată nu are implementată funcționalitatea în scopul rezolvării acestei probleme, în acest sens am inclus extensia backgroundworker. Extensia însă nu funcționează când aplicația este închisă de utilizator. în acest sens ea trebuie să nu fie închisă pentru a funcționa.Extensiile phonecalltrap și smstrap au la bază implementarea înregistrării și tratării unor evenimente de tip apel sosit și SMS sosit.

Pentru extensia PhoneCallTrap codul sursă din spate poate colecta numărul de telefon al apelantului implicit. Această funcționalitate este necesar de a fi extinsă prin posibilitatea captării și a numelui apelantului. În acest sens există trei cazuri posibile: apelant din cartea de telefoane cu număr și nume, apelant neînregistrat care are doar numărul și număr ascuns ”hidden number”. În toate cazurile numărul de telefon este completat, numele doar în primul caz. În ultimele două cazuri numele va fi specificat ca “unknown”.

Extensia SmsInboxPlugin are posibilitatea de a sesiza mesajele care sosesc. La fiecare mesaj este posibil de a prelua numărul, numele și textul mesajului. În caz că lipsește numele sau numărul este ascuns aceste câmpuri le voi completa explicit ca și în cazul extensiei PhoneCallTrap. Textul mesajului în această extensie nu se va prelua deoarece nu este necesar.

Odată ce apare un eveniment de tip SMS sau apel telefonic, aplicația va trimite mesajul respectiv către smartwatch. În aceste cazuri pe ecranul smartwatch-ului vor apărea notificările și utilizatorul va lua măsurile dorite.

Codurile sursă

Codurile sunt incluse pe suport electronic pe mediu optic. În rădăcină sunt următoarele directoare:

ArduinoPCB – aici este inclus tot proiectul realizat în mediul de proiectare Cadence;

HandWatch – programul principal pentru smartwatch;

Ionic 2 – cu aplicația pentru smartphone-ul Android.

Fișierele aferente precum imagini, fișiere de date și programe utilizate în proiectare sunt incluse în directorul ProjectFiles.

Capitotul III. Manual de utilizare

Pentru utilizarea smartwatch-ului este nevoie de a realiza următorii pași:

Cablarea perifericelor la placa Arduino;

Programarea plăcii Arduino;

Instalarea aplicației pe smartphone-ul Android;

Utilizarea smartwatch-ului

Conectarea la placa Arduino prin bluetooth,

Trimiterea mesajelor prin terminal,

Setările aplicației;

Controlul smartwatch-ului.

Cablarea perifericelor la placa Arduino

Pentru funcționarea montajului este nevoie de:

Placa Arduino Leonardo;

Modul bluetooth SPP-c;

Modul display SSD1306;

Fire de conexiune.

Modulul display pentru funcționare are nevoie de o tensiune de alimentare stabilă de 3.3 V. Această tensiune este disponibilă pe placă la magistrala de alimentare. Se vor conecta 4 fire male-female la modului display. Pinul VCC al display-ului se va conecta la pinul 3.3 V al plăcii Arduino, pinul GND la GND, pinii SCL și SDA ai display-ului la pinii SCL și SDA ai plăcii Arduino Leonardo respectiv.

Modulul bluetooth are o gamă a tensiunii de alimentare de la 3.6 la 6 V. În acest sens se poate alimenta la tensiunea de 5 V disponibilă a plăcii Arduino. Pinul TX al modulului bluetooth se leagă la pinul RX a plăcii Arduino. Pinul RX se leagă la divizorul de tensiune alcătuit din două rezistoare la pinul dintre rezistențe. Pinul din capătul rezistenței de 20 KΩ se leagă la masă, iar pinul 3 al divizorului la pinul TX al plăcii Arduino.

Butoanele se inseriază cu câte o rezistență de 10 KΩ și leagă la pinii 8, 9 și 10 ai plăcii Arduino, iar pinul comun la un pin GND al plăcii.

În Figura 3.1 este ilustrat montajul complet.

Figura 3.1 – Interconectarea componentelor

Programarea plăcii Arduino

Pentru a programa placa Arduino este nevoie să fie instalat pe calculator softul Arduino Studio. Bibliotecile pentru modulul display și bluetooth trebuie adăugate la bibliotecile sistemului, bibliotecile se află pe CD. Se deschide codul sursă conținut pe CD și se selectează din bara de instrumente placa Arduini Leonardo: Instruments -> Board -> Arduino Leonardo. Cu ajutorul unui cablu microUSB se programează placa, după această operațiune montajul va începe funcționarea prin afișarea datei și orei pe ecran. Dacă se dorește se poate modifica data și ora prestabilită din codul sursă.

Instalarea softului pe smartphone-ul Android

Pentru a putea instala softul pe smartphone, este necesar să se copieze direcotrul de pe CD într-un director de pe calculator. Pe calculator trebuie instalate NodeJS, SDK-ul Android și bibliotecile JDK7. Pentru instalare trebuie pornit CMD și să se navigheze în directorul proiectului. Telefonul trebuie să fie în regim debug și conectat la calculator. După aceasta se rulează comanda în CMD: ionic cordova run android. În acest mod aplicația va fi instalată pe telefon și pornită automat.

Utilizarea smartwatch-ului

Smartwatch-ul este destinat pentru a fi conectat la un smartphone Android.

Conectarea la placa arduino prin bluetooth

După lansarea aplicației pe smartphone, se va afișa ecranul de start. Cu ajutorul unei gesturi de glisare pe ecran de la stânga la dreapta se va deschide meniul de navigare al aplicației. În Figura 3.2 este ilustrat conținutul meniului. Prima etapă este de a naviga la pagina Bluetooth. Dacă modulul bluetooth al telefonului este oprit, aplicația va cere pornirea acestuia. Dacă se va aproba pornirea bluetooth-ului pe ecran se va afișa lista de device-uri împerecheate cu telefonul. Lista apare ca în Figura 3.3. Dacă dispozitivul bluetooth Arduino nu este împerecheat cu smartphone-ul, se poate adăuga prin căutarea noilor dispozitive. În Figura 3.4 este ilustrată procedura de căutare. Tastând pe butonul Search se vor căuta noi dispozitive. Dacă dispozitivul bluetooth Arduino apare în listă la selectarea acestuia se va realiza conectarea la el, în acest caz se va cere codul de acces. Codul de acces standard este 0000. În cazul unei erori se va încerca din nou conectarea. Mesajele informative apar după cuvântul Log. Dacă conectarea s-a realizat cu succes atunci smartwatch-ul va porni display-ul, acum se va realiza comunicarea prin mesaje bluetooth cu smartwatch-ul.

Figura 3.2 – Meniul de navigare

Figura 3.3 – Pagina bluetooth

Figura 3.4 – Căutarea noilor dispozitive

Trimiterea mesajelor prin terminal

Pagina conține un istoric în partea superioară care va conține mesajele care se trimit către smartwatch. După această căsuță este linia unde se pot tasta mesaje. După tastarea unui mesaj acesta poate fi trimis fie cu butonul explicit Send sau cu tasta OK de pe tastatură. Conținutul paginii este ilustrat în Figura 3.5. Dacă smartphone-ul este conectat la smartwatch pagina este valabilă, în caz contrar se va deschide pagina Bluetooth unde se va aștepta să se realizeze o conexiune.

Figura 3.5 – Pagina terminalului

Setările aplicației

În setările aplicației se pot face câteva operații: setarea datei și orei din telefon în smartwatch, trimiterea mesajelor de test de tip apel telefonic și SMS. În Figura 3.6 este ilustrat conținutul paginii.

Figura 3.6 – Pagina Settings

Controlul smartwatch-ului

Smartwatch-ul este controlat cu ajutorul a 3 butoane. Acestea sunt Menu, Up și Down. În Figura 3.7 este ilustrat ecranul principal. În partea de sus este afișat ceasul cu ora, minuta și secunda. În stânga este ilustrată antena semnalului bluetooth iar în dreapta bateria. În partea de jos este ilustrată data curentă cu ziua lunii, luna cu caractere, ziua din săptămână și anul. Dacă timp de 30 secunde smartwatch-ul nu este utilizat și nu primește notificări prin bluetooth acesta intră în modul sleep și oprește ecranul. Cu ajutorul butonului Menu se efectuează ieșirea din modul sleep, iar cu butoanele Up sau Down se efectuează trezirea și afișarea apelului sau SMS-ului. Dacă se acționează butonul Up atunci smartwatch-ul va afișa ultimul sms care a sosit în smartphone precum în Figura 3.8. Dacă se acționează butonul Down atunci se va afișa ultimul apel sosit în smartphone precum este ilustrat în Figura 3.9. Pe ecran această informație este afișată timp de 4 secunde după care se revine la ecranul principal. În acest caz pe ecranul principal se va afișa un plic dacă a sosit un SMS și un receptor de telefon cu o săgeată în cazul unui apel telefonic primit. În Figura 3.10 este ilustrat ecranul în cazul când au sosit ambele notificări. Pentru a șterge aceste informații trebuie să se acționeze butonul Up sau Down pentru SMS sau apel telefonic unde se afișează și apoi respectiv și să se acționeze butonul Menu în timp ce informațiile sunt afișate. După aceasta pe ecranul principal nu vor mai fi afișate iconițele dacă notificările au fost șterse.

Capitolul IV. Concluzii

Realizarea practică a smartwatch-ului a fost o experiență amplă a situațiilor dificile care pot apărea în parcursul dezvoltării a acestui produs. Majoritatea dificultăților sunt în detalii, deoarece pentru a obține o funcționalitate fără erori este destul de dificil. Pe de altă parte implementarea fără testare nu are sens deoarece rezultatele pot fi imprevizibile. În cele din urmă a rezultat montajul împreună cu aplicația din smartphone ilustrate în Anexa 6 pag.

Pe durata dezvoltării programelor pentru smartwatch cât și pentru smartphone au fost permanent testate. Întrucât funcționarea nu este conform așteptărilor unele detalii au fost realizate cu mici schimbări față de ideea de bază. Limitarea principală este memoria smartwatch-ului, având doar 2,5 Ko de memorie SRAM este dificil de a integra multe funcționalități. Memoria Flash spre exemplu poate fi extinsă prin conectarea unui modul microSD, dar această metodă nu oferă un mare avantaj. Având la dispoziție placa Arduino Leonardo care are posibilități limitate, am realizat funcționalitatea cât mai eficient posibil. Tendința de a realiza cât mai multe funcționalități astfel încât să se obțină un smartwacth mai inteligent este o muncă dificilă.

În urma realizării practice am reușit să conectez modulul bluetooth, display și butoane. Am construit interfața funcțională bazându-mă pe imaginație și cunoștințe practice. Împrospătarea conținutului afișat pe display se realizează cu o rată stabilă de 1 frame/secundă. Acest interval este destul de eficient deoarece este impus de bătaia secundei. În partea superioară cel mai eficient am afișat un ceas digital în formatul 24 ore cu afișarea secundei. Dimensiunea caracterelor este destul de mare încât să fi citibilă cu ușurință de la distanța normală în care utilizatorul citește ora de pe ceasul de mână. Comunicarea prin bluetooth este realizată unidirecțional din motiv că smartwach-ul nu conține informații relevante pentru a fi citite din smartphone. Aplicația smartphone-ului poate controla modulul bluetooth în sensul de a se conecta și a trimite date către smartwatch și conține 4 pagini unde primele 3 sunt importante din punct de vedere funcțional iar ultima informativă pentru utilizator. La evenimente cum ar fi apel sosit sau mesaj SMS, acesta va trimite aceste informații către smartwach. Astfel programele sunt mai simple și nivelul de încărcare este mult mai scăzut. Este foarte important ca aceste programe să fie cât mai eficiente din punct de vedere al consumului deoarece bateriile au o încărcătură destul de limitată. Din acest punct de vedere programele trebuie să fie nu numai compacte dar și ergonome.

Dezvoltări ulterioare

Pentru a extinde funcționalitatea smartwatch-ului trebuie ales un alt microcontroler cu mai multă memorie și frecvențe de funcționare mai mari. În acest sens se pot adăuga noi funcționalități cum ar fi:

senzor de temperatură;

senzor de umiditate;

un magnetometru pentru implementarea unei busole;

un card microSD în vederea obținerii unui mediu de stocare mare;

posibilitatea de putea fi modificat de către utilizatorii cunoscători în domeniu prin mai mulți pini disponibili.

Îmbunătățirea programului principal pentru a conține și modul de funcționare standalone unde partea de comunicare cu telefonul lipsește. De asemenea extinderea aplicației pentru smartphone astfel încât să se poată efectua mai multe operațiuni asupra smartwatch-ului cum ar fi trimiterea notificărilor de sistem. Acestea țin de mai multe aplicații iar colectarea și transmiterea lor este utilă precum și notificările SMS și apelurile de telefon. De asemenea se poate îmbunătăți interfața programului cu adăugarea unor pagini de configurare a modurilor de notificare a smartwatch-ului și îmbunătățirea interfeței.

Bibliografie

Győrödi Robert, Proiectarea aplicațiilor pentru dispozitive mobile și web, 2016

Maștei Daniela, Proiectare asistatǎ de calculator, Editura Departamentului I.D., 2003

Poszet Otto, Sisteme de achiziție și prelucrare a datelor, 2017

Vari K. Ștefan, Microprocesoare și microcalculatoare, Editura Universității din Oradea, 2002

[1] https://en.wikipedia.org/wiki/Atmel#Microcontrollers – Consultat 23.12.2016

[2] https://en.wikipedia.org/wiki/Arduino – Consultat 23.12.2016

[3] http://www.atmel.com/Images/Atmel-7766-8-bit-AVR-ATmega16U4-32U4_Datasheet.pdf – Consultat 24.12.2016

[4] https://cdn-shop.adafruit.com/datasheets/SSD1306.pdf – Consultat 12.02.2017

[5] http://shop.aftabrayaneh.com/image/data/product%20extension/SPP-C-Bluetooth/SPP.pdf

– Consultat 15.02.2017

[6] https://datasheets.maximintegrated.com/en/ds/DS3231.pdf – Consulat 17.02.2017

[7] https://www.invensense.com/wp-content/uploads/2015/02/MPU-6000-Datasheet1.pdf – Consultat 18.02.2017

[8] https://dlnmh9ip6v2uc.cloudfront.net/datasheets/Prototyping/TP4056.pdf – Consultat 20.02.2017

[9] https://www.onsemi.com/pub/Collateral/NCP1117-D.PDF – Consultat 24.02.2017

[10] http://www.ti.com/general/docs/lit/getliterature.tsp?genericPartNumber=LP2985-30&fileType=pdf – Consultat 24.02.2017

[11] http://www.ti.com/lit/ds/symlink/lmv324.pdf – Consultat 25.02.2017

[12] http://www.mouser.com/ds/2/54/LC-777442.pdf – Consultat 25.02.2017

[13] http://www.mouser.com/catalog/catalogusd/645/742.pdf – Consultat 2.03.2017

[14] http://www.lc-led.com/products/ut-692yq.html – Consultat 3.03.2017

[15] https://cdn-learn.adafruit.com/downloads/pdf/monochrome-oled-breakouts.pdf – Consultat 18.03.2017

[16] https://ionicframework.com/ – Consultat 29.03.2017

[17] https://nodejs.org/en/ – Consultat 25.04.2017

[18] https://github.com/ionic-team/ionic2-starter-sidemenu – Consultat 29.04.2017

[19] https://ionicframework.com/docs/native/background-mode/ – Consultat 2.04.2017

[20] https://ionicframework.com/docs/native/bluetooth-serial/ – Consultat 8.04.2017

[21] https://4npm.com/package/cordova-plugin-calltrap – Consultat 20.04.2017

[22] https://ionicframework.com/docs/native/secure-storage/ – Consultat 27.04.2017

[23] https://github.com/renanoliveira/cordova-phone-call-trap – Consultat 15.05.2017

Anexe

Anexa 1. Datele tehnice ale microcontrolerului AtMega 32U4

Microcontroler de înaltă performanță și consum de putere mic AVR® pe 8 biți

Arhitectură avansată RISC

135 instrucțiuni de bază – majoritatea se execută pe un singur ciclu de ceas

32 х 8 registre de lucru de uz general

Operațiune total statică

Până la 16 MIPS la 16MHz

Multiplicator On-Chip de tip 2-ciclu

Program nevolatil și memorie de date

Memorie flash In-System autoprogramabilă de 16/32 Ko

SRAM intern de 1.25/2.5 Ko

EEPROM intern 512B/1 Ko

Cicluri ștergere/scriere:10,000 Flash / 100,000 EEPROM

Menținerea datelor: 20 de ani la temperatura de 85 șC și până la 100 de ani la temperatura de 25 șC

Secțiune de Boot Code opțională cu biți Lock independeți

Programare In-System pe baza de program On-chip Boot

Operațiune True Read-While-Write

Unitățile care folosesc ceasul XTAL extern sunt pre-programate prin USB bootloader

Programming Lock pentru Software Security

Interfață JTAG (IEEE® std. 1149.1 compliant)

Scanare la limita standardului JTAG

Debug On-chip Suport extensiv

Programare Flash, EEPROM, fuzibili și Lock Bits prin intermediul interfeței JTAG

USB 2.0 Full-speed/Low Speed Device Module cu întrerupere la completarea transferului de date

Compatibil cu specificația Universal Serial Bus revizia 2.0

Suportă rate de transfer de date de până la 12Mbit/s și 1.5Mbit/s

Endpoint pentru Control de Transfer: pînă la 64 octeți

Șase Endpoint-uri Programabile pe direcțiile IN sau OUT, întreruperi sau transferuri izocrone

Endpoint-uri configurabile pînă la 256 biți în mod dublu bank

USB DPRAM de 832 biți complet independent pentru alocarea memoriei endpoint

Întreruperi suspendare/reluare

Resetare CPU posibilă pentru detectarea resetării magistralei USB

48 MHz din PLL pentru operarea magistralei Full-Speed

Conectarea/Deconectarea magistralei USB la cererea microcontrolerului

Operațiune fără rezonator de quarț extern pentru modul Low Speed

Caracteristici periferice

On-chip PLL pentru USB și High Speed Timer: operațiune de la 32 până la 96 MHz

Un Timer/Counter de 8 biți cu Prescalare separată și mod Comparare

Două Timere/Countere de 16 biți cu Prescalare separată, mod Comparare și Capturare

Un High-Speed Timer/Counter de 10 biți cu PLL (64 MHz) și mod Comparare

Patru Canale PWM de 8 biți

Patru Canale PWM cu Rezoluție Programabilă de la 2 la 16 biți

Șase Canale PWM pentru High Speed Operation Rezoluție Programabilă de la 2 la 11 biți

Modulator de Comparare la ieșire

CAN de 12 canale de 10 biți (caracteristicile Canalelor Diferențiale cu Amplificare programabilă)

USART serial programabil cu control de flux Hardware

Interfață serială SPI Master/Slave

Interfață serială 2-wire orientată pe octet

Timer de gardă programabil cu oscilator separat On-Chip

Comparator Analog On-chip

Întrerupere și trezire la schimbarea stării pin-ului

Senzor de Temperatură On-chip

Caracteristici speciale a Microcontrolerului

Detecție a resetării la Power-on și Brown-out programabil

Oscilator intern calibrat de 8 MHz

Prescalare a ceasului intern și comutare de ceas On-the-fly (intern de tip RC / extern de tip oscilator de quarț)

Surse de întrerupere externe și interne

Șase moduri sleep: Idle (inactiv), ADC de reducere a zgomotului, Power-save, Power-down, Standby și Extended Standby

I/O și Pachete

Toate I/O combină ieșirile CMOS și intrările LVTTL

26 linii I/O programabile

Capsule

TQPF 44 de 10×10 mm

QFN 44 de 7×7 mm

Caracteristici electrice

Tensiuni de operare cuprinse între 2.7 – 5.5 V

Temperatura de operare

Industrială (-40 ° C până la + 85 ° C)

Frecvența maximă

8 MHz la 2.7 V gama Industrială

16 MHz la 4.5 V gama Industrială

http://www.atmel.com/Images/Atmel-7766-8-bit-AVR-ATmega16U4-32U4_Datasheet.pdf

Anexa 2. Datele tehnice ale display-ului

Model SSD1306 cu rezoluția 128×64 monocrom de tip OLED

2 secțiuni orizontale

Prima secțiune cu rezoluția 128×16 de culoare galbenă

A doua secțiune cu rezoluția 128×80 de culoare albastră

256 nivele de contrast

Interfața I2C

Unidirecțională (doar scriere)

Detine 2 pini SDA si SCL

Buffer intern

SRAM de 1024 octeți

Remapare pe rânduri și coloane

Semnal de sincronizare de scriere în RAM

Oscilator integrat

Caracteristici electrice

Tensiune de alimentare 1.65 – 3.3 V

Curent maxim 15 mA

Nivelele logice constituie 1.65 – 3.3 V

Temperatura de operare

Industrială (-40 ° C până la + 85 ° C)

https://cdn-shop.adafruit.com/datasheets/SSD1306.pdf

Anexa 3. Datele tehnice ale modulului Bluetooth

Model SPP-C Bluetooth V2.1 + EDR

Bluetooth de clasa 2

Antena RF integrata

Interfață serială de tip UART cu 2 pini TX si RX

Rata de transfer de la 1200 – 1382400 bit/s, standard 9600 bit/s

Servire ca master sau slave

Caracteristici electrice

Tensiunea de alimentare 3.3 V

Frecventa de operare intre 2.4 – 2.48 GHz pe banda nelicențiata ISM

Nivelele logice 3.3 V

Curenții de alimentare

Minim in standby 40 µA

Maxim in transfer date la rata 38.4 kbit/s 19.8 mA

Temperatura de operare

Industrială (-40 ° C până la + 85 ° C)

http://shop.aftabrayaneh.com/image/data/product%20extension/SPP-C-Bluetooth/SPP.pdf

Anexa 4. Schema de referință a plăcii Arduino Leonardo

Anexa 5. Circuitul plăcii Arduino Leonardo realizat în Orcad Capture

Circuitul microcontrolerului

Puntea de alimentare

Circuitul USB

Conectorii

Încărcătorul de baterie

Stabilizatorul de tensiune liniar

Detectorul de tensiune externă

Stabilizatorul 5 la 3.3 V

Indicatoarele LED

Anexa 6. Montajul smartwatch-ului și aplicația din smartphone

DECLARAȚIE DE AUTENTICITATE A

LUCRĂRII DE FINALIZARE A STUDIILOR

Titlul lucrării _____________________________________________________

________________________________________________________________

________________________________________________________________

Autorul lucrării ___________________________________________________

Lucrarea de finalizare a studiilor este elaborată în vederea susținerii examenului de finalizare a studiilor organizat de către Facultatea _________________________________________ din cadrul Universității din Oradea, sesiunea_______________________ a anului universitar ______________.

Prin prezenta, subsemnatul (nume, prenume, CNP) _________________

________________________________________________________________

________________________________________________________________,

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

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

Oradea,

Data Semnătura

Similar Posts