SISTEM AUTOMATIZAT DE GESTIUNE ȘI CONTROL AL UNEI ÎNCĂPERI [305197]

UNIVERSITATEA “LUCIAN BLAGA” DIN SIBIU

FACULTATEA DE INGINERIE

DEPARTAMENTUL DE CALCULATOARE ȘI INGINERIE ELECTRICĂ

PROIECT DE DIPLOMĂ

Conducător științific: Prof. dr. ing. Florea Adrian

Absolvent: [anonimizat]: Electronică Aplicată

Sibiu, 2020 –

UNIVERSITATEA “LUCIAN BLAGA” DIN SIBIU

FACULTATEA DE INGINERIE

DEPARTAMENTUL DE CALCULATOARE ȘI INGINERIE ELECTRICĂ

SISTEM AUTOMATIZAT DE GESTIUNE ȘI CONTROL AL UNEI ÎNCĂPERI

Conducător științific: Prof. dr. ing. Florea Adrian

Absolvent: [anonimizat]: Electronică Aplicată

Capitolul 1: Introducere

Casă inteligentă. [anonimizat] a [anonimizat]-se în toate activitățile de zi cu zi. Dezvoltarea rapidă a resurselor hardware și software din domeniul tehnologiei informației are meritul de a oferi o comunicare și un acces mult mai rapid la toate categoriile de informații. [anonimizat].

Tehnologia care stă la baza automatizării locuințelor poartă numele de domotică (din latinescul „domus”, care înseamnă “acasă”) și a suferit o [anonimizat], reușind astfel să asigure procese tehnice fără intervenția directă a omului.

Primele concepte de automatizare a casei au apărut odată cu introducerea tehnologiei care combină cablurile electrice cu semnalele wireless. [anonimizat].

[anonimizat], [anonimizat] a trăi. [anonimizat], toate acestea s-au reunit sub denumirea de „casă inteligentă".

O casă inteligentă reprezintă o configurație modernă a locuinței în care aparatele și dispozitivele pot fi controlate automat de la distanță prin intermediul unei conexiuni la internet cu ajutorul unui dispozitiv mobil sau alt dispozitiv din rețea. Dispozitivele dintr-o casă inteligentă sunt interconectate prin internet și permit utilizatorului să controleze diverse funcții precum: temperatură, iluminat, accesul de securitate la casă.

Principalele motive care stau la baza creșterii utilizării tehnologiei inteligente pentru o casă sunt: confortul, comoditatea, [anonimizat].

Scopul și obiectivele proiectului

Scopul acestui proiect este acela de a crea un sistem automatizat în care utilizatorul monitorizează și controlează diferite echipamente ale unei încăperi. [anonimizat], astfel încât să poată fi accesat de la un browser de către toți utilizatorii din aceeași rețea. [anonimizat], oferind astfel confortul proprietarilor și reducând consumul de energie și costuri.

Obiectivele lucrării sunt:

Indicarea temperaturii;

Indicarea umidității;

Verificarea calității aerului;

Controlul luminii;

Deschiderea/închiderea ferestrei;

Colectarea parametrilor cu ajutorul senzorilor;

Utilizarea parametrilor și redirecționarea acestora pe platforma web.

Am ales controlul și monitorizarea deoarece:

este cel mai important factor într-o locuință modernă

este un sistem accesibil de pe orice tip de dispozitiv cu antenă Wi-Fi

pune la dispoziție o gamă largă de date despre locuință, de la temperatură, umiditate cât și eventuale probleme de incendiu sau scăpări de gaz metan

oferă utilizatorului o soluție optimă cu un cost minim.

Capitolul 2: Studiu bibliografic

Provocări privind casele inteligente

Automatizarea sau tehnologia de economisire a forței de muncă este tehnologia prin care se realizează un proces sau o procedură cu asistență umană minimă. Automatizarea sau controlul automat constă în utilizarea diferitelor sisteme de control pentru echipamente de operare, cum ar fi utilaje, procese în fabrici, cazane și cuptoare de tratare a căldurii, pornirea rețelelor de telefonie, direcția și stabilizarea navelor, aeronavelor și a altor aplicații și vehicule cu minimum sau intervenția umană redusă.

Automatizarea a fost realizată prin diferite mijloace, inclusiv dispozitive mecanice, hidraulice, pneumatice, electrice, electronice și computere, de obicei în combinație. Sistemele complicate, cum ar fi fabricile moderne, avioanele și navele folosesc de obicei toate aceste tehnici combinate. Avantajul automatizării include economii de forță de muncă, economii în costuri de energie electrică, economii în costuri materiale și îmbunătățiri la nivelul calității și al preciziei.

Automatizarea unei locuințe presupune utilizarea unor instrumente specifice tehnologiei informației și comunicației pentru a monitoriza mediul, pentru a controla dispozitivele electronice precum și realizarea automată a unor activități frecvent efectuate în viața de zi cu zi. De exemplu, se pot controla obiectele din jurul casei printr-o simplă apăsare a unui buton sau a unei comenzi vocale. Pentru a realiza acest lucru, este necesară o conexiune la internet și o mai bună securitate în ceea ce privește protecția datelor. Tehnologia caselor inteligente reprezintă unul dintre cele mai importante domenii al conceptului Internet of Things (IoT) care conectează echipamentele electronice cu aparatura de rețea. Termenul Internet of Things se referă în general la scenarii în care conectivitatea rețelei și capacitatea de calcul se extind la obiecte, senzori și obiecte de zi cu zi, permițând dispozitivelor să genereze, să facă schimb și să consume date cu o intervenție umană minimă.

Una dintre principalele probleme cu care se confruntă omenirea în zilele noastre constă în micșorarea consumului de energie și menținerea unui mediu ecologic. Pentru acestea, există două soluții:

• Găsirea unor surse alternative de energie care să le înlocuiască pe cele existente

• Reducerea semnificativă a consumului de energie pentru dispozitivele electronice

O casă inteligentă conține mai multe sisteme încorporate:

Fig.1: Componentele unei case inteligente

Sistemul de administrare al energiei conține la rândul său două componente:

componenta termică

componenta electrică

Sistemul pentru confort ambiental este format din:

ecran LCD

notificări vocale

Sistemele de urgență includ:

senzori de fum

senzori de gaz

butoane de urgență

sistem de notificare GSM

Sistemul de supraveghere și securitate conține următoarele:

modul GSM

senzori de proximitate

senzori de prezență

cameră video

Alte facilități posibile:

Televizoare inteligente care se conectează la internet pentru a accesa aplicații la cerere (pornirea unei melodii/a unui video) pe baza unor comenzi vocale;

Sisteme de monitorizare a gospodăriei care să permită oprirea aparatelor la detectarea unei supratensiuni electrice;

Sisteme de monitorizare a gospodăriei care să permită oprirea apei la detectarea unui nivel mult prea ridicat care ar duce la o posibilă inundație;

