Despre prima interacțiune cu Arduino am scris în urmă cu câțiva ani în acest articol și știam că va veni ziua când mă vor mânca iar degetele să mă joc cu senzori și module. Mi-am propus să încep să dezvolt câteva proiecte de tip IOT (Internet of Things), iar la provocarea lansată de un prieten, am început primul proiect.
Challenge-ul a fost realizarea unui sistem ce poate detecta prezența fumului într-o cameră cu servere. În plus, dacă se strică aerul condiționat și crește temperatura în cameră, serverele au de suferit și pot apărea probleme mari, la fel și cu umezeala, așa că am stabilit rapid scopurile sistemului ce trebuia proiectat: Dacă temperatura, umiditatea sau nivelul calitatății aerului ies din limita maximă admisă, sistemul trebuie să notifice prin MAIL, pentru a se lua rapid măsuri.
Pentru a realiza acest proiect am avut nevoie de următoarele piese electronice:
- Placă de dezvoltare Arduino Uno R3 cu chip Atmega328P. Inițial mă gândeam să folosesc o placă Arduino Nano, pentru că este mult mai mică, dar cea pe care o aveam acasă avea chip CH340 și nu am reușit să o fac să comunice cu Mac OS-ul. Am făcut update-uri peste update-uri, nopți pierdute, până la urmă am comandat o placa Arduino Uno R3 Atmega328P, la 26.9 RON
- Placă de expansiune Ethernet W5100 pentru conectarea sistemului în rețea și pentru a trimite mail-uri. Am încercat la început cu un modul Serial WIFI ESP8266 ESP-01, dar fiindcă mi-a dat bătăi de cap și își lua IP când avea chef, am decis că e mai sigur folosirea unui shield și conectarea sistemului prin cablu UTP la router. Avantajul a fost că sistemul era dedicat unei camere cu servere, deci cablul de net era la o întindere de mână. Costul shield-ului a fost de 31.5 RON
- Placă expansiune senzori V5.0 la 26.90 RON, pentru atașarea tuturor componentelor la placa de dezvoltare
- Ecran LCD 1602 IIC/I2C cu pini și modul serial lipite, pentru mai puțină bătaie de cap. Am reușit să „ard” unul, prin alimentare incorectă, și am avut nevoie de al doilea pentru varianta finală a proiectului. Cost ecran: 18.9 RON
- Modul cu senzor calitate aer MQ 135 . Exact cum îi spune și numele, citește calitatea aerului și poate detecta fum, abur de amoniac, benzen sau gaze alte gaze nocive. Cost: 22 RON
- Senzor temperatură și umiditate DHT11 . Face ce zice că face și costă 9.9 RON. Ieftin ca braga.
- Fire Dupont de 10 sau 20 cm, tip mamă-mamă. Nu mai știu exact câte și cum am folosit, să zicem că de 10 RON
- 2 led-uri . Gratis, că le aveam
- O doză de derivație 10.65 ron din Dedeman. Mi s-a părut perfectă pentru un astfel de proiect și sigur o să mă folosesc de astfel de doze de derivație și în proiectele viitoare pentru că sunt foarte ușor de modificat după bunul plac, se pot tăia sau decupa ușor cu un cutter și arată destul de bine, zic eu. Pentru a fixa toate piesele în doza de derivație m-am folosit de un pistol cu silicon topit.
- Sistemul l-am alimentat printr-un cablu USB A-B pe durata proiectării, iar după ce l-am fixat pe poziție, am folosit un alimentator de 5V și 3A, la 27 RON
Cost total proiect: ± 183.75 RON
Conectarea pieselor am făcut-o în felul următor:
Pe placa Arduino Uno am pus shield-ul Ethernet, iar pe shield-ul Ethernet am pus placa de expansiune pentru senzori. Am mai tăiat puțin cu un patent din pinii shied-ului Ethernet pentru că înălța mult ansamblul și nu mai puteam pune capacul dozei. Mare grijă să nu se atingă partea metalică a mufei LAN de lipiturile plăcii de expansiune ce vine deasupra, pentru că riscați „să facă scurt” și în cel mai fericit caz, doar se va închide sistemul, placa Arduino Uno detectează și oprește alimentarea. Mi-a luat puțin timp să-mi dau seama de acest lucru. Nu știam de ce se sting LCD-ul și led-urile când puneam capacul 🙂
Ecranul LCD se conectează astfel:
- GND (cablul portocaliu) la G din zona pinului analog A5
- VCC (cablul galben) la V din zona pinului analog A5
- SDA (cablul verde) la S din zona pinului analog A4
- SCL (cablul albastru) la S din zona pinului analog A5
Pentru LCD puteți folosi librăriile de aici
Senzorul MQ135 se conectează astfel:
- GND (cablul maro) la G din zona pinului analog A0
- VCC (cablul negru) la V din zona pinului analog A0
- D0 se lasă liber
- A0 (cablul roșu) la S din zona pinului analog A0
Senzorul DHT11 se conectează astfel: (numerotarea pinilor se face de la stânga la dreapta, cum ne uităm frontal la senzor)
- PIN1 reprezintă VCC (cablul alb) la V din zona pinului digital D3 (în poze este la D0, dar l-am mutat ulterior)
- PIN2 reprezintă DATA (cablul mov) la S din zona pinului digital D3
- PIN3 se lasă liber
- PIN4 reprezintă GND (cablul gri) și se conectează la G din zona pinului digital D3
Librărie folosită pentru senzorul DHT11
Led-ul alb l-am conectat la GND și V pe pinul digital 1 și indică faptul că sistemul este ON. Led-ul roșu l-am conectat la GND și S pe pinul digital 2 și se aprinde atunci când unul din parametri (temperatură, umiditate, fum) depășește limita maximă setată.
Mailurile se trimit printr-un server de SMTP, iar userul și parola trebuiesc criptate în BASE64, eu m-am folosit de acest cod.
Am ales să stabilesc temperatura maximă de 25°C, umiditate de 80% și calitate aer de maxim 150. Depășirea oricărui parametru declanșează alarma și dacă timp de 1 minut sistemul nu detectează revenirea la normal, înseamnă că trebuie alarmată persoana de contact și este setat să trimită mail cu valorile înregistrate. Va trimite mail la fiecare minut până când situația va reveni la normal sau până când va fi resetat prin decuplarea alimentării. Aici se putea atașa un buton de reset exterior, poate pe viitor. Sigur, vom renunța la acel colier de plastic și îl vom fixa cu șuruburi în rama metalică.
Sunt sigur că sunt alte piese și alte linii de cod mai potrivite pentru realizarea unui proiect similar, așă că fiecare este liber să aleagă ce crede că i se potrivește, eu sper doar că v-am stârnit interesul în a dezvolta soluții IOT.
Aici găsiți codul sursă pentru acest proiect, l-am comentat în măsura în care am putut, dacă aveți întrebări sau sugestii le aștept în comentarii. Ne auzim la următorul proiect 🙂
Sper că ți-au fost de ajutor indicațiile mele și dacă vrei să-mi susții blogul, orice donație este binevenită 🙂 Mulțumesc!
20 de răspunsuri la “Sistem de avertizare inteligent, proiectul meu IOT”
Salut
Se poate folosi o adresa de mail publica?
Da
Nu reusesc sa trimit email deloc..nu stiu ce user si ce parola sa codific in base64 iar la secventa de ip ehlo nu stiu pe care sa-l pun, stiu ca e comentat in cod dar nu merge..daca mi-ai putea explica m-ar ajuta enorm !
Păi mai mult decât am zis în articol și în cod..nu am ce să explic. Poate nu e ok serverul de smtp.
Mai exact ce user si parola trebuie codat in base64?
Buna ziua! Imi puteti spune si mie pe ce pini vin conectate ledurile de avertizare? Multumesc.
Nu are foarte mare importanta pe ce pini ii conectati, atata timp cat le dati un Digital Output.
Salutare, incerc sa fac si eu acest sistem de avertizare, am conectat exact asa cum ai specificat atat placile, senzor si firele dar nu vrea sa afiseze pe lcd nimic, am modificat partea de mail, am introdus codul in placa arduino dar imi afiseaza doar ceva lini albe pe lcd, nu stiu daca eu nu fac ceva bine sau mai trebuie modificat ceva in cod. Un mic ajutor daca te rog. Multumesc
Scuze de raspunsul intarziat. Vezi ca LCD-ul are un potentiometru pe spate. Ai umblat acolo?
Am umblat, l-am rotit in ambele directi si tot asa imi arata, am folosit si alte lcd-uri si tot asa imi arata.
Salut!
Vreau sa te intreb ceva legat de conectarea si trimiterea de mail uri. Acest proes si codarea lui trebuie realizata intr un alt soft? Sau se realizeaza tot in arduino? As vrea sa stiu deoarece m ar interesa sa realizez si eu acest proiect pentru utilizare persoanala. Daca m ai putea ajuta ar fi de mare ajutor.Si daca e nevoie de alt soft sa imi poti spune care l ai folosit tu pentru codarea si trimiterea de mail uri.
Multumesc anticipat!
Salut. Mailurile se trimit printr-un server de smtp. Ai codul comentat în Arhiva : https://munteanubogdan.com/wp-content/uploads/2018/09/Sistem_avertizare_IOT.zip
Salut, din nou!
Totul merge, totul functioneazaam rezolvat si codul si tot. Dar efectiv nu pot sa fac sa mi trimita mail. Asta e singurul lucru care nu i dau de capat.
N ai putea sa ma ajuti cu un tutorial ceva ca sa vad cum sa configurez codul. Unde sa pun adresa de mail si de astea. SI ce anume trebuie criptat in base64. Ca am tot incercat multe variante dar nu reusesc sa l fac sa mearga.
Daca m ai putea ajuta ti as fi recunoscator!
O zi buna iti doresc!
Multumesc anticipat!
Salut, din ce stiu am comentat in cod unde să pui adresa de mail.
Si serverul smtp pe ce pagina l ai creat? Cum l ai creat? Ca am tot încercat cu toate variantele posibile si de o grămadă de timp ma chinui si nu merge. Nici sa l bata dumnecati.
Cum ai creat serverul smtp ca sa ti dea voie sa trimtii mail? Daca ai putea sa imi dai niste informatii sau un link ceva. Daca se poate.
Multumesc anticipat!
Nu faci server de smtp, te folosesti de ceva existent. Dacă ai o adresa de GMAIL, te folosesti de setarile de la GMAIL. Vezi aici: https://www.androidauthority.com/gmail-smtp-settings-801100/
Salut,
Am rugamintea daca se poate, eu nu reusesc cu acel cod, intampin erori si nu reusesc. Daca aveti codul bun sa imi trimite-ti si mie. Va multumesc
Verificati erorile. Codul este corect.
Codul e varza rau, a trebui sa fac multe modificari la el 🙂
Poate ai avut nevoie de adaptări pentru proiectul tău, dar codul postat este funcțional. Sigur se poate optimiza, dar este funcțional. Sistemul îl folosesc 24h/24h. Dacă tot zici că e varză rău, adu și ceva sugestii pentru alți utilizatori, nu arunca numai cu pietre 🙂