Controlul Si Monitorizarea Prin Internet a Parametrilor de Comfort Ai Unei Locuinte

Controlul si monitorizarea prin internet a parametrilor de comfort ai unei locuințe

Cuprins

1. INTRODUCERE………………………………………………………………………………………………………….4

1.1 Scop……………………………………………………………………………………………………………….4

1.2 Obiective…………………………………………………………………………………………………………5

1.3 Motivația alegerii temei…………………………………………………………………………………….6

2. CONSIDERAȚII TEORETICE……………………………………………………………………………………..7

2.1 Raspberry Pi……………………………………………………………………………………………………7

2.2 Raspbian………………………………………………………………………………………………………..10

2.3 Limbaje de scriptare………………………………………………………………………………………..12

2.3.1 JavaScript…………………………………………………………………………………………13

2.3.2 Ajax…………………………………………………………………………………………………15

2.3.3 PHP…………………………………………………………………………………………………16

2.3.4 Python……………………………………………………………………………………………..17

2.3.5 MySQL……………………………………………………………………………………………18

2.4 Microcontrolere………………………………………………………………………………………………19

2.4.1 Microcontrolerul Atmel Atmega 328p ARV…………………………………………22

2.5 Arduino IDE………………………………………………………………………………………………….23

2.6 Senzori și actuatori…………………………………………………………………………………………25

2.6.1 Senzori…………………………………………………………………………………………….25

2.6.2 Actuatori………………………………………………………………………………………….27

2.7 Proiectare de Circuite Imprimate (PCB)…………………………………………………………….28

3. REZOLVAREA TEMEI DE PROIECT………………………………………………………………………..29

3.1 Prezentare generală…………………………………………………………………………………………29

3.2 Implementarea hardware…………………………………………………………………………………30

3.2.1 Schema bloc……………………………………………………………………………………..31

3.2.2 Schema electrică a modulului cu relee și senzori…………………………………..38

3.2.2.1 Explicarea funcționării…………………………………………………………39

3.2.2.2 Realizarea circuitului imprimat……………………………………………..43

3.2.3 Schema electrică a sistemului de automatizare……………………………………..46

3.2.3.1 Explicarea funcționării…………………………………………………………47

3.2.3.2 Realizarea standului…………………………………………………………….48

3.3 Implementare software pentru Raspberry PI……………………………………………………..49

3.3.1 Configurarea modulului Raspberry PI…………………………………………………50

3.3.2 Interfața web……………………………………………………………………………………54

3.3.2.1 Relee………………………………………………………………………………….55

3.3.2.2 Funcționalitați…………………………………………………………………….57

3.3.2.3 Senzori………………………………………………………………………………58

3.3.3 Partea de server………………………………………………………………………………..58

3.3.3.1 Implementarea comunicației interfața – server…………………………60

3.3.3.2 Implementarea comunicației server – microcontroler………………..61

3.4 Implementare software pentru Arduino…………………………………………………………….62

3.4.1 Mediul de dezvoltare Arduino……………………………………………………………62

3.4.2 Schema logică a programului……………………………………………………………..63

3.4.3 Explicarea schemei logice………………………………………………………………….64

4. CONCLUZII……………………………………………………………………………………………………………..65

5. BIBLIOGRAFIE……………………………………………………………………………………………………….66

6. ANEXE…………………………………………………………………………………………………………………….67

Oamenii și-au dorit dintotdeauna să minimizeze efortul necesar pentru asigurarea celor necesare vieții, fapt dovedit de apariția uneltelor care au fost identificate pe întreg globul, inclusiv în culturi străvechi precum Egipt, China sau Grecia antică, în ultimele decenii omenirea a realizat un progres tehnologic fără precedent. Astăzi, posesorii unui smartphone au acces oriunde s-ar afla la mai multă informație decat îi era disponibilă acum 30 de ani președintelui SUA, cea mai puternică țară din lume. Automatizarea începe să devină tot mai prezentă în zilele noastre, în tot mai multe activitați pe care le desfașurăm zilnic, și permite tuturor persoanelor care au acces la internet să controleze și să monitorizeze procese aflate la distanță. Următorul pas în acest domeniu al automatizărilor, este și va rămâne în viitorul apropiat, automatizarea spațiilor de locuit. Automatizările spațiilor de locuit reprezintă un domeniu în plină ascensiune, pentru că răspund unor nevoi concrete, care pleacă de la economia de energie și controlul individual al fiecărui consumator pâna la satisfacerea dorinței de simplitate, comoditate în utilizare și personalizare a locuinței.

1.1 Scop

Această temă de licență are ca scop realizarea unui sistem de automatizare a locuinței folosind tehnologii, echipamente hardware și software open source. Avantajul în folosirea acestor echipamente și tehnologii open source este că documentația este disponibilă gratis utilizatorilor, iar echipamentele au licență GNU (General Public License) oferindu-le dreptul de a modifica codul sursă dupa bunul plac. Scopul major al acestei lucrări de licență este de a conferi o alternativă ieftină de automatizare celor comerciale, care au un cost ridicat în comparație cu acest sistem. Fiind un proiect de complexitate medie, orice persoană ce are cunoștințe medii de programare și electronică își poate creea un astfel de sistem pentru propria locuință, fiecare contribuind astfel cu o mică parte dintr-un întreg mai mare, care se numește Smart Grid sau Internet of Things (IoT). Un alt scop este de a veni în întampinarea problemelor concrete care țin de siguranța locuinței, eficiență energetică și satisfacerea unor nevoi legate de control și comfort.

1.2 Obiective

Unul din obiectivele principale ale acestui proiect a fost acela de a creea un sistem modular, care să poată fi extins ulterior prin adăugarea de noi module și/sau noi funcționalități modulului creat inițial, funcționalități care vor trebui implementate atât hardware cât și software.

Partea hardware este formată dintr-un microcontroller ATmega 328p care comunică cu un SBC (Single Board Computer) numit Raspberry Pi prin intermediul comunicației seriale folosind portul USB. Partea software se află in proportie de 50% de pe dispozitivul Raspberry Pi, acesta găzduind interfața cu utilizatorul care se face prin intermediul unui browser web, partea de server și comunicația cu microcontrollerul. Restul de 50% din partea software se află pe microcontroller, acesta controlează actuatorii, preia datele recepționate de la senzori și comunică cu dispozitivul Raspberry Pi.

Un alt obiectiv important îl reprezintă posibilitatea de a controla prizele, becurile, centrala termică, aerul condiționat și de a monitoriza anumiți parametrii de comfort ai locuinței cu ajutorul senzorilor de mișcare, fum și gaze imflamabile, umiditate, luminozitate și temperatură, toate acestea prin intermediul internetului. Sistemul oferă utilizatorului posibilitatea de a întrerupe alimentarea cu energie electrică a prizelor, a becurilor și a altor consumatori.

Un ultim obiectiv îl reprezintă creearea în soft a unor funcții cu scenarii prestabilite, cum ar fi funcția „Panică” care aprinde toate becurile din jurul casei atunci când proprietarul este plecat de acasă, senzorul de mișcare este activ și detectează mișcare în jurul casei. Aceste funcții vor putea fi activate de către utilizator cu o singură apăsare de buton din interfața web.

1.3 Motivația alegerii temei

Majoritatea acțiunilor pe care le facem zilnic sunt repetitive, cum ar fi pornirea/oprirea centralei termice, a aerului condiționat în funcție de temperatură, sau a becurilor în funcție de luminozitatea din cameră, de aceea am decis să creez un sistem pentru automatizarea acestor acțiuni. Acest domeniu al automatizări spațiilor de locuit este unul relativ nou, astfel că multe dintre aplicațiile comerciale existente au costuri mari de achiziție în comparație cu sistemul de automatizare creat de mine și sunt closed source, ceea ce înseamnă că nu pot fi modificate de către utilizatori astfel încât să se potrivească cât mai bine nevoilor acestora.

2. CONSIDERAȚII TEORETICE

2.1 Raspberry PI

De la primele calculatoare cu tuburi de vacuum pâna la cele cu bandă de hârtie perforată din anii ’60 si primele microprocesoare mainframe din anii ’70, calculatoarele au fost ocupația primară a marilor companii si a departamentelor de cercetare ale universităților. Cu toate acestea odată cu lansarea Apple II si a „semințelor” plantate de aceștia cu o astfel de tehnologie acest domeniu a început să se dezvolte rapid. Astfel in anul 2012 a apărut Raspberry Pi, un PC creat pentru a fi accesibil oricui, cu scopul de a promova studiul bazelor sistemelor de calcul in școli, un fenomen unic datorită dimensiunilor dar si al prețului foarte mic în comparație cu alte calculatoare.

Fig. 1 Raspberry Pi modelul B

A fost creat de un grup de oameni de știință de la Universitatea Cambridge, după ce au constatat faptul că generațiile noi de programatori din anii ’00 aveau mai puține cunostințe de specialitate decat generațiile anterioare din anii ’90. Au considerat ca problema care stă la baza unei performanțe mai slabe in domeniu este modul diferit in care au inceput copii să interacționeze cu PC-urile. Așa a luat naștere ideea creerii unui computer de dimensiuni reduse pentru a fi atractiv pentru elevi si studenți cu un preț cât mai accesibil parinților, pentru a-și incuraja copii să iși dezvolte abilitațile într-un domeniu de viitor, prin joacă. Raspberry Pi, lansat în februarie 2012, este un PC de dimensiunea unui card de credit care se poate conecta la TV, tastatură si internet si care poate fi folosit la multe dintre acțiunile realizate prin intermediul unui PC desktop cum ar fi calcul tabelar, procesare de text și de imagine, vizionare de filme etc.

Există trei modele de Raspberry Pi, modelul A este la un preț de 25$, modelul B la un preț de 35$ iar modelul Raspberry Pi 2 B apărut in anul 2015 are prețul cât modelul precedent, 35$. Diferențele între cele trei modele sunt puse in evidență in tabelul Tabel 1.

Tabel 1: Diferențe între modelele Raspberry Pi A, B si 2B.

În pachetul cu care vine din fabrică Raspberry Pi nu are incărcător sau card SD așa că la costul inițial de 35$ se adaugă un cost suplimentar de aproximativ 10$ pentru un încărcător capabil să furnizeze 1.2A la 5V si un card SD de minim 4 GB pentru sistemul de operare. Dimensiunile sunt 85.60mm x 53.98mm x 17mm ( 3.37” x 2.21” x 0x83” ) și are o greutate de 45g.

Procesorul folosit de către Raspberry Pi modelul B este un Broadcom BCM2835 bazat pe o arhitectură ARM1176JZFS pe 32 de biți, cu virgulă flotantă rulând la 700MHz. Memoria cache este structurată pe două nivel, nivelul I are 16Kb iar nivelul II 128Kb Acest procesor este folosit în multe dintre telefoanele mobile moderne ( smartphone-uri ) fiind capabil de a reda filme la calitate BlueRay folosind codarea video H.264 la 40 Mbits/s. Rolul acestui procesor este de a încorpora cât multe componente , cum ar fi CPU, GPU, controlerul de USB, RAM, NorthBridge, SouthBridge etc într-o singură pastilă de silicon datorită costului și performanțelor pe care le oferă. GPU-ul folosit este capabil să furnizeze 1 Gpixel/s, 1.5 Gtexel/s sau 25 GFLOPi fiind comparabil cu un Xbox (2001) sau un Pentium 2 la 300Mhz.(1997- 1998).

Fig. 2 Principalele componente ale modelului Raspberry Pi B.

Sunt disponibili 26 de pini GPIO („General-purpose input/output”), magistrala I2C, I2S audio . Aceste porturi GPIO pot fi folosite pentru a comanda diverse componente electronice cum ar fi led-uri, servo motoare etc. Fiecare port GPIO folosește 16mA, curentul maxim care poate fi luat de pe porturile GPIO este de 50mA. Pe lângă acești pini, Raspberry Pi are un port HDMI care este conform standardului CEC și care folosește 50mA iar 1 port USB poate furniza un curent maxim de 100mA. Raspberry Pi (modelul A) poate fi alimentat chiar de la un USB hub dacă acesta poate furniza 500mA (standardul USB) fără a folosii portul USB pentru diferite dispozitive, cum ar fi o tastatură. Mufa jack de 3.5mm iți permite să conectezi căsti audio sau sisteme audio la Raspberry Pi, este foarte utilă in proiecte bazate pe „playere” audio si media. Portul RCA iți permite să folosești ca si monitor orice televizor conectând cablul video de culoare galbenă al televizorului la acest port. Memoria RAM nu este foarte mare așa cum probabil ne așteptăm de la un PC unde memoria RAM are valori in GB dar pentru aplicatii de automatizare sau „playere multimedia” memoria cu care este echipat din fabrică, de 512Mb, este mai mult decât suficientă. Portul Ethernet 10/100 RJ45 îți permite să conectezi Raspberry Pi cu alte dispozitive sau la internet. Principalele componente ale Raspberry Pi Model B pot fi regasite în Figura 2.