Aparate de cafea inteligente care să pregătească cafeaua la pornirea unei alarme;

Frigidere inteligente care organizează liste de cumpărături și urmăresc datele de expirare ale produselor stocate, putând să atenționeze locatarul la depășirea termenului limită;

Mașini de spălat/uscat haine care să pornească la un moment de timp stabilit de utilizator;

Alimentatoare pentru animale de companie care să asigure hrană la intervalele de timp cerute de proprietar;

Deschiderea/închiderea ușii prin recunoașterea vocii;

Deschiderea/închiderea automată/manuală sau de la distanță (cu ajutorul unei aplicații) a geamurilor/ușilor;

Programarea termostatului de la distanță pentru a menține o temperatură dorită;

Automatizarea sistemului de iluminare în funcție de un anumit program stabilit;

Setarea unui sistem de alarmare și securitate automat/manual/de la distanță atunci când proprietarul nu se afla acasă;

Programarea sistemului de irigare a grădinii pentru a porni/opri în funcție de mediu (vânt, precipitații, umiditate);

Monitorizarea temperaturii, umidității, calității aerului și a sistemului de securitate;

Capitolul 3: Descrierea tehnologiilor folosite

Hardware

Arduino Uno

Arduino reprezintă una dintre cele mai utilizate platforme de procesare open-source care îmbină atât partea de hardware, cât și cea de software pentru a programa sisteme de dezvoltare. Avantajul principal al folosirii acesteia este ușurința de combinare a resurselor necesare creării unui sistem cât mai complex (senzori, led-uri, servomotoare, LCD-uri, etc.).

Arduino Uno este o versiune derivată de la Arduino, care are la bază microcontrolerul ATmega328P, dispune de o arhitectură pe 8 biți și se alimentează la o tensiune de 5V. Este echipată cu seturi de pini de intrare/ieșire digitali și analogici care se pot interfața cu diferite plăci de expansiune (shield-uri) și alte circuite.

Fig.2.1 Placă compatibilă Arduino Uno

Specificații tehnice:

Microcontroler: Atmega328P

Tensiune de alimentare: 5V

Tensiune de intrare (recomandat): 7-12V

Tensiune de intrare (limite): 6-20V

Pini digitali I/O: 14 (dintre care 6 oferă ieșire PWM)

Pini de intrare analogică: 6

Curent continuu pini I/O: 40 mA

Curent continuu pini I/O (3.3V): 50 mA

Memorie flash: 32 KB (din care 0,5KB este utilizată de către bootloader – programul care asigură comunicația cu calculatorul, și are rolul de a realiza transferul și programarea software-ului de la calculator).

SRAM: 2 KB

EEPROM: 1 KB

Viteză clock: 16MHz

Alimentare:

Arduino Uno poate fi alimentată prin intermediul unui cablu USB sau printr-o sursă de alimentare externă.

Sursa externă poate fi un adaptor AC-DC conectat prin atașarea unui stecher în mufa de alimentare a plăcuței sau pur și simplu o baterie.

Se recomandă ca sursa externă să aibă limitele cuprinse între 6 și 20V, însă voltajul optim este de 7V până la 12V. Dacă valoarea tensiunii de alimentare este mai mică de 5V plăcuța poate devini instabilă, iar dacă se folosesc mai mult de 12V, plăcuța se poate distruge.

Intrări și ieșiri:

În funcție de cerințe, fiecare pin poate fi configurat ca intrare sau ca ieșire cu ajutorul funcțiilor oferite de program: pinMode(), digitalWrite(), digitalRead().

Pinii produc sau primesc maxim 20mA și conțin un rezistor de circa 20-50 kOhm.

Microcontroler-ul ATMega328P

Un microcontroler poate fi considerat un calculator pe un singur chip. Acesta include o serie de componente, dintre care cele mai importante sunt: CPU (conține unitatea logică si aritmetică-ALU, memoria de date, memoria de program, oscilatorul, setul de instrucțiuni, etc.), periferice (porturi I/O, timere, comparatoare, referințe de tensiune, interfețe seriale, interfețe paralele, etc.), funcții speciale (watchdog timer, sleep, reset, etc.).

Microcontroler-ele sunt utilizate în diferite domenii, precum:

Industria automobilelor

Industria telefoanelor mobile

Aviație și industria aerospațială

Robotică

Echipamente radio și de telecomunicații

Electrocasnice

Instrumente medicale

Sisteme de siguranță

Fig.2.3 Microcontroler-ul Atmega328P

Specificații tehnice:

Arhitectură RISC avansată:

131 instrucțiuni puternice de execuție.

32 x 8 registre funcționale.

Operații complet statice.

Până la 20 MIPS la 20MHz.

Segmente de memorie de mare anduranță non-volatile:

32 KB de memorie Flash poate fi rescrisă pentru stocarea programelor.

1 KB de memorie RAM.

2 KB de memorie EEPROM.

Cicluri de scriere/ștergere: 10.000 Flash sau 100.000 EEPROM.

Păstrarea datelor:

20 de ani la temperaturi de 85 grade Celsius sau 100 de ani la temperaturi de 25 grade Celsius.

Caracteristici periferice:

Două numărătoare/temporizatoare de 8 biți.

Patru numărătoare/temporizatoare de 16 biți.

Un cronometru timp real cu oscilator separat.

6 canale PWM de 10 biți.

2 interfețe seriale de tip Master/Slave.

Un timer de tip watchdog programabil cu oscilator separat.

Interfață serială programabilă USART.

Un comparator analogic.

Oscilator intern calibrat.

Un cronometru cu oscilator intern.

Gama de temperatură:

de la 40 de grade Celsius pana la +105 de grade Celsius.

Consum de energie ultra-redus:

Mod activ: 1MHz, 1.8V,25 de grade Celsius.

Mod inactiv: 0.1uA la 1.8V.

Gradul de viteză:

de la 0 – 4MHz la 1.8V – 5.5V.

de la 0 – 12MHz la 2.7V – 5.5V.

de la 0 – 20MHz la 4,5V-5,5V.

Arduino Ethernet Shield

Arduino și plăcuțele Arduino compatibile folosesc plăcuțe de expansiune cu circuite imprimate numite shield-uri, care se conectează la pinii disponibili pe Arduino. Shield-urile au capacități de a controla motoare, interfețe Ethernet, LCD-uri, etc.

Arduino Ethernet Shield este un shield care oferă o conexiune la internet a plăcii de dezvoltare Arduino. Acest shield se bazează pe un chip W5100 Ethernet Wiznet. Cipul W5100 poate fi conectat la o rețea (IP) cu capabilități TCP și UDP. El poate suporta până la patru conexiuni socket identice. Pe lângă LED-urile informaționale, scutul prezintă și un conector de card MicroSD.

Specificații tehnice:

Scutul conține un număr de LED-uri informaționale:
• PWR: indică faptul că placa și scutul sunt alimentate;
• LINK: indică prezența unei legături de rețea și clipește atunci când scutul transmite sau primește date;
• FULLD: indică faptul că există o conexiunea la rețea de tip full duplex;
• 100M: indică prezența unei conexiuni la rețea de 100 Mbps;
• RX: se aprinde intermitent atunci când scutul primește date;
• TX: se aprinde intermitent atunci când scutul trimite date;
• COLL: clipește atunci când sunt detectate coliziuni de rețea.

Fig.2.4 Arduino Ethernet Shield

Senzorii folosiți

Un senzor este o componentă capabilă să detecteze o schimbare în mediul său și de a converti această schimbare într-un semnal electric. Semnalul returnat de un senzor poate fi binar, o valoare într-un interval, precum: temperatură, lumină, vânt, umiditate, precipitații, poziție, accelerație.

Senzorii sunt utilizați în obiectele de zi cu zi, cum ar fi butoanele de ridicare sensibile la atingere (senzorul tactil) și lămpile care se întunecă sau se luminează mai tare prin atingerea bazei. Deoarece senzorii funcționează în timp real, ei pot produce cantități mari de informații.

Sensibilitatea unui senzor indică cât de mult se schimbă ieșirea senzorului când se modifică cantitatea de intrare. De exemplu, dacă mercurul din termometre se deplasează 1 cm când temperatura se modifică cu 1 ° C, sensibilitatea este de 1 cm / ° C (aceasta fiind panta Dy/Dx care presupune o caracteristică liniară).

Modul senzor gaz MQ-2

Acest modul (MQ2) este folosit pentru detectarea scurgerilor de gaz. Principalele gaze pe care le detectează senzorul sunt: GPL, alcool, metan, propan și fum. Datorită sensibilității ridicate (poate fi reglată prin potențiometru) și a timpului de răspuns rapid, măsurarea se poate efectua cu ușurință. Senzorul prezintă în structura sa un comparator cu ajutorul căruia se poate determina dacă nivelul de concentrație a depășit un anumit prag. Citirea datelor se poate efectua atât în mod analogic cât și digital. Tensiunea de ieșire a senzorului crește atunci când concentrația de gaz crește.

Caracteristici tehnice:

Tensiunea de operare: 5V;

Curent: 150mA;

Rezistență heater: 33R;

Temperatură de lucru: -20oC – 50oC;

Ieșire digitală sau analogică.

Fig.3.1 Senzor MQ-2

Diagrama conexiunii:

Fig.3.1.1 Diagrama conexiunii senzorului MQ-2

Modul de traducere se realizează prin următorul cod:

Senzor de mișcare PIR

Un senzor infraroșu pasiv (senzor PIR) este un senzor electronic care măsoară lumina infraroșie (IR) ce radiază de la obiecte din câmpul său vizual. Senzorii PIR detectează mișcarea, dar nu oferă informații despre cine sau ce s-a mișcat. Termenul pasiv se referă la faptul că dispozitivele PIR nu radiază energie în scopuri de detectare, ci funcționează în întregime prin detectarea radiațiilor infraroșii (căldură radiantă) emise sau reflectate din obiecte. Modulul este acoperit de un capac format din lentile Fresnel ce concentrează semnalele infraroșii pe senzorul piroelectric.

Un senzor PIR poate detecta modificări ale cantității de radiații infraroșii care variază în funcție de temperatura și caracteristicile suprafeței obiectelor din fața senzorului. Atunci când un corp ce emite energie termică într-o formă de radiație infraroșie, de exemplu corpul uman sau un animal, intră în raza senzorului PIR, acesta va detecta o mișcare.

Caracteristici tehnice:

Tensiune de operare: 5V – 20V;

Curent: 65mA;

Fig.3.2 Senzor PIR

Diagrama conexiunii:

Fig.3.2.2 Diagrama conexiunii senzorului PIR

Modul de traducere se realizează prin următorul cod:

Senzor temperatură și umiditate DHT11

DHT11 este un senzor de umiditate și temperatură de înaltă performanță.

Temperatura este măsurată de un NTC (Negative Temperature Coefficient), iar umiditatea este măsurată cu ajutorul unui senzor capacitiv. Ieșirea oferită este sub formă de semnal digital. Acest senzor este compatibil cu cele mai populare plăcuțe de dezvoltare, precum Arduino.

Senzorul poate măsura umiditatea în intervalul 20% – 90% cu o precizie de 5% și temperatura în intervalul 0 – 50 ˚C cu o precizie de 2 ˚C.

Caracteristici tehnice:

Tensiune de alimentare: 3.3V – 5V;

Curent: 2.5mA (maxim);

Gama de măsurare a umidității: 20% – 95% RH;

Gama de măsurare a temperaturii: 0 oC – 60 °C;

Fig.3.3 Senzor temperatură DHT11

Diagrama conexiunii:

Fig.3.3.1 Diagrama conexiunii senzorului DHT11

Modul de traducere se realizează prin următorul cod:

Senzor temperatură și umiditate DHT22

DHT22 este un senzor digital de temperatură și umiditate care măsoară temperatura cu ajutorul unui termistor și umiditatea cu un senzor capacitiv. Oferă date în format digital și se conectează la plăci de dezvoltare cu ușurință.

Caracteristici tehnice:

Intervalul de măsurare a umidității: 0 – 100 % cu 2-5% acuratețe;

Intervalul de măsurare a temperaturii: -40°C – 80 °C ± 0.5 °C acuratețe;

Tensiune de lucru: 3-5V DC;

Consum: 2.5mA max (când se procesează datele).

Fig.3.4 Senzor temperatură DHT22

Diagrama conexiunii:

Fig.3.4.1 Diagrama conexiunii senzorului DHT22

Modul de traducere se realizează prin următorul cod:

Modul senzor lumină

Senzorul de lumină este o componentă care sesizează nivelul de iluminare al mediului.

Nivelul de iluminare variază liniar în intervalul [1,1024]. Acest modul prezintă un fotorezistor

(componentă pasivă căreia îi scade rezistența odată cu creșterea intensității luminii incidente), un potențiometru cu ajutorul căruia se reglează luminozitatea și un comparator care detectează dacă lumina a depașit un anumit prag. Modulul prezintă două led-uri, unul pentru alimentare și celălalt pentru output-ul de la comparator. În această lucrare, acest modul cu fotorezistor este utilizat pentru detectarea prezenței luminii.

Caracteristici tehnice:

Tensiune de alimentare: 3.3V – 5V;

Curent: 15mA;

Potențiometru pentru reglarea tensiunii de referință.

Fig.3.5 Senzor lumină

Diagrama conexiunii:

Fig.3.5.1 Diagrama conexiunii senzorului de lumină

Modul de traducere se realizează prin următorul cod:

Servo Motor 9G Micro

