Sistem de control IOT cu microcontroler ATMega328 [606223]
1
Universitatea POLITEHNICA din București
Facultatea de Electronică, Telecomunicații și Tehnologia Informației
Sistem de control IOT cu microcontroler ATMega328
Proiect de diplomă
Prezentat ca cerință parțială pentru obținerea titlului de
Inginer în domeniul Electronică și Telecomunicații
Programul de studii de licență Electronică Aplicată și Tehnologia Informației
(ETC – ELA)
Conducător stiințific: Absolvent:
S.l.Dr. Ing. Bogdan Cristian FLO REA MATEA Nicu Cristian
2016
2
3
4
5
Declaratie Originalitate
6
7
Cuprins
Capitolul 1. Sisteme Internet of Things si Sisteme Automate Programabile …………………….
1.1. Scurtă introducere a noțiunii de Internet of Things ………………………………….. ………………………….
1.2. Sisteme Automate Pro gramabile și evoluția automatizării ……………………………………………………
1.2.1. Avantajele și dezavantajele automatizării ……………………………………………………………………
1.3. Arhitectura microcontrolerelor …………………………………………………………………………………. ………
1.3.1 . Caracteristici generale ………………………………………………………………………… …………………….
1.3.2 . Microcontrolerul ATMEL A TMega 328 …………………………………………….. ……………………….
1.3.3. Generalități Arduino …………………………………………………………… ………… ………………………….
1.3.4. Arduino Uno ……………………………………………………………………………………………. ……………..
Capitolul 2. Senzori și elemente de control …………………………………………………………………..
2.1. Rețeaua de Ethernet ………………………………………………………………………………………………….. …….
2.2. Senzor de temperatură și umiditate ……………………………………………………………………………………
2.3. Senzor i de miș care ………………………………………………………………………………………………………… …
2.4. Emitor ș i receptor infraroș u ………………………………………………………………………………………………
Capitolul 3. Interfata WEB ……………………………………………………….. ……………… ……………….
3.1. Elemente de design ……………………………………………………………………………………….. ……………….
3.2. Comunicarea via ethernet ………………………………………………………………………………………………..
3.2.1. Cererea de tip Request and Response ………………………………………………………………………….
3.2.2. Ruta de comunicare ………… ……………………………………………………………………….. …………….
Capitolul 4. Realizarea practic ă …………………………………………………………………………….. ……
4.1. Descrierea ralizării practice ………………………………………………………………….. …………………………
4.2. Procesul de tehnologizare ……………………………………………………………… ………. ………………………..
4.3. Organigrama softului ……………………………………………………………………………………… ……………..
Capitolul 5. Perspective de dezvoltare …………………………………………………………………………..
Concluzii …………………………………………………………………………………………………………….. …….
Bibliografie ………. ……………………………………………………………………………………………………….
Anexe …………………………………………………………………………………………………………….. ……….
8
Lista acronime
IoT – Internet of Things
SUA – Statele Unite ale Americii
AI – Artificial Intelligence (Inteligență Artificială)
BAN – Body Area Network
LAN – Local Area Network
WAN – Wide Area Network
VWAN – Very Wide Area Network
IIoT – Industrial Internet of Things
CIoT – Commercial Internet of Things
AIoT – Arhitectural Internet of Things
ICS – Industrial Control Systems
SCADA -Supervisory Control & Data Acquisition
DCS – Distributed Control System
PCS – Process Control System
BMS – Building Management System
I&C – Instrumentation and Control
SIS – Safety Instrumented System
SISO – Single -Input and Single Output
MIMO – Multiple Input and Multiple Output
DDC – Direct Digital Control
µC – Microcontroler
µP – Microprocesor
Hz – Hertz
M – Mega
CPU – Unitate Centrală de Procesare
ALU – Unitate Aritmetico -Logică
RAM – Random Access Memory
EEPROM – Electricallz Erasable Programmable ROM
ADC – Analog Digital Convertor
CISC – Complex Instruction Set Computer
RISC – Reduced Instruction Set Computer
B – Byte
k – kilo
MIPS – Milion instructions per second
m – mili
DC – Direct curent (CC – Curent continuu)
AC – Alternativ curent (Curent alternativ)
IDE – Integrated Development Environment
Mbps – Megabits pe secunda
IP – Internet Protocol
OTP – One Time Programmable
n – nano
eV – electronvolt
FET – Field Effect Transistor
HTTP – HyperText Transfer Protocol
DNS – Domain Name Sistem
URL – Uniform Resource Locato
9
Lista figuri
Fig. 1.1 Gradul de utilizare a sistemelor IoT in diferite domenii ……………………………………. ………. . . 12
Fig. 1.2. Diagramă ce ilustrează o buclă de control ……………………………………………………………….. . 15
Fig. 1.3. Legea lui Moore privind evolutia procesoarelor …….. ………………………………………………… . 16
Fig. 1.4. Arhitectura generică a unui microcontroler …………………………………………………………… ….. 17
Fig. 1.5. Arhitecturi RISC și CISC ……………………………………………………………………………… ……… .. 19
Fig. 1.6. Etapele realizării unui program în limbaj de asamblare …………………………………………….. . . 20
Fig. 1.7. Microcontrolerul ATMega328 ……………………………………………………………………………….. .. 21
Fig. 1.8. Schema bloc a Microcontrolerului ATMega328 ………………………………………………………. .. 22
Fig. 1.9. Exemple de plăcuțe Arduino ……………………………………………………………………………. ……. . 23
Fig. 1.10. Elementele constructive ale plăcu ței Arduino UNO …………………….. ………………………… . 24
Fig. 1.11. Selectarea plăcii Arduino potrivite din meniul Tools ………………………………………………. . 25
Fig. 1.12. Butoanele aferente zonei de meniuri …………………………………………………………………… …. 25
Fig. 2.1. Topologia unei rețele de Ethernet ……………………………………………………………… ………….. … 27
Fig. 2.2. Placă Arduino Uno cu Shield de Ethernet ……………………………………………………………….. .. 28
Fig. 2.3. Structura generală a unui traductor ……………………………………………………………………. ……. 29
Fig. 2.4. Rezistență R1 serie în cazul folosirii unei surse de tensiune constantă ………………………… . 30
Fig. 2.5. Rezistență R1 paralel în cazul folosirii unei surse de curent constantă ………………………… . 31
Fig. 2.6. Senzor de temperatură și umiditate DHT11 …………………………………………………………….. . 31
Fig. 2.7. Caracteristica termică a termistoarelor NTC la scară liniară (a) și logartimică (b) ……….. . 32
Fig. 2.8. Transmiterea unui bit de date …………………………………………………………………………. ……… 32
Fig. 2.9. Schema funcțională a unui senzor de mișcare ………………………………………………………… … 33
Fig. 2.10. Funcționarea senzorului de mișcare ………………………………………………………………… …….. 34
Fig. 2.11. Schema senzorului PIR ………………………………………………………………………………………. . .35
Fig. 2.12. Structura și simbolul fotodiodei …………………………………………………………………………… ..37
Fig. 2.13. Caracteristica curent – tensiune a unei fotodiode ……………………………………………………. . .38
Fig. 3.1. Schema desfășurării comunicării pe Internet …………………………………………………………… . .39
Fig. 3.2. Stilizarea unor butoane în limbaj CSS ………………………………………………………………….. … .41
Fig. 3.3. Post eliberat de o cerere de tip HttpRequest …………………………………………………….. …….. .. 44
Fig. 3.4. Exemplu de URL ………………………………………………………………………………………. ……….. . 45
Fig. 3.5. Configurarea conexiunii unui Microcontroler la rețeaua de Ethernet …………….. ………….. …46
Fig. 3.6. Rezervarea unui IP unic pentru configurarea microcontrolerului ………………………………. … 46
Fig. 4.1. IoT – Infrared Remote …………………………………………………………………………………………. … 47
Fig. 4.2. IoT – Temperature Action ………………………………………………………………. ………………….. …. 48
Fig. 4.2. IoT – Motion Action …………………………………………………………………………………………… . .. 48
Fig. 4.3. Diagrama reprezentativă a proiectului ………………………. ……………… ………………………….. .. 49
Fig. 4.4. Placă de tip breadboar, fire de legătură și plăcuță Arduino cu shield de Ethernet ………. .. ..50
Lista tabele
Tab. 1.1. Exemple de aplicații ICS ……………………………………………………………………………… …….. 14
Tab. 3.1.Tag -uri HTML utilizate în proiectarea site -urilor web ………………………………………….. … 40
10
Introducere
În ceea ce priveste parcursul și evoluția tehnologiei din ultimii ani, concluzia globală care se
încearca a fi implementată de către inginerii din zilele noastre vizeaiză simplificarea vieții utilizatorului
de rând si integrarea acestuia în aceasta eră nouă dominata de industria IT și de aparatura electronică tot
mai performantă.
Noțiunea de ˶Device Inteligent" face referire la un dispozitiv capabil să ușureze viața
utilizatorului său prin reducerea atât a efortului fizic cat și mental. Termenul de ˶Internet of Things",
care în limba română poate fi tradus drept ˶Internetul tuturor Lucrurilor" , este un concept prin care
obiectele si aparaturile moderne folosite de utilizatorul de rând (sistemul de iluminat și de încălzire,
mașinile electrice, aerul condiționat, calculatoare, laptopuri, ceasuri inteligente) vor putea comunica și
relaționa între ele prin intermediul internetului.
Un astfel de sistem îi conferă utilizatorului său următoarele avantaje: economi a de resurse
materiale și de timpul necesar activării fiecărui dispozitiv in parte, o bună mentenanță a consumului de
energie, accesul asupra sistemului său din orice locație în care s -ar afla, mobilitate, siguranță și control.
Conceptul de IoT poate fi î mplementat nu doar la nivelul unei locuințe, un astfel de concept
inovator putând fi implementat și în clădiri de birouri, magazine, fabrici și uzine. Se preconizează că în
viitorul nu prea îndepărtat, munca fizică va fi înlocuită, acolo unde se poate de u tilaje si aparatură de
ultimă generație. Acestea din urmă, vor avea nevoie doar de monitorizare și control, gestiunea acestor
aspecte făcându -se cu ușurință și de la distanța, nu doar de la fața locului.
În capitolele acestei lucrări se vor prezenta mai detaliat noțiunea de IoT, etapele dezvoltării unui
sistem automat programabil și avantajele acestuia precum și prototipul si funcționarea unui astfel de
sistem, sistem realizat cu un microcontroler ATMega 328 .
Problema cu care se confruntă majoritatea inginerilor când este vorba de un sistem IoT se
rezumă la puterea acestuia și la cantitatea de informații pe care o poate gestiona, precum si timpul de
răspuns oferit în urma executării unei comenzi.
Cu siguranță, in decursul următorilor ani, producători i si dezvoltatorii unor astfel de sisteme vor
veni cu soluții capabile să satisfacă ori ce cerere a utilizatorului de râ nd. La ora actuală , sistemele IoT
sunt implementate cu precădere in SUA, acolo unde în combinații cu Big Data, economiile aduse
bugetelor orășenești se ridică la 1.2 miliarde USD anual.
11
Capitolul 1. Sisteme Internet of Things si Sisteme Automate Programabile
1.1. Scurtă introducere a noțiunii de Internet of Things
˶În secolul următor, planeta Pământ se va acoperi cu o piele electronică. Ea va utiliza Internetul
ca pe o structură care să -i acopere și să -i transmită senzațiile. " a fost afirmația făcută de profesorul de
sociologie al Universității British din Columbia în 1999.
În realitate, o astfel de ˶piele" electronică planetară se traduce prin milioane de dispozitive
electronice de măsură, monitorizare și control conectate între ele prin intermediul Internetului cu
posibilitatea de a fi accesate de la distanță, necesi tatea prezenț ei fizice a utilizatorului la fața locului
fiind eliminată.
Introdus in 1999 de către antreprenorul britanic Kevin Aston, conceptul IoT semnifică o
structură de obiecte fizice înzestrate cu componente electronice, softuri, senzori și conexiun i la internet,
prin care se colectează și se distribuie date. Aceste obiecte pot comunica între ele atât local cât și global
, fără intervenție umana. IoT reprezintă de asemenea un concept de conectivitate omniprezentă, folosit
în zilele noastre în mediul afacerilor, de către guverne si consumatorii de rând în vederea implementării
propriilor sisteme de management, monitorizare, calcul statistic și analiză a datelor.
În opinia mea, un factor determinant în evaluarea succesului IoT constă în apariția si
dezvoltarea metodelor de inteligență artificială, machine learning și data mining. Scopul unui device
conectat la un sistem IoT este de a învăța comportamentul impus de către utilizator si de a-l executa
singur.
Creșterea exponențială a capacității computer elor a adus cu sine și creșterea volumului de date
neinteligibile. Astfel, pentru a nu pierde controlul asupra acestei cantități de date, marile companii au
ales să folosească metode de inteligență artificială (AI) pentru a ține sub control marea de date ( Big
Data). Scopul inteligenței artificiale este de a prelua mari cantități de date, precum cele produse de
dispozitivele IoT și de a lua decizii în legătură cu aceste date. Pe scurt, AI este o tehnologie ce dă sens
datelor si dictează instrucțiuni dispozit ivelor IoT ce vor efectua acțiuni specifice.
IoT este în definiție un flux continuu între:
BAN – corpul propriuzis al obiectului inteligent
LAN – controlul inteligent la nivel de locuință
WAN – controlul inteligent la o scară mai mare, reunind m ai multe LANuri
VWAN – se rezumă la nivel de oraș ˶inteligent", în care serviciile sunt omniprezente, fără
a fi legate fizic între ele.
În prezent, cererile consumatorilor în ceea ce priveste IoT s -au diversificat și s -au împărțit în
mai multe categorii : Industrial Internet of Things (IIoT), Commercial Internet of Things (CIoT) și
Arhitectural Internet of Things (AIoT).
Există o gamă foarte variată unde se aplică în prezent tehnologiile IoT. În continuare, voi
exemplifica o parte din domeniil e marcate de tehnologia IoT, subliniind si o parte din avantajele aduse
de aportul acesteia :
12
a) Automatizarea locuințelor – o casa are în prezent o mulțime de dispozitive care sunt pregătite
pentru automatizare prin IoT. Utilizând metode de inteligență ar tificială, managementul acestor
dispozitive poate produce o creștere a calității vietii și o mai bună gestiune a consumului de energie.
b) Automobile inteligente – dispozitivele IoT integrate in autovehicule vor scutii șoferii de
grijile configurarilor ma nuale a aplicațiilor de bord.
c) Domeniul sănătății – cu ajutorul sistemelor IoT, se poate crește eficiența îngrijirii sănătății,
timpul de diagnosticare a bolilor precum și stabilirea unui diagnostic pentru ele; De asemenea,
instituțiile medicale vor put ea elibera mai rapid rețete, tratamente și prescripțtii pentru pacienti, istoricul
acestora figurând la un click distanță.
d) Orașele inteligente – momentan, un proiect ce se află la un nivel de globalizare, el depinzând
și de alte implicații externe dar și interne, la nivel politic ; pe măsură ce rețeaua Google Fiber se va
extinde, ne putem aștepta la o creștere semnificativă a orașelor inteligente în următorii ani. Un foarte
bun exemplu de IoT orășenesc vine din Boston (aplicația Street Bump). Cu ajutorul tehnologiei
inovative, sistemul monitorizează drumurile cetățenilor prin oraș, detectează și raportează gropile din
asfalt prin vibrații primite pe iPhone și raportează imediat oficialităților orasului pentru ca problema să
fie remediata în cel mai scurt timp.
Fig. 1.1 Gradul de utilizare a sistemelor IoT in diferite domenii
Ca orice sistem tehnologic aflat într -o continuă legătură cu industria informatică, implementarea
IoT la scară globală nu aduce cu sine numai beneficii. Două aspecte negative care pot influența serios
randamentul acestui proces sunt 0.00% 5.00% 10.00% 15.00% 20.00% 25.00% 30.00% 35.00% 40.00% 45.00% 50.00%
13
a) securitatea cibernetică
b) protejarea intimității personale
Conexiunea prin intermediul internetului, indiferent de tipul acesteia (WiFi, Bluetooth, date
mobile, satelit sau microunde), modu l de conectare la ˶cloud" sau alte servere menite a căuta și procesa
datele unei aplicații IoT sunt procese vulnerabile si predispuse atacurilor cibernetice. Aceste
vulnerabilități pot permite unui hacker să intercepteze, manipuleze sau chiar să preia cont rolul unui
dispozitiv fizic. Un studiu publicat de Symantec relevă o creștere cu 91% a atacurilor cibernetice la
nivelul anului 2013, incluzând aici si o creștere cu 62% a numărului de ˶spargeri". Oarecum, acest lucru
era și de asteptat, intrucât societate a, așa cum o știm, trece printr -un amplu proces de înmagazinare a
tuturor informațiilor posibile, iar acest lucru, noi, ca utilizatori de rând al internetului, contribuim zilnic
la acest aspect. Tot ceea ce facem online se înregistrează, de la simple postă ri și cumpărături, la
emailurile pe care le trimitem. Facebook salvează tot ceea ce scriem , ștergem sau nu postăm, în timp ce
Amazon notează unde ne -am oprit cu cititul cărții pe Kindle.
14
1.2. Sisteme Automate programabile și evoluția automatizării
Industria automatizării și a Sistemelor de Control a cunoscut o evoluție continuă pe parcursul
ultimelor decenii. Un termen global – ICS (Industrial Control Systems) reunește mulțimea tuturor
aplicațiilor folosite în industrie, a plicații ce au la bază un sistem automat.
Un astfel de sistem este definit ca un ansamblu de componente hardware și software ce pot
garanta siguranța, eficiența și modul de lucru al unui sistem industrial. În tabelul următor, voi enumera
o parte din aplic ațiile ICS și utilitatea acestora.
Numele Aplicatiei /Sistemului Scopul/Utilizarea acestuia
SCADA
(Supervisory Control & Data Acquisition ) Controlul și achiziția datelor de -a lungul unor zone
geografice mari
DCS
(Distributed Control Systems) Sisteme ce controlează și monitorizează
mecanisme industriale ce acționează individual dar
fac parte din același proces tehnologic
PCS
(Process Control System) Sistem ce controlează un întreg proces industrial.
BMS
(Building Management System) Sistem folosit în cadrul clădirilor pentru controlul
și gestiune sistemelor de securitate , aer condiționat,
alarme de incendiu, alimentare cu apă.
I&C
(Instrumentation & Control) Aparatură electronica folosită pentru
monitorizarea, măsurarea și gestiunea altor
echipamente folosite in diferite aplicații
SIS
(Safety Instrumented System) Systeme folosite cu scopul de a monitoriza și
garanta securitatea unui proces
Tab. 1.1. Exemple de aplicații ICS
Toate aceste sisteme menționate mai sus au la bază implementată Teoria de Control, o ramură a
ingineriei moderne, ramură ce analizează capabilitățile unui astfel de sistem atât din punct de vedere
fizic cât ți matematic. Scopul acestei teorii este de a calcula soluții cât mai optime și mai rapide, soluții
implementate la nivelu l controllerului principal, soluții menite a furniza un rezultat dorit și așteptat.
La început, aceste sisteme erau de tipul SISO (single -input and single output). Ulterior, odata cu
evoluția tehnologiei, sistemele complexe sunt de tipul MIMO (multiple in put and multiple output)
Evoluția sistemelor automate își are rădăcinile cu secole în urmă, istoria reflectând mereu
inovațiile aduse de om în eficientizarea procesului sau industrial. Exemplele clasice re relevă un real
progress in domeniu reunește perioada anilor 1935 -1950, perioada în care poporul american contribuit
la dezvoltarea telefonului și telegrafului, concentrându -se pe modalitățile de extindere a benzii de
comunicare ; de asemenea, inginerii din cadrul Massachusetts Institute of Technologz au pus bazele
conceptului de ˶diagrame bloc" și a sistemului de simulare și control.
O necesitate și totodata o prioritizare a dezvoltării sistemelor automate și inteligente a apărut
odata cu începerea războiului. Perioada celui de -al doilea Razboi Mondi al a reunit ingineri și savanți de
pretutindeni cu scopul de a remedia problema controlului și a eficientiza capabilitățile de luptă. Armata
15
se lovea de imposibilitatea eliminării țintelor aflate in mișcare, de cele mai multe ori chiar și de
depistarea lor .
La începutul anului 1950, inginerii au debistat o problemă cât se poate de reală și importantă la
nivelul sistemelor de control și anume faptul că acestea nu sunt lineare, măsurătorile conțin defapt erori,
și sunt perturbate de zgomot .
Cu timpul, sistemele au trecut prin mai multe etape ale evoluției. Inițial, acestea au început să
fie automatizate cu control numeric (NC), urmând ca în anii 1960 să fie implementat controlul digital –
DDC (Direct Digital Control). Ulterior, acestea au fost înlocuite în anii 70' cu microcalculatoare,
acestea din urmă fiind mai ieftine și mai usor de implementat.
În ziua de astăzi, sistemele automate și programabile au la bază un microcontroler capabil să
citească mai mult decat o singură intrare, sa faca prelucrare d e semnal în timp real și să ofere un
răspuns în cel mai scurt timp cu putință. Aceste sisteme au memorie proprie și de cele mai multe ori
implementarea sistemului se rezumă la implementarea unei bucle de control exemplificată mai jos:
Fig. 1 .2. Diagramă ce ilustrează o buclă de control
1.2.1. Avantajele și dezavantajele automatizării
Automatizarea aduce cu sine implementarea practică a pincipiilor, algoritmilor, calculelor si
metodelor ce guvernează procesele tehnice , eliminând astfel necesitatea efo rtului fizic necesar
executării anumitor lucrări -procese.
Principalele avantaje ale automatizării sunt:
• creșterea productivității
• îmbunătățirea calității serviciilor oferite
• creșterea calității rezultatului așteptat
• creșterea procesului d e producție
• reducerea necesarului de personal uman și a costului salarial
• creșterea siguranței mediului de producție și dezvoltare
• creșterea nivelului de cunoștințe în ceea ce privește gestiunea unui mediu ICS
16
Principalele dezavantaje ale procesului de automatizare sunt :
• vulnerabilitatea din punct de vedere al securității – sistemele automate nu sunt
întotdeauna sigure și pot fi ușor atacate din exterior, principalele probleme fiind datorate de
suprascrierea datelor și rularea unor come nzi nedorite
• costul necesar dezvoltării si automatizării unui proces în sine poate depăși de cele mai
multe ori costul execuției unui proces standard
• costul inițial – costul automatizării unui produs sau a unei întreprinderi poate depăși
așteptarile inițiale si se poate amorsa cu greu, în timp
• automatizarea unui proces aduce cu sine înlocuirea personalului necalificat, lucru ce duce
la desființarea locurilor de munca.
Automatizarea și procesele automate au adus până în prezent numai beneficii societății umane,
permițându -se astfel implementarea unor tehnici moderne în domeniul producției, energetic, informatic,
telecomunicațiilor, etc. Acest aspect vital este într -o continuă dezvoltare si va marca cu siguranță în
viitor societatea, aș a cum o stim.
1.3. Arhitectura microcontrolerelor
1.3.1. Caracteristici generale
La modul general, un controler este, actualmente, o structură electronică destinată controlului
unui proces, sau, mai general, unei interacțiuni caracteristice cu mediul exterior, fără să fie necesară
intervenția operatorului uman. [1]
Utilizarea microprocesoarelor a dus la o reducere semnificativă a costurilor, dimensiunilor,
consumului de energie și la o îmbunătățire a fiabilității. Evoluția procesoarelor reprezi ntă un țel al
inginerilor din ziua de azi, evoluție ce ține de o îmbunatățire constantă a vitezei mașinii de calcul. Un
aspect interesant ce stă la baza acestei evoluții o constituie legea lui Moore, lege ce relevă faptul că
˶numarul de tranzistoare ce poa te fi plasat pe un circuit integrat se dublează la fiecare 18 luni ".
17
Fig. 1.3. Legea lui Moore privind evolutia procesoarelor [2]
Un microcontroler este un tip de circuit care integrează un microprocesor și alte dispozitive
periferice într -un singur chip, astfel asigurându -se un cost redus de producție și un consum redus de
energie electrică. Principala diferență dintre un microcontroler (µC) și un microprocesor (µP) o
constituie faptul ca un µC integrează memoria de program, memoria de date și alte i nterfețe de intrare –
ieșire sau alte periferice.
Microcontrolerul operează la frecvențe reduse, în general la câteva zeci sau sute de MHz, ele
fiind folosite întro -o gamă larga de aplicații atât în mediul industrial cât și în produse de larg consum.
De asemenea, o altă caracteristică importantă a unui µC este faptul că acesta execută un program
încărcat pe acesta și dedicat unei singure funcționalități. [3]
Fig. 1.4. Arhitectura generică a unui microcontroler [3]
Cele mai întâlnite structuri din circuitul integrat al unui µC sunt:
a) Unitatea centrala de procesare (CPU) , ce are rolul a executa programele stocate în memoria
principală. Aceasta conține structuri speciale numite ALU (Unitate Aritmetico – Logica) car e
implementează functii logice și execută operații aritmetice de bază cum ar fi adunarea, scăderea,
înmulțirea și împărțirea.
b) Unitatea de memorie (MEM), a cărei funcție este de a înmagazina date. Aceasta este de două
feluri: memorie de date volatil ă (RAM) sau nevolatilă , pentru date sau program (Flash sau EEPROM –
Electricallz Erasable Programable ROM).
18
c) Porturi digitale de intrare -ieșire ; pentru interacțiunea cu mediul exterior, microcontrolerul
conține un bloc cu locații de memorie al căror capăt este conectat la magistrala de date iar conexiunea
cu liniile de ieșire reprezintă chiar pinii microcontrolerului. Aceste porturi se impart si e le în trei
categorii: de intrare, de ieșire sau de intrare /ieșire.
d) Semnalul de ceas (Timerul), este cel care oferă facilitatea de a măsura intervale fixe de timp
și de a genera întreruperi. Odată inițiat, acesta va funcționa independent de unitatea cen trală și va
permite eliminarea buclelor de delay din programul principal.
e) Un convertor analog -digital (ADC), folosit pentru a converti tensiunea analogică aplicată la
intrare într -o valoare digitală. Un sistem de calcul digital nu poate măsura semnale analogice decât dacă
acestea sunt convertite în valori numerice discrete. Numărul de valori discrete pe care convertorul poate
să le furnizeze la ieșire în intervalul de măsură reprezintă rezoluția convertorului, ea fiind exprimată în
biți, deoarece rezult atele conversiei sunt stocate intern sub formă binară.
f) Semnalul de întrerupere hardware, care este un semnal sincron sau asincron venit de la un
periferi ce semnalizează apariția unui eveniment ce trebuie tratat de către procesor. Tratarea întreruperii
aduce cu sine suspendarea firului de execuție normal al unui program și lansarea în execuție a unei
instrucțiuni de tratare a întreruperii.
O caracteristică importantă în ceea ce privește atât un microcontroler cât și un microprocesor
este arhitectura ce stă la baza acestora. Arhitecturile sistemelor de cal cul au venit cu îmbunătățiri
serioase odata cu dezvoltarea familiilor de procesoare Intel 8086.
Dacă pentru primele procesoare din familia Intel x86 s -a utilizat o arhitectură complexă
denumită arhitectura CISC (Complex Instruction Set Computer), începând cu procesoarele 486, prin
utilizarea conceptului pipeline (bandă de asamblare), arhitectura acestor procesoare s -a apropiat de o
structură de tip RISC (Reduced Instruction Set Computer) . [4]
Arhitectura CISC presupune un set de instrucțiuni foarte mare ce se execută în mai multe cicluri
mașină. Modurile de adresare pentru această arhitectură sunt în număr cât mai mare iar accesul la
memorie se face prin mai multe tipuri de instrucțiuni. [2]
Arhitectura RISC a fost dezvoltată începând cu anii ′70. Setul de instrucțiuni utilizate într -o
mașină RISC constă doar din instrucțiuni simple, cu moduri de adresare limitate. Ideea de bază a fost ca
procesorul să ofere un set restrâns de operațiuni pe care să le poată executa foarte rapid, cele mai multe
dintre ac estea executându -se într -un singur ciclu. Pe lângă un set redus de instrucțiuni, procesoarele
RISC oferă și alte avantaje, precum :
– operații pe registre, micsorând numărul de accese la memorie;
– memorie cache integrată pe cip, evitând astfel lucrul le nt cu memoria ;
– un model pipeline, pentru a permite procesarea mai multor instrucțiuni într -un singur ciclu
mașină; [4]
Există de asemenea și o versiune îmbunătățită a arhitecturii RISC, și anume arhitectura RISC
avansată, aceasta având următoarele particularitățiȘ
– folosește 4, 8, 16 sau 32 kbiți de memorie FLASH programabilă
– este compusă din 32 x 8 registre de uz general
– folosește 131 de instrucțiuni
– acceptă adăugarea de coprocesoare sau memorii cache [2]
19
Dezavantajul procesoarelor RIS C este că, având un set mai mare de registre, operațiile de
multitasking (multiprelucrare) necesită comutări de registre. [4]
Diferența esențială dintre arhitecturile CISC și RISC constă în capacitatea de generare a
instrucțiunilor mașină, direct executab ile, după cum se poate vedea în următoarea reprezentarea
schematică :
Fig. 1.5. Arhitecturi RISC și CISC [4]
În cazul microcontrolerelor proiectate pentru prelucrarea de semnal apare necesitatea
implementării algoritmilor de prelucrare digitală. Prelucrarea în timp real necesită de multe ori
executarea rapidă a unui volum mare de calcule în aceeași perioadă de eș antionare a semnalului, la o
vitezț mare de intrare a datelor. Din această cauză, multe procesoare folosesc o arhitectură paralelă,
care combină avantajele prelucrării pipeline cu cele ale structurii Harvard. [5]
Arhitectura Harvard folosește două memorii separate, una pentru coduri și una pentru date,
precum și căi separate pentru transferul acestor informații. Astfel, se poate realiza transferul operanzilor
simultan cu extragerea codurilor. [5]
Alte avantaje ale arhitecturii Harvard le constituie:
– viteza mare de lucru
– existența a două magistrale de date, una pentru program și una pentru datele programului
– memoria programului este de tip FLASH, ceea ce nu permite pierderea programului odată cu
întreruperea tensiunii de alimentare. [5]
Programarea unui microcontroler se face, după caz, în diverse limbaje de programare. Cu toate
acestea, unica formă de reprezentare a informației pe care o poate procesa un microcontroler este
limbajul mașină. Deși un programator utilizează preponderent lim bajul de asamblare, orice instrucțiune
are ca omolog o instrucțiune mașină. Avantajele limbajului de asamblare sunt viteza și faptul că este un
limbaj compact, de dimensiuni reduse.
20
Programarea într -un limbaj înalt se face cu ajutorul unui interpretor. Co mpilatoarele combină
astfel lejeritatea dată de un interpretor, programul fiind translatat direct în limbaj de asamblare sau în
limbaj mașină. Cu toate acestea, codul unui program scris într -un limbaj înalt ocupă net mai mult spațiu
decât codul scris în li mbaj de asamblare. De asemenea, limbajul de asamblare permite o mai bună
gestiune a codului si un mai bun control asupra fluxului de date și a gestiunii întreruperilor.
Fig. 1.6. Etapele realizării unui program în limbaj de asamblare [4]
21
1.3.2. Micr ocontrolerul ATMEL A TMe ga 328
Microcontrolerul ATMega328 este un microcontroler ce a fost creat de Atmel și face parte din
familia MegaAVR.
Fig. 1.7. Microcontrolerul ATMega328 [8]
Microcontrolerul conține 32 de regiștri de uz general, 32 KB de memorie FLASH cu capacități
de citire/scriere cu 1 KB EEPROM, 2 KB SRAM, fiind configurat pe o arhitectură de tip Advanced
RISC, având 131 de instrucțiuni, majoritatea executându -se într -un singur ciclu de ceas. [8]
ATMega328 dispune pentru sincronizare trei timere flexibile, surse de întrerupere atât interne
cât și externe și un timer de tip watchdog programabil cu oscilator intern. Ac hiziția de date se se
realizeazț prin intermediul magistralei de comunicație seriala USART, o interfață de doua fire, un port
serial SPI și un convertor Analog/Digital cu 6 canale de câte 10 biți. Ca și dispozitive de intrare/ieșire,
acesta dispune, conform schemei de mai sus, de 23 de porturi programabile , necesarul tensiunii de
alimentare fiind în intervalul 1.8-5.5 volți. Domeniul de temperatură suportată variază între ( -40 și + 85
°C), iar frecvența de lucru maximă este de 20 MHz.[8]
Într-un singur ciclu de ceas, microcontrolerul poate executa pâna la 1 MIPS (milion instruction s
per second) , echilibrând astfel consumul de energie și viteza de procesare.
Pentru a -și maximiza performața și paralelismul, ATMega328 folosește o arhitectură Harvard.
Instrucțiunile din cadrul programului sunt executate folosind tehnica pipeline: în timp ce o inst rucțiune
este executată, cea de -a doua este deja accesată din cadrul memoriei de program. [8]
Grație cipului de memoriei FLASH non -volatile, microcontrolerul poate fi reprogramat cu
ajutorul interfeței seriale SPI, fie tot cu ajutorul unui program cu memorie non -volatilă, sau cu ajutorul
unui program Bootabil încărcat pe cipul procesorului AVR.[8]
Ca și medii de programare, ATMega328 suportă o gamă variată de tool -uri și sisteme de operare
precum compilatoarele C, Macro Assemblers, diverse simulatoare si programe pentru debugging
22
precum și diferite emulatoare, acest microcontroler fiind folosit în d ezvoltarea aplicațiilor de tip
embedded.
Fig. 1.8. Schema b loc a Microcontrolerului ATMega 328 [8]
În ceea ce privește arhitectura unității centrale de procesare AVR, trebuie specificat faptul că
aceasta dispune de o unitate ALU performantă, capabilă să opereze cu toate cele 32 de registre
funcționale. Unitatea aritmetico -logică din cadrul acestui microcontroler poate executa atât operatii
aritmetice, logice, dar poate implementa și funcții binare.
Microcontrolerul ATMega 328 este încorporat pe cel e mai noi shield -uri Arduino, cu ajutorul
lor putându -se implementa diverse scheme/proiecte electronice .
23
1.3.3. Generalități Arduino
Proiectul Arduino a luat naștere în Italia în anul 2005 și a plecat de la necesitatea studenților de
a concepe proiecte cu ajutorul unei placuțe de dezvoltare mult mai ieftine decât clasica BASIC Stamp
folosită la acea vreme și care costa aproximativ 100 de dolari. Costul unei plăcuțe Arduino de ultimă
generație se învârte în jurul sumei de 30 de dolari. [10]
În ziua de azi, programarea unei placuțe Arduino este accesibilă oricui, mediul de dezvoltare
pentru acest microcontroler făcând parte din comunicatea ope n-source. [10]
Plăcuța Arduino este compusă dintr -un microcontroler Atmel AVR de 8, 16 sau chiar 32 de biți
și alte componente ce oferă posibilitatea încorporării cu alte circuite și sunt ușor de programat. Un
avantaj considerabil adus de placu ța Arduino este capacitatea acesteia de a se conecta la alte module
interschimbabile numite shiel -uri(scuturi – Ethernet, WIFI , modul GSM) grație pinilor digitali sau
analogici precum și a magistralei seriale I2C ce permite chiar utilizarea mai multor module in paralel. [10]
Arduino a avut integrat de -a lungul istoriei sale un microcontroler din familia megaAVR
(ATMega8, ATMega168, ATMega328) și începând cu anul 2015, a permis și integrarea altor cipuri
venite din partea altor producători. [10] [11]
Ca și elemente constructive ale unei plăcuțe Arduino, este de specificat prezența unui oscilator
cu cristal de 16 MHz și a unui regulator liniar de 5V. Frecvența sa de rulare poate scădea pana la 8
MHz. Grație microcontrolerului preprogramat, plăcuța poate fi folosită cu ușurință pe orice calculator,
ea fiind programată printr -o conexiune seriala de tip RS232. Conexiunea cu calculatorul se realizează
prin cadrul magistralei USB .[10]
În figura de mai jos, sunt prezentate o parte din plăcuțele Arduino:
Fig. 1.10. Exemple de plăcuțe Arduino[9]
1.3.4. Arduino Uno
Arduino Uno este o plăcuță cu microcontroler ATMega 328 încorporat. Ea are nevoie de o
tensiune de alimentare de 7 -12 V ce o primește în cadrul conexiunii USB sau cu o sursă DC (conectată
în mufa de alimentare printr -o priză de 2.1mm) și eliberează un curent de maxim 40mA pe fiecare pin.
[7]
24
Placa prezintă următorii pini de alimentare:
a) GND – masa, data de pinii de la sol
b) IOREF – pinii ce ofer ă tensiunea de referință a microcontrolerului
c) VIN – tensiunea de intrare furnizată de o sursă externă de alimentare
d) 5V – pinul ce emite regulat o tensiune de 5V
e) 3v3 – pinul ce reprezintă sursa de 3.3V, sursă ce dă reglementarea de la bord[11]
Fig. 1.10. Elementele constructive ale plăcuței Arduino UNO [7]
În figura de mai sunt enumerate caracteristicile plăcuței Arduino UNO, plăcuță ce cuprinde:
– Microcontroler ATMega328
– Pini pentru conectarea unei surse de alimentare DC
– 6 pini analogici
– 14 pini digitali
– Buton de Reset
– 2 Led -uri, RX și TX ce vor clipi în momentul în care datele sunt transmise câtre placă
– Un a daptor AC/DC
– Un regulator de tensiune
– Clock -ul ce lucrează la o frecvență de 16MHz
– Conectorul USB[7] [11]
Mai menționăm faptul ca Arduino UNO dispune de o memorie SRAM de 2kB și o memorie
EEPROM de 1kB. De asemenea, plăcuța are în componență și o siguranță cu rol de protecție a USB –
ului în caz de suprasarcină sau scurtcircuit, ea având posibilitatea de a întrerupe conexiunea și execuția
programului daca se aplică pe USB mai mult de 500mA. [7]
25
Programarea plăcuței se face cu un soft open -source ce poate fi descărcat de pe pagina
dezvoltatorului. Odată instalat, softul presupune selectarea plăcuței pe care dorim să lucrăm, altfel,
programul încărcat pe o altă plăcuță nu va rulat și executat corect. [6]
Programele Arduino se scriu in limbaj C sau C++ în cadrul proiectelor de tip Sketches eliberate
de mediul IDE Arduino . Odata scris, programul poate fi compilat, corectat de eventuale erori și rulat pe
plăcuța Arduino. [6]
Fig. 1.11. Selectarea plăcii Arduino potrivite din meniul Tools [6]
Verifică programul pentru erori
Incarcă programul în placa de dezvoltare
Crează un nou proiect
Deschide un proiect
Salvează proiectul curent
Monitorizare serială – acest buton este folosit pentru comunicarea prin portul serial cu
calculatorul
Fig. 1.12. Butoanele aferente zonei de meniuri [6]
26
Capitolul 2. Senzori și elemente de control
2.1. Rețeaua de Ethernet
Ethernet este o arhitectură de rețea locală deyzvoltată în 1976 de către firma Xerox în
parteneriat cu cei de la Intel și DEC. Arhitectura utilizează o topologie de transfer de tip magistrală sau
stea și suportă o rată de transfer de până la 10Mbps. Versiunea mai nouă a acestei arhitecturi (Fast
Ethernet) suportă o viteză de transfer de până la 100Mbps. În alc ătuirea sa, rețeaua utilizează cabluri cu
perechi răsucite, prin intermediul lor fiecare placă conectându -se la echipamentul central (hub, switch),
formând o topologie de tip stea. [14]
Elementele constructive ale unei rețele de Ethernet sunt:
a)Serverul/Serverele
b)Stații de lucru
c)echipam ente de comunicații LAN sau WAN
Serverul este calculatorul central al rețelei care gestionează resursele acesteia. Pe el sunt
instalate aplicațiile pe care ceilalți membrii ai rețelei le pot folosi și de asemenea tot el gestionează tot
traficul din rețea. [14]
Stația de lucru este un alt calculator legat la server și care depinde implicit de acesta pentru a
putea efectua anumite operații (accesul la Internet, lansarea și folosirea de aplicații, folosire a unei
imprimante locale). [14]
Echipamentele de comunicații din cadrul acestei rețele se împart în mai multe categorii, în
funcție de tipul rețelei. Astfel, pentru o rețea tip LAN se folosesc switch -uri, respectiv hub -uri, iar
pentru o rețea de tip LAN se folosesc routere. [14]
Hub-ul este un dispozitiv cu mai multe porturi de intrare folosit pentru interconectarea prin
cabluri UTP a calculatoarelor unei rețele. Rolul Hub -ului este de a amplifica semnalul primit de la
host(gazdă) și de a -l distribui căt re celelalte calculatoare. [14]
Switch -ul este un dispozitiv de rețea care ajută la transmiterea pachetelor de date către celelalte
segmente ale reteței. Acest mod de comunicare este posibil grație unui tabel de redirecționare compus
din adresa MAC si nu marul portului destinație la care traficul de date trebuie sa ajungă. Odată ce datele
sunt recepționate, este analizată adresa MAC de destinație care este apoi cautată în tabela de
redirecționare. În acest fel, switch -ul redirectionează întreg fluxul de d ate către stația destinație print -un
canal de comunicație complet izolat de traficul generat de celelalte interfețe. Astfel, crește numărul
coliziunilor și creste viteza de trasfer. [14]
Router -ul este un alt element de rețea ce determină următorul punct din rețea la care este
transmis pachetul de date pâna ca acesta să ajunga la destinația finală. Prin urmare, putem spune ca
router -ul este conectat la cel putin două rețele. Un router dispune și el de un tabel al rutelor disponibile
și calculează pe baza u nor algoritmi interni calea cea mai accesibilă din punct de vedere al distanței
parcurse și al costurilor necesare drumului. [14]
Schemele de adresare si conținutul pachetelor de date este dat de adresa IP(Internet Protocol).
IP-ul stabilește legătura înt re sursă și destinație grație protocolului TCP (Transmision Control Protocol)
, protocol de comunicație ce asigură livrarea ordonată a unui flux de octeți, el controlând mărimea
fluxului de date, debitul de informație și rata la care se face transferul de date. [14]
27
Fig. 2.1. Topologia unei rețele de Ethernet
Conectarea la o rețea se face fizic(hardware) prin intermediul plăcii de rețea iar din punct de
vedere software prin adresa IP. Adresa IP este atribuită de fiecare dată unei interfețe de rețea, ci nu unui
calculator.
În cadrul unei rețele locale, adresa IP trebuie să fie unică, pentru a evita eventualele
netransmiteri de date, suprapuneri de informații sau transmisiuni incomplete între sursă și destinație (un
pachet mare de date se sparge în mai multe pachete mai mici care vor fi transmise pe rând, ele
reunindu -se la destinație). O adresă IP este formată din patru octeți separați de caracterul ˶.'' (punct),
fiecare octet putând lua valori între 0 și 255. Fiecare adresă IP are două componente – o componentă de
rețea ce împarte spațiul de adresare în mai mu lte clase (A,B,C,D) și o componentă de host, ce determină
numarul de echipamente ale rețelei. [14]
Adresele IP se mai impart de asemenea în adrese publice și adrese private , cele private fiind
folosite de obicei în cadrul instituțiilor . Astfel, gama adreselor IP private este:
• de la 10.0.0.0 până la 10.255.255.255
• de la 172.16.0.0 până la 172.31.255.255
• de la 192.168.0.0 până la 192.168.255.255
Ethernetul folosește un sistem local de adresare unic ce se bazează pe adresa MAC. Adresa
MAC este scrisă într -o memorie ROM și încărcată in RAM la inițializarea interfeței de rețea. Ea devine
astfel unică și doar sistemul de operare este capabil să învețe să foloseasca o altă adresă de acest tip. [13]
28
În ceea ce priveste un microcontroler, placa de Ethernet este un shield auxiliar sau chiar integrat
pe plăcuța respectivului microcontroler ce permite utilizatorului accesarea internetului prin simpla
conexiune cu un cablu de rețea.
Shieldul de Ethernet Arduino este un modul auxiliar conectat la plăcuța Arduino Uno. Shield -ul
păstrează caracteristicile plăcuței Arduino (14 pini de intrare/ieșire, 6 intrări de tip analogic, o frecvență
a oscilatorului de 16MHz, o conexiune seriala de tip RJ45, o mufă de al imentare și un buton de reset),
dar se deosebește de plăcuța clasică prin faptul ca nu dispune de un port USB de conectare serial, ci
dispune de o interfață de tip Wiznet ce facilitează conexiunea la internet. [15]
De asemenea, acest shield dispune de un card reader microSD ce poate fi folosit pentru stocarea
fișierelor necesare traficului online. Din punct de vedere al distribuției pinilor, pinul 10 este rezervat
interfeței de Wiznet, în timp ce pinul 4 este folosit strict pentru cardul SD.
În ceea ce p rivește comunicarea, shieldul Arduino de Ethernet poate comunica atât cu un
calculator cât și cu altă placuță Arduino sau alte micrcocontrolere. Comunicarea prin intermediul
internetului se face conectând cablul de internet în interfața menționată mai sus și specificând de fiecare
dată o adresă IP si MAC aferentă comunicării.
Din punct de vedere al programării unui astfel de shield, interfața open -source dispune de mai
multe librării ce trebuiesc incluse în programul ce urmează a fi încărcat pe plăcuță. A stfel, librăriile de
Ethernet și SD sunt necesare pentru a putea rula un astfel de cod. De asemenea, în cazul unei linii de
comunicație dintre shieldul de Ethernet Arduino si un calculator, trebuiesc făcute setările de rigoare și
pe calculator, nu doar în sketch -ul Arduino. Astfel de setări presupun rezervarea unui IP și a unei adrese
MAC unice, recunoscubile de către calculator. [15]
Fig. 2.2. Placă Arduino Uno cu Shield de Ethernet [15]
29
2.2. Senzor de temperatură și umiditate
Progresul continuu întâlnit in domeniul automatizării sistemelor necesită folosirea unor
componente capabile să primească și să transmită totodată informații referitoare la procesul de
producție. Acest rol în cadrul sistemelor automate este jucat de către senzori, e i furnizând informații
vitale unui control sub forma unor variabile de proces. O variabilă de proces este o marime fizică ce
caracterizează procesul tehnologic respectiv (temperatură, presiune, forță, lungime, debit, etc.)
Un senzor este un convertor ce t ransformă o mărime fizică într -o mărime mai ușor de evaluat, în
mod uzual, într -o mărime electrică. El este un dispozitiv care poate monitoriza un proces prin
semnalizarea erorilor și analiza acestora și totodată, păstrează legătura și cu alte componente a le
sistemului.
Există pe piața echipamentelor si dispozitivelor electronice sisteme multisenzori – sisteme
alcătuite din senzori de același tip sau de tipuri diferite ce fac parte din același dispozitiv electronic. Un
astfel de sistem foarte des întâlnit este format dintr -un senzor de temperatură și unul de umiditate.
Răspunsul dat de către un senzor este dat de tipul semnalului electric aflat la ieșirea acestuia.
Cele mai răspândite și utilizate semnale ce fac referire la răspunsul unui senzor sunt semna lele de tip
binar și cele de tip analogic. De regulă, senzorii sunt conectați direct la un PLC (Programmable Logical
Controller), semnalul eliberat de ei fiind preluat și transmis mai departe pentru prelucrare. [17]
Traductorul este dispozitivul ce face c a unei mărimi de intrare să îi corespundă o mărime de
ieșire, conform unei legi bine determinate. Traductorul poate avea și el în structura sa unul sau mai
mulți senzori. Funcționarea unui traductor presupune ca semnalul furnizat de acesta la ieșire reprez entat
sub forma unei marimi masurabile, să fie accesibil dispozitivelor de automatizare. Astfel, semnalul
preluat la intrare trece printr -o serie de operații de conversie însoțite totodta de operații de transformări
energetice bazate fie pe energia asociat ă mărimii preluate din proces, fie pe cea provenită din sursele
auxiliare. Schema următoare este schema structurală a unui traductor: [18]
Fig. 2.3. Structura generală a unui traductor [18]
D (ES) – detectorul (elementul sensibil)
ET – elementul de transmitere (transfer)
A – adaptorul
SEA – sursa de energie auxiliara
x – marimea fizica aplicată la intrarea traductorului (temperatură, debit, presiune, turație, viteză)
y – semnalul rezultat la ieșirea traductorului (curent, tensiune, presiune)
30
Detectorul (senzorul), este elementul ce detectează mărimea fizică pe care traductorul trebuie sa
o măsoare. Cum în mediul în care detectorul trebuie să funcționeze există și alte mărimi fizice înafara
celei măsurate de traductor, ac esta trebuie sa identifice doar informațiile și variațiile mărimii x,
informații ce nu trebuie alterate de prezența altor mărimi d in proces. În urma interacțiunii dintre
mărimea de măsurat și detector, grație unor fenomene fizice existente în proces, rezul tă o modificare a
de stare a detectorului , modificare ce presupune un consum energetic preluat de la proces, răspunsul
final fiind chiar determinarea valorii mărimii de măsurat. [19]
Măsurarea temperaturii se bazează pe efecte fizice determinate de vari ația temperaturii, cum ar
fi dilatarea solidelor, lichidelor sau a gazelor, variația rezistenței electrice, tensiunea electromotoare la
joncțiunea a două metale, intensitatea radiațiilor emise, etc.
Termistorul este un senzor de temperatură rezistiv. Rez istența acestuia este puternic dependentă
de temperatură, având o caracteristica curent -tensiune neliniara. Odată cu variația temperaturii cu un
grad, valoarea rezistenței termistorului se modifică cu valori de ordinul procentelor, astfel, există
posibilit atea ca într -un interval îngust de temperatură să -și înjumătățeasca sau să -și dubleze valoarea
rezistenței. [19]
Conducția electrică într -un termistor are loc prin saltul purtătorilor de la un atom la altul.
Dependența rezistivității în funcție de temperatură este una neliniară si este dată de următoarea ecuație:
(2.1)
ρ∞ – rezistivitatea pentru T →∞
Ea – înălțimea barierei de potențial dintre două poziții localizate ale atomilor vecini
K – constanta lui Boltzman ( 1,380 650 4×10−23 J K−1)
T – temperatura
Coeficientul termic α al rezistivității este:
(2.2)
B = E a/K.
Valoarea energiei de activare E a este in jur de 0.3 eV.
Întrucât dependenta aceasta este una neliniară, pentru a putea obține într -un domeniu îngust de
temperatură un răspuns linear în raport cu temperatura a rezistenței R T a unui termistor, s -au recurs la
introducerea în circuit, în fnctie de t ipul sursei folosite, a unui rezistor de rezistență R. [18]
Fig. 2.4. Rezistență serie în cazul folosirii unei surse de tensiune constantă
31
Fig. 2.5. Rezistență R1 paralel în cazul folosirii unei surse de curent constantă
Bineînteles, ca și în cazul oricărei măsurători, există șansa apariției unor erori. Pentru a diminua
acestă problemă, rezistența R 1 a rezistorului este proiectată în felul următor: [18]
(2.3)
B = E a/K
T – temperatura medie a domeniului de lucru
R – rezistența termistorului la temperatura T
Umiditatea se referă la vaporii de apă conținuți în aer. Măsurarea umidității din aer este
condiționată de trei unități functionale diferite: umiditatea absolută, punctul de rouă și umiditatea
relativă (RH).
Punctul de rouă este temperatura și presiunea la care un gaz începe să condenseze într -un lichid,
în timp ce umiditatea relativă se referă la raportul conținutului de umiditate din aer n comparație cu
umiditate a saturată la aceeași temperatură si presiune.
De cele mai multe ori, senzorii capacitivi de umiditate se găsesc pe piață sub forma unor circuite
integrate. De altfel, un sistem modern, reunește, asa cum am menționat mai sus mai mulți senzori. Un
astfel de exemplu ce poate fi integrat controlat cu ajutorul placuței Arduino este senzorul DHT11, un
senzor complex de umiditate și temperatură ce oferă la ieșire un semnal digital reglabil. Cu ajutorul
tehnicii de achiziție digitală a semnalului de intrare si a celor doi senzori, de temperatură și umiditate
sistemul oferă date exacte și răspuns in timp real. Senzorul de temperatură funcționează cu ajutorul
unui termistor NTC conectat la un microcontroler de 8 biți și oferă posibilitatea prelevării datelor din
mediul extern și afișarea lor într -o interfață virtuală. [17]
Fig. 2.6. Senzor de temperatură și umiditate DHT11
32
Un termistor NTC reprezintă un termistor cu coeficient de temperatură negativ, prin urmare, el
are caracteristica termină de forma celei di n figura de mai jos:
Fig. 2.7. Caracteristica termică a termistoarelor NTC la scară liniară (a) și logartimică (b) [19]
Coeficienții de calibrare ai senzorului de umiditate sunt implementați ca și programe în
memoria OTP a sistemului . Comunicarea cu microcontrolerul se face cu ajutorul interfeței seriale pe o
magistrală uni -bus, această componentă având patru pini dispuși pe un singur rând.
În ceea ce priveste comunicarea cu microcontrolerul, un set complet de date transmis de către
DHT11 are o lungime de 40 de biți. Senzorul se activează doar în urma primirii unui semnal de înițiere
din partea microcontrolerului, moment în care răspunde la rândul său cu un semnal de 40 de biți ce
conține informații cu privire la temperatură si umidi tate, informații ce sunt trimise către microcontroler.
De menționat este faptul ca în momentul acceptării semnalului de validare, DHT11 trece din stand -by
în modul de lucru și revine în stand -by odată ce toate datele de temperatură si umiditate au fost
prelevate și transmise mai departe, senzorul nefuncționând in lipsa unui semnal de activare. [17]
Cand semnalul de pe magistrala de date se află pe frontul negativ, are loc transmiterea
semnalului de răspuns din partea senzourului DHT. Odata ce semnalul de răspuns a fost trimis,
magistrala trece pe front pozitiv pentru o perioada de 80µs și se pregătește transmiterea datelor.
Transmiterea se face bit cu bit, începând cu un semnal de 50µs pe front negativ, lungimea următorului
semnal de pe frontul pozitiv ind ică daca bitul transmis este ,,0 " sau ,, 1". Totodată, pentru a verifica
corectitudinea transmiterii datelor, se evidențiază faptul ca lipsa oscilațiilor între fronturile semnalului
determină clar o nefuncționalitate a sistemului. [17]
Fig. 2.8. Transmiterea unui bit de date[17]
33
2.3. Senzor i de mișcare
Pentru detectarea mișcării, în general, se folosesc senzori de proximitate. Senzorii de
proximitate permit depistarea si semnalizarea obiectelor aflate în câmpul lor de acțiune fără a forma
contact fizic cu obiectul.
Răspunsul unui astfel de senzor este de tipul adevărat sau fals, senzorul depistând mișcare în
preajma sa, sau nu. În cadrul acestui tip de senzor nu întâlnim o schimbare a stării detectorului, așa cum
a fost cazul senzorului de te mperatură. [18]
Un exemplu din categoria senzorilor de mișcare sunt senzorii pasivi cu infraroșu (senzori PIR).
Un senzor PIR măsoară în infraroșu (IR) lumina radiată de obiectele aflate în câmpul lor vizual.
Mișcarea este detectată atunci când un corp trece prin fața sursei infraroșu cu o altă temperatură. Astfel,
senzorul detectează căldura de la trecerea unui obiect prin câmpul său de acțiune. De altfel, orice obiect
activează un senzor PIR dacă se deplasează în câmpul vizual al acestuia, întruât oric e corp emite
energie sub formă de radiații . Radiațiile infraroșii nu sunt vizibile pentru ochiul uman, dar pot fi
detectate de dispozitive electronice concepute special cu acest scop. [18]
Detectoarele de radiații infraroșu primesc energie de la obiectele aflate în câmpul lor vizual dar
depistează în schimb schimbarea acestei energii. Conform spectrului electromagnetic, radiațiile
infraroșii au o lungime de undă cuprinsă între 700 nm și 1 mm și emit o energie fotonică între 1.24
meV și 1.7 eV .
Părțile co mponente ale unui senzor de mișcare sunt:
• partea optică
• senzorul propriu -zis
• circuitul de procesare
Partea optică focalizează energia termică pe senzorul de captură cu ajutorul unei lentile Fresnel
ce reprezintă zona de acoperire a detectorulu i. Senzorul convertește energia infraroșie în semnal electric
iar circuitul de procesare analizează acest semnal și stabilește verdictul în cazul detecției sau nu.
Circuitul măsoară relația complexă între amplitudinea semnalului, polaritatea acestuia și du rata,
declanșând în final un semnal de avertizare către sistemul la care e conectat.
Fig. 2.9. Schema funcțională a unui senzor de mișcare [20]
Senzorul piroelectric este alcătuit dintr -un material cristalin ce formează o suprafață ce se
încarcă electric in momentul expunerii acesteia la căldură venită sub formă de radiații infraroșii. În
momentul coliziunii dintre partea cristalină si radiația pr opriuzisă, încărcătura electrică poate fi
34
măsurată cu ajutorul unui dispozitiv încorporat in senzor. Între acest dispozitiv si amplificatorul de
comandă există o rezistență de aproximativ 100kΩ ce stabilizează semnalul. Amplificatorul are banda
limitată la 10 Hz pentru a putea rejecta frecvențele înalte și zgomotul nedorit și este urmat de un
comparator ce este capabil să răspundă atât tranzițiilor pozitive ale semnalului venit cât și celor
negative. Drena tranzistorului component al PIR -ului este alimentat ă la o sursa de 3 -15V. [20]
Principiul de funcționare al PIR -ului este descris în schema de mai jos. Un corp aflat în mișcare
ce trece prin fața senzorului va activa cei doi receptori. Sursa de radiație trebuie să traverseze sursa în
direcție orizontală, moment în care pinii 1 și 2 sunt la rândul lor plasați tot orizontal, astfel încât
elementele constituente ale pirului sa fie expuse sursei infraroșii.
Fig. 2.10. Funcționarea senzorului de mișcare [20]
Senzorul infraroșu folosit pentru detectarea radiațiilor IR este încapsulat într -o cutie de metal
izolată ermetic cu scopul de a preveni apariția zgomotului sau a altor influențe cauzate de modificări de
temperatură și umiditate. În figura de mai jos este detaliat un astfel de senzor. De remarcat este prezența
unui tranzistor JFET capabil să atenueze impedanța senzorului astfel încât aceasta să poată fi folosită de
un circuit integrat. [20]
35
Fig. 2.11. Schema senzorului PIR [20]
Un tranzistor unipolar (cu efect de câmp – FET) este un dispozitiv semiconductor întâlnit în
foarte multe componente ale circuitelor integrate analogice și numerice. El are conductanța căii
semiconductoare de curent comandată de un câmp electric extern. Această cale de curent, denumită și
canal, este un semiconductor de tip N sau P la capetele căruia sunt sudați doi electrozi numiți sursă (S)
și drenă (D). Prin acest canal circulă curentul de drenă I D care este asigurat prin deplasarea unui singur
tip de purtători mobili de sarc ină. FET -urile se comportă între drenă și sursă ca un rezistor cu rezistență
comandată sau ca o sursă comandată de curent, această comandă realizându -se cu ajutorul tensiunii
aplicate între electrodul de comandă (grila tranzistorului) și sursa tranzistorul ui. [21]
JFET -ul face parte din familia tranzistoarelor cu efect de câmp cu grilă joncțiune și este un
tranzistor al cărui canal este realizat în volumul substratului semiconductor. Sensul de circulație al
purtătorilor mobili de sarcină prin canal pentru orice familie de tranzistoare este de la sursă la drenă, iar
la baza funcționării tranzistoarelor se află efectul de câmp. Efectul de câmp constă în controlul
curentului de drenă al tranzistorului iar pentru un JFET, acest curent de drenă este controlat pr in
grosimea efectivă a canalului. [21]
Tranzistoarele de tip FET prezintă o serie de avantaje ce justifică gradul lor mare de răspândire:
• au dimensiuni foarte mici în tehnologie integrată, motiv pentru care sunt preferate în dauna
tranzistoarelor bipol are.
• pot substitui o rezistență variabilă convenționala, grație comportării de tip rezistență controlată
în tensiune, între drenă și sursă (în anumite condiții de polarizare)
• au o rezistență de intrare foarte mare și o capacitate de intrare foarte mică, lucru care
recomandă folosirea acestor tranzistoare în circuitele de memorare.
Un JFET are în structura sa două joncțiuni PN (grilă -canal și canal -substrat), ale căror
componente delimintează partea activă a componentei. Pentru o tensiune de polarizare inversă a
joncțiunilor, largimile regiunilor de trecere sunt foarte sensibile. Astfel, un control eficient al curentului
de drenă se obtițne doar dacă cele două joncțiuni sunt po larizate invers. La o temperatură normală de
lucru, curentul de grilă este neglijabil (I G 0) și I S = I D + IS ID. Curentul de grilă foarte redus,
aproximativ zero, asigură comanda avantajoasă din punct de vedere al consumului de putere și o
rezistență foarte mare între electrozii G și S ai tranzistorului. Polarizarea inversă are loc diferit, în
funcție de tipul canalului. Astfel, pentru un JFET cu canal N, condițiile ce trebuiesc îndeplinite sunt ca
36
UGS ≤ 0 și U DS > 0, iar în cazul canalului P , U GS ≥ 0 și U DS > 0. Tensiunea de polarizare inversă U GC
variază în lungul canalului, astfel, lărgimea regiunii de trecere va crește de la sursă la drenă[21]
Principiului de funcionare, al unui JFET cu canal N, este analizat în două cazuri particulare : U GS
≤ 0 (variabilă ) și UDS = 0 , respectiv U GS>UP (tensiunea de prag constantă ) și UDS>0 variabilă.
Pentru UDS = 0 și UGS ≤ 0, regiunea de trecere. va avea aceeași lărgime pe toată lungimea
canalului. Cum UDS = 0, se obține curentul I D=0. Tensiunea de prag notată U P este tensiunea U GS
pentru care grosimea canului se anulează. Ea depinde de temperatură si de datele tehnologice ale
tranzistorului JFET. Între drenă și sursă, există posibilitatea echivalării tranzistorului cu un rezistor de
rezistență variabil a R VV, rezistență comandată de tensiunea U GS. [21]
Pentru situația în care UGS>UP și și U DS = 0, închiderea canalului are loc doar prin acționea
combinată a tensiunilor UGS și U DS, sau în cazul în care UGS = 0, doar prin acțiunea tensiunii UDS.
Curentul I D va avea o creștere crește lent, odată cu creșterea tensiunii U DS, grație scăderii canalului de
conducție. Tensiunea drenă -sursă de închidere a canalului U DSP se atinge atunci când U GD=U P și este
egală cu diferența tensiunilor U GS și U P. [21]
Curentul de saturație este curentul ce străbate canalul la U GS=0 ȘI U DS=-UP și e dat de ecuația:
Acest curent de saturație, I DSS, este un parametru de catalog al tranzistorului, cu valori de
ordinul mA și este un curent ce depinde de temperatură și de d atele de fabricație ale dispozitivului.
Curentul I D devine independent de tensiunea U DS odată cu închiderea canalului (U DS ≥ U DSP) iar
tranzistorul tree în regimul de funcționare de saturație în curent. În acest moment, el se comportă ca o
sursă comandat ă de curent, curentul I D fiind dat de următoarea formulă: [21]
Pentru un tranzistor JFET cu canal P, comportarea este asemănătoare în aceleași condiții de
funcționare, diferențele constând doar în polaritățile opuse ale tensiunilor U DS și U GS, ale tensiunilor U P
și UDSP și în inversarea sensului curentului I D. [21]
37
2.4. Emitor ș i receptor infraroș u
Un emitor infraroșu este o sursă de energie luminoasă cu spectrul în infraroșu, cu alte cuvinte, o
diodă de tip LED folosită pentru a emite semnale infraroșii de la o sursă de control. Cu cât prezența
acestora este în număr cât mai mare, cu atât semnalul rezultat este mai bu n. Astfel, o telecomandă cu
emitor puternic poate fi folosită și fără nevoia de a indica fix în directia device -ului ce se dorește a fi
controlat. [22]
Un receptor infraroșu este un echipament hardware capabil să primească și să decodifice
semnalul infrar oșu primit de la o telecomandă. În general, un astfel de receptor este capabil să preia
semnalul infraroșu, semnal care ulterior este decodificat și prelucrat în vederea folosirii lui și de către
alte device -uri. Receiver -ul joacă rolul elementului capabil să preia comenzi în infraroșu și nu are o arie
de acoperire prea mare. [22]
Fotodioda este un dispozitiv optoelectronic, realizat dintr -o joncțiune pn fotosensibilă ce
funționează în polarizare inversă. Capsula unei fotodiode este formată dintr -o fantă transparentă sub
forma unei ferestre plane și permite pătrunderea luminii către joncțiunea pn.
Structura unei fotodiode este prezentată în schema următoare:
Fig. 2.12. Structura și simbolul fotodiodei.
Materialul de bază folosit în această structură este siliciul dopat N, la suprafața căruia este un
strat mai subtițre, de tip P. Suprafața activă a diodei este acoperită cu un strat de monoxid sau bioxid de
silicu cu rol de protecței și antireflectorizant. Joncțiunea pn se formează între cele două straturi, iar
zona din vecinătatea acestei joncțiuni se numește "Regiunea sărăcită de purtători " întrucât aici siliciul
este golit de purtătorii de sarcină liberă. Adâncimea acestei zone se modifică în funcțtie de valoarea
tensiunii inverse aplicată la terminalele fotodiodei. Cu cât tensiunea de polarizare inversă a fotodiodei
crește, cu atât adâncimea regiunii se mărește și scade capacitatea joncțiunii pn. [23]
Cu ajutorul fotodiodei, energia radiației luminoase se transformă în energie electrică prin efect
fotovoltaic în prezența barierei de potențial. Purtătorii din apropierea regiunii pn sunt preluați de
câmpul electric din regiunea de sarcină spațială și sunt transferați in regiunea în care sunt majoritari.
Creșterea număru lui de purtători duce la reducerea barierei de potențial, astfel, are loc creșterea
purtătorilor minoritari prin joncțiune, regiunea p devine încărcată pozitiv iar cea n devine încărcată
negativ. Rezultatul final constă în apariția unei tensiuni electrice directă în circuitul extern, în cazul în
38
care acesta este deschis, sau a unui curent de scurtcicuit printr -o rezistență de valoare redusă conectată
între anod și catod. [23]
Printre alte caracteristici ale fotodiodei specificăm și caracteristica spectrală , cea care indică
răspunsul fotodiodei în funcție de lungimea de undă λ a radiației luminoase. Domeniul spectral de
utilizare în cadrul fotodiodei cuprinde radiațiile vizibile și infraroșii. [23]
Caracteristica curent -tensiune a fotodiodei pentru diferite intensități ale radiației incidente este
reprezentată în schema de mai jos. Curba ce trece prin originea sistemului de axe corespunde valorii
zero a curentului (lipsa iluminării). [23]
Fig. 2.13. Caracteristica curent – tensiune a unei fotodiode[23]
Capitolul 3. Interfa ța WEB
3.1. Elemente de design
În ceea ce privește modul de acces la informația stocată pe un calculator prin intermediul rețelei
de internet, comunicațiile electronice au venit cu mai multe moduri si protocoale în vederea gestiunii
acestei probleme: FTP (File Transfer Protocol) – un serviciu pentru transferul fișierelor, Telenet – un
serviciu pentru accesul de la distanță la resursele unui calculator, Electronic Mail – serviciul de
mesagerie electronica, News – serviciul de știri și probabil cel mai cunoscut sistem dintre toate, World
Wide Web – o metodă de acces la informația stocată pe un calculator aflat oriunde în lume.
Paginile web au următoarele caracteristici:
• sunt multimedia, deci conțin informații sub formă de imagini, text, sunet, film.
• sunt interactive, user friendly și răspund cererilor utilizatorului
• sunt independente atât hardware cât și software de orice platformă (adică se văd la fel pe orice
calculator, indiferent de sistemul de operare sau browserul folos it). [24]
Serverul Web este un calculator pe ține un Site Web și care e capabil să răspundă cererilor
utilizatorilor de pagină. Pentru a putea răspunde constant acestor cereri, calculatorul rulează permanent
o aplicație de tip httpd. Cele mai întâlnite e xemple de astfel de servere sunt Apache Server, Microsoft
Web Server și Oracle Web Server. [24]
Site-ul Web este o colecție organizată de pagini Web. Pagina Web este un fișier cu extensie
.html în care sunt stocate texte, programe, imagini, filme, sunete, etc.
Pentru a putea comunica între ele, calculatoarele folosesc un set de reguli ce formează un
protocol. Serviciul www utilizează ca și protocol de comunicare între un client și serverul la care acesta
39
dorește să aibă acces așa numitul HiperText Transf er Protocol (HTTP), în traducere, Protocolul de
Transfer al Hipertextului. [24]
Un astfel de fișier ce conține hipertext este scris în limbaj HTML – Hiper Text Markup
Language. Acest limbaj permite inserarea de text, imagini, sunete, indicatori de prezentare a
informației, permite creearea legaturilor cu alte pagini sau rularea altor aplicații. [24]
Așa cum am menționat mai sus, informația circulă p e Internet sub formă de pachete de date. Un
astfel de pachet conține adresa expeditorului și a destin atarului, informația propriuzisă precum și
informții cu privire la clientul care a formulat cererea și serverul care va procesa respectiva cerere.
Aceste pachete sunt dirijate pe internet prin intermediul IP -ului (Protocolul Internet). [24]
O pagină web p oate fi vizualizată pe calculatorul unui client prin intermediul unei aplicații
numite browser web. Această aplicație permite accesul la informații, formatarea informațiilor și
afișarea lor. Cele mai răspândite și utilizate browsere sunt Google Chrome, Mo zilla Firefox, Opera și
Internet Explorer. Legătura dintre un client și un server web este exemplificată in schema urmatoare[24]:
Fig. 3.1. Schema desfășurării comunicării pe Internet
Crearea unei pagini web presupune parcurgerea următorilor pași:
1. Definirea și editarea fișierului html:
– pentru acest punct de pot folosi editoare obișnuite cum ar fi Notepad++, Wordpad sau
un editor de text dedicat – Netscape Composer
2. Salvarea paginii Web cu extensia .html sau .htm
3. Definirea referințe lor conținute în respectiva pagină web – pagini de legătură, imagini,
sunete, filme, aplicații externe, etc.
În urma parcurgerii pașilor enumerați mai sus, respectiva pagină web poate fi vizualizată prin
intermediul unui browser.
Limbajul HTML este limba jul folosit pentru descrierea paginilor web. Fiecare element
constructiv ale paginii web este marcat prin semne speciale ale limbajului numite Taguri. Tagurile sunt
perechi care indică începutul și sfârșitul unui element structural din cadrul paginii web. [24]
În tabelul următor sunt enumerate principalele Taguri HTML împreună cu rolul și atributele lor:
40
TIP TAG ROL ATRIBUTE
Taguri
structurale <html>…</html> Incadrează
pagina HTML
<frameset>…</frameset> Descrierea unei configura ții de
cadre src, name, scrolling,
marginwidth,
marginheight
<head>…</head> Incadrează antetul paginii
<title>…</title> Incadrează titlul paginii
<body>…</body> Incadrează conținutul propriuzis
al paginii bgcolor, background,
text,link,vlink,alink
Alte
elemente <p>…</p> Incadrează un paragraf
<br /> Rand nou clear
<hr /> Linie orizontală
Elemente
referitoare la
stil <em>…</em> Scoate in evidență textul (de
obicei italic)
<strong>…</strong> Bolduiește textul
<i>…</i> Text italic
<u>…</u> Text subliniat
<font>…</font> Schimbă fontul textului Face, size, color
Heading -uri <h1>…</h1>
……………….
<h6>…</h6> Incadrează un text care va fi
scos
în evidență.
Liste <ol>…</ol> Listă ordonată type, start
<ul>…</ul> Listă neordo -nată
<li>…</li> Element al unei liste value
Legături <a>…</a> Crează o legătură href,name
Imagini <img /> Inserează o imagine src,alt,align,
hspace, height, width
Tabele <table>…</table> Incadrează o
tabelă border, cellspacing,
cellpadding,width
<td>…</td> Incadrează o
celulă a tabelei align,valign
Formulare <form>…</form> Incadrează un
formular action, method
<select>…</select> Definește un
control menu name,size,multiple
Multi -media <a>…</a> Legarea unui clip href
<img /> Includerea unui
clip video(IE) dynsrc, loop, start
Tab. 3.1.Tag -uri HTML utilizate în proiectarea site -urilor web[24]
41
Stilizarea paginilor web se face, în particular, cu ajutorul foilor de stil (CSS – Cascading Style
Sheets). Acestea descriu modul în care documentele Web sunt prezentate (culoare, aspect, margini). [25]
Combinarea foilor CSS cu paginile HTML se poate face în patru modui diferite:
• utiizarea elementului LINK ce face legătura cu o foaie externă de stil
• utilizarea elementului STYLE în cadrul tag -ului <head>
• importân d o foaie de stil cu ajutorul comenzii CSS '@ import
• asocierea atributului STYLE elementului dorit a fi stilizat din corpul documentului <body>
Pentru definirea stilului ce se vrea aplicat unui element din interfata web trebuie definit un
selector – cel care indică elementul asupra căruia acționează regula și blocul declarațiilor – spațiul ce
descrie condițiile de redare fizică a elementului și c are este limitat de acolade. [25]
O foaie de stil externă va fi scrisă cu un editor de text si salvată cu extensia .css . [25]
Fig. 3. 2. Stilizarea unor butoane în limbaj CSS
Pentru a facilita o interfață cât mai user friendly, capabilă să execute nu doar comenzi simple, ci
să preia informații si din exterior (de exemplul, prelevarea informațiile venite la niște senzori), paginile
web moderne au nevoie de aportul limbajelor de scripting. Javascript este un limbaj destina să
manimuleze, automatizeze și să integreze facilitățile oferite de un anumit sistem. Acest limbaj își face
simțită prezența în cadrul documentelor html cu ajutorul tagului <script>.
Javascript este folosit pentru serializarea datelor în contextul Web prin transfer asincron de date
între serviciile Web și aplicațiile clientilor. Este un limbaj de programare orentată pe obiecte și e folosit
42
îndeosebi pentru introducerea unor funcționalități în paginile web, codul implicit fiind rulat de către
browser. Browserele rețin în memoria lor o pagină web sub forma reprezentării unui arbore de obiecte
și pun aceste obiecte sub scripturilor capabile să le citească și să le manipuleze. [26]
De altfel, lucrul in JavaScript presupune lucrul cu clase și obiecte. O clasă este un tip de dată
definit de utilizator care reunește la rândul său alte date și funcții. Obiectul, este instanțierea unei clase
(un exemplar de -al ei). [26]
Implementarea unui buton și a acțiunii din spatele acestuia într -o pagină web se face în limbaj
JavaScript, cu ajutorul cla selor si obiectelor. Orice apăsare de buton din partea userului presupune
inițierea unei cerei de tip HTTP Request trimisă de către client serverului. Serverul, la rândul său, odată
sesizat, emite un HTTP Response în vederea stabiliri unui răspuns ce se în toarce în interfață.
O tehnică nouă folosită pentru îmbunătățirea executării acestor tipuri de requesturi este AJAX
(Asznchron ous JavaScript and XML ). Avantajele acestei tehnici constă în executarea unei cereri de tip
HTTP în fundal, fără a fi nevoie de r eîncărcarea paginii web în totalitate, ci doar actualizarea anumitor
porțiuni din pagină. [27]
Ajax nu trebuie tratat ca un limbaj nou de programare, ci mai degrabă ca o modalitate nouă de
implementare a unor standarde deja existente. Aplicațiile devin în acest mod mult mai rapide, mai user –
friendly iar timpul de acces este mult mai scurt. [27]
Ajax comunică cu un server prin intermediul obiectului XMLHttpRequest și facilitează un
transfer asincron de date între browser și server. Astfel, pagina web solic ită o cantitate mult mai mică
de biți de date din partea serverului și nu o pagină întreagă, așa cum se proceda de obicei.
O altă platformă de dezvoltare JavaScript este jQuery. Aceasta a fost gândită pentru a ușura
parcurgerea arborelui de obiecte al une i pagini web și a ține sub control managementul inter -browser al
evenimentelor, aplicațiilor si cererilor de tip AJAX. [27]
JQuery manipulează documentul de tip HTML pe baza selectorilor CSS 3 și ofera un API
concis, ușor de folosit și disponibil open source. Printre principalele inovații aduse de jQuery, amintim:
• parcurgerea, selecția și modificarea elementelor din arborele de obiecte DOM
• înregistrarea și modificarea obiectelor din browser
• manipularea elementelor CSS
• controlul asupra efecte lor si animațiilor multimedia
• cereri de tip AJAX
• compatibilitatea cu browsere diferite
• posibilitatea implementării extensiilor (permite programatorilor să dezvolte subaplicații bazate
pe biblioteca principală. Cu toate acestea, ea ocupă acum mult mai puțin spațiu iar extensiile pot fi
încărcate pe pagina web doar la cerere, făcându -se astfel economie de spațiu și conferindu -se un timp
de acces mult mai rapid). [27]
Prin urmare, o pagină web modernă vine cu multe aspecte în completarea cerințelor
utilizatorului modern. Ea oferă dinamism, funcționalități multiple și diferite și poate fi implementată
ușor și cu aplicații externe.
43
3.2. Comunicarea via ethernet
3.2.1. Cererea de tip Request and Response
Așa cum am menționat mai sus, orice acțiune a unui user pe o pagină web are loc prin
intermediul unei cereri de tip Request, urmată bineînteles de un Response. De exemplu, dacă vorbim
despre un buton impleme ntat în partea de front end al interfeței, buton creat prin instanțierea unei clase
JavaScript, acesta din urmă va trebui să vină cu un răspuns penru acțiunea ce tocmai a fost executată
asupra sa. Utilizatorul, în momentul apăsării acelui buton, activează o cerere de tip HttpRequest pentru
o acțiune predefinită a acestuia. Sistemul verifică în spate disponibilitatea acțiunii respective și vine cu
un răspuns care este vizibil în interfață. Informația circulă sub forma pachetelor de date si poate dura, în
funcție de complexitatea cererii și a traseului parcurs până la finalizarea ei. Dacă respectivul buton
generează acțiunea unui senzor sau a unui dispozitiv exterior, cererea devine și mai complicată, întrucât
acum legătura nu este una externă, între pagina we b si device -ul respectiv. [28][25] [27]
Cererile de tip HttpRequest arată diferit, în funcție de browserul pe care sunt folosite. Astfel,
există următoarele modele de cereri: [28][25] [27]
• // Firefox, Opera 8.0+, Safari
xmlHttp = new XMLHttpRequest();
• // Internet Explorer
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
(or)
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
Există și situații în care cererea respectivă întoarce un obiect. Un exemplu de astfel de funcție
este următoarea: [28][25] [27]
function getXMLHttpRequestObject ( ) {
var xmlHttp = null;
try{
xmlHttp = new XMLHttpRequest();
}catch (e){
try{
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
}catch (e){
try{
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}catch (e){
alert (“Your browser does not support AJAX”);
}
}
}
return xmlHt tp;
}
44
Ca orice tip de acțiune, cererile de tip request și response au și ele un set de proprietăți :
– onreadystatechange
-readyState
-status
-responseTex t
-responseXM L
Proprietatea onreadystatechange desemnează funcția ce va procesa răspunsul venit din partea
serverului. Proprietatea de readyState oferă informații vitale cu privire la starea cererii emise și a
răspunsului venit din partea serverului, informații ce sunt intoarse sub forma unor stări(0 – cererea nu a
fost iniția lizată, 1 – cererea a fost încărcată, 2 – cererea a fost trimisă, 3 – cererea este în curs de
procesare, 4 – cererea este completă). [28][25] [27]
Cea mai cunoscută dintre proprietăți este cea de status. Aceasta întoarce un cod HTTP de status
cunoscut ut ilizatorilor de internet de pretutindeni. Cele mai frecvent întâlnite coduri sunt: [28][25] [27]
• 404 – Not Found
• 200 – OK
• 408 – Request Timeout
• 401 – Unauthorized
• 500 – Internal Server Error
Pentru a putea iniția o astfel de cerere către un server, sunt apelate metodele de open() și send ().
Metoda open() primește trei argumente în momentul apelului:
– primul argument definește metoda folosită în momentul emiterii cererii (GET sau Post)
– al doilea argument specifică adresa URL
– al treilea argument indică faptul că cererea ar trebui tratată în mod asincron.
Medtoda send() trimite efectiv cererea către server. [28][25] [27]
POST / HTTP/1.1
Host: 188.27.165.241
Connection: keep -alive
Content -Length: 18
Cache -Control: max -age=0
Accep t: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Origin: http://188.27.165.241
Upgrade -Insecure -Requests: 1
User -Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/46.0.2490.86 Safari/537.3 6
Content -Type: application/x -www -form -urlencoded
Referer: http://188.27.165.241/
Accept -Encoding: gzip, deflate
Accept -Language: ro -RO,ro;q=0.8,en -US;q=0.6,en;q=0.4
ifttt=zoho&b=learn
Fig. 3.3. Post eliberat de o cerere de tip HttpRequest
45
3.2.2 .Ruta de comunicare
Întrucât informația ce va circula pe pagina web sub formă de pachete are nevoie de o adresă IP
pentru a -și defini ruta de comunicare, funcționalitatea unei pagini web se bazează pe folosirea unor
protocoale de comunicaree.
Un calculat or ce ține o aplicație și o gestionează se numește si calculator gazdă (host).
Protocolul este un set de reguli ce asigură schimbul de date și stabilește practic disciplina comunicării.
Protocolul WorldWideWeb (www) a luat naștere în anul 1989 și a fost c onceput de către Tim
Berners Lee din cadrul CERN (Centrul European pentru Fizică Nucleară), Geneva. Adresa IP
contribuie la localizarea calculatorelor conectate la internet. Astfel, fiecărui calclator i se atribuie o
adresă IP unică (ex. 127.101.106.43). Î ntrucât utilizatorului de rând îi este greu să rețină pentru fiecare
pagină web în parte adresa sa IP, apariția protocolului DNS (Domain Name Sistem) a rezolvat această
problemă și a atribuit fiecărui calculator și un nume cunoscut. DNS -ul reprezintă o baz ă de date
distribuită pe tot internetul. Există un singur server capabil să dețină informațiile necesare traducerii
oricărui domeniu într -o adresă IP. [29] [25]
O pagină web își are originile pe un anumit server poate fi găsită cu ajutorul unui identificator
unic, numit URL (Uniform Resource Locator). Un URL specifică adresa unui fișier de pe web și este
folosit de către browsere pentru a facilita o navigare mai u soară pentru utilizator.
În ceea ce prevede o comunicare eficientă și rapidă, accesarea unei pagini web presupune
combinarea tipurilor de protocoale menționate mai sus. URL -ul este un set de patru numere separate
prin caracterul punct (adresa IP). Pentru a facilita o denumire mai ușor de reținut, acest set de numere
este înlocuit cu caractere alfanumerice, care la rândul lor, cu ajutorul DNS -ului, pot fi traduse în adresă
numerică pentru a putea fi mai ușor înteleasă de către calculator. [29] [25]
Fig. 3 .4. Exemplu de URL
Pentru a comunica cu un server, browserul folosește un punct de intrare numit port. Fiecare port
este asociat unui protocol de comunicaree. De exemplu, pentru protocolul de tip HTTP, portul standard
folosit este 80. [29]
O pagină web poate fi accesată și local, atâta timp cât este salvată sub format html. Cu toate
acestea, ea nu va fi 100% funcțională, întrucât nu va putea face legătura cu alte link -uri de pe internet și
nu va putea apela , emite cereri sau chiar primi răspunsuri din pa rtea altor sisteme externe.
În ceea ce priveste conectarea unei pagini web cu un microcontroler, sistemul necesită o serie de
configurări secundare. [29] [25]
46
Un caz particular pentru îndeplinirea acestor condiții implică folosirea plăcuței Arduino Uno , iar
cerințele de utilizare sunt următoarele:
• prezența unui shield extern cu placă de rețea pentru a facilita conectarea modulului Arduino la
internet
• utilizarea librăriei de programare dedicată <Ethernet.h> pentru a permite utilizarea codului de
acces la internet
• definirea adresei IP cu care va comunica microcontrolerul, adresa pe care se vor emite cereri
de tip HttpRequest
• specificarea adresei MAC implicită adresei IP folosită
• specificarea portul ui de acces folosit
Fig. 3.5. Configurarea conexiunii unui Microcontroler la rețeaua de Ethernet
Pentru evitarea confuziilor de rețea si a unei comunicări defectuoase, este recomandabil
rezervarea unui IP unic pentru setările microcontrolerului și a p aginii web de legătură.Acest lucru se
face accesând interfața 192.168.0.1 . Această interfață (dedicată configurării echipamentelor D -Link)
permite accesarea și configurarea softului unui router, dacă utilizatorul cu pricină foloseste o conexiune
Wireless(o rețea locală de calculatoare).
Fig. 3.6. Rezervarea unui IP unic pentru configurarea microcontrolerului
47
Capitolul 4. Realizarea practică
4.1. Desc rierea ralizării practice
Implementarea acestui proiect a constat în proiectarea unui sistem de control IoT cu
microcontroller Atmega328 produs de ATMEL. Scopul realizării acestui sistem a constat îmbunătățirea
controlului asupra echipamentelor electronice din cadrul unei gospodării.
Prin intermediul unor senzori conectați la modulul Arduino, sistemul proiectat de mine preia
informații din mediul ambiat, cum ar fi – temperatura, umiditatea, detecția mișcării în camera. Întrucât
modelul de Arduino Uno folosit de mine dispune de un shield de E thernet, transmit mai departe aceste
informații către o interfață web.
Scopul interfeței web aferente acestui sistem nu joacă doar rol de informare, prin afișarea
datelor preluate de senzori ci este destinată controlului de la distanță prin comenzi trim ise către
microcontroler. Interfața pune la dispoziția utilizatorului sau șcenarii de automatizare, șcenarii ce pot fi
acționate de la distanță, prin folosirea paginii web. Singura condiție pentru realizarea practică a acesto
scenarii este prezența sistemu lui format din microcontroler și senzori în încăperea ce se dorește a fi
controlată și conectarea modului Arduino la un cablu de Ethernet.
Interfața web conține trei meniuri principale menite reține scenariile utilizatorului și a controla
dispozitive prin infraroșu. Cu ajutorul unui emitor și a unui receiver infraroșu conectate la plăcuța
Arduino și a unei benzi de leduri pentru testare, se p oate demonstra funcționalitatea acestui proiect.
Cele trei trei meniuri ale interfeței IoT sunt:
• Infrared Remote
Fig. 4.1. IoT – Infrared Remote
48
• Temperature Action
Fig. 4.2. IoT – Temperature Action
• Motion Action
Fig. 4.2. IoT – Motion Action
Cu ajutorul primului meniu (Infrared Remote), userul de rând dispune de un buton de power,
pentru activarea sistemului IoT. Tot în acest meniu, întâlnim 7 butoane diferite (roșu, albastru, verde,
orage,verde deschis, albastru deschis și alb ). Aceste butoane pot fi folosite atât pentru aprinderea
49
culorilor de pe banda de leduri cât și pentru memorarea în vederea creării unui scenariu de test ce va
rula automat în funcție de preferințele utilizatorului.
Meniul Temperature Action permite userului să creeze un script ce se va rula automat de fiecare
dată când se îndeplinesc condițiile menționate în scenariul de test. De exemplu, pentru scenariul cu
nume "test2 ", dacă temperatura înregistrată în încăpere este mai mare de 25°C, se va aprinde banda de
led în culoarea orange.
Meniul Motion Action dispune de aceleași funcționalități ca si meniul Temperature Action. Aici
se vor memora scenariile de test ce implică utilizarea senzorului de mișcare. Presupunem un scenariu
cu denumirea generică "test3 ", scenariu ce implică activarea sistemului în momentul în care acesta
simte mișcare prin intermediul senzorului PIR și aprinderea benzii de leduri în culoarea albastru.
Pentru rularea acestor comenzi, programul Arduino eliberează în momentul procesări i inițiale a
scenariului de test un document .txt cu cerințele utilizatorului și numele butonului respectiv . Acest
document este memorat pe cardul SD conectat la plăcuța Arduino și nu este posibilă rescrierea lui. Prin
urmare, odată generat o comandă pentru butonul albastru, acesta nu mai poate procesa un nou scenariu
de test până când cel vechi este sters complet. Acest lucru se realizează prin introducerea cardului în
calculator și stergerea manuală a fișierului .
Fig. 4.3. Diagrama reprezentativă a proiectului
50
4.2. Procesul de tehnologizare
La realizarea practică a acestui proiect am ținut cont de necesitatea folosirii unui microcontroler
cu acces la internet, prin urmare am folosit un modul Arduino cu shield de internet.
Alimentarea acestui dispozitiv se face la orice port USB, printr -o mufă USB compatibilă cu
orice cablu. De asemenea, pentru conectarea la internet este nevoie de folosirea unui cablu de internet
UTP. Accesarea paginii web se poate face și local, dar est e necesară rezervarea unei adrese IP unice ce
trebuie modificată de fiecare dată în codul Arduino (pentru fiecare rețea de internet în care dispozitivul
este utilizat).
Înregistrarea informațiilor de către sistem se face cu ajutorul senzorilor conectați la plăcuța
Arduino. Dezvoltarea circuitului se face cu ajutorul unei placi de tip breadbord și a unor cabluri de
legătură între pinii microcontrolerului si senzorii montați pe placă.
Software -ul a fost scris cu ajutorul plăcii de dezvoltare Arduino Uno ș i a programului si
librăriilor furnizate de producătorii acesteia . De asemenea, întrucât memoria microcontrolerului este
mică iar codul aferent programului a ocupat 95% din spațiul ei, a fost necesară folosirea unui microcard
SD pentru memorarea informații lor urcate pe internet.
Pentru proiectare interfeței web am folosit atât limbaje de programare web clasice (html, css),
cât și limbaje de scripting (javascript) pentru a facilita o interfață user friendly și funcțională la nivel de
butoane, precum și limbaje aferente procesării cererilor de tip HttpRequest și HttpResponse (AJAX).
Ca și mediu de dezvoltare pentru acestă interfață am folosit Notepad++
Testarea sistemului presupune utilizarea unei benzi de leduri cu infraroșu aflată la mică distanță de
sistem, întrucât plăcuța Arduino nu emite o putere foarte mare către led -ul infraroșu, prin urmare
controlul asupra sistemului de iluminat din încăpere este relativ dificil.
Fig. 4.4. Placă de tip breadboar, fire de legătură și plăcuță Arduino cu shield de Ethernet
51
4.3. Organigrama softului
52
Capitolul 5. Perspective de dezvoltare
Controlul inteligent și utilizarea sistemelor automate reprezintă viitorul dezvoltării domeniului
electronic și principalul punct de interes în ceea ce privește industria modernă.
Scopul unui astfel de sistem IoT este de a ușura viața omului de rând, de a -l aduce în ton cu
tehnologia modernă și de a oferi siguranță și control asupra gospodăriei sale.
Sistemul prezentat mai sus este un prototip și nu poate fi produs la scară industrială. Deși este o
varinată mai ieftină a unei idei de viitor, puterea și performanțele cu care v ine sunt totuși limitate. Cu
ajutorul unui microcontroler ce dispune de un procesor mai bun și de o memorie mai mare, sistemul
poate căpăta noi forme. O memorie internă mai buna ar facilita un numai mar mare de linii de cod.
Astfel, se pot adăuga comenzi n oi sistemului.
Performanțe mai bune implică întotdeauna și un cost mai ridicat. Cu toate acestea, dacă facem o
comparație cu progresul automatizării în domeniul locuințelor și a sistemelor de control IoT din
Romania, un astfel de sistem ultra performant nu s-ar ridica nici la un sfert din prețul actualelor sisteme
de pe piață ce garantează practic aceleași servicii.
Pentru a produce la scară industrială acest dispozitiv, costul per bucată, cu optimizările
necesare, nu ar depăsi suma de 150 $. Prin optimizările necesare, menționez și configurarea unei
carcase de protecție, folosirea undelor radio ca element nou de control și de ce nu, posibilitatea
accesului la sistem printr -o aplicație mobilă.
53
54
Concluzii
În urma realizării acestui proiect, am înteles mai bine necesitatea și beneficiile aduse de un
proces automat și inteligent, precum și necesitatea utilizării sistemeleor IoT. De asemenea, am putut
întelege și realiza o legătură între un dispozitiv electro nic integrat cu o platformă web. Deși discutăm
despre lucruri ce necesită programarea în medii diferite, ele pot fi într -o strânsă legătură unul cu
celălalt.
În al doilea rând, am înteles importanța realizării unui proiect de mare amploare cum este
proiectul de licență, un proiect menit a evidenția informațiile și cunoștințele dobândite în acesti patru
ani de învățământ superior. Consider că noțiunile acumulate de -a lungul facultății mi -au fost de un real
folos și stau la baza formării viitoarei mele car iere de inginer.
Acest proiect reprezintă mai mult decât un simplu proiect de licență și reunește ambițiile
personale în ceea ce privește dezvoltarea lui într -un start -up nu neapărat al automatizării de locuințle, ci
a folosirii noțiunii de IoT.
Așadar, noțiunile prezentate mai sus în vederea realizării unui sistem IoT inteligent pot fi un
bun început în vederea explorării acestei ramuri noi a erei tehnologicei în care trăim. Realizările acestui
domeniu pot fi de neimaginat, omul având posibilitatea d e a deține controlul asupra a tot ceea ce îl
înconjoară, toate fiind la un click distanță.
55
56
Bibliografie:
[1] "Bazele electronicii analogice și digitale " – S.D. Anghel – Editura Presa Universitara Clujeana,
Cluj-
Napoca 2007
[2] "Arhitectura sistemelor de calcul " – Radu Rădescu – Editura Politehnica Press, București 2009
[3] Sorin Zoican, "Microprocesoare si microcontrolere. Aplicatii" , Ed. Politehnica Press, Bucuresti
2011
[19] "Componente Electronice Pasive " – P. Svasta, Al. Vasile – editura București 2012
[21] "Circuite Electronice, Probleme de Dispozitive și Circuite Electronice Fundamentale " prof.
Gheorghe Brezeanu
[23] " Dispozitive și Circuite Electronice " – I. Costea, A. Rusu, D. Dascălu, editura Didactică și
Pedagogică, Bucuresti – 1982
[4] "Procesoare Intel. Programare în limbaj de asamblare " – V. Lungu – Editura Teora, București 2001
[5] "Arhitectura microprocesoarelor " V. Lazarescu, A. Dumitras, C. Radoi, , lito UPB, 1994
[6] "Introduction to Arduino: a piece of cake " by Alan G. Smith
[7] http://www.handsonresearch.org/2012/PDF/IntroductionToArduino.pdf
[8] http://www.atmel.com/images/Atmel -8271 -8-bit-AVR -Microcontroller -ATmega48A -48PA -88A-
88PA -168A -168PA -328-328P_datasheet_Complete.pdf
[9] https://www.arduino.cc/en/main/boards
[10] https://ro.wikipedia.org/wiki/Arduino
[11] https://www.robofun.ro/arduino_uno_v3
[12] https://www.arduino.cc/en/Main/ArduinoBoardEthernet
[13] http://andrei.clubcisco.ro/cursuri/3rl/razvan/RL_curs02.pdf
[14] http://www.nicugane.ro/articole/biblioteca/Retele.pdf
[15] http://datasheet.octopart.com/A000060 -Arduino -datasheet -13703297.pdf
[16] http://akizukidenshi.com/download/ds/aosong/DHT11.pdf
[17] http://www.micropik.com/PDF/dht11.pdf
[18] "Senzori și traductoare " – Constantin Vlaicu și Costn Cepisa, editura Bucuresti 2001
[20] "Infrared Parts Manual " – Global Corporation
[22] http://www.futureelectronics.com/en/optoelectronics/infrared -emitters.aspx
[24] " HTML prin exemple " – Teodoru Gurgoiu, Edit. Teora
[25] "Tehnologia aplicațiilor Web " – Năstase Fl., Năstase P., Editura Economică 2002
[26] https://ro.wikipedia.org/wiki/JavaScript
[27] "jQueryin Action " – B. Bibeault, Y. Katz – Manning, 2008
[28] http://www.w3schools.com/ajax/default.asp
[29] " Programare WEB " – Ioan Filip, editura Conspress 2013
57
Anexe
58
59
60
Codul Arduino
#include "DHT.h"
#include <SPI.h>
#include <Ethernet.h>
#include <SD.h>
//definim senzorul de temperatura si umiditate
#define DHTPIN 2
#define DHTTYPE DHT11
//definim senzorul infrarosu
#define IRpin_PIN PIND
#define IRpin 5
//initializam senzorul de temperatura si
umiditate
DHT dht(DHTPIN, DHTTYPE);
// pulsul maxim inregistrat
#define MAXPULSE 65000
// what our timing resolution should be, larger is
better
// as its more 'precise' – but too large and you
wont get
// accurate timing
#define RESOLUTION 20
//adresa mac si ip -ul pentru placa de ethernet
byte mac[] = {
0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED
};
IPAddress ip(192, 168, 1, 177);
// Initializam libraria de ethernet cu ip -ul setat si
portul 80 (default pt http)
EthernetServer server(80);
// stocam pana la 80 de perechi de pulsuri
uint16_t pulses[80][2]; // matr icea contine 80
de fronturi pozitive si 80 negative
uint8_t currentpulse = 0; // indexul pulsului
curent pe care il stocam int IRledPin = 9; // Ledul infrarosu este
conectat pe pinul 9
//flagul de miscare si timpul miscarii
int motion = 0;
int mseconds = 0;
//timpul necesar calibrarii senzorului de
miscare(10 secunde)
int calibrationTime = 10;
//initializarea frontului negativ
long unsigned int lowIn = 0;
//timpul in care senzorul de miscare sa nu fie
declansat pentru a presupune oprirea miscarii
long unsigned int pause = 2000;
//flagul pentru mod neintrerupt de primire
comanda IR
int flag = 0;
int pirPin = 3; //senzorul de miscare este
conectat pe pinul 3
//bufferul in care vom citi requestul
unsigned char buf[30];
//butonul primit ca parametru
char incButton[13];
// in aceste 2 variabile vom retine temperatura si
umiditatea
float temp;
float humi;
//initializam clientul de internet
EthernetClient client;
//initializam variabila tip fisier din care vom citi
de pe cardul SD
File action;
void setu p() {
Serial.begin(9600); //incepem comunicarea pe
9600
// pinMode(10,OUTPUT);
// digitalWrite(10,HIGH);
61
pinMode(IRledPin, OUTPUT); //setam ledul
infrarosu ca output
pinMode(pirPin, INPUT); //setam senzorul de
miscare ca input
digitalWrite(pirP in, LOW);
//calibrarea senzorului
Serial.print(F("Calibram senzorul "));
for (int i = 0; i < calibrationTime; i++) {
Serial.print(F("."));
delay(1000);
}
Serial.println(F("SENZOR ACTIV"));
delay(50);
//initializam senzorul de temperatura
dht.begin();
// initializam cardul SD
Serial.println(F("Initializam Card SD"));
if (!SD.begin(4)) {
Serial.println(F("ERROR – SD"));
return; // initializarea cardului a esuat
}
Serial.println(F ("SUCCESS – SD"));
//pornim placa de internet
Ethernet.begin(mac, ip);
//deschidem serverul
server.begin();
Serial.print(F("Serverul este la "));
Serial.println(Ethernet.localIP());
}
void loop()
// pentru a nu intrerupe procesul de citire
a comenzii infrarosu intrerupem orice alta
functiune
if (flag == 1) {
//Suntem in stadiul de ascultare dupa o
comanda infrarosu
while (flag == 1)
IRreceive();
}
else if (flag == 0) { //reim prospatam informatiile de la
senzori si verificam daca trebuie rulat vreun
script
sensorTest();
//Suntem in stadiul de acultare pentru o
conexiune
client = server.available();
if (client) {
//daca un client s -a conectat, cat timp e
conectat, verificam requestul si ii trimitem un
raspuns
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) {
if (client.read(buf, sizeof(buf) )) {
if (strncmp((char*)buf, "GET / ", 6) ==
0){
//daca tipul de request este GET si
pagina dorita este / ii trimitem index.htm
Serial.println(F("Got GET request"));
sendIndex();
Serial.pr intln(F("Sent index page"));
}
else if (strncmp((char*)buf, "GET
/?a=temp ", 13) == 0) {
//daca tipul de request este GET,
pagina dorita este / si parametrul este a cu
valoare temp ii trimitem temperatura si
umiditatea
Serial.println(F("Got TEMP request"));
sendTemp();
}
else if (strncmp((char*)buf, "GET
/?a=motion ", 15) == 0) {
//daca tipul de request este GET,
pagina dorita este / si parametrul este a cu
valoare motion ii trimitem miscarea
Serial.println(F("Got MOTION
request"));
sendMotion();
}
62
else if (strncmp((char*)buf, "POST", 4)
== 0) {
// daca tipul de request este POST
procesam in formatia primita
char ifttt[16];
char t[3];
char s;
char a;
int len = 0;
bool macaz = true;
Serial.println(F("Got POST"));
// citim pana cand gasim 2 linii goale
while (macaz) {
a = client.read();
if (a == ' \n')
{
a = client.read();
if (a == ' \r') {
macaz = false;
}
}
}
//dupa cele 2 linii goale avem
parametrii trimisi prin formular
a = client.read();
unsigned char buff[7];
client.read(buff, 6) ;
buff[6] = ' \0';
Serial.print((char*)buff);
//daca este parametrul este ifttt citim in
continuare
if (strncmp((char*)buff, "ifttt=", 6) ==
0) {
a = client.read();
while (a != '&' && a != ' ') {
ifttt[len] = a;
len++;
a = client.read();
}
ifttt[len] = ' \0';
//daca parametrul este b atunci
actionam butonul primit prin infrarosu a = client.read();
if (a == 'b') {
a = client.read();
client.read((uint8_t*)incButton, 8);
incButton[8] =' \0';
Serial.println(incButton);
actionButton();
Serial.println(F("Sent button"));
}
//daca parametrul este m atunci
salvam un declansator ca atunc i cand senorul de
miscare este activ sa actionam un buton
else if (a == 'm') {
a = client.read();
client.read((uint8_t*)incButton, 8);
incButton[8] =' \0';
createTrigger((char*)ifttt);
sendIndex();
}
else if (a == 's') {
// daca parametrul este s atunci citim
semnul(< sau >) apoi temperatura apoi butonul
ca atunci cand se de paseste un anumit prag al
temperaturii sa se activeze un buton
a = client.read();
len = 0;
//citim semnul
s = client.read();
Serial.println(s);
a = client.read( );
a = client.read();
//citim urmatorul
parametru temperatura
if (a == 't') {
a = client.read();
len = 0;
a = client.read();
while (a != '&' && a != ' ') {
t[len] = a;
len++;
a = client.read();
}
63
t[len] = ' \0';
Serial.println(t);
a = client.read();
//citim butonul ce
trebuie actionat
if (a == 'b') {
//len=0;
a = client.read();
client.read((uint8_t*)incButton,
8);
incButton[8] =' \0';
//cream un fisier care are
temperatura semnul si butonul declansat
createTrigger((char*)ifttt,
(char*)t,s);
}
}
sendIndex();
}
}
}
else {
// Request neasteptat
Serial.print(F("Unexpected 404: "));
}
client.flush();
break;
}
}
}
// ii dam browser -ului timp sa primeasca
datele
delay(1);
// inchidem conexiunea
client.stop();
Serial.println(F("c disc"));
}
}
}
//functie ce printeaza headerul unei pagini
HTML
void printHeader(){ client.println(F(" HTTP/1.1 200 OK"));
client.println(F("Content -Type: text/html"));
client.println(F("Connection: close"));
client.println();
}
void sendTemp() {
//pregatim response -ul pt temperatura si
umiditate
printHeader();
client.print(F("Temperature: "));
client.print(temp);
client.print(F(" *C<br>"));
client.print(F("Humidity: "));
client.print(humi);
client.print(F(" %"));
}
void sendMotion() {
//pregatim response -ul pentru miscare
printHeader();
if (motion == 1)
client.print(F("Motion detected now"));
else
{
client.print(F("Motion detected "));
int sc = (millis() / 1000) – mseconds;
client.print(sc);
client.print(F(" seconds ago"));
}
}
void sensorTest() {
if(millis() – lowIn > pause){
lowIn = millis();
// Citirea temperaturii si umiditatii dureaza
intre 250ms si 2000ms
humi = dht.readHumidity();
temp = dht.readTemperature();
// Verificam senzorul de miscare
if (digitalRead(pirPin) == HIGH) {
mseconds = millis() / 1000;
motion = 1;
delay(50);
}
64
if (digitalRead(pirPin) == LOW) {
motion = 0;
}
//rulam (daca exista) triggerele
runAction();
}
}
void IRreceive() {
uint16_t highpulse, lowpulse; // front pozitiv si
front negat iv
highpulse = lowpulse = 0; // incepem fara
lungime de front
while (IRpin_PIN & (1 << IRpin)) { //citim
direct de pe pinul senzorului infrarosu
highpulse++;
delayMicroseconds(RESOLUTION);
// daca frontul e prea mare se opreste sau s -a
terminat codul
// scriem codurile si resetam frontul curent
if ((highpulse >= MAXPULSE) &&
(currentpulse != 0)) {
printpulses();
currentpulse = 0;
return;
}
}
pulses[currentpulse][0] = highpulse;
while (! (IRpin_PIN & _BV(I Rpin))) {
lowpulse++;
delayMicroseconds(RESOLUTION);
// daca frontul e prea mare se opreste sau s -a
terminat codul
// scriem codurile si resetam frontul curent
if ((lowpulse >= MAXPULSE) &&
(currentpulse != 0)) {
printpulses();
currentpulse = 0;
return;
}
}
pulses[currentpulse][1] = lowpulse;
// continuam cu urmatoarea pereche
currentpulse++;
}
void printpulses() {
Serial.println(F("Salvam pulsul"));
flag = 0;
File myFile;
//deschidem un fisier cu numele butonului
pentru scriere
myFile = SD.open(incButton, FILE_WRITE);
//scriem comanda infrarosu
if (myFile) {
for (uint8_t i = 0; i < currentpulse – 1; i++) {
myFile.print(pulses[i][1] * RESOLUTION /
10, DEC);
myFile.print(" ");
myFile.print(pulses[i + 1][0] *
RESOLUTION / 10, DEC);
myFile.print(" ");
}
myFile.print(pulses[currentpulse – 1][1] *
RESOLUTION / 10, DEC);
myFile.print(" 0");
myFile.close();
}
else {
Serial.print(F("error opening "));
Serial.println(incButton);
}
}
void pulseIR(long microsecs) {
// we'll count down from the number of
microseconds we are told to wait
cli(); // this turns off any background
interrupts
while (microsecs > 0) {
// 38 kHz is about 13 microseconds high and
13 microseconds low
digitalWrite(IRledPin, HIGH); // this takes
about 3 microseconds to happen
65
delayMicroseconds(10); // hang out for
10 microseconds, you can also change this to 9
if its not working
digitalWrite(IRledPin, LOW); // this also
takes about 3 microseconds
delayMicroseconds(10); // hang out for
10 microsecon ds, you can also change this to 9
if its not working
// so 26 microseconds altogether
microsecs -= 26;
}
sei(); // this turns them back on
}
void sendIndex()
{
//trimitem pagina principala
File webFile;
// scriem intai headerul
printHeader();
webFile = SD.open("index.htm"); //
deschidem pagina de pe card
if (webFile) {
while (webFile.available()) {
client.write(webFile.read()); // trimitem
pagina
}
webFile.close();
}
else{
Serial.println(F( "Fisier negasit"));
}
}
void actionButton(){
//actionarea butonului
strcat(incButton, ".txt");
incButton[12]=' \0';
printHeader();
char c;
File myFile;
//daca fisierul exista vom trimite comanda
if (SD.exists(incButton)) { Serial.print( F("IRBLAST"));
myFile = SD.open(incButton);
IRblast(myFile);
client.println(F("blast"));
}
//daca nu exista vom invata o noua comanda
else {
Serial.print(F("IRLEARN"));
flag = 1;
client.println(F("learn"));
}
}
void IRblast(File &myFilex){
//trimitem comanda IR din fisierul de pe
card SD la ledul IR
char c;
for (int i = 0; i < 72; i++)pulses[i][0] = 0;
int cnt1 = 0;
// citim din fisier
while (myFilex.available()) {
c = myFilex.read() ;
if (c == ' ') {
cnt1++;
}
else {
pulses[cnt1][0] = pulses[cnt1][0] * 10 +
(c – '0');
}
}
myFilex.close();
//pulsam LED -ul IR
for (int i = 0; i < 72; i = i + 2)
{
pulse IR(pulses[i][0] * 10);
if (pulses[i + 1][0] < 1000)
delayMicroseconds(pulses[i + 1][0] *
10);
else
delay(pulses[i + 1][0] / 1000);
}
}
66
void createTrigger(char* ifttt) {
//crearea unui declansator in functie de
miscare
//parametrul primit este butonul
//se scrie declansatorul
char aux[24];
strcpy(aux,"mactions/");
strcat(aux,ifttt);
strcat(aux,".txt");
File myFile;
strcat(incButton, ".txt");
if (SD.exists(incButton)) {
if (SD.exists(aux)) {
SD.remove(aux);
}
myFile = SD.open(aux, FILE_WRITE);
myFile.print(incButton);
myFile.close();
}
else {
//nu s -a gasit fisierul
}
}
void createTrigger(char* ifttt, char* t, char s) {
//crearea unui declansator la trecerea
unui anumit prag in temperatura
//parametrii: buton , temperatura,
semnul EX : POWER < 20 declansam power
cand temperatura e mai mica de 20 grade
char aux[24];
strcpy(aux,"tactions/");
strcat(aux,ifttt);
strcat(aux,".txt ");
File myFile;
strcat(incButton, ".txt");
if (SD.exists(incButton)) {
if (SD.exists(aux)) {
SD.remove(aux);
}
myFile = SD.open(aux, FILE_WRITE);
myFile.print(t); myFile.print(' ');
myFile.print(s);
myFile.print(' ' );
myFile.print(incButton);
myFile.close();
}
else {
//nu s -a gasit fisierul
}
}
void runAction(){
//rularea declansatoarelor
File myFile;
//se cauta declansatoare de temperatura
action = SD.open("tactions/");
char c;
char s;
int t;
//se ruleaza orice declansator de temperatura
gasit daca conditiile din el sunt indeplinite
while(1==1){
myFile = action.openNextFile();
if (!myFile)break;
c=myFile.read();
t=c-'0';
c=myFile.read();
t=t*10 + c-'0';
myFile.read();
s=myFile.read();
myFile.read();
for(int i =0;i<12;i++)
incButton[i]=myFile.read();
incButton[12]=' \0';
myFile.close();
if(s=='0'){
if((int)temp<t){
myFile = S D.open(incButton);
IRblast(myFile);
delay(50);
}
}
else{
67
if((int)temp>t){
myFile = SD.open(incButton);
IRblast(myFile);
delay(100);
}
}
}
myFile.close();
action.close();
//se cauta declansatoare de miscare
action = SD.open("mactions/");
if(motion==1){
//se ruleaza orice declansator de
miscare gasit daca conditiile din el sunt
indeplinite
while(1==1){
myFile = action.openNextFile();
if (!myFile){
break;
}
for(int i =0;i<12;i++)
incButton[i]=myFile.read();
incButton[12]=' \0';
myFile.close();
myFile = SD.open(incButton);
IRblast(myFile);
delay(100);
}
}
action.close();
}
68
Codul Interfeței Web
<html>
<head>
<script src="http://code.jquery.com/jquery –
1.11.3.min.js"></script>
<script
src="https://maxcdn.bootstrapcdn.com/bootstra
p/3.3.5/js/bootstrap.min.js" integrity="sha256 –
Sk3nkD6mLTMOF0EOpNtsIry+s1CsaqQC1rV
LTAy+0yc= sha512 –
K1qjQ+NcF2TYO/eI3M6v8EiNYZfA95pQum
fvcVrTHtwQVDG+aHRqLi/ETn2uB+1JqwYq
VG3LIvdm9lj6imS/pQ=="
crossorigin="an onymous"></script>
<link
href="https://maxcdn.bootstrapcdn.com/bootstr
ap/3.3.5/css/bootstrap.min.css" rel="stylesheet"
integrity="sha256 –
MfvZlkHCEqatNoGiOXveE8FIwMzZg4W85q
frfIFBfYc= sha512 –
dTfge/zgoMYpP7QbHy4gWMEGsbsdZeCXz7
irItjcC3sPUFtf0kuFbDz/ixG7ArTxmDj LXDme
zHubeNikyKGVyQ=="
crossorigin="anonymous">
<title>IoT – Arduino Uno</title>
<style>
@font -face {
font-family: "Roboto Condensed";
font-style: normal;
font-weight: 900;
src:
url("https://cdnjs.cloudflare.com/ajax/libs/ink/3.
1.10/fonts/Roboto_conde nsed/robotocondensed
-light-webfont.ttf") format('truetype');
}
body{
background –
image:url(http://www.myzenno.com/assets/slid
er-images/zenno4.jpg);
background -position:center;
background -size: cover; font-family:"Roboto Condensed";
}
.head{
padding -bottom:10px;
}
h4{
margin -top:0px;
}
.container{
background:rgba(0, 0, 0, 0.8);
color:white;
width:600px;
height:600px;
opacity:0.9;
border -radius:20px;
}
.padd{
padding -top:20px;
padding -left:90px;
padding -right:90px;
}
.padd2{
padding -left:130px;
padding -right:130px;
-webkit -user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
.btn-remote{
background -color:darkred;
color:white;
padding:10px;
font-size:40px;
border -radius:100%;
margin:5px;
width:64px;
height:64px;
border:2px solid grey;
display:inline -block;
opacity:0.8;
69
cursor:pointer;
}
.btn-remote:hover{
opacity:0.9;
}
.btn-remote:active{
opacity:1;
}
.lgreen{
background -color:forestgreen;
color:forestgreen;
}
.red{
background -color:red;
color:red;
}
.blue{
background -color:blue;
color:blue;
}
.orange{
background -color:orangered;
color:orangered;
}
.green{
background -color:green;
color:green;
}
.lblue{
background -color:darkturquoise;
color:darkturquoise;
}
.white{
background -color:white;
color:white;
}
.sign{
font-size:30px;
padding -right:10px;
padding -left:15px;
}
.fpop{ positon:fixed;
width:100%;
height:40px;
}
.notif{
margin:auto;
width:400px;
color:white;
font-size:16px;
background:rgba(0, 0, 0, 0.8);
border -bottom -left-radius:5px;
border -bottom -right -radius:5px;
height:35px;
text-align:center;
padding -top:5px;
}
</style>
</head>
<body>
<div class="fpop">
<div class="notif" style="display:none">
Learning mode – Press any remote button
</div>
</div>
<div class="container">
<div class="head"
style="width:450px;margin:40px auto;">
<h2 class="text -center">Internet of Things –
Ardu ino Uno</h2>
<h4 class="pull -right">by Cristi Matea</h4>
</div>
<div class="col -md-12 text -center">
<div class="btn -group" role="group" aria –
label="…">
<button id="rm -btn" type="button" class="btn
btn-default">Infrared Remote</button>
<button id="t m-btn" type="button" class="btn
btn-default">Temperature Action</button>
<button id="mt -btn" type="button" class="btn
btn-default">Motion Action</button>
</div>
</div>
70
<div class="col -md-12 padd">
<p class="temperature pull -left">
</p>
<p class="motion pull-right">
</p>
</div>
<div id="remote -menu" class="col -md-12
padd2">
<div class="btn -remote glyphicon glyphicon –
off">
</div>
<div class="btn -remote green glyphicon
glyphicon -certificate">
</div>
<div class="btn -remote blue glyphicon
glyphicon -certificate">
</div>
<div class="btn -remote red glyphicon
glyphicon -certificate">
</div>
<div class="btn -remote orange glyphicon
glyphicon -certificate">
</div>
<div class="btn -remote lgreen glyphicon
glyphicon -certificate">
</div>
<div class="btn -remote lblue glyphicon
glyphicon -certificate">
</div>
<div class="btn -remote white glyphicon
glyphicon -certificate">
</div>
</div>
<div id="motion -menu" class="col -md-12
padd2 text -center" style="display:none">
<h4>On motion detection press a button</h4 >
<form name="input" action="/"
method="post">
<div class="form -group">
<label for="ifttt">Action name</label>
<input type="text" class="form -control"
name="ifttt" placeholder="Action name"> </div>
<div class="form -group">
<label for="m"> Activate button</label>
<select name="m" class="form -control">
<option value="powerbut">Power</option>
<option value="greencol">Green</option>
<option value="bluecolo">Blue</option>
<option value="redcolor">Red</option>
<option value="orangcol">Orange</op tion>
<option value="lgrencol">Light
green</option>
<option value="lbluecol">Turquoise</option>
<option value="whitecol">White</option>
</select>
</div>
<button type="submit" class="btn btn –
default">Submit</button>
</form>
</div>
<div id="temp -menu " class="col -md-12 padd2
text-center" style="display:none">
<h4>On temperature change press a
button</h4>
<form name="input" action="/"
method="post">
<div class="form -group">
<label for="ifttt">Action name</label>
<input type="text" class="form -control"
name="ifttt" placeholder="Action name">
</div>
<div class="form -group">
<label for="s">Less than</label>
<input type="radio" name="s"
value="0"><span class="sign glyphicon
glyphicon -chevron -left"></span><span
class="sign glyphicon glyphicon -chevron –
right"></span>
<input type="radio" name="s" value="1">
<label for="s">More than</label>
</div>
<div class="form -group">
<label for="t">Degrees</label>
71
<input type="text" class="form -control"
name="t" placeholder ="How many degrees">
</div>
<div class="form -group">
<label for="b">Activate button</label>
<select name="b" class="form -control">
<option value="powerbut">Power</option>
<option value="greencol">Green</option>
<option value="bluecolo">Blue</option>
<option value="redcolor">Red</option>
<option value="orangcol">Orange</option>
<option value="lgrencol">Light
green</option>
<option value="lbluecol">Turquoise</option>
<option value="whitecol">White</option>
</select>
</div>
<button type="submit" cl ass="btn btn –
default">Submit</button>
</form>
</div>
</div>
<script>
var flag = 1;
$("#rm -btn").click(function(){
$("#remote -menu").show();
$("#temp -menu").hide();
$("#motion -menu").hide();
});
$("#tm -btn").click(function(){
$("#remote -menu").hide();
$("#temp -menu").show();
$("#motion -menu").hide();
});
$("#mt -btn").click(function(){
$("#remote -menu").hide();
$("#temp -menu").hide();
$("#motion -menu").show();
});
(function worker() {
if(flag==1){
$.get( "?a=temp", function( data ) { $( ".temperature" ).html( data );
});
if(flag==1){
$.get( "?a=motion", function( data ) {
$( ".motion" ).html( data );
});
}
}
setTimeout(worker, 10000);
})();
function f(data){
flag=1;
if(data.search("learn")!= -1)
$(".notif").html("Learning mode – Press
any remote button");
else if(data.search("blast")!= -1)
$(".notif").html("Button pressed");
else
$(".notif").html("Unexpected Error");
$(".notif").slideDown();
setTimeou t(function(){
$(".notif").slideUp();
},3000);
}
$(".glyphicon -off").click(function(){
flag=0;
$.post( "", { ifttt: "button", b: "powerbut"
}).done(function(data){f(data)});
});
$(".red").click(function(){
flag=0;
$.post( "", { ifttt: "button", b: "redcolor"
}).done(function(data){f(data)});
});
$(".blue").click(function(){
flag=0;
$.post( "", { ifttt: "button", b: "bluecolo"
}).done(function(data){f(data)});
});
$(".green").click(function(){
flag=0;
72
$.post( "", { ifttt: "button", b: "greencol"
}).done(function(data){f(data)});
});
$(".orange").click(function(){
flag=0;
$.post( "", { ifttt: "button", b: "orangcol"
}).done(function(data){f(data)});
});
$(".lgreen").click(function(){
$.post( "", { ifttt: "button", b: "lgrencol"
}).done(function(dat a){f(data)});
});
$(".lblue").click(function(){
flag=0;
$.post( "", { ifttt: "button", b: "lbluecol"
}).done(function(data){f(data)});
});
$(".white").click(function(){
flag=0;
$.post( "", { ifttt: "button", b: "whitecol"
}).done(function(data){f(data)});
});
</script>
</body>
</html>
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Sistem de control IOT cu microcontroler ATMega328 [606223] (ID: 606223)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
