Din punct de vedere teoretic am realizat o documentație explicativă a tuturor etapelor parcurse pentru realizarea acestei soluții IoT de prevenție,… [309905]
Universitatea „Politehnica” [anonimizat]:
Prof.dr.ing. Radu Vasiu
Student: [anonimizat]-Marius Apostol
Timișoara
2020
Sinteza lucrării
Lucrarea de diplomă este dezvoltată în cadrul Departamentului de Comunicații al Universității Politehnica Timișoara. [anonimizat] 2020- iunie 2020.
Din punct de vedere teoretic am realizat o documentație explicativă a [anonimizat] .
Din punct de vedere practic am realizat atât o parte digitală (aplicația), cât și o parte hardware ([anonimizat]), ambele conectate la un server IoT prin internet creat într-o [anonimizat] (Azure).
Partea practică digitală a [anonimizat] o [anonimizat]-uri în cazul detecției de pericole.
Partea practică hardware a [anonimizat]-o [anonimizat], LED-uri și o sursă de alimentare .
Motivația pentru realizarea acestei teme de licență o reprezintă multitudinea de cereri în industria automatizării. Dacă în urmă cu câțiva ani acest proiect poate nu s-[anonimizat]. Acest sistem de detecție poate reprezenta o [anonimizat]:
• cost redus
• fiabilitate
• eficiență
• siguranță cibernetică
• ușurință în utilizare
• diversitate a domeniilor de utilizare
Finalul lucrării prezintă concluziile de rigoare și referințele bibliografice.
: Concepte IoT
"[anonimizat]. Maybe even more so." – Kevin Ashton, 2009
Internetul Obiectelor (IoT) [anonimizat], oriunde, pentru oricine și orice. Se referă la o [anonimizat], toate interacționează între ele în același timp și spațiu [1].
IoT reprezintă o [anonimizat]-o multitudine de afaceri. Serviciile sunt astfel disponibile pentru a interacționa cu aceste ”obiecte inteligente” [anonimizat] a observa și a schimba starea lor . [anonimizat] [2].
Internet of Things (IoT) [anonimizat] (UID) având capacitatea de a transfera date printr-o rețea fără a [anonimizat]-computer [3].
Acest concept de Internet al Obiectelor a evoluat datorită interacțiunii simultane a [anonimizat], senzorii și sistemele încorporate [3,4].
James O. McKinsey a definit Internetul obiectelor ca fiind o rețea în care senzorii și releele încorporate în obiecte fizice sunt conectate prin intermediul rețelelor cablate și a celor wireless, folosind practic același protocol Internet (IP) care conectează Internetul [5].
Termenul de “Internet al obiectelor” a început să fie folosit pentru prima oară cu exact această denumire în urmă cu 21 ani. Însă ideea de bază a acestei tehnologii, a dispozitivelor conectate, a fost mai veche, cel puțin din anii 1970. Pe atunci, această idee era numită „internet încorporat” sau „computere omniprezente” [5].
Denumirea propriu-zisă „IoT” a fost inventată însă de Kevin Ashton în 1999, în timpul proiectelor sale în cadrul companiei Procter & Gamble. Ashton, lucrând la optimizarea lanțului de aprovizionare, a dorit să atragă atenția conducerii superioare asupra unei noi tehnologii interesante numite RFID (Radio-frequency identification-Identificarea radiofrecvenței) . Deoarece Internetul a fost cea mai impresionantă tendință nouă în 1999, el a numit aceasta tehnologie „IoT”. Chiar dacă Kevin a atras interesul unor directori de la P&G, termenul nu a atras atenția în următorii 10 ani [5].
Conceptul de IoT a început să câștige o oarecare popularitate în vara anului 2010. Au apărut astfel zvonuri conform cărora serviciul Street View de la Google nu doar realiza imagini la 360 de grade, ci și stoca tone de date ale rețelelor WiFi ale oamenilor. Oamenii dezbăteau dacă nu cumva acesta a fost începutul unei noi strategii Google de a deține informații nu doar despre lumea virtuală ci și despre cea reală. În același an (2010), guvernul chinez a anunțat că va face din ”Internetul Obiectelor” o prioritate strategică în planul lor de cinci ani.
În 2011, Gartner- compania de cercetare de piață care a inventat celebrul „hype-cycle pentru tehnologii emergente” a inclus un nou fenomen pe lista lor și anume „Internetul Obiectelor” [5].
În anul următor (2012), tema celei mai mari conferințe de internet LeWeb din Europa a fost „Internet of Things”. În același timp, reviste populare cu tematici tehnologice, cum ar fi Forbes, Fast Company și Wired, au început să folosească IoT ca termen specific pentru acest concept.
În octombrie 2013, IDC a publicat un raport în care afirma că Internet of Things va fi o piață de 8,9 trilioane de dolari în 2020 [5].
Termenul de ”Internet of Things” a atins conștientizarea populației abia atunci când, în ianuarie 2014, Google a anunțat că dorește să cumpere platforma Nest pentru 3,2 miliarde de dolari. În același timp, conferința Consumer Electronics Show (CES) din Las Vegas a avut loc tot sub tema IoT.
Conceptul IoT are capacitatea de a implementa, configura, rezolva probleme, securiza, gestiona și monitoriza entitățile IoT, de la senzori până la aplicații în ceea ce privește instalarea firmware-ului, patch-ul, depanare,monitorizare [6] .
Internetul Obiectelor (IoT) este o parte integrată a viitorului în ceea ce privește internetul și ar putea fi definită ca o infrastructură de rețea globală dinamică cu capacități de auto-configurare bazate pe protocoale standard de comunicare în care „obiectele” fizice și virtuale au identități, atribute fizice și personalități virtuale, folosesc interfețe inteligente și sunt integrate perfect în rețeaua de informații [1].
În IoT, „obiectele” pot deveni participanți activi în afaceri, în procesele informaționale și sociale unde sunt activate să interacționeze și să comunice atât între ele, cât și cu mediul, prin schimb de date și informații despre mediu, în timp ce reacționează însă autonom la evenimentele „reale /ale lumii fizice” influențând astfel mediul, derulând procese care declanșează acțiuni și creează servicii cu sau fără intervenție umană directă [1].
Viziunea despre Internetul viitorului este bazată pe protocoale standard de comunicare care au în vedere fuziunea rețelelor de calculatoare, Internetul Mass Media (IoM), Internetul Serviciilor (IoS) și Internetul Obiectelor (IoT) într-o platformă informatică globală comună de rețele transparente și „obiecte” în rețea [1].
Aplicațiile, serviciile, componentele intermediare, rețelele și punctele finale vor fi conectate structural în moduri totalmente noi. Este important ca designul arhitectural pentru Internetul obiectelor să accepte tehnici eficiente de memorie în cache și de sincronizare a datelor, precum și puncte finale conectate la rețea pentru reprezentări virtuale ale obiectelor și dispozitivelor conectate, care pot fi utilizate pentru monitorizarea locației, condiției și stării obiectelor, precum și trimiterea cererilor și instrucțiunilor către acestea [1].
Internetul obiectelor permite oamenilor și obiectelor să se conecteze oricând, oriunde, cu orice și cu oricine, utilizând orice cale sau rețea și orice serviciu [1].
Internetul Obiectelor implică o interacțiune simbiotică între real (sau fizic) și lumea digitală (sau virtuală) astfel: entitățile fizice dețin omologi digitali și reprezentare virtuală, astfel obiectele devin conștiente de context și pot comunica, interacționa, schimba date sau informații [1].
Prin utilizarea algoritmilor inteligenți de luare a deciziilor în aplicațiile software, se pot da răspunsuri rapide și adecvate fenomenelor fizice, pe baza informațiilor recent colectate despre entitățile fizice. Acestea creează noi oportunități pentru a satisface cerințele de afaceri, creează noi servicii bazate pe timpul real al datelor despre lumea fizică, obține informații cu privire la procesele și relațiile complexe, gestionează incidentele, abordează degradarea mediului (poluare, dezastru, încălzire globală, etc.), monitorizează activitățile umane (sănătate, mișcări etc.), îmbunătățește integritatea infrastructurii (energie, transport etc.) și abordează probleme de eficiență energetică (contorizare inteligentă a energiei în clădiri, consum eficient al vehiculelor, etc) [1].
Totul, pornind de la indivizi, grupuri, comunități, obiecte, produse, date, servicii, procese, va fi conectat prin IoT. Conectivitatea va deveni în IoT un fel de produs de piață , disponibil tuturor cu un cost foarte mic și care nu este deținuta de nicio entitate privată. In acest context, va fi necesară crearea unui mediu de dezvoltare adecvat, conștientizând situația, pentru a putea crea servicii și un software de bază inteligent adecvat pentru înțelegerea și interpretarea informațiilor, pentru a putea astfel asigura protecție împotriva fraudei și a atacurilor rău intenționate (care vor crește inevitabil pe măsură ce Internetul va fi din ce în ce mai utilizat), dar si pentru a garanta confidențialitatea [1].
În ceea ce privește IoT, informațiile despre rutina zilnică a unui utilizator sunt colectate astfel încât „obiectele” din jurul utilizatorului să poată coopera pentru a oferi servicii mai bune care îndeplinesc preferințele personale. Atunci când informațiile colectate care descriu în detaliu un utilizator, ajung prin mai multe noduri într-o rețea, datorită integrării diverselor servicii, dispozitive și rețele, informațiile stocate pe un dispozitiv sunt vulnerabile la încălcarea confidențialității prin compromiterea nodurilor existente într-o rețea IoT [3].
Astfel, există 4 obiective de securitate pe care sistemul IOT le cere:
confidențialitatea datelor: părțile neautorizate nu pot avea acces la datele transmise și stocate
integritatea datelor: corupția intenționată și neintenționată a datelor transmise și stocate trebuie să fie detectată
non-repudiere: expeditorul nu poate nega faptul că a trimis un mesaj dat
disponibilitatea datelor: datele transmise și stocate ar trebui să fie disponibile pentru părțile autorizate chiar și cu atacurile de refuz de serviciu ( Denial-of-Service DOS) [3]
Descrierea proiectului
Folosind conceptele IOT mai sus menționate, am pus bazele realizării unui sistem complet de monitorizare a condițiilor ambientale (temperatură, umiditate, calitatea aerului) care ajută la prevenția si detectarea unui incendiu (detecție flăcări, detecție fum/gaz, detecție monoxid de carbon, detecție temperatură ridicată) care include un sistem de avertizare activă sonoră, vizuală si digitala prin email si notificări, cât și un sistem de decuplare a alimentării cu gaz și acționarea automatizată a sistemului de stingere pe bază de apă a clădirii (aspersoare ).
Toate informațiile înregistrate de senzori sunt transmise în timp real către un server care rulează pe o mașină virtuală în Cloud-ul public Microsoft Azure.
Aceste informații dar și starea sistemului se pot monitoriza printr-o aplicație mobilă disponibilă pe Android și IOS.
Sistemul IOT descris anterior are la bază următoarele componente:
Mașina virtuală
Server Blynk
Hardware
Cod (Firmware) ,atașat in anexă
Aplicația de monitorizare Blynk
: Crearea mașinii virtuale in Cloud
Mașinile virtuale Azure (VM) pot fi create prin intermediul portalului Azure. Portalul Azure este o interfață de utilizator disponibila in orice browser, pentru a crea resurse Azure. Ghidul de mai jos ajută la înțelegerea si utilizarea portalului Azure pentru a putea implementa o mașină virtuală(VM) Linux care rulează un sistem de operare Ubuntu 18.04 LTS. Pentru a realiza o conexiune securizată la VM, se utilizează protocolul de rețea Secure Shell (SSH) și ulterior se instalează serverul Blynk [7].
Pentru început se creează așa-numita “SSH Key” pentru autentificare în cadrul conectării la mașina virtuală.
Apoi se deschide un bash shell și se utilizează ssh-keygen pentru a crea SSH Key.
Pentru crearea mașinii virtuale trebuie parcurse etapele de mai jos:
Autentificare în portalul Azure
Din bara meniului din partea de sus a paginii se selectează < Cloud Shell> respectiv opțiunea < Bash > din partea stângă sus
Se tastează < ssh-keygen -t rsa -b 2048 > pentru obținerea SSH Key
Se selectează locația dorită pentru salvarea SSH Key
Se execută comanda < SSH-keygen > pentru a genera “cheia” publică și privată în locația selectată anterior
Se execută comanda < ssh-keygen -t rsa -b 2048 > și se copiază rezultatul obținut pentru o folosire ulterioară, când se va defini contul de administrator al mașinii virtuale [7]
Următoarele etape se vor realiza în portalul Microsoft Azure, în care este necesară autentificarea cu un cont existent.
Crearea mașinii virtuale se realizează astfel:
în bara de căutare se tastează <Virtual Machine >
sub secțiunea <Services> se alege <Virtual Machines>
în pagina < Virtual Machine> se selectează opțiunea <Add> și se deschide pagina <Create a virtual machine>
în secțiunea < Basics>, aflată sub < Project details>, se selectează subscripția corespunzătoare și se tastează < myResourceGroup > în căsuța <Resource Group>
sub secțiunea < Instance details > se tastează < myVM > ca denumire a mașinii virtuale,
< West Europe > în căsuța < Region > și < Ubuntu 18.04 LTS > în dreptul căsuței < Image >
sub secțiunea < Administrator account > se alege opțiunea de <SSH public key>, se notează contul de administrare și se copiază în căsuța < SSH public Key > rezultatul obținut după executarea comenzii < ssh-keygen -t rsa -b 2048 > menționată anterior in prima etapa
sub secțiunea < Inbound rules > se selectează < Allow selected ports > din căsuța < Public Inbound ports > și < SSH (22), HTTP (80) > din căsuța < Select Inbound ports >
se selectează butonul < Review and Create > din josul paginii pentru a putea crea mașina virtuală. Acest proces va dura câteva minute [7].
: Descrierea Ecosistemului IoT Blynk
Blynk este cunoscută drept cea mai accesibilă platformă IoT, fiind ușor de utilizat și formată atât dintr-o aplicație care poate fi rulată pe sistemele de operare iOS/Android, cât și dintr-un set de biblioteci pentru a construi aplicații IoT în câteva minute, având o platformă hardware [8].
Aceasta permite crearea rapidă a unei interfețe grafice prin simpla glisare și fixare a elementelor grafice pentru a controla și monitoriza proiectele hardware de pe dispozitivul iOS sau Android.
Platforma Blynk a apărut ca un proiect Kickstarter creat de Pasha Baiborodin și a fost susținut de 2321 de persoane care au reușit să strângă 49.235 USD pentru a-l crea. Suma aceasta a fost mult mai mare decât cea necesară, de 26.000 USD.
Blynk este unul dintre proiectele finalizate cu succes, listate pe Kickstarter [8].
Blynk acceptă platforme hardware precum Arduino, Raspberry Pi și alte plăci de dezvoltare similare pentru a construi un hardware compatibil cu multiple proiecte.
Plăcile de dezvoltare care pot fi cuplate cu Blynk sunt înfățișate mai jos:
Espressif (ESP8266, ESP32, NodeMCU)
Linux (C++) (Raspberry Pi, Ubuntu)
Arduino (Arduino UNO, Arduino MKR1000, Arduino MKRZero,
Arduino Yun, Arduino 101, Arduino Zero, Arduino M0 [8]
În ceea ce privește conectarea plăcii de dezvoltare cu Cloud-ul Blynk și cu Serverul Privat Blynk, aceasta se poate realiza prin:
Ethernet
rețea Wireless
rețea Bluetooth
rețea celulară
rețea de tip serial
Platforma Blynk este constituită din următoarele componente:
Serverul Blynk, responsabil pentru toate comunicațiile dintre dispozitivul mobil care rulează aplicația Blynk și hardware-ul existent. Se poate instala într-o mașină virtuală și se poate crea un server local Blynk.
Aplicația Blynk permite crearea unei interfețe grafice folosind elemente grafice prestabilite și este disponibilă pentru platformele Android și iOS.
Bibliotecile Blynk permit comunicarea cu serverul și procesează toate comenzile de intrare și de ieșire din aplicația Blynk și hardware. Acestea sunt disponibile pentru toate platformele de hardware cunoscute [8] .
Toate cele 3 componentele de mai sus comunică între ele pentru a construi o aplicație IoT complet funcțională care poate fi controlată de oriunde printr-un tip de conectivitate preconfigurat.
Se poate astfel controla hardware-ul din aplicația Blynk care rulează pe dispozitivul mobil prin intermediul serverului Blynk. De asemenea are loc și o transmitere de informații procesate de hardware către aplicația Blynk [8].
3.1 Configurare Server Blynk
Cu arhitectura ecosistemului Blynk se poate conecta direct hardware-ul (placa de dezvoltare NodeMCU) la mașina virtuală care rulează în Cloud-ul public Microsoft utilizând Internetul și permițând controlul și monitorizarea acestuia de la distanță [8].
Serverul Bliynk se poate configura pe următoarele sisteme de operare:
Windows
Linux
Mac
Pentru acest proiect am ales configurarea server-ului Blynk pe sistemul de operare Ubuntu bazat pe Linux care se realizează parcurgând următorii pași:
folosind aplicația Putty, se realizează conexiunea la serverul Ubuntu prin SSH
se instalează aplicația Java versiunea 8 folosind comanda următoare:
< sudo apt-get install oracle-java8-jdk >
se verifică versiunea Java instalată, folosind comanda:
< java -version >
se va obține mesajul :
< java version "1.8.0_65" Java(TM) SE Runtime Environment (build 1.8.0_65-b17) Java HotSpot(TM) Client VM (build 25.65-b01, mixed mode) >
se descarcă fișierul JAR al serverului Blynk folosind comanda:
<wget"https://github.com/blynkkk/blynk-server/releases/download/v0.33.4/server-0.33.4-java8.jar>
Descărcam fișierul intitulat <server-0.33.4-java8.jar> necesar server-ului Blynk în Ubuntu server
se pornește server-ul Blynk (prin rularea fișierului JAR) unde se configurează portul 8080 utilizat de placa de dezvoltare și portul 9443 utilizat de aplicația Blynk
< java -jar server-0.33.4-java8.jar -dataFolder /home/pi/Blynk >
se va obține mesajul :
<Blynk Server 0.34.0-SNAPSHOT successfully started. All server output is stored in folder '/home/pi/logs' file.Your Admin login email is admin@blynk.cc.Your Admin password is admin >
se realizează autentificarea în aplicația Blynk utilizând contul de administrator.
Se poate configura pornirea automată a server-ului Blynk atunci când sistemul de operare repornește folosind comenzile următoare :
se editează fișierul </etc/rc.local> folosind editorul nano prin comanda < sudonano /etc/rc.local >
se adaugă următoarea comandă în fișierul menționat mai sus și apoi se salvează fișierul
< java -jar /home/pi/server-0.33.4.jar -dataFolder /home/pi/Blynk & > [8].
3.2 Descriere Aplicație
Aplicația Blynk oferă o modalitate simplă de a constitui aplicații IoT care pot fi rulate pe smartphone-uri și tablete prin existența unui set predefinit de module glisabile și descărcabile cunoscute sub numele de <widgets> care permit utilizatorilor să realizeze o configurație suplimentară pe widget-uri cu o interfață de utilizator ușor utilizabilă. Folosind această aplicație se pot crea numeroase alte aplicații pentru uz personal sau în afaceri [8] .
3.2.1 Instalarea aplicației
Aplicația este disponibilă în prezent pentru platformele Android și iOS. Modul de instalare a aplicației Blynk pe smartphone sau tableta Android este explicat mai pe larg după cum urmează:
se descarcă aplicația Blynk disponibilă în Magazin Play-ul smartphone-ului.
se instalează aplicația
se permite accesul aplicației la diferite resurse ale dispozitivului mobil (în caz că aplicația cere acest lucru)
După finalizarea instalării, se poate deschide aplicația Blynk [8] .
3.2.2 Conectarea aplicației la server-ul Blynk
În mod normal, aplicația Blynk se sincronizează cu Cloud-ul Blynk conectându-se la acesta prin internet. In cadrul acestui proiect aplicația este conectata cu serverul privat Blynk realizat anterior, din aceasta cauza este necesară modificarea câtorva setări în aplicația Blynk.
Aceste setări vor ajuta la identificarea server-ului Blynk în internet și vor permite vizualizarea și controlul de la distanță din aplicația Blynk a sistemului IOT.
Configurarea se realizează urmând pașii următori:
se configurează adresa DNS a server-ului Blynk care rulează în Cloud-ul public Microsoft accesând secțiunea de autentificare a aplicației Blynk și crearea unui cont nou (fig. 9) [8].
se apasă pictograma care conține trei puncte, pentru a vizualiza setările serverului
se comută de la BLYNK la CUSTOM și se adaugă adresa DNS și portul 9443
se introduce numele noului cont de utilizator și se apasă Sign Up
odată creat contul, aplicația Blynk va prezenta un scurt ghid de utilizare
Crearea unui nou proiect IoT și generarea token-ului de autorizare
Pentru realizarea acestuia este necesară crearea unui cod de autentificare care se va adăuga în codul firmware, urmând pașii de mai jos:
se accesează opțiunea < New Project > din cadrul aplicației Blynk [8]
se denumește proiectul nou, se selectează tipul de placă de dezvoltare și se finalizează configurarea noului proiect .
din bara de instrumente se selectează opțiunea < Project Settings > unde se va alege opțiunea < Copy all > situată sub < Auth Tokens >. Se salvează astfel codul pentru a fi utilizat în codul firmware [8].
3.2.3 Dezvoltarea aplicației Blynk
Dezvoltarea aplicației este realizează cu ajutorul widget-urilor si a interfeței intuitive. După cum puteți observa in Figura 3-12 am utilizat diverse elemente disponibile in aplicație .
Lista widget-urilor folosite și numerotate in Figura 3-12:
Denumirea aplicației
Timpul total de funcționare al aplicației
Panoul de setări al aplicației
Meniul cu widget-uri prestabilite
Butonul de pornire al aplicației si închidere a modului de editare
LED-urile virtuale de avertizare in funcție de pericolul detectat
Diagrama cu valorile măsurate de senzori unde putem selecta diferite perioade de timp
Notificări prin email in caz de pericol
Butonul de emitere rapoarte cu valorile măsurate de senzori
Notificări pe telefon in caz de pericol
Terminalul virtual ,prezinta informații utile in cazul unei defecțiuni in cadrul sistemului
Tabela cu valorile măsurate de senzori și semnalul WiFi recepționat de sistem
După închiderea modului de editare (Figura 3-13) putem observa design-ul final al aplicației
Hardware
4.1 Placa de dezvoltare NodeMCU
După cum am menționat în introducere, Internetul Obiectelor (IoT) reprezintă un domeniu în trend în lumea tehnologiei. Au apărut modificări majore în modul în care lucrăm, iar obiectele fizice și lumea digitală sunt acum inter-conectate mai mult că oricând [9].
În acest fel, cei de la Espressif Systems (o companie producătoare de componente electronice din Shanghai) au lansat pe piață un microcontroler WiFi activ – ESP8266, la un preț mai mult decât accesibil. Astfel, cu mai puțin de 3 USD, reprezentând la cursul valutar actual, suma modică de 13.5 lei (1 USD=4.47 lei), oricine poate monitoriza și controla lucrurile din orice parte a lumii, făcând acest microcontroler perfect pentru aproape orice proiect IoT [9].
Placa de dezvoltare este echipată cu modulul ESP-12E ce conține un cip ESP8266 cu microprocesor RISC Tensilica Xtensa® 32-bit LIS106, care funcționează la o frecvența de tact reglabilă de la 80 până la 160 MHz și suportă instalarea unui sistem de operare în timp real [9].
Există totodată o memorie RAM de 128 Kb și 4 Mb de tip FLASH (pentru stocarea de programe și date), fiind suficientă pentru a face față codului de mari dimensiuni care pot alcătui pagini web, date JSON / XML și tot ceea ce conectăm la dispozitivele IoT în proiectele dorite.
Microcontroler-ul ESP8266 integrează un sistem de transmisie Wi-Fi HTT 802.11 b/g/n HT40, astfel încât poate nu numai să se conecteze la o rețea WiFi și să interacționeze cu internetul, dar poate și să configureze o rețea proprie, permițând conectarea altor dispozitive direct la aceasta. Acest lucru face ca NodeMCU-ul ESP8266 să fie și mai versatil (Figura 4-1) [9].
Specificații tehnice NodeMCU
4.1.1 Alimentarea plăcii de dezvoltare
Microcip-ul ESP8266 funcționează corespunzător când este alimentat cu o tensiune cuprinsă între 3V până la 3,6 V și din acest motiv placa este accesorizată cu un regulator de tensiune LDO pentru a menține tensiunea constantă la 3,3 V [9].
Regulatorul de tensiune poate furniza în mod fiabil până la 600mA, ceea ce ar trebui să fie mai mult decât suficient având în vedere că ESP8266 consumă în jur de 80mA în timpul transmisiilor WiFi (Figura 4-3). De asemenea, ieșirea regulatorului este conectată pe mai mulți pini care sunt etichetați cu 3V3. Acești pini pot fi utilizați pentru a furniza energie pentru alte componente externe.
Alimentarea plăcii de dezvoltare este realizată prin intermediul conectorului Micro-USB de pe placă . În mod alternativ, dacă există o sursă cu o de tensiune de 5V, pinul VIN poate fi utilizat pentru a alimenta direct microcontroler-ul ESP8266 și componentele sale externe [9].
4.1.2 Canale de conectare disponibile
Placa de dezvoltare este echipată cu 17 pini de uz general (GPIO) distribuiți pe ambele părți ale plăcii . Acești pini pot fi alocați în diferite sarcini externe, ca de exemplu :
canal ADC pe 10 biți.
interfață universală receptor/transmițător asincronă (UART) utilizată pentru încărcarea serială a codului
ieșiri care permit modularea impulsului în durata (PWM) care permite controlul luminozității LED-urilor sau controlul turației motoarelor.
interfață SPI, I2C & I2S pentru conectarea diverselor componente externe și senzorilor
interfață I2S pentru adăugarea capabilităților audio [9].
Datorită capabilității de multiplexare a pinilor, un singur pin GPIO poate acționa pe rând ca PWM / UART / SPI (Figura 4-4)
4.1.3 Butoane si Led-uri de stare
Placa de dezvoltare NodeMCU deține două butoane. Unul este marcat ca RST și este situat în colțul din stânga sus, cu funcția de Resetare, folosit pentru resetarea microcipului ESP8266.
Celălalt buton FLASH din colțul din stânga jos este butonul utilizat la actualizarea firmware-ului. Placa are, de asemenea, un indicator LED care este programabil și este conectat la pinul D0 al plăcii (Figura 4-5) .
4.1.4 Interfața serială
Placa include controlerul USB către UART CP2102 de la Silicon Labs, care transformă semnalul USB în serial și permite computerului să programeze și să comunice cu cipul ESP8266 (Figura 4-6) .
Dacă driverul CP2102 instalat pe computer deține o versiune mai veche, este recomandată actualizarea sa [9] .
4.1.5 Pini disponibili
Placa de dezvoltare NodeMCU are în total 30 de pini disponibili pentru conectare externă (Figura 4-7) .
În ceea ce privește descrierea pinilor din figura de mai sus, aceasta este înfățișată mai jos, după cum urmează:
Pinii de alimentare sunt în număr de 4 notați astfel:
1 pin notat ca VIN
3 pini notați ca 3V3
Pinul VIN poate fi utilizat pentru a alimenta direct microcipul ESP8266 și componentele sale externe, dacă există o sursă de tensiune reglată de 5V.
Pinii 3V3 sunt conectați la ieșirea regulatorului de tensiune de pe placă. Acești pini pot fi folosiți pentru a furniza energie pentru componentele externe [9].
Pinii GND sunt notați cei 4 pini care reprezintă conexiunile de masă ale plăcii de dezvoltare.
Pinii I2C sunt utilizați pentru a conecta senzorii și componentele externe de tip I2C (I2C Master si I2C Slave). Funcționalitatea interfeței I2C poate fi realizată prin programare, iar frecvența de tact este de maxim 100 kHz.
Pinii GPIO sunt în număr de 17 care pot îndeplini diferite funcții, cum ar fi I2C, I2S, UART, PWM, se pot controla LED-uri, butoane sau senzori. Fiecare GPIO activat digital poate fi configurat pentru a introduce sau a exporta date de tip binar, sau poate fi setat la impedanță ridicată.
Pinul ADC : Placa este echipată cu un convertor analogic-digital(ADC) care are o precizie de 10 biți. Cele două funcții pot fi implementate folosind ADC.
Pinii UART : Placa de dezvoltare deține 2 interfețe UART (UART0 și UART1), care asigură o comunicare asincronă (RS232 și RS485) și pot comunica cu o viteză de până la 4,5 Mbps. UART0 (cu pinii TXD0, RXD0, RST0 și CTS0) poate fi utilizat pentru o comunicare cu control fluid. UART1 (pin TXD1) se poate folosi însă doar pentru transmisia de date și din această cauză este de obicei utilizat pentru imprimarea jurnalului de activitate.
Pinii SPI : Placa de dezvoltare este echipată și cu doi pini SPI (SPI și HSPI). Aceștia prezintă următoarele caracteristici:
dețin 4 moduri de sincronizare a transferului în format SPI
până la 80 MHz
până la 64 biți FIFO
Pinii SDIO : Placa ESP8266 are o interfață securizată de intrare / ieșire digitală (SDIO), care este utilizată pentru a conecta cardurile SD. Sunt acceptate variantele SDIO v1.1 și SDIO v2.0.
Pinii PWM: Placa are 4 canale de modulare a impulsului de durată . Ieșirea PWM poate fi programată și utilizată pentru controlarea turației motoarelor și a intensității luminoase a LED-urilor. Intervalul de frecvență PWM este reglabil de la 1000 μs la 10.000 μs, adică între 100 Hz și 1 kHz.
Pinii de Control sunt utilizați pentru a controla placa de dezvoltare.
Acești pini sunt: pinul de Pornire (Enable ), de Resetare (RST) și de trezire (WAKE).
pinul EN – placa de dezvoltare este activată atunci când pinul EN este HIGH. Când este LOW, cipul funcționează la o putere minimă.
pinul RST este folosit pentru a reseta cipul ESP8266.
pinul WAKE este folosit pentru a trezi cipul [9].
4.1.6 Programarea plăcii de dezvoltare
Pentru a putea fi programată placa de dezvoltare utilizând un sistem de operare Windows, este necesară instalarea ultimei versiuni a aplicației Arduino IDE (Arduino 1.6.4 sau mai nou) în computer. Următorul pas este actualizarea bazelor de date care o să includă placa de dezvoltare utilizata, folosind o adresă URL personalizată http://arduino.esp8266.com/stable/package_esp8266com_index.json.
Se deschide Arduino IDE și se accesează Fișier-> Preferințe. Apoi, se copiază URL-ul de mai jos în caseta de tip text „board manager URL” situată în partea de jos a ferestrei (Figura 4-8) [9] :
Se apasă OK. Apoi se navighează la Board Manager accesând Instrumente-> Boards-> Boards Manager. În plus față de plăcile standard Arduino, ar trebui să existe câteva înregistrări noi. Este necesară filtrarea căutării tastând <esp8266>, se face click pe acea intrare și se selectează <Instalare > (Figura 4-9) [9].
4.2 Periferice
În cadrul acestui proiect au fost folosiți senzori, relee, LED-uri si un buzer, toate fiind comandate de către placa de dezvoltare. Fiecare element periferic are rolul lui bine definit după cum urmează:
4.2.1 Senzorul detector de flăcări
Un detector de flăcări este un senzor conceput pentru a detecta și a răspunde la prezența unei flăcări sau a unui incendiu sau a oricărei alte surse luminoase, care permite detectarea flăcării.
Răspunsurile la o flacără detectată depind de instalație, in acest proiect include sunarea unei alarme, dezactivarea unei linii de combustibil și activarea unui sistem de stingere a incendiilor.
Un detector de flăcări poate răspunde adesea mai rapid și mai precis decât un detector de fum sau de căldură datorită mecanismelor pe care le folosește pentru a detecta flacăra [10].
Există mai multe moduri de a implementa un senzor de flacără, dar modulul utilizat în acest proiect este un senzor de detecție a radiațiilor infraroșii [11].
Senzorul de flacără se bazează pe tranzistorul foto YG1006 NPN. Obiectul negru din partea anterioară a modulului reprezentat în Figura 4-10 reprezintă un tranzistor foto.
Tranzistorul foto YG1006 arată ca un LED negru, dar este un tranzistor NPN cu trei borne, unde “+” este emitentul și ”-” este colectorul (nu există un terminal de bază, deoarece lumina detectată va permite curgerea curentului. Tranzistorul foto este acoperit cu epoxid negru, ceea ce îl face sensibil la radiațiile infraroșii iar modelul YG1006 de tranzistor este sensibil la radiațiile infraroșii în intervalul de lungime de undă cuprins între 760nm și 1100nm.
Folosind acest tip senzor de flacără se poate detecta lumina infraroșie până la o distanță de 100 cm în unghiul său de detecție de 60 de grade [11].
Există astfel două tipuri de implementări ale senzorilor cu flăcări folosind tranzistorul foto YG1006:
una este prevăzută atât cu ieșire analogică cât și cu ieșire digitală
cealaltă este prevăzută doar cu ieșirea digitală
Ambele implementări necesită aceleași componente, dar diferența este că un modul (cel cu ieșire analogică) oferă ieșirea senzorului ca ieșire analogică.
Indiferent ce model de senzor de flăcări (cu sau fără ieșire analogică) este folosit, conectare acestuia cu placa de dezvoltare este facilă [11].
Conectând un senzor de flăcări cu placa de dezvoltare se poate detecta focul și activa un buzer (implementare simplă și ușoară) sau orice alte măsurători de siguranță de urgență (cum ar fi activarea unui sistem de stropire sau oprirea supapelor de gaz etc.) [11].
4.2.2 Senzorul de umiditate si temperatură
Un senzor de umiditate simte, măsoară și raportează atât umiditatea, cât și temperatura aerului.
Raportul dintre umiditatea din aer și cea mai mare cantitate de umiditate la o anumită temperatură a aerului se numește umiditate relativă.
Senzorul de umiditate funcționează prin detectarea modificărilor de curenți electrici sau de temperatura din aer [12] .
Un astfel de senzor de umiditate si temperatură este senzorul DHT11.Acesta este un senzor digital de temperatură și umiditate, de dimensiuni foarte mici. Acesta utilizează un senzor capacitiv de umiditate și un termistor (NTC) pentru a măsura aerul din jur și scoate un semnal digital pe pinul de date (de aceea nu este nevoie de intrare analogică) [13].
Un termistor este un rezistor termic a cărui rezistență se schimbă drastic in funcție de temperatură (Figura 4-12). Termenul „NTC” înseamnă „Coeficient de temperatură negativ”, ceea ce înseamnă că rezistența scade odată cu creșterea temperaturii [14]
Senzorul DHT11 este destul de simplu de utilizat, dar necesită o cronologie atentă pentru a prelua date [13].
Componenta de detectare a umidității are doi electrozi cu un substrat care menține umiditatea între ei. Ionii sunt eliberați de substrat pe măsură ce vaporii de apă sunt absorbiți de acesta, ceea ce crește conductivitatea între electrozi (Figura 4-13) [14].
Modificarea rezistenței dintre cei doi electrozi este proporțională cu umiditatea relativă. Umiditatea relativă mai mare scade rezistența dintre electrozi, în timp ce umiditatea relativă mai mică crește rezistența dintre electrozi [14].
Pe cealaltă parte a senzorului, există un PCB ( Printed Circuit Board) ce deține un circuit integrat de tip SOIC-14 pe 8 biți. Acest circuit integrat măsoară și prelucrează semnalul analog cu coeficienții de calibrare predefiniți, face conversia analogică la digitală și scoate un semnal digital cu temperatura și umiditatea (Figura 4-14) [14].
În centrul modulului se află senzorul digital de temperatură și umiditate DHT11.
DHT11 poate măsura temperatura de la 0 ° C la 50 ° C cu precizie de ± 2,0 ° C, iar umiditatea de la 20 la 80% cu precizie de 5%.
Rata de eșantionare a DHT11 este de 1 Hz, ceea ce înseamnă că se pot obține date noi de la acesta o dată la o secundă.
Modulul este dotat cu toate circuitele esențiale de susținere, deci ar trebui să fie gata să funcționeze fără alte componente suplimentare [14].
Senzorii DHT11 necesită de obicei o rezistență externă de extragere (Figura 4-16) de 10KΩ între VCC ( Voltage Common Collector) și pinul Out pentru o comunicare adecvată între senzor și placa de dezvoltare. Cu toate acestea, modulul are un rezistor de extragere încorporat, deci nu trebuie adăugat .
Modulul are de asemenea si un condensator de decuplare pentru filtrarea zgomotului la sursa de alimentare.
Modulul DHT11 este destul de ușor de conectat. Are doar trei pini (Figura 4-15):
-Pinul VCC furnizează energie electrică pentru senzor. Se recomandă alimentarea cu 5V, deși tensiunea de alimentare este cuprinsă între 3,3 V și 5,5 V. În cazul alimentării cu 5V, se poate păstra senzorul la mai mult de 20 de metri. Cu toate acestea, daca tensiunea de alimentare este de 3,3 V, lungimea cablului nu trebuie să fie mai mare de 1 metru. În caz contrar, căderea de tensiune a liniei va duce la erori la măsurare.
-Pinul Out este utilizat pentru comunicarea dintre senzor și placa de dezvoltare.
-Pinul GND trebuie conectat la împământarea plăcii de dezvoltare [14].
4.2.3 Senzorul detector de apă
Senzorul detector de apă este utilizat pentru a detecta apa și pentru a genera o alarmă [15] .
Un senzor detector de apă este un dispozitiv de comutare care este utilizat pentru a detecta lichide. Funcționează ca un întrerupător, iar principiul de funcționare al acestui senzor este acela că ori de câte ori detectează apă, comutatorul va fi închis. Acest senzor este utilizat si pentru a confirma pornirea aspersoarelor și funcționarea lor în caz de incendiu.
Funcționarea senzorului de ploaie este una simplă: prezența apei este detectată cu ajutorul unui circuit de cupru deschis, senzitiv și neizolat ce poartă denumirea de “pad” și care se expune în aria de monitorizare [16].
În funcție de cantitatea de apă prezentă pe circuit, rezistența acestuia va varia asemenea unui potențiometru (Figura 4-17) .
Rezistența este invers proporțională cu cantitatea de apă. Astfel, cu cât este mai multă apă pe suprafață circuitului, cu atât va exista o conductibilitate mai bună și va rezulta o rezistență mai mică. În mod contrar, cu cât este mai puțină apă pe suprafața circuitului, cu atât va exista o conductibilitate mai slabă și va rezulta o rezistență mai mare [16].
Senzorul produce o tensiune de ieșire în funcție de rezistență, iar prin măsurare se poate determina dacă plouă sau nu.
Un senzor detector de apa are două componente:
Pad-ul senzitiv(Figura 4-18): reprezintă o placă de detectare cu un circuit de cupru expus, care este așezată în zona de monitorizare. Circuitul de cupru este deschis, închiderea acestuia fiind declanșată de apariția apei.
Modulul de conectare cu placa de dezvoltare: produce o tensiune de ieșire în funcție de rezistența pad-ului senzitiv, tensiune care este transmisă mai departe către pinul analogic de ieșire (Analog Output(AO)). Același semnal este transmis comparatorului de înaltă precizie LM393 pentru a-l digitaliza și este transmis în continuare către pinul digital de ieșire (Digital Output(DO)) (Figura 4-19) [16].
Modulul are un potențiometru încorporat pentru ajustarea sensibilității la ieșirea digitală (DO). Se poate seta un prag folosind un potențiometru, astfel încât atunci când cantitatea de apă depășește valoarea pragului, semnalul digital va fi LOW iar în caz contrar va fi HIGH [16].
Modulul deține și două LED-uri:
LED-ul de alimentare se va aprinde atunci când modulul este pornit
LED-ul de stare se va aprinde atunci când ieșirea digitală va fi LOW
Senzorul de ploaie este foarte ușor de utilizat și are doar 4 pini de conectat(Figura 4-20) :
Pinul AO oferă un semnal analog între valoarea de alimentare (5V) la 0V
Pinul DO oferă ieșire digitală a circuitului intern comparator si se poate conecta la orice pin digital de pe placa de dezvoltare sau direct la un releu de 5V sau un dispozitiv similar
Pinul GND reprezintă pinul de masă
Pinul VCC furnizează energie electrică pentru senzor și se recomandă alimentarea senzorului cu 3,3V – 5 V [16].
4.2.4 Senzorul de monitorizare a calității aerului
În cadrul acestui proiect am folosit senzorul de gaz MQ-135 care poate detecta gaze precum amoniac (NH3), sulf (S), benzen (C6H6), CO2, fum sau vapori de alcool [17].
Acest senzor deține un pin de ieșire digital și unul analogic. Când nivelul acestor gaze depășește o anumită limită în aer, pinul digital este HIGH. Această valoare de prag poate fi setată folosind potențiometrul existent. Pinul analogic de ieșire emite o tensiune analogică ce poate fi utilizată pentru aproximarea nivelului acestor gaze în atmosferă.
Senzorul pentru calitatea aerului MQ135 se alimentează la o tensiune de 5V și consumă aproximativ 150mA (Figura 4-21 și Figura 4-22) . Necesită o încălzire prealabilă ce poate dura între 30 secunde până la câteva minute, pentru a putea da rezultate optime. Când se pornește modulul, LED-ul de pornire se va aprinde și se lasă astfel până când durata de preîncălzire este finalizată [17].
Pinul analogic de ieșire al senzorului poate fi utilizat pentru a măsura valoarea totală a gazelor menționate mai sus. Pentru a realiza această măsurătoare, trebuie utilizată placa de dezvoltare care va măsura valoarea tensiunii analogice și va efectua unele calcule pentru a găsi valoarea Rs / Ro unde Rs este rezistența senzorului atunci când este prezent gazul și Ro este rezistența senzorului la aerul curat. Odată găsit acest raport Rs / Ro, se poate folosi pentru a calcula valoarea totală a gazelor, folosind graficul de mai jos care este preluat din fișa tehnică a senzorului MQ135 ( Figura 4-23) [17].
4.2.5 Releele de control
Pentru întreruperea alimentării cu gaz în cazul detectării unei schimbări a calității aerului și pornirea aspersoarelor în cazul detectării unui incendiu, este nevoie de un releu cu două canale cu care se poate controla pornirea sau oprirea ambelor sisteme (sistemul de alimentare cu gaz si sistemul de stingere incendiu).
Un releu reprezintă un comutator acționat electric de un electromagnet [18].
Electromagnetul este alimentat cu o tensiune joasă de 5 volți de la placa de dezvoltare care acționează un contact pentru a deschide sau închide un alt circuit care trebuie comandat (Figura 4-24) .
În acest proiect am folosit un modulul cu relee cu 2 canale HL-52S care vine echipat cu 2 relee care suportă un curent maxim de 10A la 250V (Figura 4-25) . Întrerupătorul de ieșire al fiecărui releu are 3 pini de ieșire, cel din mijloc fiind comun ambelor circuite. Un circuit este în permanență închis iar în cazul comutării sale, circuitul închis se va deschide și viceversa.
Pe partea cealaltă a modulului (Figura 4-26) există 2 seturi de pini. Primul set are 4 pini, o masă și un pin VCC pentru alimentarea modulului și 2 pini de intrare In1 și In2. Al doilea set de pini are 3 pini, cu un jumper între pinul JDVcc și cel Vcc. Cu o configurație ca aceasta, electromagnetul releului este alimentat direct la placa de dezvoltare [18].
Tensiunea de 5 volți din placa de dezvoltare, este conectată la pinul VCC (Figura 4-27) pentru activarea releului prin intermediul optocuplorului și la cel JDVCC care alimentează electromagnetul releului.
Pinii de intrare ai modulului funcționează în mod invers (Figura 4-28). Releul este activat atunci când pinul de intrare este LOW, deoarece în acest fel curentul va fi transmis de la VCC la pinul de intrare care este LOW, sau la masă. Când pinul de intrare va fi HIGH, nu va exista transmitere de curent [18].
4.2.6 Modulul LED
În cadrul proiectului, acest modul indică vizual existența unui pericol când afișează culoarea roșie si verde când acesta nu există [19].
Acest modul (Figura 4-29) este format dintr-un LED RGB de 5 mm și trei rezistențe de limitare de 150Ω pentru a preveni arderea [19] .
Reglarea semnalului PWM pe fiecare pin de culoare va avea ca rezultat diferite culori obținute prin mixarea celor trei culori primare (roșu, verde, albastru- RGB).
4.2.7 Modulul Buzer
Pe piață există două tipuri de buzer: activ și pasiv. Un buzer activ emite doar un singur ton atunci când este conectat la Vcc și la masă. Un buzer pasiv este similar cu un difuzor și are nevoie de un semnal pentru a funcționa.
YL-44 (Figurea 4-30) este un modul mic de sunet care funcționează în jurul intervalului audibil, cu o frecvență de 2 kHz. Buzer-ul emite un sunet activ, ceea ce înseamnă că produce sunet de unul singur, fără a avea nevoie de un generator extern de frecvență. Prezența unui semnal LOW pe pinul I / O va activa buzer-ul, iar prezența unui semnal HIGH îl va opri .
4.3 Proiectarea circuitului
În această etapă am dezvoltat circuitul virtual (Figura 4-32) al acestui proiect folosind aplicația open-source Fritzing. Această aplicație permite o dezvoltare ușoară a prototipurilor bazate pe Arduino datorită unei interfețe ușor de utilizat și a unei colecții generoase de componente disponibile .
Folosind circuitul virtual prezentat mai sus (Figura 4-32), am realizat și circuitul fizic precum si o carcasa pentru acesta.
Concluzii
Tema ce stă la baza acestui proiect, ”Internetul obiectelor”, pare să reprezinte o soluție a viitorului în industria automatizărilor.
Am decis să realizez prezentul proiect întrucât reprezintă o posibilitate enormă de dezvoltare în această industrie a automatizării, putând fi folosit la scară largă într-o multitudine de domenii, care mai de care mai diverse.
Principalul avantaj al acestui proiect este acela că poate fi implementat extrem de ușor și cu costuri foarte mici de către persoane pasionate de acest domeniu. Existând numeroase surse de informare, acest proiect poate fi ușor îmbunătățit, prin adăugarea de noi instrucțiuni în codul firmware cu ajutorul cărora putem realiza un upgrade al acestuia prin Internet, fără a fi necesară o conexiune fizică la placa de dezvoltare.
Prin realizarea acestui proiect, am dorit să aprofundez această tehnologie de tip IoT, deoarece consider că poate o fi o soluție ieftină, fiabilă și de încredere, atât pentru proiecte personale (de tip Smart Home, Smart Appliances, Smart Devices), cât și pentru dezvoltarea diferitelor afaceri. Deoarece doresc să îmi dezvolt o carieră în acest domeniu, realizarea proiectului reprezintă un prim pas în această direcție.
Industria automatizării este una extrem de ofertantă în ceea ce privește dezvoltarea unor proiecte diverse și numeroase.
”Internetul obiectelor” este o tehnologie în continuă schimbare și dezvoltare care poate aduce numeroase satisfacții celor care sunt implicați în proiecte de acest tip. De asemenea, proiectele de tip IoT ajută la realizarea unor sarcini precise, durabile și de calitate, într-un timp optim, suplinind cu succes forța de muncă umană sau venind în ajutorul angajaților, odată cu creșterea volumului de muncă în întreprinderile mici, medii și mari.
Pentru că proiectele de tip IoT au în general dimensiuni mici, ele pot fi conectate la numeroase echipamente industriale si nu numai, fără a ocupa ele însele un spațiu suplimentar.
O îmbunătățire ce poate fi adusă acestui proiect este realizarea unei calibrări cât mai precise a senzorilor, calibrare care necesită un laborator profesional ce deține un mediu controlat de măsură și simulare, de care eu însă nu am dispus .
Anexa 1 – Codul sursa (Firmware)
/*
Cod sursă sistem IOT de monitorizare,detecție și prevenție a incendiilor
Dezvoltat de George-Marius Apostol, student al Facultății ETcTI – Specializarea Tehnologii și Sisteme de Telecomunicații
*/
//Printăm informații din timpul procesului de conectare la server în consola serială la pornirea plăcii de dezvoltare
#define BLYNK_PRINT Serial
//Introducem librăriile utilizate
#include <ESP8266WiFi.h> //Librăria plăcii de dezvoltare
#include <BlynkSimpleEsp8266.h> //Librăria Blynk specifică plăcii de dezvoltare
#include <DHT.h> // Librăria necesară senzorului de temperatură și umiditate
#include <MQ135.h> // Librăria necesară senzorului de calitate a aerului
// Definim codul de autorizare generat în aplicația Blynk
char auth[] = "jwbmy_JdAHn2dqkiVWmCneSUFwcfPLyd";
// Definim la ce rețea WiFi conectăm placa de dezvoltare
char ssid[] = "M&G_2.4G"; // Numele rețelei
char pass[] = "0767544212"; //Parola rețelei
//Definim perifericele și pinii de ieșire utilizați de aceștia pe placa de dezvoltare
#define mq135 A0 // Senzorul de calitate a aerului este conectat la pinul analogic A0
#define BUZZ D1 // Buzzer-ul de larmă este conectat la pinul D1
#define LEDG D2 // Culoarea Verde a LED-ului RGB este comandată prin intermediul pinului D2
#define LEDR D3 // Culoarea Roșie a LED-ului RGB este comandată prin intermediul pinului D3
#define DHTPIN D4 // Senzorul de umiditate și temperatură este conectat la pinul D4
#define FlameSensor D5 // Senzorul detector de flăcări este conectat la pinul D5
#define WaterSensor D6 // Senzorul detector de apă este conectat la pinul D6
#define Sprinkles D7 // Releul de comandă al aspersoarelor este conectat la pinul D7
#define GASCUT D8 // Releul de comandă al vanei de gaz este conectat la D8
//Definim parametrii necesari pentru o bună funcționare
BlynkTimer timer; // Introducem un timer care ne permite să trimitem date la intervale dorite către serverul Blynk
// Definim tipul de senzor de umidiate și temperatură și inițiem citirea valorilor
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
#define h (dht.readHumidity())
#define t (dht.readTemperature())
//Definim tipul digital de citire pentru senzorul de flăcări și apă
#define FlameSensorRead (digitalRead(FlameSensor))
#define WaterSensorRead (digitalRead(WaterSensor))
//Definim valorile calculate cu ajutorul senzorului de calitate a aerului în funcție de temperatură, umiditate și rezistență
MQ135 mq135sensor = MQ135(mq135);
#define correctedRZero (mq135sensor.getCorrectedRZero(t, h))
#define correctedPPM (mq135sensor.getCorrectedPPM(t, h))
#define rzero (mq135sensor.getRZero())
#define resistance (mq135sensor.getResistance())
#define ppm (mq135sensor.getPPM())
#define PPMvalue (mq135sensor.getCorrectedPPM(t, h))
//Definim intervalul de timp folosit de funcția ”loop”
int period = 5000;
unsigned long time_now = 0;
//Funcția de configurare inițială rulează o singura dată la pornire
void setup()
{
dht.begin(); //Inițiem citirea valorilor înregistrate de senzorul DHT11
// Definim viteza de comunicare cu consola serială
Serial.begin(9600);
// Inițiem conexiunea cu serverul Blynk din Cloud Azure
Blynk.begin(auth, ssid, pass, "blynkserver.westeurope.cloudapp.azure.com", 8080);
// Definim tipul de date introdus de periferice, INPUT sau OUTPUT
pinMode(FlameSensor, INPUT);
pinMode(WaterSensor, INPUT);
pinMode(BUZZ, OUTPUT);
pinMode(LEDR, OUTPUT);
pinMode(LEDG, OUTPUT);
pinMode(GASCUT, OUTPUT);
pinMode(Sprinkles, OUTPUT);
//Definim ieșirile releelor HIGH care reprezintă poziția OFF
digitalWrite(GASCUT, HIGH);
digitalWrite(Sprinkles, HIGH);
// Definim intervalul de rulare a funcțiilor definite la o secundă
timer.setInterval(1000L, Valori_Temperatura_Umiditate_PPM);
timer.setInterval(1000L, Notificare_Decizie_Pericol);
timer.setInterval(1000L, Status_Info);
timer.setInterval(1000L, Consola_Aplicatie);
// Introducem notificarea de tip ”PUSH” în aplicație și cea pe e-mail
Blynk.notify("Fire Alarm Active");
Blynk.email("george.apostol92@gmail.com", "Subject: Fire Alarm Active!!!");
}
//Funcții
// Definim care trimite informații în aplicație despre puterea semnalului Wi-fi recepționat și timpul măsurat în secunde, de la pornire
void Status_Info()
{
Blynk.virtualWrite(V0, millis() / 1000);
Blynk.virtualWrite(V1, WiFi.RSSI());
Blynk.virtualWrite(V5, millis() / 1000);
}
// Definim funcția care trimite informațiile din consola serială în terminalul introdus în aplicație
void Consola_Aplicatie()
{
String content = "";
char character;
while (Serial.available())
{
character = Serial.read();
content.concat(character);
}
if (content != "")
{
Blynk.virtualWrite(V12, content); //Definim pin-ul virtual care o să fie folosit de terminal în aplicație
}
}
//Definim funcția care citește valorile măsurate de senzori și le transmite către server
void Valori_Temperatura_Umiditate_PPM()
{
if (isnan(h) || isnan(t))
{
Serial.println("Failed to read from DHT sensor!");
return;
} Blynk.virtualWrite(V2, PPMvalue); //virtual pin V2
Blynk.virtualWrite(V3, h);
Blynk.virtualWrite(V6, t);
}
//Definim funcția de control, notificare (acustică, vizuală, digitală) și decizie în caz de pericol (fum, flăcări, apă, temperatură înaltă)
void Notificare_Decizie_Pericol()
{
//Monitorizarea calității aerului, iar în caz de valori mai mari de 2000 PPM se vor trimite notificări și se va întrerupe astfel alimentarea cu gaze
if (PPMvalue > 2000)
{
Blynk.notify("Smoke Detected!!!"); //Notificare de tip PUSH în aplicație
Serial.println("Smoke DETECTED"); //Notificare în consola serială
Serial.println("Gas CUT ON"); //Notificare în consola serială
digitalWrite(LEDR, HIGH); //Comanda de aprindere a culorii roșii a LED-ului RGB fizic
digitalWrite(LEDG, LOW); //Comanda de stingere a culorii verzi a LED-ului RGB fizic
digitalWrite(GASCUT, LOW); //Comanda de închidere a vanei de gaz
Blynk.setProperty(V11, "color", "#FF0000"); //Definim culoare rosie a LED-ului digital din aplicație
Blynk.virtualWrite(V11, 1023); //Aprindem LED-ul digital din aplicație
}
//Monitorizarea temperaturii iar în caz de valori mai mari de 45 de grade se vor trimite notificări
if (t > 45)
{
Blynk.notify("High Temperature detected!!!"); //Notificare de tip PUSH in aplicație
Serial.println("High Temperature detected"); //Notificare în consola serială
digitalWrite(LEDR, HIGH); //Comanda de aprindere a culorii roșii a LED-ului RGB fizic
digitalWrite(LEDG, LOW); //Comanda de stingere a culorii verzi a LED-ului RGB fizic
Blynk.setProperty(V10, "color", "#FF0000"); //Definim culoarea roșie a LED-ului digital din aplicație
Blynk.virtualWrite(V10, 1023); //Aprindem LED-ul digital din aplicație
}
//Monitorizarea prezenței flăcărilor iar în caz de detecție se vor trimite notificări și se vor porni aspersoarele
if (FlameSensorRead == 0)
{
Blynk.notify("Alert : Fire detected"); //Notificare de tip PUSH in aplicație
Serial.println("FIRE DETECTED"); //Notificare în consola serială
Serial.println("Water Sprinkles ON"); //Notificare în consola serială
digitalWrite(LEDR, HIGH); //Comanda de aprindere a culorii roșii a LED-ului RGB fizic
digitalWrite(LEDG, LOW); //Comanda de stingere a culorii verzi a LED-ului RGB fizic
digitalWrite(Sprinkles, LOW); // Comanda de pornire a aspersoarelor
Blynk.setProperty(V9, "color", "#FF0000"); //Definim culoarea roșie a LED-ului digital din aplicație
Blynk.virtualWrite(V9, 1023); //Aprindem LED-ul digital din aplicație
}
//Monitorizarea prezenței apei, se vor trimite notificări
if (WaterSensorRead == 0)
{
Blynk.notify("Alert : Water detected"); //Notificare de tip PUSH în aplicație
Serial.println("Water DETECTED"); //Notificare în consola serială
digitalWrite(LEDR, HIGH); //Comanda de aprindere a culorii roșii a LED-ului RGB fizic
digitalWrite(LEDG, LOW); //Comanda de stingere a culorii verzi a LED-ului RGB fizic
Blynk.setProperty(V8, "color", "#FF0000"); //Definim culoarea roșie a LED-ului digital din aplicație
Blynk.virtualWrite(V8, 1023); //Aprindem LED-ul digital din aplicație
}
//În caz de pericol se va emite o notificare sonoră și se va trimite un e-mail care va conține valorile măsurate
if (PPMvalue > 2000 or FlameSensorRead == 0 or t > 45 or WaterSensorRead == 0)
{
//Definim structura datelor din e-mail și inițiem expedierea lui
String body = String("Alert detected in the house –> ") + String("PPM Value = ") + PPMvalue + String(" –> Current Temperature = ") + dht.readTemperature() + String(" –> Fire Detected = ") + FlameSensorRead + String(" –> Water Detected = ") + WaterSensorRead;
String body2 = String("Safe values –> PPM Value < 750 –> Current Temperature < 45 –> No FIre Detected = 0 –> No Water Detected = 1");
Blynk.email("Home Alert DETECTED", body, body2); // Se expediază e-mail-ul utilizând structura definită mai sus
Serial.println("SOUND ALARM ACTIVE"); //Notificare în consola serială
Serial.println("Notification to phone app and email sent"); //Notificare în consola serială
digitalWrite(BUZZ, HIGH); //Pornim notificarea sonoră de tip alarmă
tone(BUZZ, 1000, 500); //Definim tonul utilizat de alarma sonoră
}
// Definim starea releelor, a buzzer-ului și a LED-urilor (fizice,virtuale) când nu sunt detectate pericole
else if (PPMvalue < 2000 and FlameSensorRead == 1 and t < 45 and WaterSensorRead == 1)
{
digitalWrite(BUZZ, LOW); // Notificarea sonoră este oprită
digitalWrite(LEDR, LOW); // Culoare roșie a LED-ului fizic este oprită
digitalWrite(LEDG, HIGH); // Culoarea verde a LED-ului fizic este pornită
digitalWrite(GASCUT, HIGH); // Vana de gaz este deschisă
digitalWrite(Sprinkles, HIGH); // Aspersoarele sunt oprite
Serial.println("No danger"); //Notificare în consola serială
//LED virtual Apă
Blynk.setProperty(V8, "color", "#008000"); //Definim culoarea verde a LED-ului digital din aplicație
Blynk.virtualWrite(V8, 1023); //Aprindem LED-ul digital din aplicație
//LED virtual Flăcări
Blynk.setProperty(V9, "color", "#008000"); //Definim culoarea verde a LED-ului digital din aplicație
Blynk.virtualWrite(V9, 1023); //Aprindem LED-ul digital din aplicație
//LED virtual Temperatură
Blynk.setProperty(V10, "color", "#008000"); //Definim culoarea verde a LED-ului digital din aplicație
Blynk.virtualWrite(V10, 1023); //Aprindem LED-ul digital din aplicație
//LED virtual Calitatea aerului
Blynk.setProperty(V11, "color", "#008000"); //Definim culoarea verde a LED-ului digital din aplicație
Blynk.virtualWrite(V11, 1023); //Aprindem LED-ul digital din aplicație
}
}
//Funcția care rulează în mod repetat la intervalul configurat în milisecunde
void loop()
{
Blynk.run();
timer.run();
if (millis() >= time_now + period)
{
time_now += period; //intervalul de rulare a funcției curente
//Mai jos avem comenzile de printare în consola serială a valorilor măsurate de senzori
Serial.print("Temperature = ");
Serial.println(dht.readTemperature());
Serial.print("Humidity = ");
Serial.println(dht.readHumidity());
Serial.print("PPM = ");
Serial.println(PPMvalue);
//Informații necesare calibrării senzorului de calitate a aerului
Serial.print("MQ135 RZero: ");
Serial.print(rzero);
Serial.print("\t Corrected RZero: ");
Serial.print(correctedRZero);
Serial.print("\t Resistance: ");
Serial.println(resistance);
Serial.print("PPM: ");
Serial.print(ppm);
Serial.print("\t Corrected PPM: ");
Serial.print(correctedPPM);
Serial.print("ppm @ temp/hum: ");
Serial.print(t);
Serial.print("/");
Serial.print(h);
Serial.println("%");
Serial.println("============================================");
Serial.println(analogRead(mq135));
}
}
Bibliografie
Harald Sundmaeker, Patrick Guillemin, Peter Friess, Sylvie Woelfflé (Cluster of European Research Projects on the Internet of Things – CERP), 2010,“Vision and Challenges for Realising the Internet of Things”
Stephen Haller (Sap Research), 2009, ”Internet of Things: An Integral Part of the Future Internet”
Ruud Koot (Wikipedia Team), 2007 , ”Internet of things”, https://en.wikipedia.org/wiki/Internet_of_things, accesat la data de 03.03.2020
Margaret Rouse, 2019, "Internet of things (IoT)"
Knud Lasse Lueth, 2014, ” Why the Internet of Things is called Internet of Things: Definition, history, disambiguation”, https://iot-analytics.com/internet-of-things-definition/, accesat la data de 05.03.2020
Ammar Rayes, Samer Salam, 2016,” IoT Services Platform: Functions and Requirements”, https://link.springer.com/chapter/10.1007/978-3-319-44860-2_7, accesat la data de 11.03.2020
Neil Peterson, Iain Foulds, Alma Kenks & Co, 2019,”Quickstart: Create a Linux virtual machine in the Azure portal”, https://docs.microsoft.com/en-us/azure/virtual-machines/linux/quick-create-portal, accesat la data de 14.03.2020
Pradeeka Seneviratne, 2018, “Hands-On Internet of Things with Blynk”
Last Minute Engineers Team, ”Insight Into ESP8266 NodeMCU Features & Using It With Arduino IDE”, https://lastminuteengineers.com/esp8266-nodemcu-arduino-tutorial/, accesat la data de 18.03.2020
Mion (Wikipedia Team),2008,”Flame detector”https://en.wikipedia.org/wiki/Flame_detector, accesat la data de 25.03.2020
Ravi (Electronics Hub Team), 2018, ” Arduino Flame Sensor Interface” https://www.electronicshub.org/arduino-flame-sensor-interface/, accesat la data de 28.03.2020
Electronics Foru Team, 2019,” Humidity Sensor: Basics, Usage, Parameters and Applications”, https://www.electronicsforu.com/resources/electronics-components/humidity-sensor-basic-usage-parameter, accesat la data de 02.04.2020
Adafruit Industries Team, ”DHT11 Basic Temperature-Humidity Sensor + Extras” https://www.adafruit.com/product/386, accesat la data de 06.04.2020
Last Minute Engineers Team,”Interface DHT11 Module With Arduino” https://lastminuteengineers.com/dht11-module-arduino-tutorial/, accesat la data de 06.04.2020
Tarun Agarwal (Elprocus Team), 2019, ”Rain Sensor Working and Its Applications”, https://www.elprocus.com/rain-sensor-working-and-its-applications/, accesat la data de 15.04.2020
Last Minute Engineers Team, ” How Rain Sensor Works and Interface it with Arduino” https://lastminuteengineers.com/rain-sensor-arduino-tutorial/, accesat la data de 15.04.2020
Quartz Components Team, 2020, ” MQ-135 Air Quality Gas Sensor Module” https://quartzcomponents.com/products/mq-135-air-quality-gas-sensor-module, accesat la data de 19.04.2020
Dejan Nedelkovski, ” Arduino Relay Tutorial – Control High Voltage Devices with Arduino” https://howtomechatronics.com/tutorials/arduino/control-high-voltage-devices-arduino-relay-tutorial/, accesat la data de 25.04.2020
Arduino Modules Info Team, 2017, ” KY-016 RGB Full Color LED Module” https://arduinomodules.info/ky-016-rgb-full-color-led-module/, accesat la data de 27.04.2020
Chris Rouse,2015, ” Active Buzzer Alarm Type YL-44” , https://rydepier.wordpress.com/2015/05/24/active-buzzer-alarm/ , accesat la data de 02.05.2020
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: Din punct de vedere teoretic am realizat o documentație explicativă a tuturor etapelor parcurse pentru realizarea acestei soluții IoT de prevenție,… [309905] (ID: 309905)
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.