Servomotorul este un element component al unui sistem care funcțional implică poziții relative reglabile între anumite elemente componente ale sale. Acest servomotor este proiectat special pentru aplicații de mică putere. Controlul servomotorului se realizează cu ajutorul unui semnal de tip PWM (Pulse Width Modulation).

Caracteristici tehnice:

Tensiune de alimentare: 4.8V – 6V;

Frecvență PWM: 50Hz (conform datasheet-ului anexat);

Temperatură de funcționare: -30° C – +60° C.

Fig.3.6 Servo Motor 9G Micro

Diagrama conexiunii:

Fig.3.6.1 Diagrama conexiunii servomotorului

Modul de traducere se realizează prin următorul cod:

Adiționale

LED

LED-ul este o diodă ce emite lumină când este activată. Dioda este formată dintr-un material semiconductor dopat cu impurități pentru a crea o joncțiune de tip PN. Modul de funcționare al LED-ului se bazează pe principiul electro-luminiscent, pentru a transforma energia electrică în energie luminoasă.

Fig.3.7 LED

Led-ul poate fi conectat la o plăcuță Arduino Uno astfel:

Pinul de SIGNAL se conectează la un pin digital

Pinul de GND se conectează la pinul GND

Diagrama conexiunii:

Fig.3.7.1: Diagrama conexiunii LED-ului

Rezistență 220 Ohm

Rezistorul este o componentă din circuitele electrice și electronice, fiind caracterizat de un parametru numit rezistență electrică, exprimată în ohmi. Rezistorul are două terminale și conform legii lui Ohm, curentul electric care curge prin acesta este proporțional cu tensiunea aplicată pe terminalele lui. Acesta s-a folosit pentru a limita curentul prin LED-uri.

Fig.3.8 Rezistor

Buzzer-ul piezoelectric

Pentru a semnala sonor situațiile de avarie am folosit buzzer-ul piezoelectric.

Acesta este un dispozitiv ce este capabil să creeze unde sonore atunci când primește un semnal. Ca și aplicații tipice un buzzer se găsește în dispozitive de alarmă, timere etc.

Un element piezoelectric este format dintr-un un circuit electronic oscilant (variază repetitiv), un amplificator și un difuzor piezoelectric.

Buzzer-ul poate fi de doua tipuri:

Activ

Pasiv

Spre deosebire de buzzer-ul pasiv care necesită un semnal oscilant (curent alternativ) pentru a produce un sunet, buzzer-ul activ este capabil de acest lucru prin simpla conexiune la microcontroler și aplicare de tensiune (curent continuu).

Conexiuni hardware:

Buzzer-ul activ poate fi conectat la plăcuța Arduino prin următorii pini:

Pinul SIGNAL se conectează la un pin digital

Pinul GND se conectează la pinul GND

Specificații:

Tensiune de alimentare: 3.3V – 5V;

Curentul maxim: 30mA;

Intensitatea minimă sonoră produsă la o distanță de 10 cm: 85 dB;

Temperatura de operare: -20 șC – 45 șC.

Fig.3.9 Buzzer

Diagrama conexiunii:

Fig.3.9.1 Diagrama conexiunii buzzer-ului

Software

Arduino IDE

Arduino reprezintă atât o platformă cât și un sistem de dezvoltare. Pentru programare, se utilizează un mediu de dezvoltare integrat (IDE), care asigură suport pentru limbajul C și C++.

Programele scrise în Arduino IDE poartă numele de „sketch” și au extensia .ino. Un sketch obișnuit este compus din două funcții legate de funcția main (), într-un document executabil:

Setup(): se utilizează pentru a inițializa variabilele și rulează doar la începutul programului.

Loop(): se apelează în mod repetat până când se întrerupe alimentarea plăcuței.

Un exemplu de program simplu pentru Arduino ce aprinde un LED este următorul:

Fig.4 Interfața programului Arduino IDE

Așadar, interfața programului Arduino IDE este destul de simplă, însă permite o navigare ușoară și dispune de o structură foarte bine organizată.

Butonul de Upload-are a codului: utilizat pentru a încărca codul realizat pe microcontroler.

Fereastra de scriere: locul unde se plasează codul.

Fereastra de verificare sau de informare: indică statusul comenzilor date și prezintă eventualele erori.

Funcții principale

Arduino IDE dispune de o serie de funcții pentru a ușura munca programatorilor:

pinMode();

digitalRead();

digitalWrite();

analogRead();

analogWrite();

serial.begin();

servo.attach();

servo.write();

pulseIn();

serial.readString();

Biblioteci:

Bibliotecile Arduino sunt create cu scopul de a oferi utilizatorului un plus în ușurința programelor scrise. Acestea vin de obicei preinstalate cu IDE, dar programatorul are posibilitatea de a crea sau de a downloada altele noi. Ele sunt accesibile prin folosirea opțiunii “Import Library” din interfața aplicației Arduino IDE.

Exemple de biblioteci:

#include <Servo.h>

#include <SPI.h>

#include <Ethernet.h>

#include <DHT.h>

HTML

Hypertext Markup Language (HTML) este limbajul de marcare pentru documentele concepute pentru a fi afișate într-un browser web. Aceasta este limba implicită utilizată astăzi pentru a crea pagini web și se poate utiliza împreuna cu tehnologii precum Cascading Style Sheets (CSS) și limbaje de script precum JavaScript. Cele mai multe pagini web conțin pe lângă codul HTML, și fragmente JavaScript (pași de browser), PHP (rulează pe server), baza de date (pentru stocarea informațiilor, cum ar fi numele de utilizator și parola), CSS, etc.

Acest limbaj de marcare este caracterizat prin elementale sale, denumite etichete (tag-uri). Crearea unui fișier HTML este foarte simplă, putând fi făcută cu ajutorul oricarui editor de text, de exemplu Notepad++.

Orice fișier HTML ar trebui sa înceapă cu declarația <!DOCTYPE>, care spune browser-ul ce versiunea de HTML este folosită. Următorul tag este <html>…</html>, tag-ul care le cuprinde pe toate celelalte și care spune browser-ului că documentul curent este de tip HTML. Urmează elementul <head>…</head>, care adaugă informații despre documentul HTML, cum ar fi titlu (prin tag-ul <title>), cuvinte cheie, detalii despre autor (folosind tag-ul <meta>, care ajută la controlarea modului în care motoarele de căutare indexează site-ul) și adaugă, de asemenea, fișiere externe utilizând tag-ul <link>.

Zona care va fi afișată în browser este delimitată de <body>…</body>. Aceasta cuprinde toate elementele fișierului HTML: imagini, câmpuri, text, liste, etc.

În exemplul următor, un document HTML este afișat cu ușurință, folosindu-se tag-urile de baza:

<!DOCTYPE html>

<html>

<head>

<title>Titulu</title>

</head>

<body>

<p>Prima mea pagina!</p>

</body>