Sistemul de operare recomandat de către fundatia Raspberry Pi pentru începători este NOOBs („New Out of the Box Software”) care poate fi descărcat de pe pagina oficială dar se poate folosii orice distribuție a sistemului de operare Linux care este bazat pe arhitectura ARM cum ar fi:

– Rasbian ( bazat pe distribuția Debian Wheezy)

– Pidora ( bazat pe distribuția Fedora )

– RaspBMC

– Arch Linux.

Limbajul de programare recomandat pentru Raspberry Pi este Python dar se poate folosi orice limbaj de programare capabil să compileze codul pentru arhitectura procesorului ( ARM ) cum ar fi C, C++, Java, Ruby etc. Raspberry Pi poate rula chiar și o versiune a sistemul de operare Android dar momentan nu există o versiune stabilă pentru a putea fi folosită in dezvoltarea de proiecte.

2.2 Raspbian

Unul dintre sistemele de operare pe care fundația Raspberry Pi le recomanda este Raspbian. Acesta este un sistem de operare gratis bazat pe Debian și este optimizat special să ruleze pentru hardware Raspberry Pi-ului. Conține peste 43000 de pachete cu tot felul de programe precompilate care se pot instala cu ușurință pe orice configurație.

Datorită faptului că este optimizat pentru o arhitectură cu un set de instrucțiuni ARMv6 folosita și in anumite telefoane mobile se foloseste interfața LXDE ( „Lightweight X11 Desktop Enviroment”) pentru partea grafică a desktop-ului. Această interfață este destul de minimalistă dar folosește foarte puține resurse pentru a fi cât se poate de rapidă și pentru a face economie de energie. Este folosită și in multe dintre distribuțiile de Linux pentru calculatoarele care au resurse destul de limitate sau pentru calculatoarele care au o vechime de peste 10 ani, iar multe dintre sistemele de operare actuale necesită mai multe resurse. Raspbian încearcă să fie cât mai apropiat de filozofia Debian pe cât posibil.

Fig. 3 Logo sistem de operare Raspbian (Raspberry Pi + Debian).

Debian este cunoscut ca find printre cele mai populare distribuții de linux având peste 43000 de pachete cu programe precompilate și îmbinate într-un format ușor de instalat, extensia pentru pachetele Debian este .deb. O alta caracteristică importantă este faptul ca foloseste un sistem numit Multiarch in care software-ul scris pentru procesoarele cu o arhitectură pe 32 de biti să poate rula pe procesoare cu arhitectura pe 64 de biti, dar si pentru a înbunătății suportul pentru multimedia. Debian funcționează pe aproape orice computer personal, inclusiv modelele mai vechi. Fiecare nouă versiune suportă mai multe arhitecturi și aproape toate componentele uzuale sunt suportate. El suportă 12 arhitecturi de sistem, și poate rula în condiții optime și pe sisteme cu o configurație hardware foarte veche. Versatilitatea sistemului este recunoscută, atât interfața cu sistemul, cât și cea cu utilizatorul / utilizatorii putând fi personalizate pentru a acoperi orice necesitate sau funcționalitate.

Debian folosește în momentul de față nucleul Linux sau nucleul FreeBSD, totuși se lucrează la aplicarea Debian și peste alte nuclee, în primul rând Hurd. Hurd este o colecție de servere care rulează pe un microkernel. Sistemul de operare este ca un turn, la bază este nucleul, peste nucleu sunt utilitarele de bază, apoi sunt toate programele ce rulează în computer. La vârful turnului este Debian care organizează și potrivește totul cu grijă astfel încât toate să funcționeze împreună. [1]

Un card SD de minim 4GB este necesar pentru montarea imaginii cu Raspbian dar este recomandat un card SD de 8GB. Ultima versiune poate fi găsită pe site-ul oficial, aceasta fiind Raspbian Debian Wheezy 7.0, iar cardul SD trebuie formatat înainte ca imaginea să poată fi copiată pe acesta.

2.3 Limbaje de scriptare

Un limbaj de scriptare este un limbaj de programare ce permite controlul uneia sau a mai multor aplicatii software. "scripturile" sunt diferite față de codul de bază al aplicației, fiind de obicei scrise în limbaje diferite fată de codul sursă al aplicației gazdă. Scripturile sunt scrise de către end-user, fiind adesea interpretate din cod sursa sau byte-code, unde aplicatia pe care o controlează e în mod tradițional compilată în cod masină.

Termenul script e derivat din forma scrisă a script-urilor artistice, unde dialogul este scris spre a fi vorbit de actori. Primele limbaje de scriptare erau numite batch languages sau job control languages. Limbajele de scriptare au fost create pentru a scurta procesul de editare-compilare-linkare-rulare al aplicațiilor.

Primele shell-uri interactive au fost create in anii 1960 pentru a permite controlul de la distanță al primelor sisteme bazate pe time-sharing, iar acestea, programe în interiorul unor programe. GUI scripting sau macro-uri, au devenit utile odată cu apariția interfetelor vizuale pentru aplicații; aceste script-uri permit simularea interactiunilor umane cu aplicatia, lucru util în fazele de testare sau pentru automatizarea unor acțiuni de altfel consumatoare de timp.

Limbaje specifice aplicațiilor gazdă; în prezent există multe aplicații software ce permit realizarea de script-uri pentru programarea functionalitaților puse la dispoziție de aplicație, functionalitați care de altfel ar fi fost mult mai greu de exploatat dacă s-ar fi mers numai pe interfețe vizuale. Limbaje populare de scriptare sunt asociate engine-urilor grafice si permit realizarea de algoritmi de inteligență artificială în jocuri sau alte domenii unde programarea raspunsurilor aplicației e dorită și necesară de a fi facută pentru fiecare caz particular în care aplicația e folosită.

Browserele Web sunt cele mai raspandite forme de aplicații ce folosesc in mod intens limbajele de scriptare, standarde riguroase fiind impuse pentru uniformizarea comportamentului fiecarui limbaj de scriptare. Procesoarele text dispun de limbaje de scriptare pentru generarea fișierelor de istoric de activități (log files) sau pentru fișierele de configurare.

Pentru executarea unui program scris într-un limbaj oarecare, există, în principiu, două abordări: compilare sau interpretare. La compilare, compilatorul transformă programul-sursă în totalitatea sa într-un program echivalent scris în limbaj mașină, care apoi este executat. La interpretare, interpretorul ia prima instrucțiune din programul-sursă, o transformă în limbaj mașină și o execută; apoi trece la instrucțiunea a doua și repetă aceleași acțiuni ș.a.m.d.

Dupa nivelul de abstractizare (ușurința cu care programele pot fi citite și înțelese de către programatori) limbajele se pot clasifica în:

limbaje de generația întâia: limbajele cod-mașină

limbaje de generația a doua: limbajele de asamblare

limbaje de generația a treia: limbaje de nivel înalt, cum ar fi C-ul (și toate derivatele sale: C++, Java, …), Pascal, Fortran etc.

limbaje de generația a patra: limbajele neprocedurale, orientate pe rezolvarea unei anumite clase de probleme: SQL etc.

– limbaje de generația a cincea: limbaje utilizate în domenii precum inteligența artificială sau/și rețelele neuronale: Prolog, LISP etc. [2]

2.3.1 JavaScript

JavaScript este un limbaj de programare din categoria limbajelor de scriptare, ce se folosește preponderent în paginile și aplicațiile web, pentru a îmbogăți interfața cu utilizatorul. Limbajului JavaScript este puternic influențat de limbajele C și Java, de la care acesta împrumută atât sintaxa cât și convențiile de denumire. Principalele caracteristici de sintaxă sunt comune: structurile de control (if, while, for, switch), operatorii aritmetici, logici și pe biți, cuvintele cheie rezervate coincid cu cele din Java. O diferență majoră față de limbajele Java și C o reprezintă caracterul dinamic al variabilelor din punct de vedere al tipurilor de date. Dacă în C sau Java fiecare variabilă are un tip strict, în JavaScript o variabilă poate aparține oricărui tip de date. Unei variabile i se poate asocia deci, spre exemplu, o valoare de tip int, iar apoi i se poate re-atribui o altă valoare de tip șir de caractere.

Declararea variabilelor se face astfel printr-un cuvânt cheie general „var” și este urmată opțional de o inițializare:

var myVar = “myValue”

myVar = 25.31

myVar = 0;

Limbajul suportă tipuri de date primitive (boolean, numeric – float și integer, string) și tipuri de date complexe (obiecte). Obiectele sunt implementate ca tabele asociative de perechi proprietate – valoare. Numele proprietăților reprezintă indecși în tabelă și pot fi adăugate, șterse sau modificate în momentul execuției.

Deși este un limbaj orientat pe obiect JavaScript nu suportă clase, în sensul clasic. Dacă în C sau Java, structura unui obiect se definește într-un mod strict, printr-o definiție de clasă, în JavaScript efectul se obține prin folosirea unor prototipuri, adică obiecte șablon, ce conțin structura clasei, și care sunt clonate pentru a forma obiectul-instanță. Clasa se definește astfel, definind constructorul ei, și prototipul.

Datorită implementării ca tabele a obiectelor, structura lor poate fi modificată după instanțiere de către utilizator, fapt ce oferă un plus de flexibilitate. De asemenea, moștenirea claselor și supraîncărcarea metodelor este obținută prin această metodă.

Principala utilizare a limbajului JavaScript este în aplicațiile și paginile web, ca mijloc de îmbogățire a interfeței cu utilizatorul. Scriptul rulează în cadrul browserului web, într-un „sandbox” ce izolează scriptul de mediul „hostului”, și are la dispoziție obiecte ce permit manipularea documentului (paginii web) sau a ferestrei browserului. Un astfel de script poate îndeplini o plajă largă de funcții, de la adăugarea unor elemente dinamice (meniuri drop-down, widgeturi etc), validarea unor formulare, deschiderea unor ferestre popup, la construirea de aplicații cu interfețe complexe, prin manipularea obiectului-document (DOM). [3]

O pagină web (document) este implementată de către browsere ca un arbore ce conține un nod pentru fiecare tag HTML. Nodul rădăcină corespunde tagului HTML, iar celelalte noduri sunt adăugate ca ramuri ale sale. Această structură este denumită DOM (Document Object Model), iar accesul codului JavaScript la aceasta este garantat prin intermediul unei interfețe (API). Astfel se stabilește o echivalență între funcțiile din codul sursă al browserului și funcțiile oglindă din codul JavaScript. Un script JavaScript poate să adauge, să modifice, sau să șteargă orice nod din document, putând astfel genera conținut HTML dinamic (DHTML).

2.3.2 Ajax

Ajax (Asynchronous JavaScript and XML), este o tehnică de programare pentru crearea de aplicații web interactive. Ajax presupune un mic schimb de date intre browser si server, astfel încât sa nu mai fie necesară reîncărcarea întregii pagini web de fiecare data cand userul face o schimbare în aceasta. Ajax reprezintă o colecție de tehnologii, fiecare utilizata și în mod de sine-stătător, dar care combinate permit obținerea unei unelte foarte puternice. Aceasta are ca scop creșterea interactivității, vitezei și ușurinței în utilizare a aplicațiilor web.

Ajax nu este o tehnologie în sine. Termenul este folosit pentru definirea aplicațiilor web ce folosesc un ansamblu de tehnologii:

HTML sau XHTML pentru structura semantică a informațiilor;

CSS pentru prezentarea informațiilor;

Javascript pentru interactivitate, pentru procesarea informațiilor prezentate;

Obiectul XMLHttpRequest pentru schimbul și manipularea informațiilor într-o manieră asincronă cu server-ul web;

XML este folosit de obicei pentru transferarea datelor între server și client, deși orice format funcționează, inclusiv HTML preformatat, text simplu etc

Modelul clasic al aplicațiilor web este următorul: acțiunile utilizatorilor în interfața din browser conduc la o cerere HTTP către serverul web. Serverul efectuează niște procesări (extrage date din baze de date, efectuează calcule, interoghează alte sisteme) și apoi returnează o pagina HTML către client. Este modelul clasic, sincron, dezvoltat odată cu apariția Internetului ca rețea la nivel mondial. Este calea cea mai simplă, dar în timp ce serverul procesează cererea, utilizatorul așteaptă și nu poate interacționa în alt mod cu pagina web.

