Sistem cu comandă vocală [616333]
Sistem cu comandă vocală
pentru casă inteligentă
PROIECT DE DIPLOMĂ
Coordonator știin țific:
Șef. lucr. dr. ing. Angel CAȚARON
Absolvent: [anonimizat], 2018
Sistem cu comandă vocală pentru casă inteligentă
1
Conținut
1 Introducere ………………………….. ………………………….. ………………………….. ………………………….. ……………………. 3
1.1 Internet of Things ………………………….. ………………………….. ………………………….. ………………………….. …. 4
2 Prezentarea lucrării ………………………….. ………………………….. ………………………….. ………………………….. ………. 5
2.1 Tehnologii utilizate ………………………….. ………………………….. ………………………….. ………………………….. .. 6
2.1.1 Limbajul C# și platforma .NET ………………………….. ………………………….. ………………………….. …. 6
2.1.2 Tehnologia UWP (Universal Windows Platform) ………………………….. ………………………….. … 6
2.1.3 Visual Studio 2017 Community ………………………….. ………………………….. ………………………….. .. 7
2.1.4 Windows 10 IoT ………………………….. ………………………….. ………………………….. ………………………… 8
2.1.5 Protocolul AMQP ………………………….. ………………………….. ………………………….. ………………………. 8
2.1.6 MongoDB ………………………….. ………………………….. ………………………….. ………………………….. ………. 9
2.1.7 Dialogflow ………………………….. ………………………….. ………………………….. ………………………….. ……11
2.2 Arhitectură hardware ………………………….. ………………………….. ………………………….. ……………………… 12
2.2.1 Raspberry Pi 3 Model B ………………………….. ………………………….. ………………………….. …………. 12
2.2.2 Ecran tactil pentru Raspberry Pi ………………………….. ………………………….. ……………………….. 14
2.3 Arhitectură software ………………………….. ………………………….. ………………………….. ………………………. 15
2.3.1 Nanosoft.Core ………………………….. ………………………….. ………………………….. ………………………… 16
2.3.2 Nanosoft.Applications ………………………….. ………………………….. ………………………….. ……………. 24
2.3.3 Nanosoft.CPPDrivers ………………………….. ………………………….. ………………………….. …………….. 26
2.3.4 Nanosoft.Modules ………………………….. ………………………….. ………………………….. …………………. 27
2.3.5 Nanosoft.ModuleManager ………………………….. ………………………….. ………………………….. ……. 34
2.3.6 Nanosoft.MediaPlayer ………………………….. ………………………….. ………………………….. …………… 41
2.3.7 Nanosoft.UI ………………………….. ………………………….. ………………………….. ………………………….. … 46
2.3.8 Java script pentru Dialogflow ………………………….. ………………………….. ………………………….. …. 47
3 Rezultate ………………………….. ………………………….. ………………………….. ………………………….. …………………….. 49
4 Concluzii și îmbunătățiri ulterioare ………………………….. ………………………….. ………………………….. ………… 51
4.1 Concluzii ………………………….. ………………………….. ………………………….. ………………………….. ………………. 51
Sistem cu comandă vocală pentru casă inteligentă
2
4.2 Îmbunătățiri ulterioare ………………………….. ………………………….. ………………………….. ……………………. 51
Bibliografie ………………………….. ………………………….. ………………………….. ………………………….. ………………………….. 52
Sistem cu comandă vocală pentru casă inteligentă
3
1 INTRODUCERE
În prezent tot mai multe dispozitive sunt create cu scopul de a fi inteligente, începând de la
telefoane, televizoare și până la frigidere, mașini de spălat sau becuri, as tfel încât se poate ajunge
la o casă inteligentă în care toate dispozitivele sunt conectate între ele și fac schimb de date pentru
a menține o securitate sporită și un grad de confort ridicat .
O casă inteligentă reprezintă un spațiu locuibil car e folosește tehnologii moderne de automatizare
pentru a oferi confort și securitate.
Lucrarea prezintă un sistem hardware și software modular pentru automatizarea și controlul unei
locuințe cu ajutorul comenzilor vocale.
Pentru elaborarea acestui sistem parcurgem următorii pași:
Proiectarea sistemului hardware de control pentru locuință care să fie modular și ușor de
extins în cazul adăugării de noi funcționalități.
Proiectarea sistemului software modular pentru interacțiunile cu sistemul hardware
capabil să gestioneze și să comande modulele hardware .
Conceperea unui set de comenzi vocale de bază pentru control integrat în sistemul software
în așa fel încât să se poată comanda modulele noi fără să se modifice lista de comenzi
predefinite a sistemu lui.
Dezvoltarea unui sistem complet modular atât software cât și hardware care permite
adăugarea de noi funcționalități atât prin scrierea de noi module software cât și prin
adăugarea de noi module hardware.
Pentru dezvoltarea sistemului s -a ales să se lu creze platforme și sisteme oferite de compania
Microsoft pentru partea de hardware și software și cu platforme oferite de compania Google pentru
partea de recunoaștere a vocii și interpretarea limbajului natural pentru a determina comenzile.
Aplicațiile s oftware sunt dezvoltate în limbajul C# cu tehnologia UWP (Universal Windows Platform)
concepută special pentru a putea rula pe mai multe arhitecturi de procesor, printre care și ARM,
care facilitează rularea atât pe sistemul de operare Windows 10 pe deskto p sau laptop, cât și pe
sistemul de operare Windows 10 IoT Core ce rulează pe sistemele embedded precum Raspberry Pi.
Sistem cu comandă vocală pentru casă inteligentă
4
1.1 INTERNET OF THINGS
Internet of Things (IoT) [1] reprezin tă o rețea de dispozitive hardware, autovehicule, electrocasnice
și alte element e ce conțin senzori, actuatori și elemente de comunicare ce le permite să comunice
și să facă schimb de date. Prin aceasta se crează oportunitatea de a integra mult mai ușor
elementel e fizice în sistemele bazate pe calculator, rezultând în îmbunătățirea ef icienței și beneficii
economice.
Conceptul de Internet of Things a evoluat datorită dezvoltării și unificării a mai multor tehnologii
precum analiza de date în timp real, inteligența artificială și sistemele embedded , iar senzorii de
rețea wireless, sistem ele de control și alte sisteme contribuie la dezvoltarea conceptului de Internet
of Things.
Acest concept a fost discutat încă din anul 1982, când a apărut dozator automat de Coke modificat,
reprezentând primul dispozitiv conectat la internet, capabil să d ea informații despre băuturile din
inventarul propriu și despre starea acestora, indicând dacă cele nou introduse în stoc sunt reci sau
nu. Internet of Things are aplicații în mai multe domenii ce se pot clasifica de obicei în următoarele
categorii:
Locuințe inteligente, în care dispozitivele IoT fac parte din conceptul de automatizare a
locuințelor și pot controla factori precum lumina, căldura și aerul condiționat dar și elemente
precum sisteme media sau sisteme de securitate.
Aplicații Enterprise, acest termen referindu -se la dispozitive ce pot fi utilizate în mediul de
afaceri.
Aplicații de infrastructură ce se referă la controlul și monitorizarea infrastructurii mediilor
rurale sau urbane precum poduri sau căi ferate. De asemenea unele dispozitive pot fi
utilizate pentru monitorizarea oricărui eveniment ce ține de condițiile structurale ale unei
clădiri și poate avertiza dacă integritatea acesteia este compromisă.
Aplicații în agricultură în care dispozitivele IoT pot oferi informații despre temper atură,
umiditate, viteza vântului și conținutul solului.
Monitorizarea mediului ce constă în dispozitive ce ajută la protecția mediului prin
monitorizarea calității aerului sau a apei, a condițiilor de sol și uneori poate include chiar
monitorizarea animal elor salbatice și a mediilor în care trăiesc.
Proiecte la scară de oraș sau regiune ce pot îmbunătăți administrarea acestora.
Aplicații în medicină ce pot avea ca scop monitorizarea la distanță a stării de sănatate a unei
persoane și pot pune la dispoziție un sistem de notificare a medicului în cazul în care există
o urgență. Dispozitivele disponibile pentru această arie sunt de la foarte simple, precum
monitorizarea tensiunii arteriale sau a ritmului inimii, până la cele mai complexe, ce includ
dispozitive specializate capabile să monitorizeze implanturi precum stimulatoarele
cardiace .
Sistem cu comandă vocală pentru casă inteligentă
5
2 PREZENTAREA LUCRĂRII
Lucrarea de față are ca scop implementarea unui sistem hardware și software de control al
unei case inteligente folosind comenzi vocale. Interpretarea comenzilor vocale se face
utilizând serviciile oferite de Google și anume:
Google Assistant
Actions on Google
Dialogflow
Firebase
Comenzile vocale sunt preluate de Google Assistant folosind un telefon mobil sau un alt
dispozitiv care dispune de acest sist em, spre exemplu Google Home. După ce sunt procesate,
comenzile vocale sunt transmise la un bot conversațional creat și configurat cu serviciul
Dialogflow și integrat in Assistant prin serviciul Actions on Google. Bot-ul preia comanda și
determină intenția utilizatorului, apoi apelează o funcție în Firebase pentru a transmite la
dispozitiv acțiunea dorită de utilizator. În Figura 1 este prezentată arhitectura sistemului de
preluare și procesare a comenzilor vocale.
Figura 1 Schema bloc de reprezentare a comunicării între toate componentele sistemului
Sistem cu comandă vocală pentru casă inteligentă
6
2.1 TEHNOLOGII UTILIZATE
2.1.1 Limbajul C# și platforma .NET
Pentru dezvoltarea componentelor software ale sistemului prezentat s -a utilizat limbajul de
programare C# [2].
La dezvoltarea limbajului C# a contribuit o echipă restrânsă de ingineri de la compania Microsoft,
echipă din care s -a remarcat Anders Hejlsberg (autorul limbajului Turbo Pascal și membru al echipei
care a proiectat Borland Delphi). Acest li mbaj este unul s implu, care conț ine aproximativ 80 de
cuvinte cheie și 12 tipuri de date predefinite.
C# este un limbaj de programare orientat pe obiect ce oferă dezvoltatorilor posibilitatea de a crea
aplicații sigure și robuste ce rulează pe platforma .NET. Acesta a fos t conceput de compania
Microsoft la sfârșitul anilor 1990 ca un concurent pentru limbajul de programare Java.
Sintaxa limbajului C# este foarte ușor de învățat astfel că orice programator care are cunoștințe de
C++ sau Java o poate învăța foarte rapid deoa rece există foarte multe asemănări între sintaxele
celor 3 limbaje.
Fiind un limbaj de programare orientat pe obiect C# suportă conceptele de baza precum încapsulare,
moștenire sau polimorfism. Toate variabilele și metodele, incluzând metoda Main, punctul de
intrare într -o aplicație C#, sunt încapsulate în clase. În acest limbaj o clasă poate mșteni direct doar
o singură altă clasă dar poate implementa mai multe interfețe.
Programele scise în limabjul de programare C# rulează pe platforma .NET ce reprezintă o
componentă integrată în Windows. Această platformă include un sistem de execuție virtuala
denumit common language runtime (CLR) și un set unificat de biblioteci de clase. CLR repezintă o
implementare a companiei Microsoft pentru standardul internațional coomon language
infrastructure (CLI). CLI reprezintă baza pentru crearea de medii de dezvoltare și execuție a
programelor în care limbajele și librăriile să funcționeze perfect împreună.
2.1.2 Tehnologia UWP (Universal Windows Platform)
Odată cu lansarea sistemului de operare Windows 10 compania Microsoft a lansat și platforma
UWP (Universal Windows Platform) [3] ce pune la dispoziție o platformă de aplicații comună pentru
toate dispozitivele ce rulează sistemul de operare Windows 10. Dacă aplicația scrisă în UWP
utilizează doar API -uri (Application Programming Interface) de bază aceasta va rula pe orice
dispozitiv ce rulează Windows 10, indiferent daca arhitectura procesorului este ARM, x86 sau x64.
O aplicație UWP scrisă în limbajul de programare C++ are acces la toate API -urile de Win32 ce fac
parte din UWP, API -uri prezente pe toate dispozitivele ce rulează Windows 10.
Dacă se dorește implementarea de aplicații pentru dispozitive IoT(Internet of Things) și este necesar
accesul la funcționalități specific e ale dispozitivului țintă se poate utiliza componenta Extension
Sistem cu comandă vocală pentru casă inteligentă
7
SDK ce permite apelarea de API -uri specializate pe diferite funcții specifice dispozitivelor țintă. De
asemenea o aplicație poate fi scrisă în așa fel încât să ruleze doar pe un singur tip de dispozitiv iar
distribuția ei să se facă specific pentru acel tip de dispozitiv sau să verifice prezența unui API pe
dispozitivul pe care rulează și să se comporte diferit în diferite scenarii.
Pentru proiectul prezentat s -a ales a doua variantă deoarece se dorește posibilitatea de rulare atât
pe dispozitive destkop cât și pe dispozitivul ce reprezintă ținta primară și anume Raspberry Pi. La
pornirea sistemului acesta verifică prezența în sistem a componentei GPIO (General Purpose Input
Output) și în funcț ie de asta sistemul generează comportament diferit. Dacă această componentă
este prezentă în sistem acesta inițializează modulele ce se ocupă cu interacțiunile la nivel hardware.
2.1.3 Visual Studio 2017 Community
Microsoft Visual Studio [4] este un mediu de dez voltare integrat (IDE – Integrated Developme nt
Environment ) oferit de compania Microsoft. Acest mediu de dezvoltare poate fi folosit în diverse
moduri pentru a face posibilă dezvoltarea aplicațiilor tip consolă și aplicațiilor cu interfață grafică
pentru toate platformele suportate de Microsoft Windows. De asemenea există și utilitarul Visual
Studio Code ce rulează pe sistemul de operare Linux și permite dezvoltarea de aplicații cross –
platform pentru toate dispozitivel suportate de platforma .NET Core ofer ită de Microsoft.
Printre facilitățile oferite de Microsoft Visual Studio se găsesc : editor, compilator, debugger și mediu
de proiectare (designer) pentru o serie de limbaje de programare. Acest mediu de dezvoltare include
mai multe limbaje de programare dintre care cele mai commune sunt limbajele dezvoltate de către
compania Microsoft pre cum: Microsoft Visual C++, Microsoft Visual C#, Microsoft Visual Basic și
limbajul specific pentru dezvoltare de aplicații web ASP.NET. Pe lângă limbajele dezvoltate de către
Microsoft, Visual Studio oferă support și pentru limbaje precum: Ruby, Python, Ja vascript și Node.js.
Acest mediu poate fi disponibil în următoarele variante : Community (Varianta gratuită, cu
funcționalități limitate), Professional sau Enterprise. În Figura 2 o captură de ecran cu versiunea
Visual Studio 2017 Community.
Figura 2 Pagina de start a Visual Studio 2017 Community
Sistem cu comandă vocală pentru casă inteligentă
8
2.1.4 Windows 10 IoT
Windows 10 IoT [5] este un membru al familiei de sisteme de operare bazate pe Windows 10 ce
aduce putere, securitate și capacitate de administrare pentru domeniul Internet o f Things.
Windows 10 IoT este disponibil în două versiuni și anume Windows 10 IoT Core care este cel mai
mic și simplu membru al familiei de sisteme de operare Windows 10 și care deși poate rula doar o
singură aplicație încă are securitatea și capabilități le de administrare așteptate de la o versiune de
Windows 10. Spre deosebire de fratele său mai mic cea de a doua versiune de Windows 10 IoT este
versiune Windows 10 IoT Enterprise și reprezintă o versiune completă de Windows 10 dar cu
capabilități speciali zate să lucreze cu un set specific de aplicații și periferice. În Figura 3 este
prezentată o captură de ecran a sistemului de operare Windows 10 IoT Core rulând pe un Raspberry
Pi 3 Model B.
Figura 3 Captură de ecran Windows 10 IoT Core pe Raspberry Pi 3
2.1.5 Protocolul AMQP
AMQP (Advanced Message Queuing Protocol) [6] reprezintă un protocol ce rulează la nivelul
aplicație și este orientat pe transmisia și recepția de mesaje. Caracteristicile definitorii a le
protocolului sunt orientarea mesajelor, cozile de mesaje, direcționarea mesajelor, inclusiv punct -la-
punct și un sistem de publicare -abonare. De asemenea protocolul oferă și o securitate sporită.
Acest protocol este proiectat să suporte o varietate mare de aplicații de mesaje și tipare de
comunicare. Protocolul oferă o comunicare orientată pe mesaj, în flux controlat, cu diferite tipuri de
garantare a livrării mesajelor precum:
At-most -once caz în care fiecare mesaj este livrat o singură dată sau niciod ată.
Sistem cu comandă vocală pentru casă inteligentă
9
At-least -once caz în care fiecare mesaj este livrat cu siguranță cel puțin o dată dar poate fi
livrat de mai multe ori.
Exactly -once caz în care m esajul este livrat cu siguranță și este livrat o singură dată.
La nivelul transport AMQP transferă mesaje le pe protocolul TCP (Transmission Control Protocol).
Specificațiile protocolului sunt definite pe mai multe nivele după cum urmează:
Un protocol simetric și asincron pentru transmisia de mesaje de la un proces la altul.
Un format standard de mesaje, dar care poate fi extins.
Un set standardizat de capabilități de mesaje, dar care de asemenea poate fi extins.
Istoric vorbind AMQP a fost prezentat pentru prima dată în anul 2003 de către John O'Hara la
compania JPMorgan Chase din Londra. Pentru dezvoltarea a gentului de mesaje și a documentației
protocolului a fost contractată compania iMatrix ce a dezvoltat agentul de mesaje în limbajul de
programare C. În anul 2005 compania JPMorgan Chase în parteneriat cu Red Hat au creat pe baza
noului protocol sistemul de mesaje Apache Qpid, inițial scris în limbajul de programare Java dar
schimbat ulterior în C++. Independent de acesta a fost dezvoltat și sistemul RabbitMQ de către
compania Rabbit Technologies.
Pentru proiectul curent s -a ales ca metodă de transmisie a me sajelor între dispozitiv și
componentele de cloud sistemul de mesaje dezvoltate de către cei de la Rabbit Technologies și
anume RabbitMQ, oferit ca și serviciu cloud de căre website -ul cloudamqp.com.
2.1.6 MongoDB
MongoDB [7] este o bază de date NoSQL dezvoltat ă de către compania MongoDB Inc. Aceasta este
gratuită open -source, cross -platform și orientată pe documente, datele fiind stocate într -un format
similar cu JSON (JavaScript Object Notation ).
Dezvoltarea MongoDB a fost începută în anul 2007 de către compan ia software 10gen, pentru a fi
componentă a unui produs plănuit a fi oferit sub forma de platformă ca serviciu.
MongoDB folosește ca mod de stocare documente de tip BSON (Binary JSON), ce reprezintă o
serializare binară a unor documente de tip JSON, numele fiecărui câmp fiind un șir de caractere
(string) iar printre tipurile de date ce pot fi stocate se numără:
String (șir de caractere)
Integer (număr întreg pe 32 sau 64 de biți)
Double (număr cu virgulă flotantă pe 64 de biți)
Decimal128 (număr cu virgulă flotantă pe 128 de biți, utilizat pentru numere cu precizie de
până la 34 de zecimale, cu o valoare maximă de aproximativ 106145 .
Date (număr de milisecunde trecut de la începutul epocii Unix, 1 ianuarie 1970,
reprezentând o dată calendaristică).
Sistem cu comandă vocală pentru casă inteligentă
10
Byte array (date binare)
Boolean
Null
BSON object, array (obiecte specifice documentelor BSON)
Cod Javascript
Expresii regulate
BSON [8] este proiectat pentru a fi eficient în ceea ce privește spațiul de stocare și viteza de căutare.
Elementele mari din documen tele BSON sunt prefixate de un câmp ce reprezintă lungimea pentru
a ușura scanarea acestora. În unele cazuri BSON poate utiliza mai mult spațiu de stocare decât JSON
datorită câmpului de lungime și a indicilor expliciți.
Un document de forma {" hello ":"worl d"} va fi stocat în BSON în următoarea formă:
\x16\x00\x00\x00 // dimensiune totală document
\x02 // 0x02 = tipul de data stocat ( String)
variabila \x00 // numele câmpului
\x06\x00\x00\x00valoare \x00 // valoarea câmpului (dimensiunea valorii, valoarea, terminator
null)
\x00 // 0x00 = tipul EOO ('end of object'), finalul obiectului BSON
În Tabelul 1 se poate vedea o paralelă între MongoDB ș i MySQL.
Termeni MySQL Concepte MongoDB
Bază de date Bază de date
Tabelă Colecție
Index Index
Rând Document BSON
Coloană Câmp BSON
Join Încapsulare și legătură
Cheie primară Câmpul cheie unică _id
Group by Agregare
Tabelul 1 Paralelă între MySQL și MongoDB
Sistem cu comandă vocală pentru casă inteligentă
11
MongoDB oferă următoarele funcționalități:
Indexare, câmpurile dintr -un document MongoDB fi indexate atât cu indici primari cât și cu
indici secundari.
Replicare, MongoDB conține un sistem de replicare integrat și oferă copii ale datelor foarte
rapid, modificările fiind făcute doar pe copia primară. Orice copie secudară poate fi definită
ca fiind copia primară la un moment dat, în momentul în care apare o eroare la copia primară
actuală.
Partiționare, MongoDB se sc alează orizontal folosind conceptul de partiționare a datelor.
Utilizatorul atribuie un identificator unei partiții ceea ce determină cum vor fi distribuite
datele în colecții. Datele sunt separate în intervale bazate pe cheia partiției și sunt distribuite
pe mai multe partiții. MongoDB poate rula pe mai multe servere duplicând datele astfel
încât sistemul să fie stabil în cazul unei defecțiuni hardware.
Executare de cod Javascript la nivel de server, cod ce poate fi utilizat la interogări și trimis
direct către baza de date pentru a fi executat.
Colecții de dimensiune fixă, ceea ce menține ordinea de inserare a datelor iar când se atinge
dimensiunea prestabilită colecția se comportă ca o coadă circulară.
MongoDB are drivere oficiale pentru limbajele de prog ramare majore precum C++, C# sau Java și
principalele medii de dezvoltare, dar de asemenea există și drivere neoficiale, oferite de către
comunitate pentru alte limbaje de programare și platforme.
Alegerea MongoDB pentru proiectul prezentat a fost făcută ț inând cont de flexibilitatea pe care o
oferă și de structura dinamică a documentelor, perfectă pentru modele de date utilizate de proiect.
2.1.7 Dialogflow
Dialogflow [9] (cunoscut anterior ca Api.ai ) este o platformă oferită de compania Google pentru
dezvoltar ea de tehnologii de interacțiune între om și calculator bazate pe conversații în limbaj
natural.
Platforma api.ai a fost lansată în anul 2014 ce permitea dezvoltatorilor să creeze să adauge facilități
de interacțiune prin voce aplicațiilor bazate pe Androi d, iOS, HTML5 sau Apache Cordova. SDK -ul
conținea funcționalități de de recunoaștere vocală, interpretare și înțelegere a limbajului natural și
conversie a textului în vorbire. De asemenea api.ai oferea o interfață web pentru proiectarea și
testarea unor s cenarii conversaționale.
Api.ai oferă dezvoltatorilor de dispozitive IoT posibilitatea de a adăuga funcționalități de
recunoaștere și înțelegere a limbajului natural.
În anul 2016 Api.ai a fost cumpărat de către compania Google iar în anul 2017 a fost rede numit în
Dialogflow, integrându -l în Google Assistant, prin oferirea posibilității dezvoltatorilor de a crea
aplicații (Acțiuni) pentru acesta.
Sistem cu comandă vocală pentru casă inteligentă
12
Interfețele vocale și conversaționale create cu Dialogflow sunt compatibile cu o multitudine de
dispozitive prec um telefoane mobile, mașini și alte dispozitive inteligente, suportând recunoașterea
și înțelegerea a peste 14 limbi printre care engleză, germană, japoneză sau rusă și integrarea cu o
multitudine de platforme de mesagerie precum Skype, Slack sau Facebook.
Pentru proiectul prezentat s -a realizat o aplicație în Dialogflow pentru a interpreta cererile
utilizatorului și a trimite comenzile către dispozitiv .
2.2 ARHITECTURĂ HARDWARE
2.2.1 Raspberry Pi 3 Model B
Raspberry Pi [10] este un Single -Board Computer de dimensiun i mici dezvoltat de către Raspberry
Pi Foundation cu scopul de promovare a învățării bazelor științei calculatoarelor în școli și în țările
în curs de dezvoltare.
Figura 4 Raspberry Pi 3 Model B [12]
Pentru realizarea acestui proiect s -a ales modelul Raspberry Pi 3 Model B (Figura 4 ) ce oferă 1GB
de memorie RAM, diferite moduri de comunicare precum Bluetooth, Wireless și Ethernet.
Conexiunile la rețeaua Internet au reprezentat factorul cheie în alegerea modelului deoarece
siste mul are nevoie de o conexiune stabilă pentru a stabili comunicarea cu componentele din Cloud.
În Tabelul 2 sunt preznetate câteva din specificațiile modelului ales.
Sistem cu comandă vocală pentru casă inteligentă
13
SoC Broadcom BCM2837
CPU 4× ARM Cortex -A53, 1.2GHz
GPU Broadcom VideoCore IV
RAM 1GB LPDDR2 (900 MHz)
Rețea 10/100 Ethernet, 2.4GHz 802.11n wireless
Bluetooth Bluetooth 4.1 Classic, Bluetooth Low Energy
GPIO 40-pin header
Stocare microSD
Porturi HDMI, 3.5mm analogue audio -video jack, 4× USB 2.0, Ethernet, Camera
Serial Interface (CSI), Display Serial Interface (DSI)
Tabelul 2 Specificațiile plăcuței Raspberry Pi 3 Model B
În cazul acestui proiect pe plăcuță rulează sistemul de operare Window 10 IoT Core, cu ultimele
actualizări instalate pentru evitarea apariției unei funcționări necorespunzătoare a sistemului.
Stocarea sistemului de operare și a datelor necesare rulării sunt stocate pe un card microSD care,
în cazul de față oferă 32GB de spațiu de stocare.
Chiar dacă modulul dispune de suport pentru dispozitive audio s -a ales utilizarea unei plăci audio
externe conectată la unul din cele 4 porturi USB prezente pentru a se evita o serie de erori de la
sistemul de operare.
În proiect este folosită de asemenea și interfața DSI (Display Serial Interface) pentru conectarea
unui ecran tactil utilizat atât pentru afișarea datelor cât și pentru interacțiunea cu diferite elemente
din interfața grafică a sistemului.
Pe lângă porturile de conexiune cu periferice normale Raspberry Pi 3 Model B pune la dispoziție 4 0
de pini pentru a putea conecta module precum senzori și actuatori.
În Figura 5 este prezentată o schemă cu toți pinii prezenți pe acest model.
Sistem cu comandă vocală pentru casă inteligentă
14
Figura 5 Prezentare pini GPIO Raspberry Pi 3 Model B [13]
Cei 40 de pini prezenți pot fi programați pentru a oferi diferite funcționalități, astfel că aceștia sunt
grupați după cum urmează:
2 pini ce oferă o tensiune de 5V
2 pini ce oferă o tensiune de 3.3V
8 pini pentru conectarea la masă
Funcționalitate seriala UART
Comunicare SPI
Com unicare I2C
24 de pini GPIO (General Purpose Input Output)
În proiectul prezentat s -a pus accent pe programarea celor 24 de pini GPIO prin realizarea unui
sistem software capabil să îi configureze și să afișeze date de la aceștia într -o interfață grafică
prietenoasă, fără a fi necesare cunoștințe avansate de programare.
2.2.2 Ecran tactil pentru Raspberry Pi
Pentru afișarea datelor și interacțiunea cu sistemul software s -a ales modulul oficial [11] oferit de
Raspberry Pi ce consă într -un ecran tactil cu diagonal a 7 inch și o plăcuță adaptoare pentru
comunicarea cu Raspberry Pi.
Modulul se conecteaza la Raspberry Pi prin portul DSI utilizând un cablu panglică, cu ajutorul
unei plăcuțe adaptoare (Figura 6 ) care se ocupă de alimentare și de conve rsia semnalelor.
Sunt necesare 3 conexiuni la Raspberry Pi, alimentarea de 5V și legătura la masă de la GPIO
Sistem cu comandă vocală pentru casă inteligentă
15
(General Purpose Input Output) și conexiunea la DSI pentru semnalele video și cele de la
evenimentele de atingere a ecranului.
Figura 6 Plăcuță adaptoare pentru ecran tactil [14]
Modulul cu ecran tactil are o dimensiune totală de 194x110x20 mm, ecranul tactil având
dimensiunile de 155×86 mm, aceasta fiind și aria disonibilă pentru atingeri. Rezoluția
ecranului este de 800 x 48 0 pixeli și s uportă 10 puncte de atingere simultane.
2.3 ARHITECTURĂ SOFTWARE
Sistemul software constă în 6 module scrise în limbajul de programare C# și un modul scris în
limbajul de programare C++, toate realizate folosind tehnologia UWP (Universal Windows Platform)
pent ru a permite ca sistemul software să fie rulat atât pe dispozitive desktop pentru scopuri de
testare și depanare cât și pe dispozitive embedded, ce reprezintă ținta finală a sistemului, precum
plăcuța Raspberry Pi aleasă pentru proiectul curent. Pentru ca sistemul să poată rula pe aceasta s –
a instalat Windows 10 IoT Core. Fiecare modul ce face parte din sistem are un rol bine stabilit și
pune la dispoziție utlizatorului sau dezvoltatorului de software diferite funcționalități pentru a
utiliza sau extinde si stemul actual.
În Figura 7 se poate observa o schemă ce conține toate modulele software și modul în care acestea
comunică între ele, în majoritatea cazurilor comunicarea fiind bidirecțională și directă cu modulul
Nanosoft.Core, ce reprezintă puctul de intr are în sistem.
Sistem cu comandă vocală pentru casă inteligentă
16
Figura 7 Schema bloc de comunicare între modulele software
În continuare va fi prezentat fiecare modul și funcționalitățile de sistem pe care le pune le la
dispoziție.
2.3.1 Nanosoft.Core
Acest modul reprezintă component a principală a sistem ului și are rol de a inițializa și pune împreună
celelalte module. De asemenea în acest modul se realizează conexiunile la serv erul de mesaje
AMQP și la baza de date MongoDB.
Modulul este compus din următoarele clase și interfețe:
ICloudClient
AMQPClient
Json Command
CommandManager
ApplicationManager
DatabseManager
ApplicationManagerView
MainScreen
Sistem cu comandă vocală pentru casă inteligentă
17
Diagrama 1 ICloudClient
Interfața ICloudClient (Diagrama 1 ) reprezintă o definiție abstractă a unui distribuitor de mesaje prin
care sistemul poate schimba informații cu componentele din Cloud.
Aceasta are definită metoda Init() pe care sistemul știe să o apeleze la pornire, de aceea tot ceea ce
ține de inițializa rea distribuitorului de mesaje se face în această metodă.
Evenimentul CommandReceived trebuie apelat în implementare pentru a informa sistemul că
există date noi primite din Cloud. Acest eveniment are ca parametru un obiect de tip CloudEventArgs
(Diagrama 2) care conține datele primite în format String.
Diagrama 2 CloudEventArgs
Clasa AMQPClient (Diagrama 3 ) este o implementare a interfeței ICloudClient pentru serviciul de
mesaje oferit de cloudamqp.com și reprezintă metoda principală prin care sistemul schimbă
informații cu Firebase.
Diagrama 3 AMQPClient
Sistem cu comandă vocală pentru casă inteligentă
18
În metoda Init() se realizează o conexiune la instanța de RabbitMQ ce rulează pe serverele de la
cloudamqp.com. Pentru a se realiza această conexiune s -a folosit pachetul NuGet oficial oferit de
RabbitMQ.
Metoda OnCommand are rolul de a prelua mesajul din Cloud, după ce acesta a fost convertit în date
pe care sistemul le poa te interpreta și de a -l transmite mai departe în sistem, în format String, prin
declanșarea evenimentului CommandReceived oferit de interfața ICloudClient.
Diagrama 4 JsonCommand
Clasa JsonCommand (Diagrama 4 ) reprezintă format ul standard de comenzi Cloud pe care sistemul
le poate executa. Aceasta este compusă din 3 proprietăți:
Application reprezintă modulul care execută comanda. Acest modul trebuie să
implementeze interfața IApplication și să expună o listă de comenzi pentru c a sistemul să
îi poată trimite comenzi.
Args reprezintă argumentele unei comenzi, dacă sunt necesare pentru execuție.
Command reprezintă numele comenzii ce trebuie executată.
Diagrama 5 CommandManager
Clasa CommandManager (Diagrama 5 ) are rolul de a prelua comenzile în format String de la o
instanță a unei implementări a interfeței ICloudClient, de a le converti în obiecte de tip
Sistem cu comandă vocală pentru casă inteligentă
19
JsonCommand și de a le transmite mai departe la modulele responsabile cu execuția lor. Acest luc ru
se realizează în execuția metodei ExecuteCommand() care primește ca parametru comanda în
format String. Implementar ea metodie se poate observa în Secvența de cod 1:
private void ExecuteCommand(string command)
{
JsonCommand cmd = JsonCommand.FromJson(command);
switch(cmd.Command)
{
case "open":
ApplicationManager.Instance.OpenApplication(cmd.Application);
break;
case "close":
ApplicationManager.Instance.CloseApplication(cmd.Application);
break;
default:
ApplicationManager.Instance.ExecuteApplicationCommand(cmd);
break;
}
}
Secvență de cod 1 Metoda Execute Command din CommandManager
În sistem există două comenzi standard care pot fi executate pentru orice modul care
implementează interfața IApplicati on. Aceste două comenzi sunt ”open” și ”close” care, însoțite de
numele modulului cer sistemului să deschidă sau să închidă interfața grafică a unui modul. Sistemul
include suport de comandă vocală pentru aceste două comenzi standard.
Orice altă comandă pr imită este preluată și trimisă mai departe către instanța de
ApplicationManager printr -un apel al metodei ExecuteApplicationCommand pentru a fi procesată
și pentru a se găsi modulul corespunzător pentru a o executa.
O comandă JSON primită din Cloud către d ispoz itiv are formatul prezentat în Figura 8.
Figura 8 Structura unei comenzi JSON
O comandă este formată din 3 câmpuri in documentul JSON :
”application” din structura comenzii reprezintă modulul (subsistemul) software responsabil
pentru executarea comenzii.
”command” reprezintă comanda executată.
”args” reprezintă argumentele comenzii în cazurile in care sunt necesare.
Sistem cu comandă vocală pentru casă inteligentă
20
Diagrama 6 ApplicationManager
Clasa ApplicationManager (Diagrama 6 ) are r olul de a administra tot ceea ce ține de modulele care
extind sistemul prin implementarea interfeței expuse de modulul Nanosoft.Applications. Această
clasă este implementată ca un Singleton pentru a se evita conflictele între instanțe la momentul
execuției . Singura instanță a acestei clase este campul instance care poate fi obținut de alte module
ale sistemului prin accesarea proprietății statice Instance care întoarce valoarea acestui câmp.
Pe lângă proprietatea Instance această clasă mai are următoarele p roprietăți:
ApplicationDisplayName reprezintă un control de tip TextBlock în care este afișat numele
aplicației care este deschisă pe ecran. Această proprietate se modifică de fiecare dată când
o nouă aplicație este deschisă.
Applications reprezintă o list ă cu toate modulele care se folosesc de Nanosoft.Applications
pentru a extinde sistemul. Clasa folosește această listă pentru a cunoaște modulele
prezente în sistem în timpul execuției.
Sistem cu comandă vocală pentru casă inteligentă
21
DisplayCanvas reprezintă un control de tip Canvas și are rolul de a le pune la dispoziție
modulelor o suprafață de desenare pentru interfețele lor grafice care de obicei sunt
reprezentate de proprietatea MainControl expusă în interfața IApplication din modulul
Nanosoft.Applications.
WidgetCanvas reprezintă un alt control de tip Canvas ce are rolul de a pune la dispoziție
modulelor o suprafață de desenare pentru widget -uri, deoarece sistemul oferă posibilitatea
fiecărui modul de a expune un număr nelimitat de interfețe grafice cu dimensiuni de pâna
la 200×200 pixeli pentru a o feri informații fără a fi necesară deschiderea interfeței
principale.
Initialized este o proprietate de tip boolean și are rolul de a împiedica sistemul să încerce să
transmită comenzi la module înainte ca acestea să fie complet încărcate.
De asemenea acea stă clasă mai are și un set de metode cu ajutorul cărora manipulează modulele
care extind sistemul. În cele ce urmează se prezintă câteva metode mai importante.
La apelul metodei InitApplications() sistemul scanează după modulele prezente și încearcă să le
inițializeze și să le adauge în lista de module reprezentată de proprietatea Applications.
Metoda OpenApplication() primește ca parametru un String ce reprezintă numele modulului ce se
dorește a fi deschis. Dacă metoda FindByName, apelată cu același param etru, returnează o instanță
a unei aplicații din lista de aplicații menționată anterior atunci se preia proprietatea MainControl a
instanței și se adaugă în lista de controale conținute de controlul DisplayCanvas, dacă acesta nu
există deja în acea listă. După ce se stabilesc dimensiunile și poziția controlului acesta este afișat în
interfață și adus deasupra tuturor controalelor printr -un apel al metodei BringToFront(), apoi
modulul este inițializat și pregătit pentru interacțiunea cu utilizatorul.
Metoda ExecuteApplicationCommand este apelată de către CommandManager și primește ca
parametru un obiect de tip JsonCommand. La execuție această metodă interpretează proprietățile
obiectului de tip JsonCommand și caută în lista de module un modul cu numele conțin ut in
proprietatea Application a acestuia. Dacă metoda FindByName() returnează o instanță a unui modul
se trece mai departe cu execuția și se instanțiază una din cele două implementări ale interfeței
ICommand, expusă de asemenea de către modulul Nanosoft.A pplications. Instanțierea se face în
funcție de proprietatea Args a obiectului JsonCommand, dacă această proprietate are valoare
diferită de null se crează o instanță a implementării CommandWithArgs, în caz contrar se crează o
instanță a implementării Comm and. După instanțiere se apelează metoda Execute() a comenzii
găsite, astfel informând modulul ce comandă trebuie să execute.
Sistem cu comandă vocală pentru casă inteligentă
22
Diagrama 7 DatabaseManager
Clasa DatabaseManager (Diagrama 7 ) are rolul de a stabili o conexiune cu o bază de date MongoDB
aflată pe serverele serviciului Atlas oferit de mongodb.com. Această clasă este implementată ca un
Singleton pentru a se evita crearea mai multor conexiuni la aceeași bază de date din sistem. Sc opul
principal al acestei clase este de a încărca în baza de date diferite informații de la dispozitivul
hardware pe care rulează sistemul.
La apelul metodei UpdateDeviceStatus() se colectează informațiile de la sistem, se formatează în
formatul BSON speci fic MongoDB și se încarcă într -o colecție de documente. De asemenea apelul
acestei metode are rolul de a informa componentele de Cloud data și ora ultimei actualizări a bazei
de date de către sistemul hardware. Acest apel se face din 5 în 5 minute, acest i nterval fiind
prestabilit și cunoscut atât de sistem cât și de componentele de Cloud se poate determina foarte
ușor dacă sistemul hardware rule ază și dacă acesta poate primi comenzi.
Diagrama 8 ApplicationManagerView
Clasa ApplicationManagerView (Diagrama 8 ) este o reprezentare grafică a proprietății Applications
din ApplicationManager. Aceasta oferă o listă vizuală cu toate modulele prezente în sistem, oferind
Sistem cu comandă vocală pentru casă inteligentă
23
de asemenea și posibilitatea de deschidere a interfețelor grafic e ale modulelor prin click pe numele
acestora. Această reprezentare grafică poate fi deschisă prin apăsa rea butonului din colțul stânga –
sus a ecranului principal.
Metoda InitMenu() preia toate modulele din lista oferită de ApplicationManager și generează c âte
un buton intuitiv pentru fiecare, apoi îl adaugă în lista vizuală. În Figura 9 se poate observa lista
vizuală de module și de asemenea și butonul din stânga -sus care trebuie apăsat pentru a o afișa
sau ascunde.
Figura 9 Listă vizuală cu modulele prezente în sistem
Clasa MainScreen (Diagrama 9 ) este o interfață grafică și reprezintă punctul de intrare în sistem atât
vizual cât și din punct de vedere al inițializării sistemului deoarece această interfață este afișată la
pornirea sistemului iar în constructorul clasei sunt inițializate toate celelalte module ale sistemului.
De asemenea această clasă conține singura instanță de CommandManager existentă în sistem.
Diagrama 9 MainScreen
Sistem cu comandă vocală pentru casă inteligentă
24
2.3.2 Nanosoft.App lications
Cu ajutorul acestui modul este posibilă extinderea sis temului deoarece expune o serie de interfețe
și funcții ce permit implementarea de noi funcționalități și module software.
Modulul constă în următoarele clase și interfețe:
IApplication
IComma nd
Command
CommandWithArgs
Application
Diagrama 10 IApplication
IApplication (Diagrama 10 ) este intefața cheie pentru extinderea sistemului deoarece acesta caută
în fiecare modul o implementare a acestei interfețe pentru a ști cum să inițializeze modulul. Pentru
a face posibilă recunoașterea unui modul de către sistem dar și inițializarea lui a ceastă interfață
pune la dispoziție următoarele proprietăți:
Name este un String ce reprezintă numele aplicației pentru a oferi modu lului
ApplicationManager un mod de a indentifica modulul.
MainControl este un control grafic ce permite modulului să își cre eze propria interfață
grafică și să informeze sistemul despre existența ei.
Widgets reprezintă o listă de componente grafice cu dimensiuni maxime de 200×200 pixeli
ce permite modulelor să ofere interfețe grafice minimale pentru diferite acțiuni sau
informa ții.
Commands reprezintă o listă de implementări ale interfeței ICommand ce permit sistemului
să ceară execuția diferitor acțiuni de la module.
Sistem cu comandă vocală pentru casă inteligentă
25
Evenimentul WidgetListUpdated oferă modulelor flexibilitate asupra listei de widget -uri, oferind
posibilitatea d e creare sau ștergere de widget -uri în timpul rulării și informare a sistemului despre
aceste schimbări.
Interfața ICommand (Diagrama 11 ) oferă posibilitatea de implementare a noi tipuri de comenzi pe
care sistemul le poate executa în cazul în care cele do uă implementări puse la dispoziție de sistem
nu sunt suficiente pentru a realiza implementarea modulului.
Diagrama 11 ICommand
Clasele Command și CommandWithArgs reprezintă două implementări diferite ale interfeței
ICommand și sunt recunoscute de sistem fără a fi necesară definirea lor în module. Diferența dintre
cele două implementări este că implementarea Command poate executa acțiuni simple pentru
module, ce nu au nevoie de informații de la sistem în timp ce implementarea Co mmandWithArgs
poate executa acțiuni mai complexe ce pot necesita informații de la sistem, informații pe care le
poate prelua prin proprietatea CommandArgs expusă de interfață.
Diagrama 12 Application
Clasa Application (Diagrama 12) conține câteva metode pentru încărcarea și manipularea modulelor
ce implementează interfața IApplication. Aceasta pune la dispoziție următoarele metode:
LoadApplication () ce primește ca parametru o cale către implementarea unui modul pe care
îl anali zează și returnează instanța implementării interfeței IApplication conținută de acel
modul, dacă este valid.
IsApplication() verifică dacă într -un modul există o implementare a interfeței IApplication.
Sistem cu comandă vocală pentru casă inteligentă
26
GetCommand() primește ca parametrii un String reprezen tând o comandă și o instantă a
unei implementări a interfeței IApplication și verifică dacă instanța conține o comandă cu
numele primit ca parametru. În caz pozitiv se returnează acea comandă sub forma unei
instanțe a unei implementări a interfeței IComman d.
2.3.3 Nanosoft.CPPDrivers
Acest modul conține implementări în limbajul C++ pentru diferite module hardware care nu oferă
suport pentru limbajul C# sau care au nevoie de timpi exacți de execuție a comenzilor.
În prezent conține umătoarele componente:
IDHT
DHT1 1
DHT22
DhtReading
Diagrama 13 IDHT
IDHT (Diagrama 13 ) este o interfață ce permite conectarea la sistem a celor doua tipuri de senzori
de temperatură și umiditate DHT11 si DHT22.
Clasele DHT11 și DHT22 sunt implementări concrete ale interfeței IDHT pentru cele doua tipuri de
senzori menționate anterior.
DhtReading (Diagrama 14 ) este o structură ce poate stoca datele citite de la senzori într -un format
mai usor de înțeles și de accesat.
Diagrama 14 DhtReading
Sistem cu comandă vocală pentru casă inteligentă
27
2.3.4 Nanosoft.Modules
Acest modul oferă posibilitatea de extindere a sis temului hardware prin expunerea unui set de
intefețe și funcționalități ce permit implementarea de module driver pentru componente hardware
dezvolta te de către utilizatori.
De asemenea modulul conține două implementări de bază ale unor module hardware simple și
anume un switch și un senzor de temperatură DHT22, aceste două implementări reprezentând
modulele hardware pe care sistemul le suportă fără ex tensii.
Modulul este compus din următoarele clase și interfețe:
IModule
ISwitch
ISensor
BasicSwitch
BasicSensor
SwitchFactory
SensorFactory
Port
Manager
Config
Diagrama 15 IModule
Interfața IModule (Diagrama 15 ) reprezintă o abstractizare a unui modul hardware care se poate
conecta la sistem. Această interfață expune proprietățile esențiale ale unui modul hardware
necesare pentru ca sistemul să il poată recunoaște și controla. Aceste proprietăți sunt:
Sistem cu comandă vocală pentru casă inteligentă
28
Id reprezin tă un identificator unic pentru fiecare modul .
ModuleType este o instanță a unui enumerarii de tipuri ModuleType ce specifică tipul
modulului.
Name oferă posibilitatea identificării unui modul după un nume în locul Id -ului.
Port reprezintă portul GPIO al p lăcuței Raspberry Pi la care este conectat modulul.
Initialized indica dacă un modul a fost sau nu inițializat. Această proprietate primește
valoare prin apelul metodei Init().
Interfețele ISwitch și ISensor sunt abstractizări derivate din IModule specializate pentru două tipuri
diferite de module. În Diagrama 16 este prezentată relația dintre cele 3 interfețe.
Diagrama 16 Relația dintre IModule, ISwitch și ISensor
Interfața ISwitch este concepută pentru dispozitive care pot fi comandate de către sistem și
expune o sing ura proprietate și un eveniment pentru a oferi sistemului informații suplimentare
despre modulul hardware pentru care a fost concepută.
Proprietatea Va lue reprezin tă valoarea curentă ce urmează să fie scrisă pe p ortul pe care este
conectat dispozitivul hardware .
Evenimentul ValueChanged este declanșat atunci cand se produce o schimbare a propretății Value.
Sistem cu comandă vocală pentru casă inteligentă
29
Interfața ISensor este concepută pentru dispozitivele de la care sistemul poate obține date despre
diferite aspecte din mediul exterior. Această interfață expune o singură proprietate și doua metode
pentru a oferi sistemului informații despre modulul hardware.
Proprietatea SensorType indică tipul dispozitivului de la care sistemul primește date.
Metoda getData() returnează datele primite de la dispozitiv.
Metoda getSpeechData() oferă posibilitatea returnării datelor într -un format potrivit pentru a putea
fii sintetizat de un Text -to-Speech.
Diagrama 17 BasicSwitch
Clasa BasicSwitch (Diagrama 17 ) este o implementare concretă a interfeței ISwitch concepută să
simuleze un simplu întrerupător digital.
Câmpul pin din această clasă este un obiect de tip GpioPin si reprezintă o legătură directă la pinul
fizic al plăcuței Raspberry Pi în timp ce câmpul port reprezintă doar numărul portului care este
utilizat pentru a inițializa câmpul pin.
Proprietatea ModuleType va returna mereu valoarea ModuleType.Switch pentru orice instanță a
acestei clase, in dicând sistemului faptul că poate comanda dispozitivul conectat.
În cazul acestei clase proprietatea Value poate avea doar doua valori (0 sau 1) reprezentând starea
în care se află dispozitivul comandat. Dacă se produce o schimbare a acestei proprietăți atunci clasa
Sistem cu comandă vocală pentru casă inteligentă
30
declanșează evenimentul ValueChanged pus la dispoziție de interfață pentru informa sistemul
despre schimbări.
Diagrama 18 BasicSensor
Clasa BasicSensor (Diagrama 1 8) este o implementare concretă a interfeței ISensor ce folosește o
instanță a interfeței IDHT din modulul Nanosoft.CPPDrivers pentru a citi date de la un senzor de
temperatură DHT22 și a le returna sistemului.
În cazul acestei clase proprietatea ModuleTyp e va returna mereu valoarea ModuleType.Sensor
pentru a indica sistemului ca poate citi date de la acest tip de modul. Adițional apare și proprietatea
SensorType care va returna valoarea SensorType.Temperature, indicând sistemului tipul de date pe
care le p oate primi de la acest tip de modul.
Datele citite de la instanța interfeței IDHT sunt stocate în campul data care este de tip DhtReading,
ceea ce permite sistemului un acces mai ușor și mai rapid la datele de la senzor.
Metoda getData() returnează un obie ct de tip String special formatat pentru a putea fi prelucrat și
afișat de către clasa BasicSensorView din modulul Nanosoft.ModulesManager.
Sistem cu comandă vocală pentru casă inteligentă
31
Diagrama 19 Manager
Clasa Manager (Diagrama 19 ) are rolul de gestionare atât a modulelo r hardware conectate cât și a
porturilor GPIO puse la dispoziție de către Raspberry Pi.
Această clasă este implementată în modul Sngleton pentru a evita conflictele între modulele
conectate și de asemenea conține singura instanță a unui obiect de tip GpioC ontroller porezentă în
sistem ce oferă posibilitatea controlării porturilor fizice ale plăcuței. Pentru a gestiona modulele și
porturile clasa expune următoarele proprietăți:
Controller reprezintă obiectul de tip GpioController ce oferă acces la porturile fizice
Initialized indica dacă instanța de Manager a fost inițializată sau nu. Această proprietate are
scopul de a preveni încercarea de adăugare de module înainte de pornirea completă a
sistemului.
Modules reprezintă o listă de instanțe ale interfeței IMo dule cu toate modulele hardware
conectate atât fizic cât și în software la sistem.
Ports reprezintă o listă de instanțe a clasei Port cu toate porturile puse la dispoziție de
plăcuța Rapsberry Pi și starea lor curentă.
Sistem cu comandă vocală pentru casă inteligentă
32
Pe lângă proprietățile expuse clasa m ai expune și o serie de metode care vor fi prezentate în
continuare.
La apelul metodei Initialize() se încearcă inițializarea sistemului prin apelarea metodei Init() care va
returna true dacă va găsi un obiect de tip GpioController, deci porturi hardware d isponibile sau false
in cazul în care nu va găsi un controller de GPIO. În cazul în care Init() returnează true sistemul va
apela metoda InitPortMap() pentru a prelua lista cu toate porturile disponibile.
Diagrama 20 Port
Lista de porturi conține obiecte de tip Port (Diagrama 20 ) ce au ca proprietăți următoarele elemente:
Number indică numărul portului GPIO
Used indică dacă un anumit port este utilizat de alt modul
În configurația prezentată metoda Init() returnează false doar în cazul în care sistemul rulează pe
un dispozitiv desktop în loc de un dispozitiv Raspberry Pi.
Metodele AddSensor() și AddSwitch() indică instanței de configurare de tip Config să adauge încă un
modul de tip Sensor sau Switch în lista de module existente.
Metoda UpdateSensorList() preia o listă cu toate modulele de la instanța clasei Config, parcurge
lista și verifică dacă modulele sunt prezente în lista conținută de proprietatea Modules. Verificarea
se face printr -un apel al metodei ModuleExists () pentru fiecare modul iar în cazul în care modulul
nu există acesta este adăugat iar evenimentul ModuleAdded este declanșat pentru a informa
sistemul despre noile module.
Sistem cu comandă vocală pentru casă inteligentă
33
Diagrama 21 Config
Clasa Config (Diagrama 21 ) are rolu l de a oferi persistența datelor despre modulele conectate la
sistem chiar și după o repornire. Această clasă este implementata după modelul Singleton pentru
a evita conflictele de versiune a datelor din sistem. Aceasta conține o listă de instanțe a clasei
Module ce conțin toate informațiile necesare configurării modulelor.
De asemenea clasa pune la dispoziție doua metode AddSwitch() și AddSensor() pentru a putea
adăuga la configurație cele două tipuri standard de dispozitive suportate de sistem.
Pentru a s alva datele se folosește un document în format JSON în forma prezentată în Figura 10 :
Figura 10 Structura JSON a unui obiect de tip Module
Sistem cu comandă vocală pentru casă inteligentă
34
Diagrama 22 Module
Clasa Module (Diagrama 22 ) expune următoarele proprietăți pentru configurarea unui modul:
ModuleType reprezintă tipul modulului. Sistemul recunoaște doar valorile 0 sau 1 pentru
acest câmp.
Port reprezintă numărul portului la care este conectat modulul fizic.
SensorType este valid doar în cazul în care ModuleType are valoarea 1.
Value este valid în cazul în care ModuleType are valoarea 0.
Proprietățile expuse de clasa Module sunt convertite în câmpurile listei conținute de documentul
JSON salvat și sunt convertite din nou la citirea documentului.
2.3.5 Nanosoft.ModuleManager
Acest modul este o extensie software a sistemului implementată cu ajutorul modului
Nanosoft.Applications pentru a oferi posibilitatea adăugării și administrării modulelor harware
implementate cu ajutorul Nanosoft.Modul es.
Modulul conține două implementări de interfață grafică pentru cele două module hardware
suportate de sistem și anume switch -ul și senzorul de temperatură și umiditate DHT22.
Modulul este compus din următoarele clase:
ModuleManagerApplication
ModuleManagerControl
PortMapView
ModuleConfigView
BasicSwitchView
BasicSensorView
Sistem cu comandă vocală pentru casă inteligentă
35
Diagrama 23 ModuleManagerApplication
Clasa ModuleManagerApplication (Diagrama 22 ) reprezintă implementarea interfeței IApplication
pentru modulul Nanosoft.ModuleManager. Fiind un modul ce are scopul de a extinde sistemul
aceasta expune următoarele proprietăți standard pentru sistem:
MainControl ce returnează o instanță a clasei MouleManagerApplication stocată în câmpul
control.
Name reprezin tă numele modulului și va returna șirul de caractere ”Module Manager” în
acest caz.
Widgets reprezintă o listă de controale cu dimensiunea de 200×200 pixeli ce conțin date de
la modulele hardware prezente în sistem. Modulul Nanosoft.ModuleManager este sing urul
modul prezent în sistem capabil să genereze widget -uri în timpul rulării, în funcție de
modulele hardware conectate.
Commands reprezintă lista de comenzi pe care sistemul le poate trimite la acest modul.
Comenzile sunt inițializate în metoda InitComma nds() după cum se poate observa î n
Secvența de cod 2 .
public void InitCommands()
{
commands.Add(new CommandWithArgs("add", control.addModule));
commands.Add(new CommandWithArgs("switch", control.ChangeSwitch));
}
Secvență de cod 2 Metoda InitCommands() din ModuleManagerApplication
Sistem cu comandă vocală pentru casă inteligentă
36
Comanda add permite sistemului să adauge noi module iar ModuleManager să le recunoască.
Comanda switch permite sistemului să controleze dispozitive hardware conectate cu modul
software ce implementează interfața ISwitch din Nanosoft.Modules.
Diagrama 24 ModuleManagerControl
Clasa ModuleManagerControl (Diagrama 24 ) reprezintă punctul de intrare din punct de vedere al
interfeței grafice în modul. Această clasă expune evenimentul ModulesChanged care este declanșat
în momentul în care apare o modificare în lista de module pentru a se putea modifica proprietatea
Widgets a clasei ModulesManagerApplication.
De asemenea clasa mai expune și proprietatea ModuleViews ce reprezintă o listă care conține toate
elementele cu caracter grafic reprezentând instanțe ale claselor BasicSensorView și
BasicSwitchView ce sunt desenate pe e cran pentru fiecare modul în parte prezent în lista de module
pusă la dispoziție de Nanosoft.Modules.
Un alt element cu caracter grafic prezent în clasa ModuleManagerControl este o listă cu toate
porturile GPIO disponibile în sistem colorate diferit în fun cție de starea pe care o au (ocup at sau
disponibil). În Figura 11 este prezentat sistemul cu interfața grafică a modulului ModuleManager pe
ecran.
Sistem cu comandă vocală pentru casă inteligentă
37
Figura 11 Forma grafică a clasei ModuleManagerControl
Pe lângă lista grafică a por turilor clasa ModuleManagerControl mai conține și un buton la apăsarea
căruia este afișată o instanță a clasei ModuleConfigView ce ajută la configurarea de noi module și
adăugarea lor în interfața grafică. Reprezentările grafice ale modulelor sunt desenate în partea
neagră a interfeței la dimensiuni de 100×100 pixeli.
Clasa PortMapView (Diagrama 25 ) reprezintă o listă grafică ce conține toate porturile GPIO puse la
dispoziție de plăcuța Raspberry Pi. Aceasta preia porturile din instanța clasei Manager pusă la
dispoziție de Nanosoft.Modules și le adaugă într -un control de tip ListView pentru a fi afișate pe
ecran.
Diagrama 25 PortMapView
De asemenea conține o metoda ce interceptează evenimentul ModuleAdded declanșat de clasa
Manager din Nanosoft.Modules astfel încât în momentu l în care unui port i se schimbă starea
acesta va fi actualizat în interfața grafică. Pentru a se adăuga porturile în interfața grafică se
apelează metoda InitPorts() ce iterează prin lista de porturi din instanța de Manager și adaugă
Sistem cu comandă vocală pentru casă inteligentă
38
pentru fiecare câte un element în lista grafică. În Figura 12 sunt prezentate cele trei stări în care
poate fi o instanță a clasei PortMapView.
Figura 12 Stările posibile ale unei instanțe a clasei PortMapView în format grafic
Prima stare apare de obicei dacă sistemul este rulat pe hardware fară suport GPIO, a doua stare
reprezintă porturile listate dar nici un port nu este utilizat iar a treia stare este o reprezentare în
care pe portul 1 este conec tat un dispozitiv hardware. Relația dintre numărul portului afișat și
numărul portului GPIO de pe Raspberry Pi este următoarea: Port 1 este asociat GPIO2 și apoi în
ordine crescătoare astfel Port 2 asocial la GPIO3 și tot așa.
Diagrama 26 ModuleConfigView
Clasa ModuleConfigView (Diagrama 26 ) reprezintă o interfață grafică ce ajută la adăugarea de
suport software și vizual pentru modulele hardware nou conectate la sistem. Aceasta conține
suport pentru cele doua tipuri standard de module care pot fi adaugate la sistem și anume Sensor
Sistem cu comandă vocală pentru casă inteligentă
39
și Switch. In cazul în care se adaugă tipuri noi de module se poate apela metoda InitModuleTypes()
pentru a le prelua și adăuga în lista de module suportate. De asemenea clasa conține metoda
InitPorts() la apelul căreia se preia lista de porturi și starea acestora de la clasa Manager din
Nanosoft.Modules. Dacă un port este utilizat de alt modul acesta va fi colorat în roșu în lista de
selecție a portului pentru a oferi o atenționare vi zuală asupra stării.
În Figura 13 este prezentat modulul ModuleManager cu o instanță a clasei ModuleConfigView pe
ecran în procesul de configurare a unui senzor de temperatură.
Figura 13 Forma grafică a clasei ModuleConfigView
Cele trei câmpuri din interfața grafică sunt denumite intuitiv astel încât orice utilizator să poată
configura un modul foarte ușor.
Câmpul ModuleType reprezintă tipul modulului și oferă posibilitatea de selecție a unuia
dintre cele doua tipuri de module s uportate de sistem Sensor sau Swirch.
Câmpul SensorType este activ doar în cazul în care valoarea câmpului ModuleType este
Sensor.
Câmpul Port reprezintă identificatorul portului fizic al plăcuței Raspberry Pi
Sistem cu comandă vocală pentru casă inteligentă
40
Diagrama 27 Basic SensorView și BasicSwitchView
Clasele BasicSwitchView și BasicSensorView (Diagrama 27 ) sunt reprezentări grafice ale celor două
tipuri de module standard suportate de sistem. Ambele clase conțin un câmp special pentru a stoca
o instanță a modulului de la c are preiau informațiile pe care le afișează.
Dimensiunea standard la care sunt desenate instanțele acestor clase pe ecran este de 100×100
pixeli iar suprafața disponibilă de desenare este de aproximativ 600×400 pixeli, oferind un spațiu
de desenare suficie nt pentru ca 24 de module să fie afișate simultan pe ecran, numărul maximul de
module care se pot conecta la Raspberry Pi, dacă fiecare modul ar ocupa un singur pin. Configurația
curentă a sis temului poate configura doar module care folosesc un singur pin pentru date sau
pentru comandă așadar în starea curentă a sistemului numărul maxim de module care pot fi
conectate coincide cu numărul maxim de moule ce pot fi afișate în s pațiul disponibil pe ecran. În
Figura 14 este prezentată o instanță a clasei ModuleManagerControl în care sunt afișate doua
module configurate, fiecare fiind unul din cele două tipuri standard suportate de sistem.
Sistem cu comandă vocală pentru casă inteligentă
41
Figura 14 Instanțe de BasicSwitch și BasicSensor în Module Manager
2.3.6 Nanosoft.MediaPlayer
Aces t modul reprezintă un alt exemplu de extindere a sistemului prin intermediul modulului
Nanosoft.Applications și îi permite acestuia să redea fișiere audio în format MP3 dintr -o locație
selectată de utilizator (SDCard sau USB).
Modulul este compus din următ oarele clase:
MediaPlayerApplication
MediaPlayer
SongInfo
MediaPlayerControl
Figura 15 Media Player
Sistem cu comandă vocală pentru casă inteligentă
42
Diagrama 28 MediaPlayerApplication
Clasa MediaPlayerApplic ation (Diagrama 28 ) implementează interfața IA pplication expusă de
modulul Nanosoft.Applications ceea ce permite sistemului să recunoască și să comande m odulul
MediaPlayer. Această clasă conține cele 5 comenzi de bază pe care sistemul le poate trimite către
modul: play, paus e, next, previous și stop, după cu m se poate observa în Secvența de cod 3 .
public void InitCommands()
{
commands.Add(new Command("play",
control.Play));
commands.Add(new Command("pause",
control.Pause));
commands.Add(new Command("stop",
control.Stop));
commands.Add(new Command("next",
control.Next));
commands.Add(new Command("previous",
control.Previous));
}
Secvență de cod 3 Metoda InitCommands() pentru MediaPlayerApplication
De asemenea clasa mai conține și o instanță a clasei MediaPlayerControl, pe care o va returna
sistemului ca fiind fereasta principală sau punctul de intare în modul, prin intermediul MainControl .
Sistem cu comandă vocală pentru casă inteligentă
43
Diagrama 29 MediaPlayer
Clasa MediaPlayer (Diagrama 29 ) reprezintă componenta de bază a modulului deoarece este
responsabilă de citirea, încărcarea și redarea fișierelor MP3 din sursa selectată de utilizator.
Această clasă are următoarele proprietăți:
CurrentSongIndex reprezintă poziția în playlist a elementul ui media curent redat.
MediaName reprezintă numele elementului media curent redat afișat de către sistem în
interfața grafică.
Playlist reprezintă o lista de SongInfo care conține detaliile despre fișierele curente din lista
de redare.
State reprezintă sta rea de redare curentă.
O instanță a clasei SongInfo (Diagrama 30) conține informații precum locația pe mediul de stocare,
numele și durata unui fișier media. Proprietatea Position reprezintă poziția în timp la care s -a ajuns
cu redarea fișierului media și este necesară doar în timpul redării.
Sistem cu comandă vocală pentru casă inteligentă
44
Diagrama 30 SongInfo
Proprietatea State a clasei MediaPlayer este o instanță a enum -ului PlaybackState și reprezintă
starea în care se află modulul media, aceasta având 3 valori posibile:
Playing, când un element media este în curs de redare.
Paused, când redarea a fost oprită temporar, cu posibilitate de reluare de la punctul în care
a fost oprită.
Stopped, când redarea a fost oprită complet, fară posibilitatea de reluare din punctul în car e
s-a oprit.
De asemenea clasa MediaPlayer conține și un set de evenimente pe care le declanșează la anumite
momente de timp, atunci când are loc o schimbare.
Evenimentul IndexChanged este declanșat de fiecare dată când elementul media curent redat este
schimbat de către utilizator, prin intermediul interfeței grafice sau a comenzilor vocale sau de către
sistem prin funcționalitatea de redare automată. Acesta se declanșează la schimbarea valorii
porprietății CurrentSongIndex și oferă sistemului poziția noul ui element media ce urmează a fi
redat.
Evenimentul SongChanged este declanșat după ce noul element media indicat de
CurrentSongIndex este pregătit de redare. Acesta conține ca parametru o instanță a clasei SongInfo
cu toate informațiile despre noul element media.
Evenimentul PlaybackStateChanged este declanșat intern de către clasa MediaPlayer și
înștiințează sistemul ca proprietatea de State a fost schimbată.
Evenimentul PositionChanged se apelează la fiecare secundă în timpul redării unui element m edia
și are ca parametru o instanță a clasei SongInfo ce conține poziția curentă în timp la care a ajuns
redarea.
Evenimentul PlaylistLoaded se declanșează la finalul apelului metodei LoadPlaylistAsync() și
informează sistemul că noua listă de elemente med ia estă încărcată și pregătită pentru redare.
Sistem cu comandă vocală pentru casă inteligentă
45
Diagrama 31 MediaPlayerControl
Clasa MediaPlayerControl (Diagrama 31 ) reprezintă interfața grafică a modulului MediaPlayer dar și
controlul pe care sistemul îl va afișa pe ecran la deschiderea modulului.
Această clasă conține o instanță a clasei MediaPlayer care se ocupă cu redarea efectivă a fișierelor
media și o listă cu toate căile către fișierele din lista de redare.
De asemenea conține implementări pentru a intercepta evenimente le de actualizare de la instanța
de MediaPlayer și implementări pe evenimentele de click ale unor butoane pentru a trimite comenzi
către această instanță prin metodele Play(), Pause(), Stop(), Next(), Previous() care sunt de
asemenea adăugate în lista de c omenzi pe care sistemul principal le poate trimite către modul.
Majoritatea metodelor implementate de această clasă au scopul de a actualiza interfața grafică și
de a oferi utilizatorului o metodă de interacțiune cu instanța de MediaPlayer.
Metoda LoadMusi cAsync() oferă posibilitatea utilizatorului de a selecta sursa de fișiere MP3
(SDCard sau USB) apoi încarcă toate fișierele din sursa selectată în lista de căi și le transmite către
instanța de MediaPlayer.
Sistem cu comandă vocală pentru casă inteligentă
46
2.3.7 Nanosoft.UI
Acest modul conține elementele vizual e ale ecranului principal al sistemului sistemului și este
format din următoarele clase:
NetworkConnectionControl
TopBarControl
Diagrama 32 NetworkConnectionControl
Clasa NetworkConnectionControl (Diagrama 32 ) reprezintă un con trol grafic ce afișează starea
curentă a conexiunii la rețea a sistemului . Pentru a realiza aceste acțiuni aceasta implementează
următoarele metode:
CheckNetStatus() verifică dacă există o conexiune la rețea și de asemenea tipul acesteia.
DrawBars() aceast ă metodă crează o reprezentare vizuală a puterii semnalului rețelei în
cazul în care tipul conexiunii este wireless.
NetworkInformation_NetworkStatusChanged() interceptează evenimente ce țin de
schimbarea stării conexiunii la rețea și actualizează interfaț a grafică în concordanță cu
informațiile primite.
Diagrama 33 TopBarControl
Clasa TopBarControl (Diagrama 33 ) este o parte de interfață grafică ce reprezintă bara principală
a sistemului ce se găsește în partea de sus a interfeței grafice principale.
Proprietatea ApplicationNameDisplay are rolul de a afișa numele modulului a cărui interfață
grafică este afișată. În cazul în care sistemul se află la ecranul principal sau în meniu conținutul
acestei prorpietăți nu este afiș at.
Sistem cu comandă vocală pentru casă inteligentă
47
În Figura 16 este prezentată o reprezentare grafică a clasei TopBarControl.
Figura 16 Forma grafică a clasei TopBarControl
Clasa TopBarControl conține doar controalele din partea dreaptă, cele din partea stângă fiind
suprapuse ulterior, la rulare de către alte module de sistem.
Informațiile prezente pe bara de sistem includ data, ora,numele și puterea semnalului rețelei
la care e ste conectat.
2.3.8 Javascript pentru Dialogflow
Pentru a se transmite datele de la componenta de Cloud la dispozitiv se folosește conceptul de
webhook, o funcție in Firebase pe care modulul realizat în Dialogflow o apelează pentru a completa
acțiunile cerute de utilizator. În cazul proiectului prezentat în funcția de Firebase se determină
comanda cerută de utilizator și o transmite către dispozitiv.
Pentru fiecare intenție definită in Dialogflow există o funcție definită în Javascript pentru
îndeplinirea ei, astfel că există următoarele funcții definite:
function welcome(agent) această funcție standard pentru orice aplicație și este apelată
atunci când se incepe conversația cu aplicația din Dialogflow sau în momentul în care
utilizatorul salută aplicația printr -o formulă de salut precum ”hello”.
function fallback(agent) această funcție este de asemenea standard și este apelată în
mom entul în care aplicația nu poate înțelege o intenție din diferite motive.
function openApp(agent) această funcție este asociată intenției de a afișa interfața grafică
a unui modul al sistemului și se invocă printr -o comandă de forma ”open nume_modul”,
unde nume_modul reprezintă numele modului, ce poate fi găsit în lista de module a
sistemului.
function configSensor(agent) este asociată intenției de a configura un modul de tip senzor
și poate fi invocată printr -o comandă vocală de forma ”configure a tip_senz or sensor on pin
numar_pin” unde tip_senzor reprezintă tipul senzorului și în stadiul curent al proiectului
poate avea doar valoarea ”temperature” iar numar_pin reprezintă numărul pinului fizic de
pe Raspberry Pi la care este conectat modulul hardware.
function configSwitch(agent) este asociată intenției de a configura un modul de tip switch
și poate fi invocată printr -o comandă de forma ”configure a switch on pin numar_pin” unde
numar_pin reprezintă numărul pinului fizic de pe Raspberry Pi la care este con ectat modulul
hardware.
function playMusic(agent) este asociată intenției de a porni redarea muzicii de pe dispozitiv
și poate fi invocată printr -o comandă de forma ”play music”.
Sistem cu comandă vocală pentru casă inteligentă
48
function pauseMusic(agent) este asociată intenției de a pune pe pauză redarea muzicii de
pe dispozitiv și poate fi invocată printr -o comandă de forma ”pause music”.
function nextSong(agent) este asociată intenției de a porni redarea următoarei melodii de
pe dispozitiv și poate fi i nvocată printr -o comandă de forma ”next sond”.
function prevSong(agent) este asociată intenției de a porni redarea melodiei anterioare de
pe dispozitiv și poate fi invocată printr -o comandă de forma ”previous sond”.
function changeSwitch(agent) este asocia tă intenției de schimbare a valorii unui modul de
tip switch și poate fi invocată cu o comandă de forma ”turn stare_switch switch
numar_switch” unde stare_switch poate avea valorile ”on” sau ”off” iar numar_switch
reprezintă identificatorul modulului (aces ta poate fi găsit în interfața modulului
Nanosoft.ModuleManager)
function sendRaspberryCommand(command) prin această funcție se face comunicarea
dintre Cloud și dispozitiv, prin intermediul instanței de RabbitMQ de pe platforma
CloudAMQP.
În Figura 17 este prezentată o conversație între utilizator și Johnny (numele aplicației pentru
Google Assistant asociată proiectului prezentat).
Figura 17 Conversație între utilizator si partea de Cloud a proiectului
Sistem cu comandă vocală pentru casă inteligentă
49
3 REZULTATE
Pentru realiz area proiectului s -au analizat mai multe opțiuni de implementare existente pe piață
printre care Cortana, oferită de compania Microsoft, Alexa, oferită de compania Amazon și Google
Assistant oferit de compania Google, care a fost și alegerea finală pentru proiect.
Primele teste și prima implementare a sistemului a fost realizată utilizând Cortana și platforma
Azure oferită de Microsoft. Datorită arhitecturii modulare a sistemului testarea diferitelor platforme
de Cloud s -a putut face foarte ușor, doar prin implementarea interfeței IcloudClient și configurarea
sistemelor de Cloud să trimită mesaje formatate JSON, în formatul acceptat de sistem.
Rezultatele primelor experiemte au dus la concluzia că utilizarea Azure și Cortana aduce întârzieri
prea mari între comenzile vocale și executarea acestora pe dispozitiv.
După realizarea experimentelor cu Cortana s -au realizat câteva experimente cu Amazon Alexa dar
implementarea nu a fost un succes din cauza incompatibilității cu sistemul de operare.
În final s -a ajuns la Google Assistant, oferit de compania Google, primele implementări ale
sistemului având asistentul integrat dar din cauza incompatibilității unei componente software cu
sistemul de operare Windows 10 IoT s -a decis utilizarea unui telefon mobil sau a unui dispozitiv
Google Home pentru partea de recunoaștere vocală.
Sistemul hardware a fost bine stabilit de la început, acesta constând într -o plăcuță Raspberry Pi 3
Model B și un ecran tactil de 7 inch compatibil cu aceasta. Pe parcurs s -au mai adăugat compo nente
precum o placă audio externă și un difuzor pentru a adăuga capabilitatea de redare a sunetului. În
Figura 18 este prezent ată interfața grafică a sistemului în timpul unei rulări de test pe dispozitivul
hardware.
Figura 18 Sistemul afișat pe ecra nul de 18 inch pe dispozitiv
Sistem cu comandă vocală pentru casă inteligentă
50
Pentru a comunica cu Raspberry Pi sistemul de operare Windows 10 IoT Core pune la dispoziție o
conexiune la rețea ce permite accesul la sistem printr -un portal web dar și depanarea de programe
și rularea lor direct din Visual Studio. În Figura 19 sunt prezentate conexiunile sistemului la mediul
exterior.
Figura 19 Conexiunile dintre plăcuța Raspberry Pi și mediul exterior
Sistem cu comandă vocală pentru casă inteligentă
51
4 CONCLUZII ȘI ÎMBUNĂTĂȚIRI ULT ERIOARE
4.1 CONCLUZII
Sistemul prezentat a fost conceput cu scopul de a contr ola o locuință cu ajutorul comenzilor vocale,
dar și de a perminte extinderea controlului către alte sisteme. Principala provocare pe care a adus –
o această implementare a fost conceperea componentei de modularizare în așa fel încât să se
permită și utiliza torilor fără pregătire tehnică să utilizeze și să adapteze sistemul în funcție de
nevoile proprii.
Principalul avantaj al acestui sistem este dat de modularitatea software și hardware care îi oferă o
mare flexibilitate și permite extinderea acestuia cu un efort minim.
4.2 ÎMBUNĂTĂȚIRI ULTERIOA RE
Pentru dezvoltarea ulterioară a proiectului s -au considerat limitările actuale ale sistemului precum
întârzierile mari între comanda vocală și executarea acțiunilor pe dispozitiv din cauza rețelei dar și
durata mare de pornire a sistemului din cauza sistemului de operare astfel că s -a ajuns la
următoarea listă de posibile îmbunătățiri:
Realizarea unui sistem de recunoaștere vocală și de interpretare a limbajului natural care
să fie rulat direct pe sistemul hardware pentr u a elimina întârzierile de execuție a
comenzilor.
Schimbarea sistemului de operare cu un altul sau conceperea unui sistem de operare
personalizat pentru a reduce timpii de pornire.
Refacerea interfeței grafice pentru a fi mai intuitivă pentru utilizator ș i pentru a permite mai
multe funcționalități.
Crearea unei interfețe GPIO personalizată pentru a permite sistemului să monitorizeze
starea fiecărui port.
Sistem cu comandă vocală pentru casă inteligentă
52
BIBLIOGRAFIE
1. http: //www.agir.ro/buletine/2673.pdf
2. https://docs.microsoft.com/en -us/dotnet/csharp/getting -started/introduction -to-the-
csharp -language -and-the-net-framework
3. https://docs.microsoft.com/en -us/windows/uwp/get -started/universal -application –
platform -guide
4. https://docs.microsoft.com/en -us/visualst udio/
5. https://docs.microsoft.com/en -us/windows/iot -core/windows -iot
6. https://www.amqp.org/
7. https://docs.mongodb.com/
8. http://bsonspec.org/
9. https://dialogflow.com/docs
10. https://www.raspberrypi.org/documentation/
11. https://www.raspberrypi.org/products/raspberry -pi-touch -display/
12. https://www.raspberrypi.org/app/uploads/2017/05/Raspberry -Pi-3-462×322.jpg
13. core/media/pinmappingsrpi/rp2_pinout.png
14. https://www.raspberrypi.org/app/uploads/2017/05/Display -board -2-1458×1080.j pg
15. https://en.wikipedia.org/wiki/Advanced_Message_Queuing_Protocol
16. https://en.wikipedia.org/wiki/BSON
17. https://ro.wikipedia.org/wiki/C_sharp
18. https://en.wikipedia.org/wiki/Dialogflow
19. https://en.wikipedia.org/wiki/Internet_of_things
20. https://en.wikipedia.org/w iki/MongoDB
21. https://ro.wikipedia.org/wiki/MongoDB
22. https://ro.wikipedia.org/wiki/Raspberry_Pi
23. https://en.wikipedia.org/wiki/Raspberry_Pi
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Sistem cu comandă vocală [616333] (ID: 616333)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