</html>

CSS

CSS (Cascading Style Sheets = foi de stil în cascadă) este un limbaj de stilizare al elementelor html.

Utilizând CSS se poate formata orice element al unei pagini web, de la culori, margini și imagini de fundal la poziționarea elementelor în pagină, acest lucru realizându-se prin proprietăți. CSS are o sintaxă simplă, proprietățile fiind specificate prin cuvinte cheie din limba engleză: fond, font-size, text-align, margin, padding, float, height, border, background, etc.

Aplicarea foilor de stil în cascadă asupra codului HTML se poate face în mai multe moduri, putându-se vorbi de:

Stiluri interne – folosite când se dorește utilizarea acelorași stiluri pentru mai multe tag-uri HTML de același tip din documentul HTML curent.

Stiluri externe – folosite pentru a specifica într-un fișier extern cu extensia “css” toate proprietățile și stilurile pentru diverse stiluri.

Stiluri în linie – se definesc chiar în codul HTML, în elementul care se dorește a fi stilizat. Pentru adăugarea unui stil intern la un element se folosește atributul “style“ urmat de proprietăți și valori.

CSS se poate adăuga direct în interiorul tag-urilor HTML prin atributul “style”:

<p style=” font-size: 13 px;” > Paragraf </p>, acesta fiind numit CSS inline.

Avantajele folosirii CSS:

documentele HTML care folosesc foi de stil pot avea dimensiuni mai mici;

site-urile sunt mai ușor de menținut prin folosirea unui set comun de foi de stil.

instrucțiunile de formatare se separă de structura documentului HTML;

Ajax

Ajax (Asynchronous JavaScript and XML) este un set de tehnici de programare web care

utilizează mai multe tehnologii pentru a crea aplicații web asincrone. Cu Ajax, aplicațiile web pot trimite și prelua date de pe server în mod asincron (în fundal) fără a interfera cu afișajul și cu comportamentul unei pagini existente. Prin separarea stratului de date de interacțiune de la stratul de prezentare, Ajax permite paginilor web și aplicației web mai largi să modifice conținutul dinamic fără a fi nevoie de reîncărcarea întregii pagini.

Termenul Ajax 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 pentru transferarea datelor între server și client.

O demonstrație de utilizare a tehnicii de programare Ajax este cererea datei curente prin apăsarea unui buton:

<!DOCTYPE html>

<html>

<body>

<h2>The XMLHttpRequest Object</h2>

<button type=”button” onclick=”loadDoc()”>Cerere</button>

<p>Da click pentru a vedea cum se schimbă ora în timp real.</p>

<p id=”demo”></p>

<script>

function loadDoc() {

var xhttp = new XMLHttpRequest();

xhttp.onreadystatechange=function() {

if (this.readyState == 4 && this.status == 200) {

document.getElementById(“demo”).innerHTML = this.responseText;

}

};

xhttp.open(“GET”, “demo_get.asp?t=” + Math.random(), true);

xhttp.send();

}

</script>

</body>

</html>

Limbajul JavaScript

Pentru a se construi interfețe intuitive și sofisticate este necesar un limbaj de scripting la nivel de client. Scripting-ul permite scrierea de cod (mici programe) care rulează în cadrul browser-ului. Cel mai cunoscut limbaj de scripting pe parte de client este JavaScript.

JavaScript (JS) este un limbaj de programare orientat pe obiecte bazat pe conceptul de prototip. Este utilizat în special pentru a introduce funcționalitatea în pagini web, codul JavaScript al acestor pagini fiind rulat de catre browser. Limbajul este bine cunoscut pentru folosirea sa în construirea de site-uri web, dar este folosit și pentru a accesa obiecte încorporate în alte aplicații.

JavaScript a fost inventat pentru a adăuga paginilor Web capabilitatea de a prelua informații introduse de utilizator sau de a executa operații fără a fi nevoie de intervenția sau ajutorul server-ului de Web. JavaScript este la ora actuală cel mai popular limbaj de script, rulând pe partea de client (browser Web), fiind destinate în principal sporirii interactivității paginilor Web. Limbajul JavaScript, lucrând împreună cu elementele (etichetele) limbajului HTML, asigură o reacție imediată la anumite evenimente atașate acestor elemente, furnizând o dinamică sporită conținutului paginii Web.

O demonstrație a utilizării JavaScript-ului este afișarea unui calcul simplu într-un paragraf folosind eticheta „id”:

<!DOCTYPE html>

<html>

<body>

<h2>My First Web Page</h2>

<p>My First Paragraph.</p>

<p id=”demo”></p>

<script>

document.getElementById(“demo”).innerHTML = 5 + 6;

</script>

</body>

</html>

Capitolul 4: Proiectarea, realizarea Și testarea sistemului

Arhitectură generală

Privire de ansamblu:

Conexiune cablu Ethernet Website

Aplicația are rolul de a controla și de a monitoriza o locuință prin intermediul unui sistem de comandă la distanță ce poate fi accesat de orice dispozitiv cu antenă wireless care se află în raza de acțiune a router-ului. Acest sistem este compus din 5 senzori și un servo motor conectați la un ansamblu format dintr-un Arduino Uno și un Ethernet Shield. Fiecare senzor transmite informația către sistem care este ulterior redată prin intermediul unui website ce este găzduit pe un server virtual.

Comunicarea dintre calculatorul personal și Arduino Uno se realizează prin cablu USB, iar Ethernet Shield-ul este conectat la un router, configurat ca server virtual. Programul instalat pe placa de dezvoltare citește valorile apoi le expune în timp real pe pagina web, oferind totodată control asupra sistemelor electrice din încăpere.

Interfața web principală este compusă din indicatori de temperatură și umiditate, o alertă de gaze sau fum și un set de butoane ce permit atât controlul luminii cât și a prizelor electrice.

Interfața secundară este compusă din indicator de lumină, temperatură, umiditate și un servo motor. Pe lângă acestea au fost montate leduri pentru a demonstra capacitatea de control a iluminatului exterior.

Tot ansamblul este conectat la un router prin intermediul unui cablu ethernet. Interfața a fost creată astfel încât să ofere cât mai clar toate valorile, iar utilizatorul să dispună de toate instrumentele necesare pentru a-și controla locuința.

Prima interfață are drept componentă hardware un ansamblu format dintr-un Arduino la care s-a atașat un Arduino Shield reprezentat prin urmatoarea schemă:

Fig.4.1. Schema de conectare

A doua interfață web este compusă din următoarele elemente hardware, afișate în schema atașată mai jos:

Fig.4.2 Schema de conectare

Aplicația Arduino

La nivelul aplicației Arduino se efectuează următoarele operații:

Citirea datelor din mediu

Trimiterea informațiilor prin intermediul serverului web.