Ajax elimină această modalitate de interacțiune start-stop-start-stop a Web-ului introducând un nivel intermediar între utilizator și server – motorul Ajax.. În loc să încarce pagina la începutul sesiunii, browserul încarcă un motor Ajax, scris în JavaScript și plasat de obicei într-un cadru (frame) invizibil. Acest motor este apoi responsabil atât cu interfața pe care o afișează utilizatorului, cât și cu comunicația cu serverul pentru folosul utilizatorului. Motorul Ajax permite interacțiunea utilizatorului cu aplicația în mod asincron, independent de comunicația cu serverul. Prin urmare utilizatorul nu mai privește o fereastră goală, așteptând ca aceasta să se încarce direct de pe server. [4]

2.3.3 PHP

Începând cu anii ’95, Internetul, sub aspectul său cel mai popular, și anume al paginilor web, a cunoscut o amploare greu de imaginat. Dacă la început, paginile web aveau un conținut simplu și oarecum stângace, în zilele noastre aspectul acestora s-a schimbat radical. După doar 10 ani, în paralel cu evoluția tehnicii de calcul, au evoluat și tehnicile de programare a acestora. Primele pagini permiteau doar navigarea prin conținutul lor, pe când în zilele noastre ele au o utilizare foarte largă, de la jocuri și aplicații grafice dinamice la comerț pe Internet. Limbajul PHP este un limbaj de programare destinat în primul rând Internetului, aducând dinamică unei pagini web.

Este unul dintre cele mai importante limbaje de programare web open-source (codul sursă este public, fiind accesibil tuturor) și server-side (rularea sa nu se face pe calculatorul celui care vizualizează pagina, ci pe server-ul care o conține). Este unul dintre cele mai folosite limbaje de programare server-side. Statisticile arată că la 1 mai 2008, suportul PHP este prezent pe 20 de milioane dintr-ul total de 70 de milioane de website-uri active din lumea întreagă. Popularitatea de care se bucură acest limbaj de programare se datorează următoarelor sale caracteristici:

Familiaritatea – sintaxa limbajului este foarte ușoară, fiind foarte la îndemână în special pentru programatorii care cunosc limbajul C;

Simplitatea – sintaxa limbajului este destul de liberă. Nu este nevoie de includere de biblioteci sau de directive de compilare, codul PHP inclus într-un document fiind trecut între niște marcaje speciale;

Securitatea – PHP-ul pune la dispoziția programatorilor un set flexibil și eficient de măsuri de siguranță;

Flexibilitatea – fiind apărut din necesitatea dezvoltării web-ului, PHP a fost modularizat pentru a ține pasul cu dezvoltarea diferitelor tehnologii. Nefiind legat de un anumit server web, PHP-ul a fost integrat pentru numeroasele servere web exitente: Apache, IIS, Zeus, etc.

Gratuitatea – este, probabil, cea mai importantă caracteristică a PHP-ului. Dezvoltarea PHP-ului sub licența open-source a determinat adaptarea rapidă a sa la nevoile web-ului, eficientizarea și securizarea codului.[5]

2.3.4 Python

Python este un limbaj de programare puternic și ușor de învățat. Are structuri de date de nivel înalt, eficiente și o simplă dar eficientă abordare a programării orientate pe obiect. Sintaxa elegantă si natura sa interpretată fac, din Python un limbaj ideal pentru elaborarea de script-uri și dezvoltarea rapidă de aplicații în multe domenii, pe majoritatea platformelor. Limbajul are mai puține construcții sintactice decât multe limbaje structurate, precum C, Perl, sau Pascal. Este de asemenea un limbaj multi-paradigmă, ceea ce înseamnă că în loc să adopte un singur stil de programare, permite mai multe stiluri: programare functională, orientată – obiect, structurată și orientată – aspect.

Limbajul are o librărie standard foarte bogată, ceea ce îl face potrivit pentru multe task-uri, idee provenită din sloganul "batteries included" pentru modulele Python. Librăria este in mod deosebit axată pe partea de Web, cu un numar mare de standarde și protocoale (precum MIME sau HTTP) suportate. Există de asemenea module pentru crearea interfețelor grafice, conectarea la bazele de date relaționale, aritmetica în virgulă flotantă de inaltă precizie, precum și suport complet pentru manipularea expresiilor regulate. Limbajul a fost astfel structurat încât să fie foarte usor lizibil. Se indreaptă spre un layout vizual neconvențional, folosește cuvinte cheie în limba engleză acolo unde alte limbaje folosesc punctuația.

Indentarea este un aspect neuzual al sintaxei Python, pentru că se folosesc spatii libere pentru delimitarea blocurilor de program (off-side rule), și pentru că se folosește o caracteristică împrumutată din limbajul ABC – în locul punctuației, Python foloseste indentările în sine pentru a delimita blocurile de program. Spre exemplu, o funcție de n factorial în Python arată astfel:

def factorial(x):

if x == 0:

return 1

else:

return x * factorial(x-1)

Acest tip de indentare elimină însă ambiguitățile în codul sursă, de exemplu în cazul limbajului C o buclă for ar putea avea instrucțiunea de ciclare identată, dar si urmatoarea instrucțiune (care nu mai ține de bucla for) identată la fel ca precedenta, ceea ce în mod clar ar produce confuzii în depanarea codului.[6]

2.3.5 MySQL

„MySQL este un sistem de gestiune a bazelor de date relațional, produs de compania suedeza MySQL AB și distribuit sub Licența Publică Generală GNU. Este cel mai popular SGBD open-source la ora actuală, fiind o componentă cheie a stivei LAMP (Linux, Apache, MySQL, PHP).

Deși este folosit foarte des împreună cu limbajul de programare PHP, cu MySQL se pot construi aplicații în orice limbaj major. Există multe scheme API disponibile pentru MySQL ce permit scrierea aplicațiilor în numeroase limbaje de programare pentru accesarea bazelor de date MySQL, cum are fi: C, C++, C#, Java, Perl, PHP, Python, FreeBasic, etc., fiecare dintre acestea folosind un tip spefic API. O interfață de tip ODBC denumită MyODBC permite altor limbaje de programare ce folosesc această interfață, să interacționeze cu bazele de date MySQL cum ar fi ASP sau Visual Basic. În sprijinul acestor limbaje de programare, unele companii produc componente de tip COM/COM+ sau .NET (pentru Windows) prin intermediul cărora respetivele limbaje să poată folosi acest SGBD mult mai ușor decât prin intermediul sistemului ODBC. Aceste componente pot fi gratuite (ca de exemplu MyVBQL) sau comerciale.

Licența GNU GPL nu permite încorporarea MySQL în softuri comerciale; cei care doresc să facă acest lucru pot achiziționa, contra cost, o licență comercială de la compania producătoare, MySQL AB. MySQL este componentă integrată a platformelor LAMP sau WAMP (Linux/Windows-Apache-MySQL-PHP/Perl/Python).

Popularitatea sa ca aplicație web este strâns legată de cea a PHP-ului care este adesea combinat cu MySQL și denumit Duo-ul Dinamic. În multe cărți de specialitate este precizat faptul ca MySQL este mult mai ușor de invățat și folosit decât multe din aplicațiile de gestiune a bazelor de date, ca exemplu comanda de ieșire fiind una simplă și evidentă: „exit” sau „quit”.

Pentru a administra bazele de date MySQL se poate folosi modul linie de comandă sau, prin descărcare de pe internet, o interfață grafică: MySQL Administrator și MySQL Query Browser. Un alt instrument de management al acestor baze de date este aplicația gratuită, scrisă în PHP, phpMyAdmin.

MySQL poate fi rulat pe multe dintre platformele software existente: AIX, FreeBSD, GNU/Linux, Mac OS X, NetBSD, Solaris, SunOS, Windows 9x/NT/2000/XP/Vista. Versiunea cea mai recenta este 5.6.19.” [7]

2.4 Microcontrolere

Un microcontroller este un tip de circuit care integrează un microprocesor și alte dispozitive periferice într-un singur chip punându-se accent pe un cost redus de producție și consum redus de energie electrică.

Microprocesorul, uneori numit și procesor, este unitatea centrală de prelucrare a informației (CPU) al unui calculator sau sistem structurat funcțional, care coordonează sistemul și care, fizic, se prezintă sub forma unui cip electronic. Microcontrolerul este o structură electronică destinată controlului unui proces sau, mai general, este un microcircuit care incorporează o unitate centrală (CPU) și o memorie împreună cu resurse care-i permit interacțiunea cu mediul exterior. Microcontrolerul diferă de un microprocesor în multe feluri. În primul rând și cel mai important este funcționalitatea sa. Pentru a fi folosit, unui microprocesor trebuie să i se atașeze alte componente ca memorie și componente pentru primirea și trimiterea de date. Microcontrolerul este proiectat să fie toate acestea într-unul singur. Nu sunt necesare alte componente externe pentru utilizarea sa pentru că toate perifericele necesare sunt deja incluse în el. Structura de bază a unui microcontroler poate fi vazută in Figura 4.

Un criteriu importat de clasificare al microcontrolerelor este arhitectura unitații centrale de prelucrare (CPU). Aceasta poate fi de două feluri Von Neumann sau Harvard.

Arhitectura Von Neumann presupune o singură zonă de memorie care cuprinde memoria program și memoria de date și o singură magistrală pentru transferul datelor din și dinspre unitatea centrală de procesare (CPU). Acest lucru înseamnă că este necesară extragerea instrucțiunilor și datelor din aceeași zonă de memorie, limitând lățimea de bandă pentru că magistrala poate fi folosită la un moment dat doar pentru transmiterea datelor sau a instrucțiunilor.

Arhitectura Harvard definește două zone de memorie diferite, una pentru instrucțiuni și cealaltă pentru date, cu magistrale separate pentru fiecare. Deoarece aceste magistrale lucrează independent, instrucțiunile și datele pot fi aduse în același timp îmbunătățind viteza față de arhitectura cu o singură magistrală.

Un alt criteriu de clasificare a microcontrolerelor este lungimea (dimensiunea) cuvântului de date. În funcție de puterea de calcul dorită și de alte caracteristici se pot alege variante având dimensiunea cuvântului de date de 4, 8,16, 32 sau 64 de biți.[8]

Fig. 4 Structura de bază a unui microcontroller

Unitatea de memorie – este o componentă a microcontrolerului a cărei funcție este de a înmagazina date. Memoria constă din toate locațiile de memorie, iar adresarea acesteia nu este altceva decât selectarea uneia din ele. Aceasta înseamnă că putem selecta o locație de memorie la un capăt, și la celălalt capăt trebuie să așteptăm conținutul acelei locații.

Unitatea centrală de procesare, (CPU) – este structurată pe locații de memorie având capabilitate încorporată de înmulțire, împărțire, scădere și adunare și permite mutarea conținutului dintr-o locaie de memorie în alta. Locațiile de memorie ale CPU sunt numite regiștri. Regiștrii sunt deci locații de memorie al căror rol este de a ajuta prin executarea a variate operații matematice sau a altor operații cu date.

Bus-ul – fizic, el reprezintă un grup de 8, 16, sau mai multe fire. Sunt dou tipuri de bus-uri: bus de adrese și bus de date. Primul constă din atâtea linii cât este numrul de cifre binare (16 biți = 16+1 fire, 1 fiind masa), iar celălalt este atât de lat cât sunt datele. Primul servește la transmiterea adreselor de la CPU la memorie, iar cel de al doilea la conectarea tuturor blocurilor din interiorul microcontrolerului.

Unitatea intrare-ieșire digital – porturile paralele digitale de intrare/iesire sunt una dintre cele mai importante caracteristici ale microcontrolerelor. Sunt posibile două stări ale semnalelor în aceste porturi „HIGH” (la majoritatea uC-lor 5V) sau ”LOW „ (0V).

Unitatea intrare-ieșire analog – în afara de câteva microcontrolere foarte mici majoritatea au integrate convertoare analog/digital care diferă prin numarul canalelor (2-16) și al rezoluției lor (8-12 biți) și cuprinde în general un comparator analog.

Controlerul de întreruperi – este folositor pentru întreruperea rularii unui program principal în cazul apariției unor evenimente interne sau externe. Prin conjuncție cu „sleep mode” el ajută la conservarea puterii consumate de microcontroller.

Timerul/Counterul – majoritatea microcontrolerelor au cel putin 2-3 module timer/counter care pot fi folosite pentru a masura intervale de timp, evenimente sau pentru a numara evenimente.

Din cauza integrarii unui numar mare de periferice și a costului redus de producție,un µC operează la viteze reduse, frecventa sa de ceas fiind de obicei de zeci sau sute de MHz, cu un ordin de marime mai mică decat cea a unui µP. Cu toate acestea, microcontrolerele se pretează la o gamă variată de aplicații fiind folosite atât în mediul industrial cât și în produse de larg consum, de la sisteme din industria aerospatială până la telefoane mobile, cuptoare cu microunde și jucarii.

