Titlul complet al temei [631929]
Universitatea “Politehnica” din București
Facultatea de Electronică, Telecomunicații și Tehnologia Informației
Titlul complet al temei
Sistem de alarmă și monitorizare dezvoltat cu ajutorul platformei
Raspberry Pi
Proiect de diplomă
prezentat ca cerință parțială pentru obținerea titlului de
Inginer în domeniul Electronică și Telecomunicaț ii
programul de studii de licență Tehnologii ș i Sisteme de Telecomunicați i
Conducător(i) științific(i) Absolvent
Ș.L. Dr. Ing. Badea Radu Mihai GEARÎ P
Anul 2018
Cuprins
Lista figurilor ………………………….. ………………………….. ………………………….. ………………………. 9
Lista Tabelelor ………………………….. ………………………….. ………………………….. …………………… 11
Lista Acroni melor ………………………….. ………………………….. ………………………….. ………………. 13
Introducere ………………………….. ………………………….. ………………………….. ………………………… 15
Motivație ………………………….. ………………………….. ………………………….. ………………………….. .. 15
Exemple de aplicații în care este util un astfel de sistem ………………………….. ………………….. 15
1. Descrierea tehnologiior utilizate în realizarea proiectului ………………………….. …………. 17
1.1 Proiecte asemănătoare în domeniu ………………………….. ………………………….. ……….. 17
1.1.1. Cerber C62 ………………………….. ………………………….. ………………………….. ……… 17
1.1.2 DSC KIT 585 SMS ………………………….. ………………………….. ………………………….. .. 17
1.2 Internet of Things ………………………….. ………………………….. ………………………….. ….. 17
1.3 Descrierea componentelor hardware ………………………….. ………………………….. ……. 18
1.3.1 Raspberry Pi ………………………….. ………………………….. ………………………….. …… 18
1.3.2 Convertorul analog digital ADS 1015 ………………………….. …………………………. 22
1.3.3 Senzorul de măsurare a distanței Sharp GP2Y0A02YK0F ………………………… 24
1.3.4 Buzzer -ul YL -44 ………………………….. ………………………….. ………………………….. . 26
1.4 Descrierea componentelor software ………………………….. ………………………….. ……… 27
1.4.1 Python GPIO ………………………….. ………………………….. ………………………….. …… 27
1.4.2 Sqlite3 ………………………….. ………………………….. ………………………….. …………….. 28
1.4.3 HTML ………………………….. ………………………….. ………………………….. …………….. 28
1.4.4 PHP ………………………….. ………………………….. ………………………….. ………………… 28
1.5 Legăturile dintre componentele sistemului ………………………….. ………………………… 29
2 Realizarea practică a sistemului ………………………….. ………………………….. …………………. 31
2.1 Descrierea funcționalităților sistemului ………………………….. ………………………….. … 31
2.2 Schema electrică ………………………….. ………………………….. ………………………….. …….. 34
2.3 Conexiuni fizice ………………………….. ………………………….. ………………………….. ……… 35
2.4 Realizare software ………………………….. ………………………….. ………………………….. ….. 36
2.4.1 Setarea inițială a parametrilor ………………………….. ………………………….. ………. 36
2.4.2 Funcții utilizate ………………………….. ………………………….. ………………………….. .. 37
2.4.3 Rezultate obținute ………………………….. ………………………….. ………………………… 39
3 Interacțiunea cu utilizatorul ………………………….. ………………………….. ………………………. 43
3.1 Utilizarea bazei de date ………………………….. ………………………….. ……………………….. 43
3.2 Crearea paginii web prin PHP și HTML ………………………….. ………………………….. . 44
3.3 Scenariu de utilizare al sistemului ………………………….. ………………………….. ………… 44
3.4 Interfața grafică cu utilizatorul ………………………….. ………………………….. ……………. 45
Concluzii ………………………….. ………………………….. ………………………….. ………………………….. .. 49
Contribuții personale și dezvoltări ulterioare ………………………….. ………………………….. …….. 50
Bibliografie ………………………….. ………………………….. ………………………….. ………………………… 51
Anexa 1 Codul su rsă pentru sistemul de alarmă ………………………….. ………………………….. … 53
Anexa 2 Codul sursă pentru pagina web ………………………….. ………………………….. ……………. 57
Lista figurilor
Figura 1.1. Predictia numărului de dispozitive conectate prin IoT ………………………….. …………. 18
Figura 1.2. Microcon trolerul Raspberry Pi 3 Model B ………………………….. ………………………… 19
Figura 1.3. Raspberry Pi pini de GPIO ………………………….. ………………………….. ………………… 20
Figura 1.4. Convertorul analog digital ADS 1015 ………………………….. ………………………….. …… 21
Figura 1.5. Funcția de transfer ce reprezintă liniaritatea ………………………….. ………………………. 22
Figura 1.6. Diagrama bloc convertor analog digital ADS 1015 ………………………….. ……………… 23
Figura 1.7. Senzorul de măsurare a distanței GP2Y0A02YK0F ………………………….. ……………. 23
Figura 1.8. Caracteristica de măsurare a distanței ………………………….. ………………………….. ….. 24
Figura 1.9. Schema bloc a senzorului GP2Y0A02YK0F ………………………….. ……………………… 25
Figura 1.10. Buzzer -ul YL -44 ………………………….. ………………………….. ………………………….. … 25
Figura 1.11. Schema electrică pentru buzzer -ul YL -44 ………………………….. ………………………… 26
Figura 2.1. Schema general ă de funcționare a sistemului ………………………….. ……………………… 29
Figura 2.2. Diagrama legăturilor dintre blocurile principale ………………………….. ………………….. 30
Figura 2.3. Magistrala de comunicații hardware I2C ………………………….. ………………………….. . 31
Figura 2.4. Schema electrică ………………………….. ………………………….. ………………………….. …… 32
Figura 2.5. Realizarea conexiunilor fizice ………………………….. ………………………….. ……………… 33
Figura 2.6. Modul în care a u fos t importate modulele ………………………….. ………………………….. 34
Figura 2.7. Modul în care au fost setați pinii de GPIO ………………………….. ………………………… 34
Figura 2.8. Condiția generală după care buzzer -ul emite ton ………………………….. ………………… 35
Figura 2.9. Afișarea datelor primate de la senzor ………………………….. ………………………….. …… 36
Figura 2.10. Script -ul db_utils.py ………………………….. ………………………….. ……………………….. 36
Figura 2.11. Caracteristica ieșirii digitale în funcție de distanță ………………………….. ……………. 38
Figura 2.12. Vizualizarea datelor din terminal ………………………….. ………………………….. ………. 39
Figura 3.1. Structura bazei de date ………………………….. ………………………….. ………………………. 41
Figura 3.2. Posibil scenariu de utilizare ………………………….. ………………………….. ……………….. 43
Figura 3.3. Interfața grafică a paginii web ………………………….. ………………………….. …………… 44
Figura 3.4. Configurarea din fișierele PHP și Python ………………………….. ………………………….. 45
Lista Tabelelor
Tabel 2.1. Tabel de coresponden ță………………………….. ………………………….. ……………………….. 38
Lista Acronimelor
ACK – ACKnowledge
ADC – Analog to Digital Convertor
CSI – Crop System Interface
CSS – Cascading Style Sheet
ENOB – Effective Number of Bits
GPIO – General Purpose Input -Output
HDMI – High Definition Multimedia Interface
HTML – Hypertext Markup Language
HTTP – Hypertext Transfer Protocol
I2C- Inter -Integrated Circuit
IoT – Internet of Things
IP – Internet Protocol
LAN – Local Access Network
LCD – Liquid Crystal Display
LED – Light Emitting Diode
PC – Personal Computer
PHP – Hypertext Preprocessor
PIR – Passive Infrared sensor
RAM – Random Access Memory
SBC – Session Border Controller
SD- Secure Digital
SNR – Signal -to-Noise Ratio
SQL – Standardized Query Language
UART – Universal Asynchronous Reciever -Transmitter
USB – Universal Serial Bus
15
Introducere
În ziua de astăzi numărul populației este mult mai mare decât era nu cu foarte mult timp
în urmă, iar odată cu evoluția tehnologiei oamenii au început să își îndrepte atenția spre noile
echipamente electronice, ușor de conectat între ele și care vin în sprijinul activităților de zi cu zi
sau a diferitelor modele de afaceri. Printre acestea se regă sesc sisteme inteligente de încă lzire,
sisteme inteligente pentru gestionarea activității într -o locuință , sisteme de securitate etc. Toate
aceste sisteme fac parte din noul concept de tehnologii IoT , concept care se tot dezvoltă și este
utilizat de cât mai mulți oameni sau cât mai multe corporații.
Sistemul ce urmează a fi prezentat este alcătuit dintr -o parte hardware și una software.
Scopul este crearea unui sistem de alarmă pentru a satisface nevoia de securitate care a apărut în
societatea contemporană.
Motivație
În continuă dorință de progres de la Revoluția Industrială si până în prezent este din c e în
ce mai necesar ca o serie întreagă de activități să se desfășoare cât mai repede și cât mai bine.
Din această nevoie de eficiență maximă au fost realizate echipamente care să înlocuiască mâna
de lucru umana , reducând astfel și costurile și permițând o dezvoltare susținută. Motivația pentru
a realiza acest proiect vine în primul rând din dorința de a acumula cât mai multe cunoștințe
despre tehnologiile embedded și de a le pune în funcțiune pentru a forma un sistem ușor de
utilizat. În al doilea rând gă sesc această aplicație utilă societății in sensul în care sisteme de
alarmă se folosesc aproape oriunde , de la apartamente până la sedii de bănci și astfel acest
proiect chiar poate fi utilizat in realitate într -un cadru potrivit, ca de exemplu o alarmă p entru o
cușcă de animale sau orice altceva .Prin soluția ce urmează să o propun urmăresc realizarea unui
sistem cu funcționalităti de bază care mai apoi să poate fi dezvoltat în funcție de cerințele care
apar.
Exemple de aplicații în care este util un astfel de sistem
1. Alungarea hoților de pe micile proprietăți nesupravegheate
Mulți oameni dețin o proprietate departe de domiciliu , iar în cazul în care aceștia doresc
să știe ce se intâmplă in locul respectiv făra a investi într -un sistem de supraveg here video , un
sistem de alarmă poate fi soluția optimă. În cazul în care proprietatea este încălcată și se
declanșează senzorii proprietarul poate vedea acest lucru accesând o pagină web sau o aplicație
mobilă si astfel poate deține un anumit control asu pra bunurilor sale.
16
2. Dresajul de animale
Aproape toți deținătorii de animale de companie aleg să iși dreseze animalul într -un fel
sau în altul dar majoritatea nu au timpul necesar. Prin utilizarea unui astfel de sistem cu resurse
limitate care poate fi montat în diferite părți ale apartamentului unde animalului îi este interzis
accesul animalul poate fi dresat în lipsa stăpânului acesta re acționând la sunetul produs de alarmă
în momentul în care vrea să meargă undeva nepermis.
3. Prevenirea accidentelor în cazul copiilor
Când copiii sunt mici este nevoie de un efort consistent pentru a le asigura siguranța
zilnică. În cazul in care cel care a re grijă de copil doarme sau are altă treaba la un moment dat iar
copilul se dă jos din pat sau se aproprie de usă declanșarea alarmei îl poate atenționa pe părinte și
se poate evita un accident.
17
1. Descrierea tehnologiior utilizate în realizarea proiectului
1.1 Proiecte asemănătoare în domeniu
Există deja foarte multe sisteme de acest tip pe piață. Diferențele dintre ele constau in
rolul pe care trebuie să îl îndeplinească, chiar dacă majoritatea utilizează aceleași tehnologii ,
pot fi accesate wireless , utilizează senzori PIR , au diferite buzzere etc. Costul acestor sisteme
este dat de numărul de senzori folosit in realizarea echipamentului dar si de performanțele
senzorilor, existența si dimensiunea unei baterii care sa facă sistemu l portabil.
1.1.1. Cerber C62
Acest sistem de alarmă este unul profe sional care există pe piață. Conține doi
acumulatori ACC12V/7AH și doi senzori de mișcare PIR DSC LC 100PCI, acești senzori au
raza de înregistrare de 15 metri si un unghi de deschidere de 90 de grade. Sistemul poate accepta
45 de coduri de utilizator și poate înregistra 425 de evenimente. Un avantaj constă în faptu că
este configurabil, se mai pot adăuga încă alți 4 senzori de mișcare în caz de nevoie, sistemul are
un preț de 150 $.
1.1.2 DSC KIT 585 SMS
Acest sistem este similar cu cel din urma , prețul este tot în jur de 150 $ . Are însă un
mare avantaj, dispune de un modul gsm , GSM SEKA, prin intermediul căruia utilizatorul poate
fi notificat prin SMS sau poate activa / dezactiva sistemul prin SMS. Un dezavantaj este că
sistemul poate înregistra 38 de coduri de acces și doar 128 de evenimente.
1.2 Internet of Things
Prin conceptul de IoT se înțelege formarea unei rețele de comunicațtii între diferite tipuri
de dispozitive (microcontrollere , senzori etc.) prin intermediul accesului la internet. Nu orice
echipament poate fi integrat într -o structură de tip IoT, acesta trebuie să aibă anumite
caracteristici cum ar fi:
18
– Trebuie să asigure posibilitatea de a integra și generațiile mai vechi de
tehnologii dar în același timp să ofere posibilitatea de a adăuga tehnologii noi
în viitor , deci trebui să aibe multe module de co nectivitate.
– Trebuie să fie ușor de utilizat , intuitiv, să nu fie nevoie ca utilizatorul să
dețină informații despre modul în care a fost implementat sistemul
– Să aibă posibilitatea de conectivitate cu cât mai multe alte dispozitive, este
nevoie de o inter fațare usoară prin intermediul a cât mai multe standarde de
conectivitate
Un bun exemplu în care este folosit conceptul de IoT este “Depozitul Inteligent”. În
domeniul logisticii se găsește din ce în ce mai greu resursă umană, astfel că implementarea
soluțiilor de autom atizare au fost oarecum necesară . Marfa este preluată și gestionată în depozite
de stivuitoare și echipamente inteligente care analizează și iau singure deciizile de manipulare a
paleților de marfă. În funcție de cantitatea de marfă primită acestea decid în timp real traseul pe
care este transportată marfa sau pot semnaliza diferite probleme ce pot să apară. [2][3]
Având în vedere cererea din piață si ritmul de expansiune al IoT putem spune că în viitor
va fi principalul concept în jurul căr uia se vor constru i noile echipamente electronice , după cum
se poate observa în Figura 1.1. .
Figura 1.1. Predictia numărului de dispozitive conectate prin IoT . Imagine preluat ă din
sursa [ 1]
1.3 Descrierea componentelor hardware
1.3.1 Raspberry Pi
Cea mai importantă componentă a proiectului este microcontrolerul Raspberry Pi. Acesta
reprezintă o placă de dezvoltare de tip SBC, acest sistem este des întâlnit în mediul universitar
deoarece este ușor de folosit și reprezintă un bun punct de plecare în domeniul electronicii și al
19
automatizării. Raspberry Pi face parte din familia echipamentelor numite Embedded Systems ,
este un dispozitiv de mici dimensiuni cu resurse limitate cu un consum redus de energie și care
poate îndeplini mai multe sarcini simultan. Este bazat pe o distribuție de Linux , Raspbian, un
sistem special optimizat pentru această plăcuță și recomandat de Raspberry Pi Foundation . Este
mai le nt decât un Laptop sau un PC dar marele său avantaj este faptul că dispune de porturile de
intrare/ieșire GPIO. Specifice sistemelor embedded prin aceste porturi se pot conecta direct la
placă o serie întreagă de componente : senzori, ecranen LCD , antene, butoane etc. La fel ca
celelalte sisteme embedded Raspberry Pi poate fi integrat și folosit în diverse domenii cum ar fi:
sisteme de securitate, automatizări industriale, radare, aparate de uz casnic etc. [4]
Au fost scoase pe piață mai multe generații de plăcuțe Raspberry Pi. În 2012 a apărut
primul model , Raspberry Pi 1 Model B, acesta a fost urmat de un model mai ieftin , Modelul A .
Ulterior a fost lansat un model îmbunătățit, Raspberry Pi 1 Model B+, urmat de Modelul A+.
Apoi a apărut modelul Raspberry Pi 2 , model la care a fost adăugată mai multă memorie RAM.
Modelul Raspberry Pi Zero apărut în 2016 cu o dimensiune redusă față de cele precedente, cu un
număr mai mic de porturi input/output și cu capabilități GPIO. Modelele Raspberry Pi Zero W și
Raspberry Pi Zero WH au fost echipate cu module de Wi-Fi și Bluetooth dar și cu GPIO
presetați. Modelul Raspberry Pi 3 Model B a fost echi pat cu un procesor ARM Cortex -A53 quad
core pe 64 biți și cu capabilități de butare USB. Cea mai performantă versiune este Raspberry Pi
3 Model B+ apărută în 2018. [4][5]
Dimensiunile reduse ale plăcuței Raspberry Pi sunt datorate sistemului de integrare SoC.
Prin acesta se integreaza toate sistemele unui computer sau ale altor sisteme electronice. Pentru
Raspberry Pi se integrează unitatea centrală de procesare, memoria RAM și unitatea de procesare
grafică precum și portul de USB , se îmbunătățesc atât pe rformanțele cât și consumul de energie.
[5][10]
Modelul ales pentru a fi folosit în acest proiect este Raspberry Pi 3 Model B prezentat în
Figura 1.2. .
20
Figura 1.2. Microcon trolerul Raspberry Pi 3 Model B . Imagine preluat ă din sursa [ 3]
Raspberry Pi 3 Model B dispune de un Procesor Quad Core ARM Cortex -A53 pe 64 de
biți cu o frecvență de1.2 GHz cu 1 GB RAM. Acesta conține module de WiFi 802.11n și
Bluetooth 4.1 și Bluetooth LE , port de HDMI, 4 Porturi USB 2.0 , 40 de pini GPIO , ieșire v ideo
Composite , ieșire audio s tereo , port CSI pentru a conecta camera Raspberry Pi , port DSI pentru
a conecta display -uri cu touchscreen , slot pentru card micro SD , modul Ethernet. [5] [7]
Distribuirea , denumirea și numerotarea pinilor pe suprafața Raspberry Pi sunt prezentate
în Figura 1. 3.
21
Figura 1.3. Raspberry Pi pini de GPIO . Imagine preluat ă din sursa [ 8]
22
1.3.2 Convertorul analog digital ADS 1015
Figura 1.4. Convertorul analog digital ADS 1015 . Imagine preluat ă din sursa [ 11]
Un convertor analog digital este un dispozitiv care transformă un semnal analogic într -un
semnal digital. Acest dispozitiv poate fi utilizat în diferite situați i ca de exemplu: sunetul preluat
de la un microfon sau lumina care int ră în obiectivul unei camere digitale, aceste semnale
analogice sunt convertite în semnale digitale. Deasemenea se pot converti curenți sau tensiuni de
intrare , acestea vor fi reprezentate sub formă numerică indicând magnitudinea semnalului. Un
convertor digital analog efectuează operația inversa, transformă un semnal digital în semnal
analog.
Pentru a realiza c onversia cu un ADC este necesară cuantizarea intrării , astfel este
inevitabilă apariția unei erori sau a zgomotului. Performanța unui AdC este data de raportul
semnal zgomot dar și de lățimea de bandă. Rata de eșantionare ne conduce la lățimea de bandă a
unui ADC. SNR -ul unui ADC poate fi caracterizat în funcție de mai mulți factori printre care :
rezoluția , precizia , li niaritatea, alierea .
Rezoluția unui ADC reprezintă numărul de valori numerice pe care le poate genera în
functie de gama de semnale analogice. Spre exemplu un ADC cu o rezoluție de 8 bițti poate
converti un semnal analogic pe 256 de nivele cu valori între 0 și 255 sau între -128 și 127. Din
punct de vedere electriv rezoluția poate fi definită ca nivelul minim de tensiune necesar pentru a
modifica ieșirea din ADC. [12][13]
Precizia unui ADC este dată de potrivirea cât mai exactă dintre nivelul de cuantificare si
semnalul analogi c.
Liniaritatea unui ADC : funcția ideală de transfer a unui ADC este o linie dreaptă , dar în
realitate se ajunge la o funcție de tip scară. Având în vedere că un semnal analogic este continuu
,se alege un pas de cuantizare ,iar cu cât numărul de ieșiri crește și pasul se micșorează ,
caracteristica se aproprie de cea ideală, de o linie dreaptă așa cum se observă în Figura 1.5. . [13]
23
Figura 1.5. Funcția de transfer ce reprezintă liniaritatea . Imagine preluat ă din sursa [13]
Alierea : acest fenomen este evitat cu ajutorul teoremei lui Nyquist. Semnalul cu cea mai
mare frecvență care poate fi convertit de un ADC trebuie să aibă frecvența egală cu maxim
jumătate din frecvența de eșantionare, astfel se evită erorile.
Raportul semnal -zgomot pentru un AD C este exprimat în număr efectiv de biți (ENOB).
Aceste reprezintă numărul de biți returnați care în medie nu reprezintă zgomot. ENOB mai este
folosit și pentru a indica nivelul de calitate pentru oscilatoare , amplificatoare și alte
echipamente.
Converto rul analog digital utilizat în realizarea pro iectului este cel din Figura 1.4 , ADS
1015. Acesta are o rezoluție de 12 biți , un domeniu de alimentare între 2 V și 5,5 V, dispune de
interfață de comunicare prin I2C cu 4 adrese accesibile prin intermediul pinilor și o temperatură
de funcționare între -40°C și 125°C , schema bloc a convertorulu i este prezentată în Figura 1.6. .
[13]
24
Figura 1.6. Diagrama bloc convertor analog digital ADS 1015 . Imagine preluat ă din sursa [ 11]
1.3.3 Senzorul de măsurare a distanței Sharp GP2Y0A02YK0F
În acest proiect a fost utilizat senzorul de măsurare a distanței fabricat de comp ania
Sharp prezentat în Figura 1.7. :
Figura 1.7. Senzorul de măsurare a distanței GP2Y0A02YK0F . Imagine preluat ă din sursa [ 14]
Senzorul GP2Y0A02YK0F este unul de tipul “Infrared Proximity Sensor” , adică un
senzor care poate detecta prezența unor obiecte aflate la o anumită distanță față de el .
Senzorii de proximitate funcționează după următorul principiu : senzorul emite un
fascicul de radiații electromagnetice sau un câmp electromagnetic , acesta poate fi de exemplu
infraroșu , iar apoi detectează schimbările apărute în câmpul electromagnetic sau un anumit
25
semnalul de revenire. Dacă se detectează un obiect , acel obiect va fi numit obiectul țint ă al
senzorului.
Datorită faptului că acest tip de senzori nu fac niciodată contact cu obiectul țintă și nu au
componente de natură mecanică duc la o durată de funcționare mare și o foarte bună fiabilitate.
Acești senzori pot fi de mai multe feluri , se pot clasifica astfel :
– inductivi : utilizați în detecția obiectelor metalice
– capacitivi : utilizați în detectția tuturor obiectelor , pot indica nivelul de umplere al unui
recipient
– magnetici : utilizați în medii ostile , contaminate
– cu ultrasunete : sunt utilizați în industrie la scară largă , un scopa r putea fi cel de sensor de
parcare
– optici : sunt utilizați în situațiile în care nu se vrea contactul cu respectivul obiect , sunt foarte
preciși [15][16]
Există mai multe tipuri de aplicații în care se utilizează senzori de proximitate , ca de
exemplu : senzorii utilizați pentru autoturisme pentru a fi de ajutor la parcare , senzorii din
telefoanele inteligente care evită atingerea accidentală a ecranului în momentul în care telefonul
este ținut lângă ureche etc.
Senzorul GP2Y0A02YK0F poate detecta distanța față de un obiect într -un interval
cuprins între 20 cm și 150 cm , datele înregistrate sunt trimise la ieșire sub forma unui semnal
analog și necesită o tensiune de alimentare între 4.5 V și 5.5 V , el va fi conectat la pinul ce oferă
o tensiune de alimentare de 5 V a plăcuței Raspberry Pi. [14]
Figura 1.8. Caracteristica de măsurare a distanței . Imagine preluat ă din sursa [ 14]
26
După cum se observa în Figura 1.8 . în jurul valorii de 15 cm senzorul are un maxim de
tensiune la ieșire de aproape 3 V. Această caracteristică scade neliniar până când în jurul valorii
de 150 cm senzorul va trimite la ieșire un nivel de tensiune de aproximativ 0.5 V. Schema bloc a
senzorului este prezentată în Figu ra 1.9. .
Figura 1.9. Schema bloc a senzorului GP2Y0A02YK0F . Imagine preluat ă din sursa [ 14]
1.3.4 Buzzer -ul YL -44
27
Figura 1.10. Buzzer -ul YL -44. Imagine preluat ă din sursa [ 17]
Dispozitivele de tip buzzer sunt de două tipuri : pasive și active. Buzzer -ul folosit în
proiect este unul de tip activ , acesta emite un ton în momentul în care este conectat la VCC și la
masă , este prezentat în Figura 1.10. .
Buzzer -ul YL -44 funcțione ază în jurul frecvenței de 2 kHz. Dacă pinul de intrare / ieșire (
I/O ) este setat pe valoarea LOW buzzer -ul va emite un ton , sunetul va dispărea în momentul în
care pin ul va fi setat pe valoarea HIGH , schema electrică a buzzer -ului esete prezentată în
Figura 1.11. . [17]
Figura 1.11. Schema electrică pentru buzzer -ul YL -44. Imagine preluat ă din sursa [ 17]
1.4 Descrierea componentelor software
1.4.1 Python GPIO
Un aspect important oferit de plăcuța Raspberry Pi îl reprezintă pinii GPIO. Oricare
dintre acești pini poate fi accesat și configurat din software ca un pin de intrare sau unul de
ieșire. Prin intermediul acestor pini putem transmite semnale de ieșire către dispozitive hardware
periferice cum ar fi : senzori , antene, LED -uri etc. Dacă aceștia sunt set ați ca pini de intrare și
sunt conectați la alte d ispozitive putem afla starea respectivelor dispozitive , datele pe care le
transmit la ieșire.
Pinii GPIO sunt accesați prin intermediul limbajului de programare Python , prin
intermediul modulului RPi.GPI O. Odată instalate pachetele de Python și de python -rpi.gpio din
terminalul sistemului de operare se pot utiliza pinii de GPIO prin executarea unor script -uri în
care trebuie introdusă comanda „import RPi.GPIO as GPIO ”. Pentru a stabili direcția pinilor ,
dacă aceștia sunt de intrare sau de ieșire , se folosește comanda „GPIO.setup (numărul pinului,
28
GPIO.INPUT/OUT) ”. Pinii sunt numerotați în două feluri conform datasheet -ului , prima
numerotare este în funcție de poziț ia fizică pe care pinul o ocupă pe placă , iar cea de a doua este
o numerotare logică. Pentru a seta pinii în fișierul Python trebuie precizată tipul numerotării cu
care vrem să lucrăam , pentru cea fizica se utilizează comanda
„GPIO.setmode(GPIO.BOARD) ” , iar pentru ceelaltă numerotare comanda
„GPIO.setmode(GPIO.BCM )”. Pentru a activa sau a dezactiva un echipament conectat la un
pin se transmite un semnal de intrare sau de ieșire prin comanda „ GPIO.output/input(numărul
pinului, GPIO.HIGH/LOW) ”.[6][9][18]
1.4.2 Sqlite3
Sqlite este un motor de baze de date prin care se gestionează bazele de date relaționale și
care respectă standardul SQL . Spre deosebire de alte motoare de baze date Sqlite stochează o
bază de date într -un singur fișier fapt care conferă utilizator ului o mare accesibilitate, copierea
unui fișier devine echivalentă cu copierea bazei de date, iar partajarea unei baze de date se
reduce la simpla trimitere a fișierului respectiv. Un dezavantaj însă constă în faptul că un singur
utilizator poate scrie în tabela unei baze de date la un anumit moment de timp , nu este permisă
modificarea unei tabele de doi sau mai mulți utilizatori concomitant. Deoarece nu este nevoie de
utilizarea unui server pentru a putea manipula bazele de date Sqlite3 este foarte utili zat în
testarea și dezvoltarea aplicațiilor. [19]
1.4.3 HTML
HTML ( Hypertext Markup Language) este cel mai utilizat limbaj în crearea de pagini
web. Browser -ul pe care îl accesăm interpretează codul HTML și astfel se poate deschide pagina
web ce se dorește a fi accesată. Acest limbaj este foarte utilizat , mai ales de către cei care
debutează în d omeniul de design al paginilor web , deoarece este foarte ușor de utilizat având o
sintaxă de lucru foarte simplă. Elementele de tip HTML sunt alcătuite din caractere care trebuie
să se afle în interiorul unor paranteze unghiulare , blocurile html fiind de schise și închise prin
tag-uri. De exemplu se pot deschide 2 blocuri HTML astfel : <html>, <body> , iar pentru a le
închide se folosesc tag -urile : </html>, < /body>. Aceste tag -uri fac foarte transparentă
structurarea unei pagini web construite în HTML. Au fost lansate mai multe versiuni de HTML ,
ultima versiune lansată fiind HTML 5 . [20]
1.4.4 PHP
PHP (Hypertext Preprocessor) este un limbaj prin care se faciliteză interacțiunea dintre
o pagină web și o bază de date și care rulează prin intermediul unui server. Deși fișierele PHP au
extensia .php acestea pot conține și cod scris în alte limbaje cum ar fi : HTML, CSS , JavaScrip t.
PHP satisfice foarte multe funcționalități cum ar fi : posibilitatea de a crea , modifica și sterge
29
fișiere de pe server , oferă o bună Securitate prin faptul că poate cripta datele și poate controla
accesul utilizatorilor , poate accesa datele din baze le de date cu care lucrează și le poate
modifica, Acest limbaj prezintă o serie de avantaje printer care putem exemplifica următoarele :
este gratis , poate rula pe majoritatea sistemelor de operare ( Windows, Linux , Mac Os X etc. )
și este compatibil cu majoritatea sistemelor server folosite ( Apache , IIS , etc.) . Au fost lansate
mai multe versiuni de PHP , cea mai nouă fiind versiunea PHP 7.0 . [21][22]
1.5 Legăturile dintre componentele sistemului
Se va descrie modul în care au fost conectate dispozitivile și tehnologiile utilizate în cadrul
proiectului :
S-a utilizat o interfață de comunicare în rețea :
Prin faptul că plăcuța Raspberry Pi are modul Ethernet interfațarea cu sistemul de operare al
plăcuței se poate stabili atât wireless cât șî p rintr-un cablu de rețea de tip Ethernet , prin
intermediul unei rețele locale de tip LAN. Este utilizat protocolul Internet Protocol (IP) care nu
necesită conexiune la internet .
S-au utilizat interfețe hardware :
Interfețele hardware de care dispune sistemul și care au fost folosite sunt UART si I2C. Prin
interfața UART a fost posibilă stabilirea unei sesiuni prin intermediul unui terminal serial ,
PuTTY. Interfața I2C a fost activată din terminalul sistemului de operare din meniul obținut din
comanda sudo raspi -config . Este un protocol de tip multi -master multi -slave prin care se pot
atașa oricâte dispozitive unui master , singura limitare fiind data de dimensiunea adresei
dispozitivului slave. Se utilizeaza două linii bidirecționale Serial Date Line (SDA) și Serial
Clock Line (SCL) , iar tensiunile de lucru sunt de 3.3 V sau de 5 V. [24]
S-au utilizat pinii GPIO 2(I2C SDA1) și GPIO 3(I2C SCL1) pentru a interfața Raspberry Pi
cu convertorul analog digital astfel : 5V ADC -> 5 V Raspberry Pi , GND ADC -> GND
Raspberry Pi , SCL ADC -> pin GP IO 3(SCL1, I2C), SDA ADC -> pin GPIO 2(SDA1, I2C).
Din punct de vedere software sistemul preia datele de la senzorul de măsurare a distanței și le
introduce într -o bază de date care poate fi accesată direct din terminalul sistemului de operare ,
această bază de date urmând să fie afișata pe o pagină web de unde poate fi accesată de un
anumit utilizator.
30
31
2 Real izarea practică a sistemului
2.1 Descrierea funcționalităților sistemului
Principala componentă utilizată în conceperea sistemului este placa de dezvoltare
Raspberry Pi , cu un sistem de operare bazat pe Linux aceasta reprezintă componenta ce
îndeplinește funcția de control a sistemului. Deoarece Raspberry Pi nu poate interpreta semnale
de tip analog , a fost utilizat un convertor analog -digital ( ADC ) ADS1015 . A fost u tilizat un
senzor de proximitate GP2Y0A02YK0F produs de compania Sharp , acest senzor trimițând la
ieșire semnale de tip analog. Pentru sonerie a fost utilizat un buzzer activ , YL-44.
Obiectivul a fost acela de a conecta dispozitivele hardware menționate anterior astfel
încât în momentul în care senzorul de înregistrare a distanței detecteaza mișcare pe o rază
stabilită buzzer -ul sădeclanșeze un ton de alarmă. Pentru a putea interpreta datele trimise de
senzorul de proximitate cu ajutorul plăcii Raspberry Pi , convertorul analog -digital a fost folosit
pentru a transforma semnalul primit de la senzor ăn semnal digital.
Schema generala de fun cționare a fost concepută după principiul din Figura 2.1. :
Figura 2.1. Schema general ă de funcționare a sistemului
32
Așa cum se vede în schema generala de funcționare în centrul sistemului se află placa de
dezvoltare Raspberry Pi. Prin intermediul acesteia se iau deciziile , se prelucrează datele obținute
și se trimit către pagina web.
Prin Figura 2.2. se vor evidenția mai detaliat legăturile dintre placa Raspberry Pi și
celelalte tehnologii utilizate , software dar și hardware , în vederea realizării proiectului :
Figura 2.2. Diagrama legăturilor dintre blocurile principale
Din blocul Sensor Recepti on face parte convertorul analog -digital care este legat la
Raspberry Pi prin intermediul unei interfețe I2C.
I2C este un protocol de comunicații hardware care funcționează după principiul “ Master –
Slave ” și pentru care sunt necesare doar două semnale , cel de ceas și cel prin care sunt
transmise datele . Este utilizat un microcontroller în rolul de master , iar în rolul de slave pot fi
utilizate dispoz itive periferice sau tot un microcontroller , rolul de master sau de slave nefiind
unul permanent , ace ste roluri se pot schimba între dispozitivele care realizează comunicația cu
condiția ca acestea să conțină echiparea hardware necesară. Toate transmisiunile sunt inițiate și
încheiate de către master , acesta poate trimite date sau extrage date de la unu l sau mai multe
dispozitive slave. Datele sunt trimise în pachete de 8 biți , iar după fiecare pachet este transmis
un bit suplimentar pentru a confirma sau nu dacă pachetele au fost recepționate ( bitul de ACK) .
În cazul acestui proiect master -ul este Ra spberry Pi , iar slave -ul este ADC -ul. Un exemplu de
magistrală de tip I2C este prezentat în Figura 2.3. . [23][24]
33
Figura 2.3. Magistrala de comunicații hardware I2C . Imagine preluat ă din sursa [ 14]
Protocolul I2C prezintă avantaje cât și dezavantaje după cum urmează :
Avantaje:
– Este un protocol ce conferă flexibilitate , există posibilitatea de a conecta la
magistrala de I2C mai multe elemente master dar și slave , se utilizează
principiul multi -master multi -slave.
– Este un protocol simplu de utilizat care nu adduce modificări semnificatoive
design -ului fiind nevoie doar de două linii bidirecționale de semnal (data și
clock)
– Dispune de un mecanism eficient de gestionare a erorilor prin biții de
confirmare a recepționării pachetelor ( ACK / NACK )
Dezava ntaje:
– limitează spațiul pe cip deoarece necesită introducerea unor rezistențe de pull –
up (rezistențte care asigură o stare implicită a semnalului pentru a preveni
arderea pinilor)
– Viteza de transfer este limitată din cauza rezistențelor de pull -up[24]
34
Prin blocul Data Base este escos în evidență faptul că datele primite de la ADC sunt puse
într-o bază de date prin Sqlite3.
Prin blocul Web Server informațiile stocate în baza de date sunt procesate și adăugate în
pe o pagină pe web. Din punct de vedere hardware un server web poate fi un computer pe care
sunt stocate fișiere ce urmează a fi încărcate în rețea . Din punct de vedere software este utilizat
protocolul HTTP , protocol prin care conținutul paginii web poate fi accesat . Prin acest protocol
se trimit pachete de request către adresa IP a paginii web ce se doreș te a fi accesată , iar server -ul
de HTTP trimite înapoi către utilizator ( client ) fișierele pe care dorește să le acceseze. [25]
Blocul Browser semnifică faptul că datele pot fi accesate d in browser -ul existent pe
sistemul de operare , în mod local .
2.2 Schema electrică
Figura 2.4. Schema electrică
Proximity
Sensor
Buzzer
35
2.3 Conexiuni fizice
Conform schemei electrice prezentate în Figura 2.4. componentele hardware utilizate au
fost conectate în felul următor:
Convertorul analog -digital a fost conectat conectat la Raspberry Pi astfel : pinul VCC
convertor -> pinul 2 Raspberry Pi ( DC Power 5V) , pinul GDN convertor -> pinul GDN
Raspberry Pi, pinul SCL convertor -> pinul 5 Raspberry Pi ( I2C, SCL ) , pinul SDA convertor –
>pinul 3 Raspberry Pi ( I2C , SDA).
Buzzer -ul a fost conectat astfel : pinul GDN buzzer -> pinul GND Raspberry Pi , pinul
I/O buzzer -> pinul GND Raspberry Pi , pinul VCC buzze r -> pinul 7 Raspberry Pi ( GPIO 04 (
GPIO_GCLK ) )
Senzorul de măsurare a distanței a fost conectat astfel : pinul VCC senzor -> pinul 2
Raspberry Pi ( DC Power 5V) , pinul GND senzor -> pinul GND Raspberry Pi.
Prin intermediul unei plăci de testare breadboard a fost făcută și următoarea conexiune :
pin Data senzor -> pin A0 Convertor .
Pinul A0 al convertorului analog -digital a fost conectat la pinul Data al senzorului pentru
ca ADC -ul să preia datele trimise de senzor pe canalul 0 .
În Figura 2.5. este prezentat modul în care au fost realizate conexiunile fizicie prin
intermediul unei plăci de test breadboard.
Figura 2.5. Realizarea conexiunilor fizice
36
2.4 Realizare software
2.4.1 Setarea inițială a parametrilor
Pentru a face sistemul utilizabil din punct de vedere software a fost nevoie de crearea
unui fișier python , iar în urma rulării acestuia plăcuța Raspberry Pi va putea interpreta datele
primate de la senzor.
Au fost create două fișiere de python pentru a interacționa cu sistemul creat ,
”adc_data.py” și ”db_utils.py” În primul rând a fost nevoie de a importa anumite biblioteci și
module în fișierele de python. Acestea au fost modulul de timp , modulul necesar pentru
accesarea pinilor de GPIO ” RPi.GPIO ” , funcțiile ” create_table” și ” add_to_db” din fișierul
db_utils.py dar și modulul Adafruit_ADS1x15 care a fost necesar pentru lucrul cu convertorul
analog -digital. În Figura 2.6 este prezentat modul în care au fost importate modulele.
Figura 2.6. Modul în care au fost importate modulele . Imagine preluat ă din script -ul adc_data.py
Au fost setaț i pinii de GPIO utilizați conform figurii 2.7. :
Figura 2.7. Modul în care au fost setați pinii de GPIO . Imagine preluat ă din script -ul adc_data.py
Prin comanda gpio.setmode( gpio.BOARD) a fost stabilit faptul că pinii vor fi
numerotați in continuare în program în funcție de poziția lor fizică de pe placă. Dacă se dorește
37
utilizarea numerotării logice a pinilor de GPIO se poate folosi comanda gpio.setmode(
gpio.BCM) . Comanda gpio.setwarnings(False) a fost folosit pentru a dezactiva primirea
avertismentelor. Prin comanda gpio.setup(7, gpio.OUT) este setat pinul fizic cu numărul 7 de pe
plăcuță ca un pin de ieșire. Prin comanda gpio.output(7, 0) pinului de ieșire I se dă valoarea
initial 0. Aceste setări au fost necesare pentru ca plăcuța Raspberry Pi să știe cum să interpreteze
fiecare pin la ca re se face referire.
După setarea pinilor de GPIO a fost necesară introducerea unei condiții pentru a stabili
momentele în care buzzer -ul va emite ton , condiție te tipul celei prezentate în Figura 2.8. .
Figura 2.8. Condiția generală după care buzzer -ul emite ton . Imagine preluat ă din script -ul
adc_data.py
TRESHOLD_VALUE este o variabilă căreia i se atribuie o valoare în începutul
programului , dacă această valoare este depășită se va emite ton prin comanda gpio.output(7,1) ,
pinul 7 va fi setat cu valoarea 1 , în caz co ntrar valoarea pinului va deveni cea inițială , valoarea
0. Prin comanda time.sleep(0.5) convertorului i se spune să citească valorile transmise de senzor
la fiecare jumătate de secundă.
2.4.2 Funcții utilizate
Prin intermediul comenzii ” adc = Adafruit_ADSx15.ADS1015() ” se creează o instanță
ce lucrează pe 12 biți.
Apoi este apelată funcția adc.start_adc(0 , gain=GAIN) pentru a începe conversia
continuă a datelor , parametrii funcției reprezintă : canalul pe care se primesc datele, a fost setat
canalul 0 , iar parametrului gain i s -a atribuit valoarea variabilei ”GAIN” căreia i s -a dat valoarea
1. S-a ales valoarea 1 deoarece senzorul de proximitate scoate la ieșire o tensiune maximă de
aproximativ 2.5 V , iar conform datasheet -ului pentru convertorul analog -digital valoarea 1
pentru parametrul gain este folosită pentru un interval de tensiune cuprins între +/ – 4.096 V.
Dacă parametrului gain i se atribuia valoarea 2 convertorul percepea semnale aflate în intervalul
de tensiune de +/ – 2.048 V , o valoare mai mică decât valoarea maximă primită de la senzor ,
acest lucru ar fi dus la erori de interpretare din partea sistemului.
38
ADC -ul este unul pe 12 biți dar atunci când sunt preluate rezultatele de la senzorul de
proximi tate acestea sunt afișate pe 11 biți deoarece primul bit este folosit ca bit de semn , se
aplică convenția complement față de doi. Pentru a lua datele de la senzor și pentru a le afișa în
terminalul sistemului de opera re s-a folosit secvența de cod din Fig ura 2.9. :
Figura 2.9. Afișarea datelor primate de la senzor . Imagine preluat ă din script -ul adc_data.py
Funcția adc.get_last_result() este o funcție preimplementată în modulul importat
Adafruit_ADS1x15, prin intermediul acesteia se acceseaza ultima valoare preluată de convertor
de la senzor. Iar prin comanda de ” print ” se afișează aceste valori , valorile fiind citite o data
la jumă tate de secundă conform comenzii time.sleep(0.5) prezentată anterior.
În final este folosită tot o funcție predefinită importată din modulul Adafruit_ADS1x15 ,
adc.stop_adc() . Prin această funcție se oprește citirea datelor, nu se mai pot prelua date din
executarea funcției get_last_result() .
În fișierul db_utils.py au fost create două funcții pentru a stabili legătura cu baza de date
și pentru a adăuga datele primat e de la senzor în baza de date , funcții prezentate în Figura 2.10. .
Figura 2.10. Scrip t-ul db_utils.py . Imagine preluat ă din script -ul db_utils.py
A fost importat modulul de sqlite3. Prin intermediul funcției create_table() se stabilește
conexiunea cu baza de date ”alarms.db” , în care se creează tabelul triggered_alarms , iar pirn
funcția ”add_to_db” se introduce valori în baza de date.
39
2.4.3 Rezultat e obținute
Pentru a interpreta rezultatele obținute de la senzor și convertite în semnal digital de ADC
, a fost nevoie de utilizarea următoarei formule :
( 1.1904)60.495 ( )D D I div
, unde :
D
reprezintă distanța în centimetri.
DI
reprezintă valoarea numerică obținută în urma conversiei.
div
reprezintă scalarea intervalului de tensiune pentru care a fost setat ADC -ul la
numărul de biți pe care acesta lucrează. [26]
În acest caz valoarea termenului
div va fi :
div = 4.096 / 2^11 , deoarece convertorul
analog -digital a fost configurat astfel încât să lucreze în intervalul de tensiune +/ – 4.096 V ,
acesta afisând rezultatele p e 11 bi ți , primul bit fiind bit de semn. Astfel semnalul analogic este
eșantionat uniform , lucru care folosește foarte mult deoarece face posibilă conversia datelor în
centimetri, astfel rezultatele obținute sunt mai ușor de interpretat și sunt mult mai relevante
pentru un eventual utilizator al sistemului.
Corespondența dintre valorile analogice trimise de senzorul de proximitate, valorile
numerice obținute în urma conversiei și valorile distanței în centimetri este prezentată în
următorul tabel :
Distanță [cm] Semnalul analog [V] Valoare numerică[zecimal]
20 2.5 1265
30 2 900
40 1.55 707
50 1.24 586
60 1.05 503
70 0.905 442
80 0.82 395
90 0.7 358
100 0.66 327
40
110 0.6 302
120 0.55 281
130 0.5 262
140 0.455 247
150 0.435 233
Tabel 2.1. Tabel de corespondență
Analizând datele din tabel se poate duce caracteristica ieșirii digitale a ADC în funcție de
distanță prezentată în Figura 2.11. :
Figura 2.11. Caracteristica ieșirii digitale în funcție de distanță
În urma executării script -ului adc_data.py rezultatele obținute pot fi afișate în linia de
comandă ca în Figura 2.12 :
41
Figura 2.12. Vizualizarea datelor din terminal
42
43
3 Interacțiunea cu utilizatorul
3.1 Utilizarea bazei de date
În cadrul realizării proiectului a fost creată o bază de date , denumită “alarms.db ” . În
această bază de date a fost creată o tabelă denumită “triggered_alarms” . Tabela a fost construită
astfel încât aceasta prezintă patru coloane în care pot fi i ntroduce datele : cm , adc_value ,
distanta , timestamp. În coloana cm se vor introduce distanțele înregistrate de senzorul de
proximitate față de obiectul țintă in centimetri , în coloana adc_value se introduc datele
transformate de convertorul analog -digital în valori discrete , în coloana distanță se introduc date
de interpretare a distanței în centimetri ( distanță mica , medie sau mare) , iar în coloana
timestamp se introduce ora la ca re a fost făcută măsurătoarea.
Datorită folosirii motorului de baze de date Sqlite3 care permite crearea de coloane într-o
bază de date fără a specifica tipul de data ce urmează a fi introdusă nu a fost introdus tipul de
date ce urmează a fi introduce în coloanele cm și distanta , spre deosebire de coloana adc_value
care a fost create ca o coloană ce va primi date de tipul integer.
Baza de date a fost creată într -un fișier de tip python în interiorul funcției „create_table”
prin comanda “ CREATE TABLE IF NOT EXISTS triggered_alarms ( cm, adc_value
integer , distanta , timestamp timestamp ) “ . Conexiunea către baza de date a fost stabilită în
interiorul aceleiași funcții prin comanda “ “insert into triggered_alarms values ( ? , ? , ? , ?) ” ,
[cm , adc_value , distanta , timestamp] “. Structura bazei de date în care sunt introduse
înregistrările de la senzor este prezentată în Figura 3.1. .
Figura 3.1. Structura bazei de date
44
3.2 Crearea paginii web prin PHP și HTML
Pentru a realiza pagina web de interfațare a sistemului cu eventualii utilizatori a fost
nevoie în primul rând de utilizarea unui server web . Odată cu instalarea pachetelor de PHP din
linia de comandă a sistemului de operare a fost instalat și serverul web Built -In . Deoarece acest
server este destinat testării și dezvoltării de aplicații și nu este unul foar te performant am
considerat că este suficient de bun pentru acest proiect și nu este necesară instalarea și
configurarea unui server web cu performanțe mai bune. Prin acest server poate fi afișată pagina
web construită pe baza unui fișier PHP sau HTML afla t în directorul curent de lucru. Dacă nu i
se specifică niciun fișier server -ul va încerca să acceseze fie fișierul index.php fie fișierul
index.html (existente pe disc odată cu instalarea server -ului) , iar dacă acestea nu sunt găsite
server -ul va returna o eroare.
Odată ce server -ul web este pornit se pot încărca fișiere în vederea creeri unei pagini web.
Server -ul se pornește prin comanda „ php –S localhost:port ” , unde port reprezintă numărul
portului pe care vrem să afișăm conținutul paginii web. Interv alul porturilor este cuprins între 0
și 65536 , iar prin intermediul server -ului se poate crea o pagină web pe un port la alegere.
Pentru a menține pagina web accesibilă server -ul trebuie să fie pornit. [25]
Prin intermediul PHP au fost create funcționalit ățile paginii web. De exemplu s -a creat
legătura dintre pagina web și baza de date pentru a facilita încărcarea datelor pe pagina web prin
intermediul comenzii “$db = new PDO( ’sqlite:alarms.db’) ” . Tot prin PHP a fost posibilă și
interogarea bazei de date alarms.db prin comanda “$result = $db ->querry(”SELECT * FROM
triggered_alarms”) ”.
Dacă prin PHP a modul în care pagina web afișează datele , luându -se și decizii prin
instrucțiuni de tipul if , în HTML a fost realizat design -ul paginii. Prin acest lucru se face referire
la toate aspectele ce țin de modul în care este vizualizată pagina web , culorile folosite ,
adăugarea de imagini , modul în care elementele au fost așezate în cadrul paginii etc.
3.3 Scenariu de utilizare al sistemului
Din momentul în care s -a finalizat realizarea proiectului sistemul poate fi utilizat în
diferite moduri . Pentru a porni sistemul va fi nevoie ca acesta să fie alimentat urmând apoi să fie
rulat scriptul adc_data.py , după aceea fiind necesară pornirea server -ului web. Din acest moment
sistemul este total functional și utilizatorul îl poate testa prin declanșarea în mod intenționat a
alarmei și verificarea datelor de pe site prin accesarea din browser a localhost:port/fișier.php .
Deși prin dimensiunea sa redusă sistemul are avantajul de a avea o bună portabilitate ,
acesta prezintă și dezavantajul de a trebui reconfigurat de către utilizator odată ce este întreruptă
alimentarea ( repornirea server -ului și executarea din nou a scrip t-ului de python). O altă limitare
a sistemului constă în performanțele senzorului de proximitate , acesta acționând într -un interval
de distanță de 20 cm – 150 cm și fiind potrivit doar pentru unele tipuri de aplicații. De asemenea
sistemul trebuie montat în asa fel încât în raza de acțiune a senzorului să nu existe obiecte care să
ducă la declanșări nedorite.
45
Figura 3.2. Posibil scenariu de utilizare
În Figura 3.2. este exemplificat un mod de a testa sistemul creat . Odată ce senzorul de
proximitate detectează ținta ( mâna omului) Raspberry Pi activează ieșirea sistemului ( modulul
buzzer emite un ton de avertizare) și încarcă baza de date pe pagina web.
3.4 Interfața g rafică cu utilizatorul
În final se va prezenta modul în care utilizatorul interacționează cu pagina web. Odată ce
utilizatorul va accesa din browser localhost:port/fișier.php acesta va putea testa și verifica modul
în care funcționează pagina web.
Pentru a testa modul de funcționare a paginii web o metodă ar fi următoarea : rularea
script -ului adc_data.py și pornirea server -ului web .Din acest moment , dacă în baza de date nu
au fost introduce înregistrări , dacă accesăm site -ul tabelul în care ar trebui să vedem datele
transmise de sistem ar trebui să fie format doar din capul de tabel , denumirile coloanelor în care
se vor introduce datele. După ce senzorul depistează obiecte țintă a căror distanță este destul de
mare sau mică ( în funcție de configurați a existentă pe sistem la acel moment) se poate da refresh
46
paginii web și vom constata că datele înregistrate d e senzor sunt introdus e într -un tabel în cadrul
paginii web , la fel ca în Figura 3.3. .
Figura 3.3. Interfața grafică a paginii web
Se poate observa din tabel că liniile din cu înregistrări sunt colorate diferit pentru ca site –
ul să fie mai intuitive. Aceste culori au fost introduse ținând cont de parametrul distanță , deci
dacă se vrea urmărirea evenimentelor de o distanță medie de ex emplu utilizatorul se poate uita
direct la rândurile de culoare portocalie. Dacă de asemenea utilizatorul dorește să verifice dacă
au existat evenimente într -un anumit interval de distanță acest lucru este posibil din modificarea
fișierului adc_data.py pen tru a active tonul buzzer -ului și din fișierul test.php pentru a modifica
culoarea cu care va fi afișat acel eveniment pe site. Modificările pot fi făcute ținând seama de
codul din Figura 3.4. :
47
Figura 3.4. Configurarea din fișierele PHP și Python
Pentru a se modifica intervalul de distan te în care un eveniment este înregistrat cu
eticheta de distanță mica medie , sau mare în baza de date trebuie modificat fișierul Python , dacă
se dorește o înregistrare a unei distanțe medii între 900 și 1100 ( aceste va lori reprezintă valori
discrete obținute în urma conversiei făcută de ADC ) atunci trebui modificată valoarea de 1050
cu cea de 1100 pentru distanță medie și pe cale de consecință trebuie modificată și limita pentru
distanța apropiată. Dacă se dorește doar modificarea culorii de pe site făra a schimba etichetele
de distanță va trebui modificat fișierul PHP după aceeași logică prin care a fost explicată
modificarea fișierului Python . Pentru a schimba pur și simplu culorile după preferință se poate
efectiv sc himba codul unic al culorii aflat după simbolul # în fișierul PHP.
48
49
Concluzii
Sistemul de alarmă obținut în final poate reprezenta o soluție cu aplicabilitate practică în
anumite aplicații unde se urmăresc distanțe mai mici și unde nu este nevoie de un sistem foarte
performant. Consider că acest proiect a îndeplinit cerințele inițiale de realizare cel puțin la nivel
functional , existând îmbunătățiri ce pot fi aduse pentru partea de afișare a rezul tatelor pe pagina
web.
Din punct de vedere al costurilor de realizare acest sistem poate fi catalogat ca unul
destul de costisitor , au fost alese componente destul de performante : placa Raspberry Pi model
3B care putea foarte bine să fie înlocuită cu mo delul Raspberry Pi Zero semnificativ mai ieftin
dar și modulul ADC care este catalogat ca unul de calitate medie pe piață oferind un pas de
eșantionare destul de mic , datorită faptului că lucrează pe 12 biți , astfel se dispune de o precizie
destul de bun ă .
Din punct de vedere al configurației și al modului de utilizare consider ca acest sistem
poate fi utilizat d e către orice utilizator , indi ferent de profesia , instruirea sau meseria pe care
acesta o practică. Sunt suficiente câteva pagini de instrucți uni pentru ca respectivul utilizator să
poată folosi la maxim posibilitățile oferite de sistem.
Avantajele sistemului : este un sistem portabil , datorită unor componente de bună calitate
funcționalitățile sale pot fi extinse prin înlocuirea senzorului de proximitate cu unul mai
performant sau prin adăugarea de noi componente , este simplu de utilizat , ușor de aliment at prin
USB , datorită plăcii Raspberry Pi și pinilor GPIO este ușor de conectat acest sistem la un altul
alcătuind un ansamblu ce poate face parte din conceptul Internet Of Things.
Dezavantejele sistemului : prețul mare de realizare în raport cu funcționalitățile obținute ,
limitarea fizică din cauza senzorului de poximitate ce are un maxim de lucru de 150 cm .
Consider că prin realizarea acestui proiect am reușit să învăț destul de multe lucruri noi
deoarece chiar dacă am mai întâlnit conceptele de baze de date , pagini web , ADC și
microcontrolere înainte , realizarea unui sistem în care trebuiesc utilizate toa te acestea nu a fost
una tocm ai facil ă. Cea mai interesantă parte mi s -a părut cea prin care am configurat Raspberry
Pi astfel încât să preia informații de la ADC dar și să interpreteze acele informații și să trimită
ceva la ieșire , adică la buzzer , real izarea conexiunilor fizice dintre componente a fost de
asemenea foarte interesantă. Pentru acest lucru a fost nevoie de utilizarea limbajului Python ,
limbaj total nou pentru mine , dar prin faptul că am întâmpinat probleme pe care am reușit să le
gestione z bine în final cred că am acumulat câteva cunoștințe de programare în limbajul Python ,
lucru pe care îl consider foarte bun.
Ca o ultimă concluzie aș spune că acest proiect nu a fost unul ușor de realizat , am
întâmpinat multe problem e în diferitele faze de realizare , dar consider că a fost unul benefic
pentru mine deoarece am învățat multe lucruri noi pe care altfel nu ș tiu dacă aș fi avut ocazia să
le învăț .
50
Contribuții personale și dezvoltări ulterioare
Prima contribuție personală consider că a fost idea de a realiza acest proiect , de a alege și
interconecta mai multe componente atât de tip hardware dar și software pentru a putea avea un
sistem functional .
Apoi din punct de vedere hardware , toate componentele au fost alese de către mine , eu
am realizat proiectarea arhitecturii sistemului , modul în care au fost realizate conexiunile între
componente ,schema electrică .
Din punct de vedere software , fișierele de cod utilizate pentru a face acest sistem
functional au fost realizate de mine , la fel ca și încărcarea datelor în baza de date dar și
conexiunea dintre baza de date și pagina web dar și design -ul paginii web și alegerea limbajelor
de programare utilizate.
Sistemul poate fi îmbunătățit față de starea actuală în care se află . S e pot aduce
îmbunătățiri pe mai multe planuri : poate fi creată o pagină web cu un design mult mai frumos
dar și cu mai multe funcționalități introduse , se poate înlocui senzorul de înregistrare a distanței
cu unul mai performant pentru a crește numărul t ipurilor de aplicații în care ar putea fi utilizat
sistemul și se poate achiziționa un domeniu de internet ( .net , .ro , .org etc) pentru a facilita
monitorizarea baz ei de date în timp real de la distanță .
51
Bibliografie
[1] – https://www.forbes.com/sites/louiscolumbus/2017/12/10/2017 -roundup -of-internet -of-
things -forecasts/#6793e3b81480 accesat la data de 22.08.2018
[2] – http://www.tij.co.jp/jp/lit/ml/swrb028/swrb028.pdf accesat la data de 22.08.2018
[3] -Acharjya, D.P., Geetha, M.K., Internet of Things: Novel Advances and Envisioned
Applications
[4]- https://en.wikipedia.org/wiki/Raspberry_Pi accesat la date de 23.08.2018
[5]- Datasheet Raspberr y Pi 3B
[6]- https://www.raspberrypi.org/documentation/hardware/raspberrypi/gpio/README.md
accesat la date de 23.08.2018
[7]- https://pinout.xyz/ accesat la data de 24.08.2018
[8]- https://www.element14.com/community/docs/DOC -73950/l/raspberry -pi-3-model -b-gpio-
40-pin-block -pinout accesat la date de 24.08.2018
[9]- https://www.raspberrypi.org/documentation/usage/python/README.md accesat la date de
25.08.2018
[10]- SoC vs. CPU – The bat tle for the future of computing
https://www.extremetech.com/computing/126235 -soc-vs-cpu-the-battle -for-the-future -of-
computing accesat la date de 26.08.2018
[11]-Datasheet ADC ADS1015
[12] High -Speed, Analog -to-Digital Converter Basics : Texas Instruments
[13] – Understanding data converters Texas Instruments –
http://www.ti.com/lit/an/slaa013/slaa013.pdf accesat la date de 26.08.2018
[14] – Datasheet Senzor Sharp GP2Y0A02YK0F
[15] – PIR Sensor in Motion Detection & Identification System
https://electronicsmaker.com/em/admin/pdf/free/sensor.pdf accesat la date de 27.08.2018
[16] – https://en.wikipedia.org/wiki/Proximity_sensor accesat la date de 27.08.2018
[17] – https://rydepier.wordpress.com/2015/05/24/active -buzzer -alarm/ accesat la date de
27.08.2018
[18]-Wolfram Donat , Learn Raspberry Pi Programming with Python, 2014
52
[19]- https://www.sqlite.org/about.html accesat la date de 27.08.2018
[20]- John Duckett, HTML and CSS: Design and B uild Websites, 2011
[21]- http://php.net/manual/en/intro -whatis.php accesat la date de 27.08.2018
[22]-Luke Welling, Laura Thomson, PHP and MySQL Web Development, 4th Edition, 2008
[23]- https://learn.sparkfun.com/tutorials/i2c accesat la date de 28.08.2018
[24]- https://www.allaboutcircuit s.com/technical -articles/introduction -to-the-i2c-bus/
Introduction to i2c bus accesat la date de 29.08.2018
[25]- http://php.net/manual/ro/features.commandline.webserver.php accesa t la date de
29.08.2018
[26]- https://forum.arduino.cc/index.php?topic=22604.0 accesat la date de 30.08.2018
53
Anexa 1 Codul sursă pentru sistemul de alarmă
Adc_data.py
import time
from datetime import datetime
from db_utils import create_table, add_to_db
# Importarea Adafruit_ADS1x15
import Adafruit_ADS1x15
import RPi.GPIO as gpio
#Initializarea variabilelor
THRESHOLD_VALUE = 700
cent = ' centimetri'
diviziune= 4.096/p ow(2, 11)
#Setarea pinilor
gpio.setmode(gpio.BOARD)
gpio.setwarnings(False)
gpio.setup(7,gpio.OUT)
gpio.output(7, 0)
db_connection = create_table()
#Crearea unei instante de lucru pe 12 biti a ADC avand in vedere
componenta hardware
adc = Adafruit_ADS1x15.ADS1015()
54
# Initializare variabilei GAIN conform datasheet -ului
GAIN = 1
# Pornirea modulului ADC pentru conversii continue si setarea acestuia
de a trimite date pe canalul 0
adc.start_adc(0, gain=GAIN)
# Afisarea datelor pe canalul 0
#print('Reading ADS1x15 channel 0 for 5 seconds…')
while (1):
# Citirea si afisarea ulyimei conversii a ADC -ului
value = adc.get_last_result()
volt=value*diviziune
# Afisarea datelor pe canalul 0
print('Channel 0: {0}'.format(value))
#Luarea deciziei de a face buzzer -ul sa emita sau nu ton si
etichetarea
# in baza de date a unei distante ca fiind : apropiata , medie
, indepartata
try:
if value > THRESHOLD_VALUE:
gpio.output(7,1)
if value < 900 :
55
dist = 'distanta indepartata'
if value > 900 and value < 1050 :
dist='distanta medie'
if value > 1050 :
dist='distanta apropiata'
date =
datetime.utcfromtimestamp(time.time()).strftime('%Y -%m-%d %H:%M:%S')
# Transformarea in centimetri
ccm=60.495 * pow(volt, -1.1904)
cm = round(ccm , 2)
# Adaugarea in baza de date
add_to_db(db_connection,str(cm) + cent, value, dist,
date )
else:
gpio.output(7, 0)
#Realizarea citirii la fiecare jumatate de secunda
time.sleep(0.5)
except KeyboardInterrupt:
gpio.cleanup()
break
# Oprirea conversiei ADC -ului
adc.stop_adc()
db_utils.py
import sqlite3
56
def create_table():
conn = sqlite3.connect('alarms.db')
c = conn.cursor()
c.execute("CREATE TABLE IF NOT EXISTS triggered_alarms ( cm ,
adc_value integer, distanta ,timestamp timestamp )")
return conn
def add_to_db(conn, cm, adc_value, di stanta, timestamp):
c = conn.cursor()
c.execute("insert into triggered_alarms values (?, ?, ?, ?)", [
cm, adc_value ,distanta , timestamp])
conn.commit()
57
Anexa 2 Codul sursă pentru pagina web
<html>
<head>
<title>Monitorizare alarma</title>
<p align="left" ><font size="18" color="black"><b>Monitorizare sistem
de alarmă</b></font></p>
<body style="background -color:white;">
<?php
$db = new PDO('sqlite:alarms.db');
$result = $db ->query("SELECT * FROM triggered_ala rms"); //replace exec
with query
echo "<table border='5' cellpadding='10' class='pure -table pure -table-
bordered' style='margin: 50 50 0 50px; float: left'>";
echo "<thead><tr bgcolor='#0000FF'> <th>Distanta in cm</th>
<th>Valoare digitala</th> <th>Distan ta</th>
<th>Data</th></th></thead></tr>";
foreach($result as $row){
if ($row['adc_value'] < 900)
echo "<tr bgcolor='#FFFF00'>";
if ($row['adc_value'] >= 900 && $row['adc_value'] <= 1050)
echo "<tr bgcolor='#FFA500'>";
if ($row['adc_value'] > 1050)
58
echo "<tr bgcolor='#FF0000'>";
echo '<td align="center">' . $row['cm'] . '</td>';
echo '<td align="center">' . $row['adc_value'] . '</td>';
echo '<td align="center">' . $row['distanta'] . '</td>';
echo '<td align="center">' . $row['timestamp'] . '</td> ';
echo "</tr>";
}
echo "</table>";
?>
<div id="chenar_lateral" style="height: 590px;
width: 30%;
float: right;
margin-top: 1px;
margin-right: 45px">
<h1 align="center">Universitatea Politehnica Bucuresti</h1>
<h3 align="center">Fac ultatea de Electronica Telecomunicatii si
Tehnologia Informatiei</h3>
<h4 align="center">Proiect de licenta realizat de Gearip Mihai</h4>
<p style="text -align:center;"><img src="logo_etti.png"></p>
59
</div>
</body>
</head>
</html>
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: Titlul complet al temei [631929] (ID: 631929)
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.