Principiul de funcționare se realizează astfel: utilizatorul folosind un dispozitiv mobil, ajunge în raza rețelei wireless generate de router, se va autentifica și va accesa pagina de comandă: http://192.168.0.1:125, pagină configurată implicit pe Arduino Uno.

Odată accesată pagina, utilizatorul poate vedea în timp real date despre locuința lui și poate să controleze dispozitivele electrice cum ar fi becurile sau obiectele casnice.

Sistemul dispune de doi senzori de temperatură: unul ce va măsura temperatura exterioară și unul ce va măsura temperatura interioară. Ambii senzori au dublă utilitate, oferind și date despre umiditatea din locuință.

Adițional s-a atașat sistemului un detector de gaz și de fum. În cazul în care în incintă se măsoară un nivel periculos de gaz, microcontrolerul setează pinul corespunzător pe valoarea logică „true” acționând astfel buzzer-ul.

Aplicația HTML

La nivelul aplicației HTML se citesc datele din fișierul generat de aplicația Windows. Informațiile sunt prelucrate și pe baza lor se generează o pagină HTML ce va fi afișată pe dispozitivul ce face cererea via internet.

Administratorul sistemului, de exemplu, poate oricând să observe nivelul parametrilor și să trimită comenzi catre sistem, folosind orice dispozitiv ce are instalat un browser web compatibil HTML.

Practic orice dispozitiv ce este conectat la internet și poate afișa pagina Google, poate fi folosit pentru accesul interfeței. Sistemul este configurat să trimită date pe adresa IP

192.168.0.101 la portul 125 pentru a accesa aplicația web.

Aplicația Web este încărcată pe un card SD atașat la Arduino Shield, pachetul fiind format din fișierul index.htm și pozele adiționale. De aici este apelat de către program prin următorul cod: [Anexa 1].

Codul verifică dacă există un card atașat, iar în caz contral este afișat pe consolă un mesaj de eroare. Avantajul acestei metode presupune faptul ca memoria de stocare a serverul se poate crește după preferință și se poate utiliza atât pentru a afișa date cât și pentru a le scrie. Spre deosebire de metoda clasică de scriere a paginilor direct în memoria flash a placuței Arduino Uno care este limitată și odată supra încărcată devine inutilizabilă, utilizarea unui card SD reprezintă o îmbunătățire adusă sistemului.

De asemenea, update-ul la program se realizează rapid, nefiind necesar să se înlocuiască micro cardul SD cu un alt card ce conține o versiune îmbunătățită.

Interfața utilizatorului este compusă din 8 sectoare de comandă a locuinței în care se găsesc pe rând:

Fig.4.3 Platforma web

Secțiunea de gaz/fum în care se pot regăsi valorile de monoxid de carbon și de gaz;

Secțiunea ceas pentru a afișa ora curentă;

Secțiunea de data și ziua curentă;

Secțiunea de umiditate unde senzorul afișează procentual umiditatea aerului din cameră;

Secțiunea de control al prizelor (se pot aprinde și stinge electrocasnicele din locuință, opțiunile de comandă fiind sugestiv colorate: culoare verde indică utilizare activă, iar culoarea roșie reprezintă dispozitivul deconectat de la curentul electric);

Secțiunea de control iluminat;

Secțiunea de temperatură interioară.

Interfața secundară se obține prin generarea automată a paginii web în memoria ansamblului Arduino Uno + Arduino Shield. La fel ca și în cazul primului ansamblu se citește adresa IP și portul pe care va fi afișată pagina web. Astfel, am ales adresa ip 192.168.0.102 și portul 126 pentru a putea împiedica eventuale conflicte ce pot apărea la accesarea paginilor. Cele doua pagini comunică între ele prin Hypertext Link.

Fig.4.4 Platforma web secundară

Interfața a fost realizată să poată fi folosită pe toate platformele ce dispun de un browser web. Codul de generare: [Anexa 2].

Capitolul 5: Scenariu de funcȚionare

Modul de conectare

Sistemul de control al încăperii este proiectat să se alimenteze de la o sursă de alimentare separată și anume o baterie de 9V ce este conectată direct la placa Arduino Uno. Senzorii își vor lua curent electric din pinul de 5V, iar orice altă componentă va fi legată la 220V de la rețeaua locală.

Senzorii vor fi montați în funcție de reglementările în vigoare. Astfel, detectorul de fum și gaz se va amplasa în apropierea unui surse de acest gen, senzorul de temperatură într-o zonă centrală, iar senzorul de mișcare în apropierea intrării.

Instalarea și configurarea sistemului

Sistemul de control al încăperii va fi legat la router-ul local printr-un cablu Ethernet pe oricare dintre porturile de ieșire LAN ale acestuia.

Pentru exploatare este nevoie de un end-device ce se poate conecta la Internet și are un broswer web:

Fig.5.1 Desktop Fig.5.2 Laptop

Fig.5.3 Tabletă Fig.5.4 Smartphone

În funcție de modelul router-ului se va accesa interfața de control a acestuia (folosind de exemplu adresa: 192.168.0.1 cu credențialele furnizate de producător).

Fig.5.5 Router

Fig.5.5.1 Interfață Router

Odată accesată interfața se va naviga la opțiunea de Forwarding și apoi se va face un server virtual pe adresa IP 192.168.0.101 și portul 125, respectiv 192.168.0.102 la portul 126. Aceste date sunt declarate deja în Arduino și sunt obligatorii.

Fig.5.5.2 Port Forward

Se vor salva setările făcute și se va accesa pagina http://192.168.0.101:125. Securitatea sistemului în această situație este asigurată de router în sine, astfel doar cine are acces la rețeaua locuinței poate accesa panoul de control.

Modul de utilizare

Odată accesată platforma, utilizatorul dispune de mai multe opțiuni interactive și pasive, ce se pot clasifica astfel:

Opțiuni interactive ce permit controlul, dar în același timp oferă și date despre obiecte:

Opțiunea de prize

Opțiunea de control iluminat

Odată acționate butoanele, ele își schimbă culoarea concomitent cu regimul de funcționare a dispozitivelor. Prin urmare, roșul indică lipsa curentului electric, iar verde indică circulația curentului electric.

Opțiuni pasive ce prezintă date informative despre sistem:

Opțiunea Gaz/Fum

Opțiunea Umiditate

Opțiunea Temperatură

Opțiuni access panou secundar

Concluzii ȘI DezvoltĂri ulterioare

Concluzii

Datorită tehnologiei, viața personală si profesională a oamenilor a căpătat o comoditate fără precedent. Pe masură ce progresele tehnologiei continuă să se dezvolte, așteptările clienților vor continua să evolueze și ele.

Accesul mai ușor la tehnologia și ieftinirea acesteia a facilitat utilizatorului de rând să devină dezvoltator de sisteme automatizate. Astfel, realizarea unui sistem de control al locuinței a devenit un proiect care poate fi realizat de oricine are la dispoziție timp să învețe mediul de dezvoltare Arduino, un mediu prietenos datorită comunității mari de suport atât din partea producătorului cât și al altor utilizatori.