Tehnologia de fabricație la majoritatea microcontrolerelor se realizează la ora actuală în tehnologie CMOS (tehnologii similare seriilor standard CMOS de circuite numerice HC, AC, ALV). Se pot realiza astfel structuri cu un consum redus (care depinde de frecventa de lucru) permitând eventual alimentarea de la baterie. Logica internă este statică (total, sau în cea mai mare parte) permitând astfel, în anumite conditii, micsorarea frecventei de ceas sau chiar oprirea ceasului în ideea optimizarii consumului. Tehnologia este caracterizată și de o imunitate mai mare la perturbații, esentială într-un mare numar de aplicații specifice.

Costul unui µC depinde în mare masură de numarul de periferice integrate. Cu cât numarul acestora este mai mare cu atât nivelul de integrare crește ducând la un cost de producție mai mare. Din aceasta cauză, arhitecturile de µC pe piață la ora actuală variază în limite destul de largi, de la chipuri cu doar 6 pini de I/O până la procesoare digitale de semnal (DSP) sau procesoare cu arhitecturi ARM. La momentul actual sunt câteva zeci de firme producatoare în lume ce ofera o gamă variată de µC din punct de vedere al arhitecturii, dotărilor sau vitezei de execuție. Principalele concurente în piața de 8 biți sunt companiile Atmel si Microchip, cu familiile de µC AVR, respectiv PIC.

Utilizarea unui microcontroler, oricât de evoluat , nu elimină unele componente ale interfeței cu mediul exterior (atunci când ele sunt chiar necesare): subsisteme de prelucrare analogică, elemente pentru realizarea izolării galvanice, elemente de comutație de putere (electromecanice sau statice).

2.4.1 Microcontrolerul Atmel ATmega 328p ARV

Famila AVR de la Atmel este formată din microcontrollere cu arhitectura Harvard pe 8 biți și set redus de instrucțiuni (RISC). Ele au fost introduse pe piață în 1996, fiind printre primele controlere care foloseau memoria Flash pentru program în locul memoriilor OTPROM sau EPROM folosite de competiție.

Microcontrolerul ATmega 328p face parte din familia de microcontrolere Atmel ARV pe 8 biți, are o memorie program de 32 Kb, memorie EEPROM de 1 Kb și memorie SRAM de 2 Kb. Frecvența de clock recomandată este de 16 MHz dar poate crește până la maxim 20 MHz. Tensiunea de alimentare este între 1.8 si 5.5V, tensiunea recomandată fiind de 5V. Are un număr de 23 de pini de intrare-ieșire distribuiți in trei porturi B,C si D dintre care 6 pini sunt analogici și au legătură directă cu modulul ADC iar restul sunt pini digitali. Layout-ul microcontrolerului care conține distribuția pinilor si funcționalitățile acestora poate fi vazut in Figura 5. Are un singur modul ADC cu rezoluția pe 10 biți ceea ce înseamnă o cuantă (q) de 4.8 mV la o tensiune de referință de 5V. Formula de calcul a cuantei este urmatoarea , unde n reprezintă rezoluția ADC-ului.

Fig. 5 Microcontrolerul ATmega 328p

Temperatura de lucru este cuprinsă între -40 C si +85 C , un interval îndeajuns de mare încât să poată fi folosit în proiecte din numeroase domenii, spre exemplu domeniul automotive unde anumite componente trebuie să functioneze la temperaturi înalte de + 70 – +80 grade C.

Are integrate 3 module pentru comunicare care îi permit sa comunice cu lumea exterioară pe I2C (Inter Integrated Circuit), SPI(Serial Peripheral Interface) si USART(Universal Synchronous / Asynchronous Receiver Transmitter).

Arhitectura microcontrolerului este RISC avansată, cu 131 de instrucțiuni – majoritatea executându-se într-un singur ciclu de clock, 32 x 8 regiștri de lucru general și până la 20 MIPS la frecvența de lucru de 20 MHz.

Microcontrolerul are 23 de linii de intrare/ieșire programabile și poate scoate semnal PWM pe 6 dintre pinii analogici, are 3 module timer, două pe 8 biți si unul pe 16 biți ambele cu prescaler separat și mod de comparare.

Puterea consumată la frecvența de clock de 1MHz, tensiunea de 5V si temperatura de 25 C este in funcție de modul în care se află:

modul activ: 0.2 mA

modul oprit: 0.1 µA

modul economie de energie: 0.75 µA

Odată cu creșterea frecvenței de lucru crește și tensiunea minimă de alimentare: 0– 4MHz @1.8 – 5.5V, 0 – 10MHz@2.7 – 5.5.V, 0 – 20MHz @ 4.5 – 5.5V. Curentul maxim pe care îl poate scoate pe un pin este de 50 mA la 3.3V și 40 mA la 5V. [10]

2.5 Arduino IDE

Interfața grafică Arduino IDE (Integrated Development Environment) conține un editor text pentru scrierea codului precum și indentarea automată, îngroșarea sintaxei precum și capabilitatea de a compila și a uploada programele pe placa Arduino specifică, conține și o zonă de mesaje, o consolă de text, o bară de instrumente cu butoane pentru cele mai comune funcții și o serie de meniuri. Se conectează la partea hardware Arduino pentru a încărca programe și a comunica cu aceasta. Codul scris folosind arduino se numește „sketch” și se scrie în editorul de text. Sketch-utile sunt salvate cu extensia .ino.

Cea mai recentă versiune este 1.5.6-R2 Beta care a aparut în 21 februarie 2014 dar versiunea deși cea stabilă este 1.0.5 aparută în 15 Mai 2013. Acesta a adus pe lângă numeroasele „fix-uri” la bug-uri și un nou mod de a importa librări din fisiere .zip, un installer pentru platforma Windows, o noua librărie de Wi-Fi și multe alte optimizări.

Există 2 funcți principale care trebuie apelate în orice program, acestea fiind:

– setup() { … } -> este apelată în momentul în care programul rezident în memoria flash pornește pentru prima dată și este folosită de obicei pentru a seta și inițializa anumite setări cum ar fi starea pinilor (intrare / ieșire) pentru a porni de fiecare dată cu microcontrolerul dintr-o stare definită si cunoscută, baudrate-ul pentru comunicația serială etc.

– loop() { … } -> acesta funcție este o buclă infinită și înlocuiește bucla infinită clasică while(1)

din alte limbaje și medii de programare. Aici se scrie codul care se dorește a fi executat ciclic până când platforma hardware este „resetată” sau scoasă de sub tensiune.

Fig. 6 Interfața grafică Arduino IDE – Structura unui sketch

Un exemplu de program Arduino care aprinde și stinge ciclic un led la intervale de 1000ms și structura generală a unui sketch sunt ilustrate in Figura 6. [11]

2.6 Senzori și actuatori

2.6.1 Senzori

O mare parte din elementele tehnice senzitive sunt încadrate în categoria de traductor. Un traductor este un dispozitiv care convertește efecte fizice în semnale electrice, ce pot fi prelucrate de instrumente de măsurat sau calculatoare. În unele domenii, în special în sfera dispozitivelor electro-optice, se utilizează termenul de detector (detector în infraroșu, fotodetector etc.).

Traductoarele introduse într-un fluid sunt denumite, uneori, probe. O categorie largă o constituie sistemele terminate în "-metru": de exemplu, "accelerometru" pentru măsurarea accelerației, "tahometru" pentru măsurarea vitezei unghiulare.

Denumirea senzorului provine din cuvântul latin „sensus”, care însemnă simț și înainte de a fi adoptat pentru sisteme tehnice, a fost și este utilizat pentru a desemna capacitățile organelor de simț ale oamenilor și ale organismelor vii, de a culege și prelucra informații din mediul înconjurător și a le transmite creierului. În acest proces mărimile fizice, neelectrice, sunt convertite în semnale electrice, pe care creierul le poate prelua și interpreta și pe baza cărora coordonează acțiunile mușchilor. Cea mai solicitată și importantă funcție senzorială a omului este cea vizuală, care asigură cantitatea preponderentă de informație, având și cea mai mare viteză de transfer (cc.3 x biți/s).

Fig. 7 Structuri ale sistemelor senzoriale

Există astăzi senzori pentru mai mult de 100 de mărimi fizice, iar dacă se iau în considerare și senzorii pentru diferite substanțe chimice, numărul lor este de ordinul sutelor. Se pot pune în evidență circa 2000 de tipuri distincte de senzori, oferite în 100.000 de variante, pe plan mondial. Majoritatea dintre acestia au aceeași structură ca cea din Figura 7.

Clasificarea senzorilor în funcție de mărimea de ieșire:

senzori analogici: pentru care semnalul de ieșire este în permanență proporțional cu mărimea fizică de intrare;

senzori numerici: la care semnalul de ieșire poate lua numai un număr limitat de valori discrete, care permit cuantificarea semnalului fizic de intrare.

Clasificarea senzorilor în funcție de mărimea de intrare:

absoluți: când semnalul electric de ieșire poate reprezenta toate valorile posibile ale mărimii fizice de intrare, raportate la o origine (referință) aleasă.

incrementali: când nu poate fi stabilită o origine pentru toate punctele din cadrul domeniului de măsurare, ci fiecare valoare măsurată reprezintă originea pentru cea următoare.

Orice senzor poate fi privit însă ca o "cutie neagră", la intrarea căreia se aplică mărimile fizice care urmează a fi măsurate, ieșirea fiind constituită din semnale electrice, adecvate transmiterii către sistemul de comandă (Fig. 8). [12]

Fig. 8 Schema bloc a unui senzor cu semnalele de intrare/ieșire

2.6.2 Actuatori

Actuatorii, reprezintă “muschii” sistemelor mecatronice care primesc instructiuni de comandă (de cele mai multe ori sub forma de semnal electric) și produc modificari în sistemul fizic prin generare de fortă, mișcare, caldură, debit etc. În general actuatorii sunt utilizați împreună cu o sursă de energie și un mecanism de cuplare (Figura 9). Sursa de energie poate fi de curent alternativ (CA) sau continuu (CC), la tensiunea și intensitatea nominală. Actuatorii pot fi clasificați și in funcție de numarul de stari stabile ale semnalului de ieșire: binari si continui.

Fig. 9 Unitatea de acționare a unui actuator

Pentru acționarea structurilor mecatronice se utilizează atât metode și dipozitive clasice (motoare electrice de curent continuu sau alternative, motoare pas cu pas, actuatoare pneumatice sau hidraulice) cât și metode și dispozitive care, prin noutate, se pot numi neconvenționale (actuatoare electrostatice, actuatoare cu polimeri electroactivi, actuatoare bazate pe lichide electro etc, actuatoare bazate pe materiale inteligente).Dacă prin actuator se întelege acel dispozitiv care acceptă la intrare o mărime de control (cel mai adesea un semnal electric) și produce o schimbare în sistemul fizic, generând o forță, o mișcare, caldură, un flux, etc., atunci dispozitivele clasice de acționare formează o submultime a actuatoarelor. [13]

Se poate realiza o clasificare a actuatoarelor utilizate în mecatronică:

– actuatoare electrice

– actuatoare electromecanice

a) motoare de curent continuu

b) motoare de curent alternativ

c) motoare pas cu pas

– micro și nanoactuatoare

2.7 Proiectare de Circuite Imprimate (PCB)

Un circuit imprimat sau cablaj imprimat, (prescurtat PCB), este o placă cu cablaj imprimat care are rolul de a susține mecanic și de a conecta electric un ansamblu de componente electrice și electronice, pentru a realiza un produs final funcțional, (care poate fi: un simplu variator de luminozitate a unui bec, o antenă realizată pe cablaj, sau echipamente mult mai complicate precum calculatoare și echipamente de comunicații radio) Figura 10.

Fig. 10 Circuit imprimat pentru un CNC USB controller.

Un program de proiectare PCB trebuie să aibă anumite funcționalități, cum ar fi:

posibilitatea de configurare a interfeței pe grilă cu mărime variabilă.

posibilitatea de a lucra pe layere (top, bottom, copper, silkscreen etc) și posibilitatea de customizare a acestora (pe culori in principal).

posibilitatea de printare a proiectului ("în oglindă").

dupa realizarea proiectului programul trebuie să fie capabil să exporte proiectul cel puțin în format Gerber RS-274D, respectiv RS-274X.

optiunea de vizualizare 3D a produsului PCB cu posibilitate de manipulare a acestuia în spațiu tridimensional.

Etapele producerii unui circuit imprimat sunt urmatoarele:

Transpunerea schemei electronice de principiu a circuitului în format electronic, folosind software specializat de proiectare și generarea fișierului netlist;

Importarea fișierului netlist în software-ul de proiectare a cablajului imprimat și generarea schemei de cablaj;

Crearea maștii de expunere prin imprimarea schemei de PCB pe folie transparentă;

