Sistem IOT monitorizare temperatura si umiditatea solului
Obiectiv
Am dezvoltat acest sistem pentru un prieten care are o casa la tara, unde are o mica gradina. Nu locuieste acolo tot timpul, si vrea sa stie daca este sau nu cazul sa irige gradina.
Arhitectura
Ca sa aiba acces la date de oriunde, am ales sa trimit datele in Internet folosind http://iot.robofun.ro .
Mai jos este graficul temperaturii, in timp real :
http://iot.robofun.ro/public/senzor/8rr6e9r8sag76t0vnkrcrnp4ml
In acest moment datele masurate sunt publice. Intra pe http://iot.robofun.ro si foloseste „Testeaza Cont Demo”.
Pentru nodul care face efectiv masurarea valorilor am ales :
Arduino Pro Mini 3.3 V https://www.robofun.ro/arduino_pro_mini_328_8mhz
- am ales asta pentru ca este o placa care consuma extrem de putin in sleep mode, ceea ce imi permite sa o alimentez pe baterii
Modul Radio RFM69 – https://www.robofun.ro/sparkfun-rfm69-breakout-434mhz-
- mi-a placut faptul ca este extrem de bine documentat, atat de catre Sparkfun (https://learn.sparkfun.com/tutorials/rfm69hcw-hookup-guide), cat si de catre cei de la LowPower (https://github.com/LowPowerLab/RFM69)
Senzor Umiditate Sol – https://www.robofun.ro/soil-moisture-sensor
Senzor de Temperatura Inlantuibil Brick – https://www.robofun.ro/senzor-temperatura-inlantuibil-brick-DS18B20-motherboard
Senzor de Temperatura DS18B20+ – https://www.robofun.ro/senzor-temperatura-DS18B20
- am ales senzorii de temperatura inlantuibili pentru ca folosind doar 3 fire pot monta oricat de multi senzori (pe aceleasi 3 fire). Distanta intre Arduino si senzori poate ajunge la cateva sute de metri.
Cutie 6 baterii AA – https://www.robofun.ro/cutie-6-baterii
As fi putut sa pun direct un modul wifi si sa renunt la WIFI, dar m-am gandit ca poate in viitor voi vrea sa extind sistemul cu mai multi senzori pus in zone in care nu bate WIFI-ul din casa.
Pentru gateway (sistemul catre trimite valorile in cloud) am ales :
Arduino YUN – https://www.robofun.ro/arduino_yun
Sunt multe lucruri care imi plac tare la acest dispozitiv :
- este foarte robusta, de fiecare data a mers exact cum trebuie, in toate proiectele unde am folosit-o; libraria este bine scrisa, simplu de folosit
- are atat conectivitate WIFI cat si prin fir de retea
- setarea datelor de retea WIFI se face foarte foarte simplu, fara sa fie nevoie sa reprogramez placa; acest punct a fost unul esential pentru mine, pentru ca era cam aiurea sa ii cer amicului sa-mi dea parola lui de WIFI ca sa o pun eu in cod; folosind Arduino YUN, te conectezi la o retea generata chiar de placa si din interfata web de configurare (intri folosind telefonul mobil intr-un site web) setezi tot ce vrei; un exemplu mai clar aici – https://www.youtube.com/watch?v=9-hPhWHWnvs
Modul Radio RFM69 – https://www.robofun.ro/sparkfun-rfm69-breakout-434mhz-
- pentru receptia datelor trimise de nod
Arduino Pro Mini 3.3 V https://www.robofun.ro/arduino_pro_mini_328_8mhz
- dat fiind ca modulul radio functioneaza maxim la 3.3V, iar Arduino YUN functioneaza la 5V, am mai folosit inca un Arduino Pro Mini 3.3V pentru interfatare; Arduino Pro Mini este conectat la modulul radio (3.3V ambele), iar apoi trimite datele printr-o conexiune SoftwareSerial catre Arduino YUN. Dat fiind ca doar trimite date catre YUN (si nu si receptioneaza date inapoi), este OK din punct de vedere al nivelelor de tensiune. „1” logic este trimis de catre Arduino Pro Mini ca 3.3V, iar YUN interpreteaza si el tot ca „1” logic acest nivel, chiar daca functioneaza la 5V.
- folosirea unui Arduino Pro Mini pe post de convertor de nivel logic (asa cum am facut eu) nu este chiar cea mai desteapta idee 🙂 Iti recomand sa folosesti un device special gandit pentru asta – https://www.robofun.ro/logic-level-convertor-4-canale-bidirectional . Daca folosesti un logic level convertor poti sa faci transmisie radio in ambele sensuri (si de la nod catre YUN si de la YUN catre nod). Eu nu l-am folosit pentru ca in momentul in care am realizat proiectul nu am avut unul la indemana.
Nodul care citeste datele
Conexiunile Arduino Pro Mini – modul radio
Senzorul de temperatura (motherboard – https://www.robofun.ro/senzor-temperatura-inlantuibil-brick-DS18B20-motherboard) l-am conectat cu pinul DQ la pinul 6 digital Arduino Pro Mini. GND si 5V le-am conectat la GND, respectiv 3.3 V (chiar daca pe placa este specificat 5V ca tensiune de alimentare, senzorul merge foarte OK si la 3.3 V).
Senzorul de umiditate a solului l-am cuplat pe pinul analogic 0 (VCC la 3.3 V, GND la GND si SIG la pinul analog 0 al placii Arduino Pro Mini).
Sistemul l-am alimentat folosind cutia de baterii (pinii GND si RAW).
Pentru a citi nivelul bateriei (ca sa stiu cand trebuie sa le schimb), am realizat un divizor de tensiune 1:3. Am folosit 3 rezistoare de 100 de K inseriate (legate unul in continuarea celuilalt). Capetele extreme le-am legat la pinul RAW si la pinul GND. Pinul analog 7 (se afla pe zona interioara a placii Arduino Pro Mini) l-am conectat dupa primul rezistor (numarand de la GND). Vezi poza de mai jos.
In acest mod voltajul bateriei (de 9V) este redus de 3 ori, pana la cel mult 3 V, astfel incat tensiunea sa poata fi citita de catre Arduino Pro Mini.
Codul sursa pentru nod
Codul sursa pentru nod este bazat pe exemplu Node din libraria pentru modulul radio RFM69.
Este disponibil integral, aici – https://github.com/viorelspinu/iot-sol-umiditate/blob/master/nod/nod.ino
Gateway-ul
Pentru gateway (sistemul care primeste datele prin radio si trimite in Internet) am folosit un Arduino Pro Mini + un modul radio RFM69 pe post de receptor radio, si un Arduino YUN pentru a trimite in Internet.
Am conectat pinul digital 8 al placii Arduino Pro Mini cu pinul digital 8 al placii Arduino YUN pentru a putea trimite datele receptionate prin radio de catre Arduino Pro Mini catre Arduino YUN.
Disclaimer :
- folosirea unui Arduino Pro Mini pe post de convertor de nivel logic (asa cum am facut eu) nu este chiar cea mai desteapta idee 🙂 Iti recomand sa folosesti un device special gandit pentru asta – https://www.robofun.ro/logic-level-convertor-4-canale-bidirectional . Daca folosesti un logic level convertor poti sa faci transmisie radio in ambele sensuri (si de la nod catre YUN si de la YUN catre nod). Eu nu l-am folosit pentru ca in momentul in care am realizat proiectul nu am avut unul la indemana.
Codul sursa Arduino Pro Mini din gateway este disponibil integral, aici – https://github.com/viorelspinu/iot-sol-umiditate/blob/master/gateway/gateway.ino
Codul sursa Arduino YUN din gateway este disponibil integral, aici – https://github.com/viorelspinu/iot-sol-umiditate/blob/master/yun/yun.ino