Cu timpul și observând evoluția tehnologiei, tot mai multe locuințe vor fi automatizate, practic aceasta devenind un element esențial al casei moderne. Prin urmare acest tip de proiect are o aplicabilitate vastă și poate deveni un produs de sine stătător.

Cu ajutorul senzorilor și celor două plăcuțe, Arduino Uno și Ethernet Shield, se poate crea o casă inteligentă la un cost redus și cu avantajul de a putea îmbunătății pe parcurs sistemul prin adăugarea de noi senzori la alegere.

Dezvoltări ulterioare

Funcționalități ce vor fi implementate în versiunea următoare:

accesarea platformei pe internet prin alocare de DNS;

realizarea unui aplicații Android pentru controlul sistemului de automatizare a locuinței;

adăugarea de noi senzori de monitorizare și control;

adăugarea unei camere pentru recunoaștere facială.

Capitolul 7: Bibliografie

Daniel H. Wilson, Smart House-Your So-Called Sci-Fi Life, Popular Mechanics Technology News, Mai 2007

Ionescu Constantin, Larionescu Sorin, Caluianu Sorin,Popescu Daniel – “Automatizarea instalațiilor. Comenzi automate”, editura MATRIX ROM, ISBN:

973-685-460-4

KMC Controls, Understanding Building Automation and Control Systems, White Paper, 2012.

https://biblioteca.regielive.ro/licente/automatica/sistem-informatic-dedicat-procesului-administrativ-didactic-intr-o-facultate-385114.html

https://ro.wikipedia.org/wiki/Microcontroler

http://en.wikipedia.org/wiki/Arduino

https://ardushop.ro/ro/electronica/49-ethernet-shield-w5100.html

http://www.w3schools.com/

https://ro.wikipedia.org/wiki/Pagină_web

https://en.wikipedia.org/wiki/JavaScript

https://ro.wikipedia.org/wiki/Ajax_(programare)

https://ro.wikipedia.org/wiki/HyperText_Markup_Language

http://andrei.clubcisco.ro/cursuri/3pm/lab2.pdf

https://ro.wikipedia.org/wiki/Memorie_ROM

https://ro.wikipedia.org/wiki/Memorie_cu_acces_aleator

Basics of Microcontrollers

https://en.wikipedia.org/wiki/Instruction_cycle

https://www.arduino.cc/reference/en/#functions

https://www.optimusdigital.ro/ro/senzori-senzori-de-temperatura/99-senzor-de-temperatura-si-si-umiditate-dht11.html

https://www.optimusdigital.ro/ro/senzori-senzori-de-temperatura/1199-senzor-de-temperatura-i-umiditate-dht22.html

https://www.optimusdigital.ro/ro/senzori-senzori-optici/167-modul-cu-fotorezistor.html

https://www.optimusdigital.ro/ro/motoare-servomotoare/26-micro-servomotor-sg90.html

https://www.optimusdigital.ro/ro/senzori-de-gaze/107-modul-senzor-gas-mq-2.html

https://info.pcboard.ca/led-specifications/3mm-led-technical-specifications/

Passive Buzzer

Active Buzzer (5V)

Active Buzzer (5V)

https://electronics.stackexchange.com/questions/224374/active-vs-passive-buzzer

Cum functioneaza un senzor de miscare – pe intelesul tuturor

https://biblioteca.utcluj.ro/files/carti-online-cu-coperta/341-7.pdf

Anexe

Anexa 1 – Program de citire și încărcare a platformei web

#include <dht11.h>

#include <SPI.h>

#include <Ethernet.h>

#include <SD.h>

#define DHT11_PIN 7

#define REQ_BUF_SZ 25

dht11 DHT;

File webFile;

char HTTP_req[REQ_BUF_SZ] = {0};

char req_index = 0;

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};

IPAddress ip(192, 168, 0, 101);

EthernetServer server(125);

bool pin1;

bool pin2;

bool pin3;

bool pin4;

void setup() {

pinMode(2, OUTPUT);

pinMode(5, OUTPUT);

pinMode(6, OUTPUT);

pinMode(9, OUTPUT);

SD.begin(4);

Ethernet.begin(mac, ip);

server.begin();

pin1 = pin2 = pin3 = pin4 = 0;

}

void loop() {

EthernetClient client = server.available();

if (client) {

boolean currentLineIsBlank = true;

while (client.connected()) {

if (client.available()) {

char c = client.read();

if (req_index < (REQ_BUF_SZ – 1)) {

HTTP_req[req_index] = c;

req_index++;

}

if (c == '\n' && currentLineIsBlank) {

if (StrContains(HTTP_req, "GET / ") || StrContains(HTTP_req, "GET /index.htm")) {

client.println("HTTP/1.1 200 OK");

client.println("Content-Type: text/html");

client.println("Connnection: close");

client.println();

webFile = SD.open("index.htm");

} else if (StrContains(HTTP_req, "GET /favicon.ico")) {

webFile = SD.open("favicon.ico");

if (webFile) {

client.println("HTTP/1.1 200 OK");

client.println();

}

} else if (StrContains(HTTP_req, "GET /temp.png")) {

webFile = SD.open("temp.png");

if (webFile) {

client.println("HTTP/1.1 200 OK");

client.println();

}

} else if (StrContains(HTTP_req, "GET /humid.png")) {

webFile = SD.open("humid.png");

if (webFile) {

client.println("HTTP/1.1 200 OK");

client.println();

}

} else if (StrContains(HTTP_req, "GET /flame.png")) {

webFile = SD.open("flame.png");

if (webFile) {

client.println("HTTP/1.1 200 OK");

client.println();

}

} else if (StrContains(HTTP_req, "GET /bulb.png")) {

webFile = SD.open("bulb.png");

if (webFile) {

client.println("HTTP/1.1 200 OK");

client.println();

}

}else if (StrContains(HTTP_req, "GET /mw.png")) {

webFile = SD.open("mw.png");

if (webFile) {

client.println("HTTP/1.1 200 OK");

client.println();

}

}else if (StrContains(HTTP_req, "GET /fridge.png")) {

webFile = SD.open("fridge.png");

if (webFile) {

client.println("HTTP/1.1 200 OK");

client.println();

}

}else if (StrContains(HTTP_req, "GET /my.css")) {

webFile = SD.open("my.css");

if (webFile) {

client.println("HTTP/1.1 200 OK");

client.println();

}

} else if (StrContains(HTTP_req, "ajax_flame")) {

client.println("HTTP/1.1 200 OK");

client.println("Content-Type: text/html");

client.println("Connection: keep-alive");

client.println();

int smoke_gas = 0;

int sensorReading = analogRead(smoke_gas);

int chk;

chk = DHT.read(DHT11_PIN);

client.print(sensorReading);

client.print(":");

client.print(DHT.temperature);

client.print(":");

client.print(DHT.humidity);

client.print(":");

client.print((digitalRead(2)) ? "1" : "0");

client.print(":");

client.print((digitalRead(5)) ? "1" : "0");

client.print(":");

client.print((digitalRead(6)) ? "1" : "0");

client.print(":");

client.print((digitalRead(9)) ? "1" : "0");

} else if (StrContains(HTTP_req, "setpin?pin=1")) {

pin1 = !pin1;

digitalWrite(2, pin1);

client.println("HTTP/1.1 200 OK");

client.println("Content-Type: text/html");

client.println("Connnection: close");

client.println();

} else if (StrContains(HTTP_req, "setpin?pin=2")) {

pin2 = !pin2;

digitalWrite(5, pin2);

client.println("HTTP/1.1 200 OK");

client.println("Content-Type: text/html");

client.println("Connnection: close");

client.println();

} else if (StrContains(HTTP_req, "setpin?pin=3")) {

pin3 = !pin3;

digitalWrite(6, pin3);

client.println("HTTP/1.1 200 OK");

client.println("Content-Type: text/html");

client.println("Connnection: close");

client.println();

} else if (StrContains(HTTP_req, "setpin?pin=4")) {

pin4 = !pin4;

digitalWrite(9, pin4);

client.println("HTTP/1.1 200 OK");

client.println("Content-Type: text/html");

client.println("Connnection: close");

client.println();

}

if (webFile) {

while (webFile.available()) {

client.write(webFile.read());

}

webFile.close();

}

req_index = 0;

StrClear(HTTP_req, REQ_BUF_SZ);

break;

}

if (c == '\n') {

currentLineIsBlank = true;

} else if (c != '\r') {

currentLineIsBlank = false;

}

}

}

delay(1);

client.stop();

}

}