Degresarea, curatarea materialului de suport și tratarea acestuia cu lac fotosensibil;

Expunerea prin intermediul maștii de expunere la lumina ultravioleta (UV);

Developarea în solutie specială a suportului, în vederea înlaturării lacului fotosensibil din zonele expuse la lumina ultravioletă;

Corodarea în baie de clorura ferică (FeCl3), pentru înlaturarea stratului de cupru din zonele expuse;

Realizarea găurilor pentru terminalele componentelor, precum și a celor de prindere a diverselor elemente (radiatoare, relee, senzori, comutatoare etc.) și a celor de prindere pe șasiu sau carcasă;

Stanare prin imersie în solutie specializată sau prin acoperire la cald cu aliaje pe bază de staniu, în vederea protecției la coroziune a traseelor din cupru și a facilitarii operațiunilor de lipire a componentelor;

Aplicarea schemei de amplasare a componentelor pe fața plantată, prin metoda de transfer la cald a tonerului;

Debitare prin frezare la dimensiunile exacte;

Spalare și uscare finală.

3. REZOLVAREA TEMEI DE PROIECT

3.1 Prezentare generală

Lucrarea are ca scop realizarea unui sistem de automatizare a locuinței care să poata fi accesat de la distanță de pe orice terminal cu posibilitate de conectare la internet. Din interfața web utilizatorul poate să pornească individual becurile, prizele, centrala termică sau aerul condiționat sau poate porni una dintre următoarele funcționalități: pornirea centralei termice sau a aerului condiționat în funcție de o temperatură prestabilită (28 ’C), aprinderea becurilor în funcție de un anumit prag de luminozitate presetat (50%), aprinderea becurilor în funcție de mișcare, pornirea alarmei de incendiu în funcție de senzorul de gaz folosind becurile din casă și displayul montat pe modulul de automatizare. De asemenea, în interfața web se pot vedea valorile senzorilor montați în locuință cum ar fi: temperatura (grade Celsius), luminozitatea (procente), umiditatea (procente), detecție gaz/fum (DA/NU), detecție mișcare (DA/NU).

Orice comandă facută din interfața web va afișa pe display-ul montat pe modul ce tip de comandă s-a executat, dacă s-a executat, plus alte informații legate de funcționalități.

Funcționalitatea care pornește centrala termică sau aerul condiționat în funcție de temperatura prestabilită și temperatura reală din locuință are implementat în software un sistem de incompatibilitate între centrala termică și aerul condiționat astfel încât acestea să nu funcționeze amandouă în același timp. Totodată variațiile mari și bruște de temperatură nu vor fi luate în considerare deoarece în soft a fost implementată o funcționalitate care nu ia în considerare valori viitoare care sunt cu 10 grade mai mari sau mai mici decât valoarea curentă a temperaturii. Intervalul de protecție este reglabil și a fost implementat deoarece senzorul de temperatură se poate defecta și poate trimite către microcontroler valori eronate, ceea ce înseamnă o funcționare incorectă a sistemului de reglare a temperaturii.

Funcționalitatea care aprinde becul în funcție de senzorul de mișcare ține becul aprins timp de 5 secunde din momentul în care s-a detectat mișcare. Intervalul în care becul stă aprins se poate modifica în soft foarte ușor, dar totodată se poate modifica și felul în care funcționalitatea ține becul aprins, în starea implicită cu perioada de întarziere fixă, dacă s-a detectat mișcare becul este aprins timp de 5 secunde apoi stins, în starea cu perioada de întârziere variabilă dacă în timp ce becul este aprins ca urmare a detectării de mișcare se detectează o altă mișcare atunci becul va sta aprins 5 secunde din acel moment și în acest mod becul va sta aprins o perioadă de timp variabilă în funcție de mișcare.

Funcționalitatea care aprinde becul în funcție de o valoare de prag a luminozității dată în procente funcționează în felul următor: dacă luminozitatea în cameră se află sub un prag prestabilit (50%) atunci sunt aprinse becurile/becul din cameră după care luminozitatea nu mai este monitorizată de către funcționalitate și becul poate fi oprit numai din interfață folosind funcția de oprire/pornire a becului sau din întrerupătorul manual existent în cameră. Aceasta nu mai monitorizează luminozitatea după aprinderea becului deoarece va fi o valoare peste 50% și în viitor nu poate ști dacă acea valoare este datorită aprinderii becului sau faptului că afară este zi și o lumină îndeajuns de puternică încat senzorul să detecteze mai mult 50 %.

Funcționalitatea de avertizare în caz de detecție fum sau scurgeri de gaze folosește toate becurile din locuință și display-ul de pe modul ca să avertizeze proprietarul aprinzând intermitent toate becurile la un interval de o secundă și afișând pe display mesajul „Alarmă incendiu !!!”.

3.2 Implementare hardware

Pentru a implementa hardware sistemul de automatizare am decis să folosesc un SBC (Raspberry PI) Model B care va găzdui serverul aplicației, pagina web și baza de date, placa de dezvoltare Arduino UNO care va prelua datele de la senzori, va controla releele și va comunica cu Raspberry PI, aici se află implementate soft funcționalitățile menționate mai sus. Comunicarea va avea loc în ambele sensuri deoarece se vor trimite comenzi de la Raspberry PI pentru Arduino pentru a porni anumite funcționalităti sau pentru a alimenta diverși consumatori dar și placa de dezvoltare Arduino va trimite valorile prelucrate ale senzorilor către Raspberry PI spre a fi stocate în baza de date.

Pentru alimentarea releelor și a senzorilor am decis să proiectez un modul de alimentare. Modulul primeste 12V /1000 mAh pentru a alimenta cu 12V senzorii care au nevoie de această tensiune pentru a funcționa în parametri optimi și cu 5V releele și senzorii care funcționează la această tensiune, folosind un LM7805 pentru a transforma din 12V în 5V.

Schema bloc

Fig. 11 Schema bloc a sistemului de automatizare

A. Sursa de alimentare

Sursa de alimentare este formată din două transformatoare de la firma Voltcraft (Figura 12) cu tensiune de ieșire reglabilă între 4.5V – 12V și un curent maxim debitat de 1000mA. Ele se alimentează de la rețeaua electrică 230V / 16A. Unul este setat pe 7.5V și alimentează placa de dezvoltare Arduino iar celălalt este setat pe 12V și alimentează modulul de alimentare pentru relee și senzori.

Caracteristici:

Tensiune de ieșire stabilizată

Protecție la scurtcircuit, supratensiune, suprasarcină

În conformitate cu cerințele de mediu, consum standby

Cablu de 1,8 m

Date tehnice:

Tip: FPPS 24-18W

Tensiune de ieșire: 4,5 – 12V/DC

Curent ieșire: 1000 mA

Putere maxima: 12 W

Lățimea: 51 mm

Înălțimea: 74 mm

Tensiune de intrare: 100- 240 V/AC

Greutate: 200 g

Fig. 12 Blocul de alimentare

B. Raspberry PI

SBC-ul Raspberry PI este conectat la Arduino printr-un cablu USB tip A – USB tip B (cablu imprimantă) prin portul USB „ACM0” și la rețeaua de internet (LAN) printr-un cablu ethernet conectat la un router/modem cu acces la internet. În cazul în care nu există acces la internet atunci pagina web rezidentă pe Raspberry PI va fi vizibilă doar în rețeaua locală creată de router/modem.

Specificații hardware:

SoC Broadcom BCM2835 (CPU, GPU, DSP, and SDRAM)

CPU: 700 MHz ARM1176JZF-S core (ARM11 family)

GPU: Broadcom VideoCore IV, OpenGL ES 2.0, 1080p30 h.264/MPEG-4 AVC high-profile decoder

Memory (SDRAM): 256 Megabytes (MiB)

Video outputs: Composite RCA, HDMI

Audio outputs: 3.5 mm jack, HDMI

Onboard storage: SD, MMC, SDIO card slot

10/100 Ethernet RJ45 onboard networkStorage via SD/ MMC/ SDIO card slot

Fig. 13 SBC-ul Raspberry PI

C. Arduino UNO

Placa de dezvoltare Arduino UNO (Figura 14) este elementul central al sistemului și găzduiește microcontrolerul Atmel Atmega 328p ARV. Acesta comunică cu toate elementele sistemului de automatizare. Comunică cu Raspberry PI printr-un cablu USB tip A – USB tip B prin care se transmit date în ambele sensuri dar se și alimentează Raspberry PI-ul. Ieșirile tuturor senzorilor sunt legate la pinii analogici ai microcontrolerului, releele sunt conectate de asemenea, și folosesc patru pini digitali pentru a putea fi controlate, lcd-ul este conectat tot la microcontroler și folosește șase pini digitali pentru a putea fi comandat.

Placa Arduino poate fi alimentată prin intermediul conexiunii USB sau cu o sursă de alimentare externă. Sursa de alimentare este selectată automat.

Alimentarea externă (non-USB) poate veni fie de la un adaptor AC-la-DC sau baterie. Adaptorul poate fi conectat printr-un conector de 2.1mm cu centru-pozitiv. Conectarea de la o baterie poate fi realizată legând la GND si V’in capetele de la conectorii de alimentare.

Placa de dezvoltare poate opera pe o sursă externă de 6-20V. Dacă este alimentată la mai puțin de 6V, există posibilitatea, ca pinul de 5V să furnizeze mai puțin de 5V și placa să devină instabilă. Dacă se alimentează cu mai mult de 12V, regulatorul de tensiune se poate supra-încălzi, acest lucru ducând la deteriorarea plăcii. Intervalul de tensiune recomandat de către producător este de 7-12V.

Fig. 14 Placa de dezvoltare Arduino UNO

D. Modul de alimentare actuatori și senzori

Modulul de alimentare a senzorilor și actuatorilor (Figura 15) primește 12V/1000mA DC de la o sursă externă și alimentează cu 12V senzorii care au nevoie de această tensiune pentru a funcționa după care transformă din 12V/1000 mA în 5V/1000 mA pentru a alimenta releele și senzorii care au nevoie de o tensiune de 5V pentru a funcționa în parametri. Transformarea din 12V în 5V se face cu ajutorul unui regulator de tensiune LM7805 de la firma Fairchild.

Regulatorul de tensiune este unul dintre cele mai importante și frecvent utilizate componente electrice. Regulatoarele de tensiune sunt responsabile pentru menținerea unei tensiuni constante peste un sistem electronic. Fluctuațiile de tensiune pot duce la efecte nedorite asupra unui sistem electronic, astfel că este nevoie de o tensiune constantă de echilibru, în funcție de cerința de tensiune a fiecărui sistem.

Caracteristici LM7805:

Curent de ieșire, de la 5mA pana la 1000mA

Tensiune de ieșire 5V (4.8 – 5.2V)

Tensiune de intrare între 5 si 18V

Protecție la supratemperaturi

Protecție la scurtcircuit

Fig. 15 Modul alimentare relee și senzori

E. Display LCD 2×16

Display-ul folosit este de tip „STN Negative, Blue Transmissive” (Figura 16). Acesta poate să afișeze 32 de caractere pe două rânduri, și fiecare caracter este format dintr-o matrice de pixeli cu dimensiunea de 5×8 pixeli. Funcționează la o tensiune de 5V. Display-ul este folosit pentru a afișa stările funcționalităților și a consumatorilor, oprite/pornite respectiv alimentați/nealimentați.

Caracteristici:

Controller: HD44780

Dimensiuni: 80mm x 36mm x 13.5mm

Culoare caractere: alb

Culoare background: albastru

Zona de vizualizare: 66mm x 16 mm

Zona activă: 56.2mm x 11.5mm

Direcția de vizualizare : ora 6

Numărul caracterelor: 16 caractere x 2 linii

Mărimea unui caracter: 2.95mm x 5.55mm

Mărimea unui pixel: 0.55mm x 0.65mm

Fig. 16 Display LCD 2×16

F. Accesarea interfeței pentru utilizator

Pentru a putea accesa interfața utilizatorului (Figura 17) trebuie sa ai un dispozitiv (PC, laptop, smartphone etc) care să îndeplinească următoarele două cerințe: să aibă posibilitatea de conectare la internet prin cablu ethernet sau wi-fi și să aibă instalat un program de tip browser de internet (Internet Explorer, Opera, Google Chrome etc). Dacă aceste condiții sunt îndeplinite poți accesa interfața oriunde te-ai afla și poți controla anumite procese care au loc în locuință.

Fig 17 Terminale cu diferite posibilități de conectare la internet

Dacă routerul nu permite conexiunea la internet a sistemului de automatizare trebuie modificate drepturile de acces ale routerului din pagina de administrare. Adresa la care se află pagina de administrare a routerului poate fi găsită în felul următor: apăsați simultan tastele Windows și R, apoi, în caseta ce se va deschide scrieți CMD și apăsați tasta Enter. În fereastra ce se va deschide (Figura 18) scrieți comanda ipconfig (încercuită cu alb) și apăsați Enter:

Fig. 18 Adresa paginii de administrare a routerului

Ceea ce ne interesează pe noi este adresa IP afișată în dreptul Default Gateway (ultimul rand). Aceasta este adresa IP a routerului pe care va trebui să o accesăm prin intermediul Internet Browser-ului, în cazul meu, 192.168.0.1.

Schema electrică a modulului cu relee și senzori

Fig. 19 Schema electrică a modulului cu relee și senzori

3.2.2.1 Explicarea funcționării

Schema electrică a modulului care alimentează releele și senzorii a fost realizată în programul EAGLE 7.3.0 și este împărțită în trei blocuri funcționale: blocul de alimentare, blocul de control al releelor și blocul care conține toți conectorii de pe modul.

A. Blocul de alimentare

Este format dintr-un regulator de tensiune de la firma Fairchild Semiconductor. Regulatorul se numește LM7805 (Figura 20), face parte din familia de stabilizatoare și regulatoare 78xx, ”xx” reprezentând tensiunea stabilizată la ieșire, în cazul acesta 5V. Acesta primește un curent de 1000mA la o tensiune de 12V pe care o transformă și o stabilizează la 5V. Are conectate două condensatoare pe intrare deoarece intrarea regulatorului se află la o distanță considerabilă față de sursa de tensiune. Tot pe intrarea regulatorului este conectată și o diodă de sens pentru a lăsa curentul să circule într-un singur sens, de la sursa de tensiune către intrarea regulatorului. Pe ieșirea regulatorului avem conectate două condensatoare pentru a îmbunătăți stabilitatea semnalului de ieșire și a răspunsului la regim tranzitoriu. Tot pe partea de ieșire este conectat un led care indică faptul că placa este alimentată, curentul prin led este limitat la 20mA cu ajutorul unei rezistențe de 250Ω puse în serie cu acesta.

Caracteristici LM7805:

Curent de ieșire, de la 5mA pana la 1000mA

Tensiune de ieșire 5V (4.8 – 5.2V)

Tensiune de intrare între 5 si 18V

Protecție la supratemperaturi

Protecție la scurtcircuit

Fig. 20 LM7805 – Capsula și diagrama pinilor

B. Blocul de control al releelor

Blocul de control al releelor este format din 4 relee, fiecare cu circuitul lui de alimentare.

În continuare am să descriu funcționarea alimentării pentru un singur releu (Figura 21), celelalte funcționând în mod similar.

Fig. 21 Schema electrică de comandă și alimentare pentru un releu

Am ales releul care oprește/pornește alimentarea unei prize (Figura 22), caracteristicile releului sunt următoarele:

Rezistența bobinei: 60ohm

Tipul bobinei: non blocare

Tensiunea bobinei: 5VDC

Curentul maxim prin contact: 16A

Materialul contactului: Silver Nickel

Tensiunea contactului VAC: 250V

Montarea releului: THT

Tipul releului: de putere

Tipul contactului: NO

Fig. 22 Releu TE Connectivity

Știind că rezistența bobinei este de 60Ω și este alimentată de la o tensiune de 5V am calculat cu ajutorul legii lui Ohm curentul pe care îl consumă bobina atunci când este alimentată. Acesta este 5V/60 Ω = 0.083 A (83mA). Fiind o valoare de două ori mai mare decât poate scoate un pin digital sau analogic al microcontrolerului Atmel Atmega 328p, am decis să pun un tranzistor în partea de legatură a bobinei cu GND.

Caracteristici tranzistor 2N3904 (Figura 23):

Baza tranzistorului este legată printr-o rezistență de 2k la un pin digital al microcontrolerului. Am pus o rezistență de 2k în baza tranzistorului deoarece la o tensiune de 5V dată pe pinul digital în baza tranzistorului trebuie sa ajungă 2,5mA care reprezintă Ib. Curentul de colector este Ic = β Ib, factorul beta(β) este dat de către producătorul tranzistorului în foaia de catalog și este între 50-100. Rezultă un curent de colector între 125mA și 250mA, mult mai mare decât curentul consumat de bobină.

Fig. 23 Capsula și diagrama pinilor – tranzistor 2N3904

În paralel cu bobina releului am pus un led care se va aprinde atunci când bobina este alimentată. Acesta consumă 20mA deoarece curentul a fost limitat printr-un rezistor de 250Ω. Între 5V si GND am pus un condensator de 1uF pentru a nu avea fluctuații bruște de tensiune atunci când bobina este alimentată. Atunci când toate releele sunt alimentate se consumă un curent de 412mA, fiecare releu consumă 103 mA (83 mA bobina + 20 mA ledul).

Cei doi pini de la contactul releului sunt legați la un conector pcb cu 2 pini. Aici este conectat unul din cele două fire care vin la priză și anume faza.

În cazul în care releul controlează centrala termică atunci la cei doi pini ai conectorului pcb se vor lega două fire care vin din placa electronică a centralei termice, dintr-un conector pcb cu 2 pini. Un astfel de conector al unei centrale termice BOSCH se poate vedea în chenar îngroșat în partea dreaptă sus, în Figura 24, unde se află schema electrica a acestei centrale. Schema este preluată din manualul de utilizare. Majoritatea centralelor termice au posibilitatea de adăugare de termostat extern cu fir sau wireless. Schema de conexiune se găsește în manualul de utilizare al centralei termice. Același lucru se aplică și la conectarea unui aparat de aer condiționat la sistemul de automatizare.

Fig. 24 Schema electrică a unei centrale BOSCH CMC

3.2.2.2 Realizarea cablajului imprimat

Pentru a realiza cablajul imprimat am folosit programul de proiectare EAGLE 7.3.0. Am proiectat schema electrică, apoi pe baza schemei electrice am generat un fișier layout cu extensia .brd. După acest pas, se deschide fereastra Eagle Layout Editor și fișierul cu extensia .brd generat anterior și prezintă în partea stângă a ferestrei de lucru conturul componentelor din schemă, dispuse aleatoriu. Componentele sunt deja conectate cu așa-numitele „airwires”, liniile de semnal rezultate din conexiunile create în faza anterioară (schematic). La acest pas se poate folosi funcția „Autoroute” care va amplasa și va ruta traseele conform unor reguli și unui algoritm. Această funcție nu „routeaza” bine cablajele de dimensiuni și complexitate medie sau mare, este recomandată folosirea ei în proiecte de complexitate mică (maxim 30 de componente) și poate atinge un procent de 90 % atunci când cablajul a putut fi „routat” în condiții optime.

Cablajul imprimat de mine folosește 2 straturi, top și bottom, pe top se află o mare parte din componente cum ar fi releele, regulatorul de tensiune și circuitul aferent acestuia, conectorul de alimentare etc. Stratul top este reprezentat în Figura 25 și stratul bottom în Figura 26 .

Fig. 25 Cablaj imprimat, strat top, model 3D

Fig. 26 Cablaj imprimat, strat bottom, model 3D

Lista componentelor folosite la realizarea PCB-ului a fost generată cu ajutorul programului Eagle și poate fi vizualizată în Figura 27.

Fig. 27 Lista cu componentele folosite

La proiectarea PCB-ului s-au ales anumite valori pentru lățimea traseelor de semnal și de putere, pentru găurile în care se vor introduce componentele THT, pentru vias-urile prin care trece un traseu de pe top pe bottom și invers, pentru mărimea PCB-ului, grosimea stratului de cupru, distanța între trasee, mărimea pad-urior la componentele THT și SMD. Toate aceste valori și altele mai puțin importante pot fi vizualizate în Figura 28.

Fig. 28 Date tehnice de proiectare a PCB-ului

În coloana „Summary” sunt prezentate date precum numărul de fire „routate” pe PCB, numărul de componente SMD, numărul de componente THT, numărul de găuri care trebuie făcute pentru componentele THT și pentru vias-uri, numărul de poligoane folosite pentru a creea traseele de masă pe întreg PCB-ul. Sunt doua poligoane folosite, unul pentru stratul top și altul pentru stratul bottom.

Schema electrică a sistemului de automatizare

Fig. 29 Schema electrică a sistemului de automatizare

3.2.3.1 Explicarea funcționării

Placa de dezvoltare Arduino UNO este elementul central al sistemului și găzduiește microcontrolerul Atmel Atmega 328p ARV. Acesta comunică cu toate elementele sistemului de automatizare. Comunică cu Raspberry PI printr-un cablu USB tip A – USB tip B prin care se transmit date în ambele sensuri dar se și alimentează Raspberry PI-ul. Ieșirile tuturor senzorilor sunt legate la pinii analogici ai microcontrolerului, releele sunt conectate de asemenea, și folosesc patru pini digitali pentru a putea fi controlate. Lcd-ul este conectat tot la microcontroler și folosește șase pini digitali pentru a putea fi comandat.

SBC-ul Raspberry PI este conectat la rețeaua de internet (LAN) printr-un cablu ethernet conectat la un router/modem cu acces la internet. În cazul în care nu există acces la internet, atunci pagina web rezidentă pe Raspberry PI va fi vizibilă doar în rețeaua locală creată de router/modem.

Microcontrolerul Atmel Atmega 328p primește valori de la senzori pe pini analogici declarați ca și pini de intrare. Acești pini au legatură directă cu modulul ADC din interiorul microcontrolerului și astfel tensiunile primite de la senzori sunt convertite în șiruri de numere care pot lua valori între 0 și 1023, 0 însemnând 0V si 1023 – 5V.

Microcontrolerul este cel care poate comanda releele de pe modulul cu relee și senzori prin punerea în HIGH (5V) a pinului digital la care este conectat releul respectiv. Legătura între Arduino și modulul cu relee și senzori, se face printr-o magistrală cu 10 fire, 4 sunt folosite pentru comanda releelor, 5 pentru a primi valori de la ieșirile senzorilor și ultimul este masa (GND). Arduino trebuie să aibă aceeași masă (GND) ca și modulul cu relee și senzori pentru a nu avea valori eronate la ieșirea ADC-ului.

LCD-ul este controlat de către Arduino prin 6 pini digitali, 4 folosiți pentru a trimite date către LCD. Aceștia sunt pinii de la DB4 – DB7 deoarece display-ul funcționează în modul de comunicare cu 4 biți pentru a „salva” 4 pini digitali. Interfața pe 4 biți (modul Nibble): întâi pui biții MSB (4-7) pe bus-ul de 4 biți (D4-D7), apoi setezi modul date (RS=1), apoi un impuls pe semnalul Enable; urmează biții LSB (0-3) pe bus-ul de 4 biți (D4-D7), apoi un impuls pe semnalul Enable. Diferența între modul de comandă pe 8 biți și 4 biți este că în modul de 8 biți se trimit toți cei 8 biți, apoi semnalul de RS și semnalul de Enable, iar în modul de 4 biți se trimit 4 biți apoi Reset și Enable, încă 4 biți apoi Enable. Practic se trimit cei 8 biți de date în două serii de date de câte 4 biți.

3.2.3.2 Realizarea standului

Standul este format din două straturi cu o distanță de 6 cm între ele (Figura 30). Materialele din care sunt făcute diferă, primul strat este din PAL și pe el se află modulul de alimentare a releelor și senzorilor, placa de dezvoltare Arduino UNO și SBC-ul Raspberry PI.

Al doilea strat este din plastic, cu o grosime de 4mm și pe el se află: două prize folosite de alimentatoare, o priză comandată, un bec comandat, un display LCD 2×16, un potentiometru de 10k pentru reglarea contrastului display-ului, senzori de temperatură, luminozitate, umiditate, fum sau gaze inflamabile și mișcare.

Fig. 30 Standul sistemului de automatizare și împărțirea pe straturi

Implemenare software pentru Raspberry PI

Aplicația este organizată în mai multe straturi, cum ar fi partea de interfață (high level) care comunică cu partea care ține de server, care la rândul ei comunică cu partea de hardware (low level). Singurul strat la care are acces utilizatorul este la nivelul de interfață de unde se pot modifica anumiți parametrii. O schemă generală este cea din figura următoare:

Fig. 31 Structura aplicației

Configurarea modulului Raspberry PI

Dispozitivului Raspberry Pi trebuie să i se instaleze sistemul de operare Raspbian. Acesta poate fi downloadat de pe pagina http://www.raspbian.org/RaspbianInstaller. Pentru a fi instalat pe Raspberry Pi avem nevoie de un card SD de minum 4GB (preferabil 8GB sau chiar mai mult) care trebuie formatat FAT32. Munca poate deveni mult mai ușoară dacă se optează pentru folosirea unui program care ne permite automatizarea acestui proces. Acest program se numește Win32DiskImager și poate fi downloadat pe gratis (fiind open-source) de la adresa http://sourceforge.net/projects/win32diskimager/. Programul permite să selectăm folderul unde a fost downloadat Raspbian precum și cardul SD unde dorim să punem sistemul de operare.