void StrClear(char *str, char length)

{

for (int i = 0; i < length; i++) {

str[i] = 0;

}

}

char StrContains(char *str, char *sfind)

{

char found = 0;

char index = 0;

char len;

len = strlen(str);

if (strlen(sfind) > len) {

return 0;

}

while (index < len) {

if (str[index] == sfind[found]) {

found++;

if (strlen(sfind) == found) {

return 1;

}

}

else {

found = 0;

}

index++;

}

return 0;

}

[Anexa 2]

#include <SPI.h>

#include <Ethernet.h>

#include <DHT.h>

#include <Servo.h>

Servo myservo;

byte mac[] = { 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF };

IPAddress ip(192,168,0,102); // P1 –> { 10, 1, 1, 5 };

EthernetServer server(126); // port 80 is default for HTTP

const int sensorPin = 9;

const int sensorType = DHT22;

DHT dht(sensorPin, sensorType);

int LED = 3; // led is connected to digital pin 3

int PIR = 2; // PIR sensor is connected to digital pin 2

int LDR = 5; // LDR sensor is connected to analog pin 5

int PIRstate = 0;

float photocell = 0;

char c = 0;

char command[2] = "\0";

void setup()

{

pinMode(5, OUTPUT);

dht.begin();

myservo.attach(7);

Ethernet.begin(mac, ip);

server.begin();

Serial.begin(9600);

Serial.println(F("server servo/pin 5 test 1.0"));

pinMode(LED, OUTPUT);

pinMode(PIR, INPUT);

}

void loop()

{

EthernetClient client = server.available();

boolean current_line_is_first = true;

if (client) {

boolean current_line_is_blank = true;

while (client.connected()) {

if (client.available()) {

char c = client.read();

if (c == '\n' && current_line_is_blank) {

client.println(F("HTTP/1.1 200 OK"));

client.println(F("Content-Type: text/html"));

client.println();

// auto reload webpage every 5 second

client.println(F("<META HTTP-EQUIV=REFRESH CONTENT=50 URL=>"));

client.println(F("<center><p><h1>Sistem de monitorizare secundar</h1></p><center><hr><br />"));

client.println(F("<center><p><h2>Berbecel Mihaela Adina</h2></p><center><hr><br />"));

client.println(F("<center><a href=http://192.168.0.101:125/><h2>Acceseaza pagina principala</h2></a><center><hr><br />"));

photocell = analogRead(LDR);

client.print(F("<p><h2>Senzor de lumina (valoare lux)= <font color=indigo>"));

client.println(photocell, 2);

client.println(F("</font></h2></p>"));

PIRstate = digitalRead(2);

if (PIRstate == HIGH) {

client.println(F("<p><h2><font color=red>Miscare detectata!</font></h2></p>"));

}

else {

client.println(F("<p><h2><font color=green>Nici o miscare</font></h2></p>"));

}

client.println(F("<center><h2>Lumina Exterioara</h2></center>"));

client.println(F("<form method=get name=form>"));

client.println(F("<button name=b value=1 type=submit style=height:80px;width:150px>LED On</button>"));

client.println(F("<button name=b value=2 type=submit style=height:80px;width:150px>LED Off</button>"));

client.println(F("<br />"));

client.println(F("<center><h2>Fereastra</h2></center>"));

client.println(F("<button name=b value=3 type=submit style=height:80px;width:150px> Deschide</button>"));

client.println(F("<button name=b value=4 type=submit style=height:80px;width:150px>Inchide</button>"));

client.println(F("</form><br />"));

client.println(F("<center><h2>Condiții exterioare: </h2></center>"));

Serial.print(F("Condiții exterioare: "));

client.print(F("Temperatura (Celsius): "));

client.println((float)dht.readTemperature());

client.println(F("<br />"));

client.print(F("Temperatura (Farenheit): "));

client.println(Fahrenheit(dht.readTemperature(true)));

client.println(F("<br />"));

client.print(F("Temperatura (Kelvin): "));

client.println (Kelvin(dht.readTemperature(true)));

client.println(F("<br />"));

client.print(F("Umiditate (%): "));

client.println((float)dht.readHumidity());

client.println(F("<br />"));

client.println(F("<hr />"));

break;

}

if (c == '\n') {

current_line_is_first = false;

current_line_is_blank = true;

}

else if (c != '\r') {

current_line_is_blank = false;

}

if (current_line_is_first && c == '=') {

for (int i = 0; i < 1; i++) {

c = client.read();

command[i] = c;

}

if (!strcmp(command, "1")) {

digitalWrite(LED, HIGH);

}

else if (!strcmp(command, "2")) {

digitalWrite(LED, LOW);

}

if (!strcmp(command, "3")) {

myservo.write(10);

digitalWrite(5, HIGH);

}

else if (!strcmp(command, "4")) {

myservo.write(110);

digitalWrite(5, LOW);

}

}

}

}

delay(1);

client.stop();

}

}

double Fahrenheit(double celsius)

{

return 1.8 * celsius + 32;

}

double Kelvin(double celsius)

{

return celsius + 273.15;

}

Similar Posts