Cardul SD cu noul sistem de operare se indroduce în Raspberry Pi iar procesul de instalare va porni automat în momentul în care este alimentat dispozitivul. Înainte de a alimenta sistemul de operare este necesar să avem o tastatură care se poate conecta la unul din porturile USB iar opțional un mouse pentru navigare ușoară. Cu un cablu HDMI se conectează Raspberry Pi-ul la un televizor sau monitor și este alimentat dispozitivul. Procesul de instalare este unul relativ simplu și ar trebui să dureze apoximativ 10-15 min. Singurul lucru de care trebuie să avem grijă este să îi permitem accesul prin SSH.

Fig. 32 Configurarea serverului SSH

SSH este un acronim pentru Secure Shell, fiind un protocol criptografic care ne permite comunicarea securizată cu un server. De asemenea, acesta ne permite conectarea remote și executarea de comenzi remote între un calculator și Rasberry Pi. Serverul SSH va rula automat în momentul în care Raspberry Pi este alimentat și conectat prin portul ethernet la routerul personal. Pentru a ne conecta din rețeaua locală prin acest protocol la Raspberry Pi avem nevoie de un client SSH. Un client popular este programul Putty, disponibil pentru toate sistemele de operare (fiind la rândul său open-source).

Dacă dorim să ne conectăm pe internet de la o locație remote și nu din rețeaua locală trebuie să îi facem port forward la portul 22 și IP-ului alocat de router către Raspberry Pi. Portul 22 este folosit de către procolul SSH. De asemenea, trebuie să facem port forward și la portul 80 utilizat atunci când vine un request de HTTP de la un IP extern. Dacă un IP extern va dori să se conecteze la serverul Raspberry Pi acesta va utiliza acest port 80 iar routerul îl va trimite la acest IP. Procesul de port forward este simplu.

Utilizând browserul preferat trebuie accesată adresa 192.168.1.1, introdus contul și parola setat pentru routerul respectiv, navigat la secțiunea pentru port forwarding și selectat portul si IP-ul care va fi forwardat.

În acest moment partea de configurare a sistemului de operare și conexiunea remote către Raspberry Pi este completă dar mai avem nevoie de programele principale pentru a putea configura Raspberry Pi să se comporte ca un server precum și instalarea programelor de care mai avem nevoie. Toate programele vor fi instalate prin intermediul consolei bash pe care o vom accesa cu programul Putty.

Pentru a avea acces la GUI (Graphical User Interface) vom avea nevoie de un server și un client VNC (Virtual Network Computing). Un server VNC popular este TightVNC (fiind open-source) deși toate serverele VNC au aceeași funcționalitate, de a permite utilizatorilor conexiunea la un server și vizualizarea interfeței. Serverul se poate descărca și instala pe Rasberry Pi utilizând comanda:

sudo apt-get install tightvncserver

Rularea unei sesiuni VNC se va face utilizând comanda :

vncserver

Următorul pas îl constituie instalarea pachetului LAMP (Linux Apache MySQL si PHP) necesar pentru creerea serverului. Instalarea Apache se va realiza utilizând comanda bash:

sudo apt-get install apache2

Instalarea MySQL se va realiza utilizând comanda bash:

sudo apt-get install mysql-client mysql-server

Instalarea PHP se va realiza utilizând comanda bash:

sudo apt-get install php5

Pentru a verifica faptul că totul este instalat corect se poate face o verificare rapidă creând un fișier php în locația /var/www unde se creează o conexiune către baza de date MySQL accesând acest script prin intermediul unui browser la adresa localhost:8080. Spre deosebire de pachetul XAMPP, ( destinat utilizatorilor platfomei Windows ) acest pachet LAMP, în configurația standard pornește serverul Apache automat în momentul în care este alimentat Raspberry Pi și nu trebuie pornit manual.

Rasbian în configurația standard vine preinstalat cu compilatorul pentru limbajul de programare Python precum și un IDE pentru acesta, numit IDLE ( program open-source ). Pentru configurația finală a Rasberry Pi-ului mai avem nevoie doar de încă două aplicații care tot așa se instalează, prin intermediul terminalului bash, acestea fiind Arduino IDE precum și un editor de text pentru debugg-ul codului HTML, CSS, JavaScript etc numit Geany ( program open-source )

Instalarea Arduino IDE-ului se va realiza utilizând comanda bash:

sudo apt-get install arduino

Instalarea editorului Geany se va realiza utilizând comanda bash:

sudo apt-get install geany

Geany este o alternativă excelentă pentru Notepad++ disponibil doar pe platforma Windows (Figura 33). Acesta ocupă puțin, având nevoie de resurse minime deoarece este scris în GTK2+ folosit pentru sisteme minimale cum este Raspberry Pi. Este disponibil pe platfomele Linux, FreeBSD, NetBSD, Solaris Express, Mac OS X si Windows. Suportă majoritatea limbajelor de programare având posibilitatea de:

– syntax highlighting

– lista simbolurilor

– închiderea tag-urilor folosite in HTML si XML

– navigarea codului

– multe tipuri de fișiere suportate

– abilitatea de a compila/executa diverse programe scrise in anumite limbaje, cum ar fi C

Fig. 33 Editorul de text Geany

În acest moment Raspberry Pi este configurat cu toate aplicațiile și setările de care avem nevoie. Înainte de a începe creerea interfeței, ultimul lucru care trebuie făcut este să actualizăm sistemul și toate aplicațiile pentru a avea versiunile cele mai recente. Acest proces este împărțit în două faze .

În prima fază trebuie actualizată lista cu pachete ale sistemului folosind comanda bash:

sudo apt-get update

In faza a II – a se upgradează pachetele cu programe existente pe Raspbian la ultima versiune folosind comanda bash:

sudo apt-get upgrade

Acest lucru este echivalent cu descărcarea ultimei imagini a sistemului de operare Raspbian disponibilă la adresa https://www.raspberrypi.org/downloads/. Înainte să rulezi sudo apt-get upgrade trebuie să verifici dacă ai suficient spațiu liber pe cardul SD pentru a descărca noile pachete de date.

Interfața web

Interfața acestui sistem de automatizare este alcătuită dintr-o pagină HTML cu elemente de design folosind limbajul CSS (Figura 34). Pentru a comunica cu serverul folosim cereri AJAX și scripturi scrise în PHP. Aceasta este alcatuită în 3 sectiuni:

I – Relee

II – Funcționalități

III – Senzori

Fiecare secțiune în parte îndeplinește un anumit rol, dar toate au ca și scop informarea utilizatorului cu anumite valori privind stările senzorilor, starea releelor, ce funcționalități sunt active. Toate secțiunile sunt dependente una de alta comunicând în spatele interfeței.

Fig. 34 Interfața web cu cele trei secțiuni relee – funcționalități – senzori

3.3.2.1 Relee

Secțiunea de relee este alcătuită din 4 relee comandabile utilizănd această interfață. Fiecare releu în parte are câte un status, acesta putând fi ON (pornit) sau OFF (oprit). Aceste relee sunt responsabile pentru cuplarea unui curent de 230V utilizat la o priză, un bec și închiderea unui circuit electric aparținând plăcii electronice a centralei termice sau a unui aparat de aer condiționat.

Statusul este un buton care prin apăsare trece din starea oprit în pornit și vice versa. În momentul în care butonul statusului este apăsat, acesta pornește o cerere AJAX. Fiecare cerere AJAX este responsabilă pentru executarea unui script PHP, care la rândul său execută un script Python prin care se trimite serial o valoare. Această valoare reprezintă o poziție a releului și este interpretată corespunzător de către microcontroler pentru a alimenta releul dorit. Pentru valoarea „49” recepționată pe serial microcontrolerul alimentează priza, pentru valoarea „50” recepționată pe serial microcontrolerul întrerupe alimentarea prizei.

Buton priză ON / OFF :

ajax_ priza _on() -> php_ priza _on() -> python_ priza _on() -> status_ priza _on

ajax_ priza _off() -> php_ priza _off() -> python_ priza _off() -> status_priza_off

Buton bec ON / OFF :

ajax_bec_on() -> php_bec_on() -> python_bec_on() -> status_bec_on

ajax_bec_off() -> php_bec_off() -> python_bec_off() -> status _bec_off

Buton aer condiționat ON / OFF:

ajax_aer_on() -> php_aer_on() -> python_aer_on() -> status_aer_on

ajax_aer_off() -> php_aer_off() -> python_aer_off() -> status_aer_off

Buton centrală termică ON / OFF:

ajax_centrala_on() -> php_centrala _on() -> python_centrala_on() -> status_centrala_on

ajax_ centrala_off() -> php_centrala_off() -> python_centrala_on() -> status_centrala _off

Atunci când priza este în starea ON, scriptul python comandă trimiterea valorii „1” pe serial. Biblioteca „serial” inclusa în scriptul python trimite pe serial codul ASCII al cifrei „1”. La fel se procedează și pentru cazul în care priza este în starea OFF, din scriptul python se trimite valoarea „2” ceea ce înseamnă „50” în cod ASCII. Tabelul cu valorile trimise pe serial și funcționalitățile fiecăreia este urmatorul:

Tabel 2 : Valorile trimise pe interfața serială și interpretarea lor de către uC

3.3.2.2 Funcționalități

Funcționalitatea care pornește centrala termică sau aerul condiționat în funcție de temperatura prestabilită și temperatura reală din locuință are implementat în software un sistem de incompatibilitate între centrala termică și aerul condiționat astfel încât acestea să nu funcționeze amandouă în același timp. Totodata, variațiile mari și bruște de temperatură nu vor fi luate în considerare, deoarece în soft a fost implementată o funcționalitate care nu ia în considerare valori viitoare care sunt cu 10 grade mai mari sau mai mici decât valoarea curentă a temperaturii. Intervalul de protecție este reglabil și a fost implementat deoarece senzorul de temperatură se poate defecta și poate trimite către microcontroler valori eronate, ceea ce înseamnă o funcționare incorectă a sistemului de reglare a temperaturii.

Funcționalitatea care aprinde becul în funcție de senzorul de mișcare ține becul aprins timp de 5 secunde din momentul în care s-a detectat mișcare. Intervalul în care becul stă aprins se poate modifica în soft foarte ușor, dar totodată se poate modifica și felul în care funcționalitatea ține becul aprins: în starea implicită cu perioada de întarziere fixă dacă s-a detectat mișcare becul este aprins timp de 5 secunde apoi stins; în starea cu perioada de întarziere variabilă, dacă în timp ce becul este aprins ca urmare a detectării de mișcare se detectează o altă mișcare, atunci becul va sta aprins 5 secunde din acel moment și în acest mod becul va sta aprins o perioadă de timp variabilă în funcție de mișcare.

Funcționalitatea care aprinde becul în funcție de o valoare de prag a luminozității dată în procente funcționează în felul următor: dacă luminozitatea în cameră se află sub un prag prestabilit (50%) atunci sunt aprinse becurile/becul din cameră după care luminozitatea nu mai este monitorizată de către funcționalitate și becul poate fi oprit numai din interfață folosind funcția de oprire/pornire a becului sau din întrerupătorul manual existent în cameră. Aceasta nu mai monitorizează luminozitatea după aprinderea becului, deoarece va fi o valoare peste 50% și în viitor nu poate ști dacă acea valoare este datorită aprinderii becului sau faptului că afară este zi și o lumină îndeajuns de puternică încât senzorul să detecteze mai mult 50 %.

Funcționalitatea de avertizare în caz de detecție fum sau scurgeri de gaze folosește toate becurile din locuință și display-ul de pe modul ca să avertizeze proprietarul aprinzând intermitent toate becurile la un interval de o secundă și afișând pe display mesajul „Alarmă incendiu !!!”.

3.3.2.3 Senzori

Această secțiune afișeaza valorile unui senzor de termperatură precum și valoarea luminozității din acea încăpere folosind o fotorezistență. Valorile tuturor senzorilor sunt introduse într-o bază de date MySQL folosind un script Python. Aceste valori provin de pe comunicația serială cu placa Arduino unde sunt legați toți acești senzori. Baza de date conține informația prelucrată trimisă de către microcontroler. Placa Arduino are la dispoziție convertoare analog numerice, iar acele valori prelucrate care sunt procesate de către microcontroler ajung în baza de date utilizând comunicația serială. În interfață valorile senzorilor sunt afișate cu ajutorul unui script PHP care interoghează baza de date MySQL.

Partea de server

Aceasta este cea mai importantă parte a aplicației deoarece face legătura între partea grafică, ce observă utilizatorul, și partea fizică, hardware. Este o colecție de scripturi care au fost scrise în diferite limbaje care asigură comunicația cu microcontrolerul. Scriptul esențial care pornește acest proces de legatură se numește auto_run.sh aflat în directorul /hom/pi/bin. Acest script, deși mic în dimensiune îndeplinește câteva funcții foarte importante:

– se apelează de fiecare dată când Raspberry Pi primește curent și bootează în sistemul de operare Raspbian

– alocă drepturi portului USB de a comunica cu sistemul

– pornește un script Python numit insert_data.py care se ocupă de preluarea datelor care se trimit serial de la microcontroler către server și le introduce într-un tabel din baza de date

Toate cererile venite din partea browser-ului de scriere, citire, sau executare, trebuie tratate. Atunci când utilizatorul dorește să pornească un releu, cererea este executată cu ajutorul scriptului php, care se execută pe server. Cererea browserului vine cu un indentificator pentru ca server-ul să știe proveniența sa. Acest identificator este www-data. Serverul trebuie să dea acces de executare al acestor scripturi, iar acest lucru se face utilizând comenzi bash.

Se creează un grup pentru cereri care provin de la www-data ( browser web ). Acest drept de acces trebuie dat tuturor scripturilor inclusiv celor PHP care la rândul sau pornesc scripturile Python . Comanda pentru creerea acestui grup este:

sudo chgrp www-data priza_on.php

Pentru a da drepturi de executare utilizăm comanda bash:

chmod 750 priza_on.php

Pentru a testa că toate fișierele sunt disponibile pentru executare de către o cerere www-data din partea browserului putem folosi comanda:

sudo –u www-data ./priza_on.php

Folderul unde se găsește aplicația este /var/www/RPI. Acesta găzduiește:

– fișierele HTML și CSS pentru creerea ințerfeței

– imaginile și fonturile utilizate în interfață

– fișierele JavaScript cu funcțiile necesare pentru comunicarea cu serverul

– scripturile PHP pentru executarea scripturilor Python

– scripturile Python pentru trimiterea datelor seriale către microcontroler

– folderul Licenta_cpp unde sunt diferite versiuni ale programelor compilate și urcate pe microcontrolerul ATMega328

Baza de date poate fi accesată utilizând aplicația phpmyadmin introducând adresa localhost/RPI/phpmyadmin în browserul preferat. Este o aplicație open-souce scrisă în PHP care are ca scop administrarea bazelor de date MySQL. Phpmyadmin este lăudat pentru documentația excelentă care o are la dispoziție precum și multitudinea de administratori de baze de date care îl preferă fată de alte aplicații pentru administrarea bazelor de date.

O schemă generală a datelor venite din partea hardware, a microcontrolerului ar fi următoarea:

Fig. 35 Comunicația interfeței cu server-ul, a server-ului cu uC și vice versa

3.3.3.1 Implementarea comunicației interfață – server

Aceasta este construită utilizând tag-uri HTML cu elemente de design utilizând CSS. Pagina este conform standardului impus de către W3C ( World Wide Web Consortium ) pentru starndardul HTML 4.01. S-au folosit doar elemente de CSS 1 și au fost la rândul lor validate conform standardului W3C.

În tag-ul <head> sunt prezente 3 tag-uri <script> cu referință către documentele conținând funcții Javascript precum și un tag <link> către documentul conținând elementele de design din CSS. Primul fișier JavaScript intitulat control_relee.js este responsabil pentru controlul releelor utilizând cereri AJAX și apelând scripturi PHP. Al doilea fișier intitulat control_functionalitati.js este responsabil pentru controlul și logica secțiunii de module din interfață. Ultimul tag este cel folosit pentru preluarea elementelor de design definite în CSS.

În secțiunea cu tag-ul <body> toate elementele prezente sunt adunate într-un tag <div> principal care are scopul de a aduna toate celelalte div-uri ale HTML-lui. În acest div intitulat „wrapper” se găsește:

– div-ul „senzori” pentru încarcarea secțiunii cu valorile din baza de date ale senzorilor

– div-ul „relee” responsabil pentru controlul celor 4 relee

– div-ul „functionalitati” pentru controlul celor 4 funcționalități

– div-ul „backgrund” pentru o imagine de fundal a paginii HTML

Controlul releelor se realizează utilizând funcțiile prezente în fișierul JavaScript intitulat intuitiv control_relee.js. Logica acestor funcții este conform următoarei scheme:

Fig. 36 Logica din spatele unui buton ON/OFF din interfață

3.3.3.2 Implementarea comunicației server – microcontroler

Aceasta comunicație între serverul propriu-zis și microcontroler se realizeză printr-o serie de scripturi Python care au ca și scop trimiterea unei valori pe portul serial al Raspberry Pi către Arduino utilizând comunicația serială. Scripturile PHP apelează scripturi Python pentru realizarea comunicației. Din nefericire, aceasta nu este chiar cea mai optimă soluție deoarece este necesară creerea atât de scripturi PHP cât și de scripturi Python. Există librării scrise în totalitate în PHP care pot trimite serial date dar acestea nu funcționează tot timpul și valorile nu sunt trimise uneori corect.

Logica transmisiei de date este următoarea:

Fig. 37 Logica transmisiei comenzilor către microcontroler

Scripturile PHP sunt scurte și trimit o comandă bash către terminal cu o instrucțiune de executare a unui script Python. Pentru fiecare script PHP există unul Python corespondent. Funcția exec() este cea care execută comanda bash pentru executarea scriptului Python.

<?php

exec(„python priza_on.py‟);

?>

Scriptul Python de asemenea, este scurt dar capabil să trimită o valoare pe portul serial al Raspberry Pi. Pentru transmiterea datelor trebuie importată librăria serial.

Conținutul fișierului priza_on.py:

import serial

ser = serial.Serial(„/dev/ttyACM0‟, 9600)

ser.write(„1‟)

Implementare software pentru Arduino

3.4.1 Mediul de dezvoltare Arduino

Mediul integrat de dezvoltare Arduino este destinat scrierii programelor ce pot fi încărcate pe platformele fizice Arduino. Interfața este scrisă în Java și mediul de programare folosește limbaje de programare de tip open source, precum Processing, avr-gcc. Interfața este multiplatformă, putând rula în Windows©, Mac OS X© și Linux. Programul poate fi obținut atât ca executabil specific platformei de lucru pe care o aveți, dar și sub formă de cod sursă pe care îl puteți compila conform condițiilor specifice pe care le aveți. După încărcarea programului propriu-zis pe placa de dezvoltare, ARDUINO va efectua instrucțiunile date și va interacționa cu mediul. Arduino IDE numește aceste programe “Sketches” (schițe).

Ultima versiune stabilă a programului este ARDUINO 1.6.4 și poate fi descarcată gratuit de pe pagina producatorului http://www.arduino.cc/ din secțiunea „Download”.

După ce s-au instalat drivere-ele, următorul pas este să programezi placa Arduino. Se rulează programul "arduino", din mediul de dezvoltare care tocmai a fost descărcat. Arduino se conectează la PC prin intermediul unui port serial. Primul pas pe care îl avem de facut este să determinăm acest port. Cea mai simplă cale este să conectăm placa, așteptăm circa 30 de secunde – 1 minut, ca sa fim siguri că a fost detectată de PC, iar apoi deschidem meniul "Tools -> Serial Port". Ar trebui să vedem una sau mai multe intrări. Următorul pas este selectarea tipului de placă cu care lucrăm. Din meniul "Tools -> Board", selectăm tipul de placă cu care lucrăm (Arduino Uno, Leonardo, Mega, etc).

Orice program Arduino are două secțiuni. Secțiunea "setup", care este rulată doar o singură dată, atunci cand placa este alimentată (sau este apăsat butonul "Reset"), și secțiunea "loop", care este rulată în ciclu, atât timp cât este alimentată placa. Exemplu:

void setup() {

//codul scris aici rulează o singură dată

}

void loop() {

//codul scris aici rulează tot timpul

}

3.4.2 Schema logică a programului

Fig. 38 Schema logică a programului rezident în microcontrolerul Atmel

3.4.3 Explicarea schemei logice

Blocul de inițializare se execută o singură dată, la alimentarea plăcii Arduino, sau imediat dupa ce butonul de reset de pe placa Arduino a fost apăsat. Codul care se află în acest bloc este următorul:

void setup() {

// ***** Pini analogici folositi de senzori *****

pinMode(A0, INPUT); // senzor temperatură

pinMode(A1, INPUT); // senzor luminozitate

pinMode(A2, INPUT); // senzor umiditate

pinMode(A3, INPUT); // senzor fum și gaze inflamabile

pinMode(A4, INPUT); // senzor de mișcare

// ***** Pini digitali folosiți de LCD 2×16 *****

pinMode(2, OUTPUT);

pinMode(3, OUTPUT);

pinMode(4, OUTPUT);

pinMode(5, OUTPUT);

pinMode(11, OUTPUT);

pinMode(12, OUTPUT);

// ***** Pini digitali folosiți pentru comanda releelor *****

pinMode(6, OUTPUT); // Priza

pinMode(7, OUTPUT); // Bec

pinMode(8, OUTPUT); // Centrala termica

pinMode(9, OUTPUT); // Aer conditionat

// ***** Setări adiționale *****

Serial.begin(9600);

lcd.begin(16, 2);

wait_for_pi();

mesaj_welcome();

}

Aici sunt declarate stările pinilor, de intrare sau de ieșire. Pinii folosiți de senzori sunt pini analogici și sunt declarați ca și pini de intrare. Pinii folosiți pentru display și comanda releelor sunt declarați ca și pini de ieșire. Tot în acest bloc este pornită comunicația serială cu un baudrate de 9600 și display-ul LCD cu 2 rânduri a câte 16 caractere. La sfârșitul blocului de inițializare se afișează pe display un mesaj de bun venit.

Blocul de citire și prelucrare a valorilor primite de la senzori preia valorile de la ieșirile senzorilor și le prelucrează după anumite formule specifice fiecărui senzor. Aceste formule de calcul sunt disponibile în foaia de catalog a fiecărui senzor. Pe langă formulele de calcul se pot consulta și graficele valorilor de ieșire în funcție de anumiți parametri care pot influența senzorul respectiv.

Blocul care trimite valorile prelucrate ale senzorilor către Raspberry PI trimite o dată la 30 de secunde câte un cadru de cinci date separate între ele prin caracterul „*”. Intervalul la care se trimit aceste date se poate modifica ușor prin simpla înlocuire în instrucțiunea if(curent_time – previous_time > 30000) a valorii 30000 (30s).

Codul acestui bloc este următorul:

curent_time = millis();

if(curent_time – previous_time > 30000)

{

Serial.print(tempCelsius);

Serial.print("*");

Serial.print(lightIntensity);

Serial.print("*");

Serial.print(umiditateProcente);

Serial.print("*");

Serial.print(gaz_detect);

Serial.print("*");

Serial.println(miscare_detect);

previous_time = millis();

}

Blocul care verifică dacă vin date pe interfața serială este implementat în felul următor:

if(Serial.available() > 0)

{

serial_r = Serial.read();

if(serial_r == 49) priza_on_off(1);

if(serial_r == 50) priza_on_off(0);

if(serial_r == 51) bec_on_off(1);

if(serial_r == 52) bec_on_off(0);

if(serial_r == 53) AC_on_off(1);

if(serial_r == 54) AC_on_off(0);

if(serial_r == 55) CT_on_off(1);

if(serial_r == 56) CT_on_off(0); }

…………………………………………………..

Acesta verifică dacă vin date de la Raspberry PI, dacă da, se salvează acele date într-o variabilă „serial_r” prin comanda „Serial.read()”. Dacă ceea ce este salvat în serial_r este 49 atunci se apelează funcția care alimentează priza cu valoarea 1 ca și parametru. Atunci când funcția „priza_on_off()” este apelată cu valoarea 1 ca și parametru, aceasta pune în 5V pinul la care este conectat releul prizei și astfel priza este alimentată, și implicit consumatorul care se află alimentat de la ea în acel moment. La fel se întâmplă dacă valoarea stocată în serial_r este 50, se apelează funcția „priza_on_off()” cu valoarea 0 ca și parametru și aceasta va pune 0V pe pinul la care este conectat releul prizei.

În bucata de cod de mai sus sunt prezentate doar 8 cazuri din totalul de 16 cazuri existente în această funcție. Celelalte 8 se referă la funcționalitățile implementate și anume:

pornirea / oprirea aerului condiționat sau a centralei termice în funcție de temperatura setată implicit și de cea ambientală

aprinderea becului în funcție de senzorul de luminozitate

aprinderea becului în funcție de senzorul de mișcare

pornirea sau oprirea funcției panică.

Similar Posts