DIY WiFi Temp and Humi controller

Hempatia Soma iGrow Hemps garden
10.11.2008
84
137
33
Pozdrav za sve vutroljpce!

Hteo sam sa vama da podelim svoj zadnji Arduino projekat a tice se wireless monitoringa temperature i vlaznosti vazduha u grow boksu, uz istovremenu kontrolu temperature i vlaznosti vazduha uredjajima koji su prikljuceni na ovaj uredjaj (ovlazivac, ventilatori).

Trenutno stanje uslova u boksu moguce je pratiti na internetu.Takodje je moguc pregled uslova unazad, recimo nedelju dana, mesec dana unazad.
Znaci odlicna stvar kada niste kod kuce, recimo na poslu u skoli ili kod rodbine na selu :D

Uredjaj nije uopste tesko napraviti, a njegove blagodeti ce te tek videti ukoliko ga napravite i sami...

Zaboravite na malo malo otvaranje boksa da bi ste videli kolika je temp ili vlaznost. samo otvorite browser na pc ili na telefonu ;)

Kako izgelda prikaz na netu mozete videti na slici ispod.

thing.JPG

Srce uredjaja je Arduino Uno, a moguce je koristiti i druge Arduino proizvode uz prilagodjenje programa.

SLIKA ARDUINO UNO

ArduinoUno.jpg


Senzor za merenje temperature i vlaznosti vazduha je SHT11. jedan od malo mozda skupljih senzora koji se mogu nabaviti ali isto tako mnogo mnogo tacniji od jeftinih kineskih koji pojavljuju u zadnje vreme.
Naravno uz korigovanje programa moguce je iskoristiti i neki od tih jeftinih. Tipa DHT11, DHT22 itd...


SLIKA SHT11
sht11.jpg

Upravljanje uredjajima se vrsi uz pomoc dvostrukog relejnog modula za arduino procesore.
svaki od releja ima normalno otvorene i normalno zatvorene kontakte.
Tako da, ukoliko recimo koristimo jedan relej za kontrolisanje temperature, moguce je vezati uredja tako da bude ukljucen DOK se ne dostigne odredjena temperatura,
ili pak KAD se dostigne odredjena temperatura. Isto vazi i za relej za kontrolisanje vlaznosti...

SLIKA RELEJNOG MODULA
2relay.jpg

Prikaz trenutnog stanja na uredjaju se vrsi uz pomoc 16x2 LCD dispeja.
Na njemu mozete procitati trenutnu temeraturu i vlaznost.

SLIKA DISPLEJA
lcd.jpg


Prenos podataka izmedju naseg uredjaja i interneta je izveden wifi modulom koji se skoro pojavio na trzistu,
izuzetno je jeftin (3$-5$) i sve vise nalazi primenu medju mikrokontrolerima.

SliKA ESP8266
esp8266.jpg


Spajanje Komponenti mozete izvrsiti i sa jumper zicama kojih ima po isto tako povoljnim cenama.
Znaci da skoro ceo projekat mozete uraditi bez upotrebe lemilice :D
Bice nam potrebni musko zenski kablovi. MALE to FEMALE...

kablovi.JPG

Uredjaj treba spojiti prema sledecoj semi...



povezivanje sht11 na Arduino
-----------------------------
dataPin na pin 11 na Arduinu
clockPin na pin 12 na Arduinu
vcc na 5v na Arduinu
gnd na gnd na Arduinu

SHT11connection.gif

povezivanje lcd na Arduino
-----------------------------
vcc na 5v na Arduinu
gnd na gnd na Arduinu
SDA na analog pin 4 na Arduinu
SCL na analog pin 5 na Arduinu
lcdpinout.jpg

Povezivanje Relejne ploce na Arudino
------------------------------------
vcc na 5v na Arduinu
gnd na gnd na Arduinu
IN1 na digital pin 6 na Arduinu
IN2 na digital pin 7 na Arduinu


povezinje ESP8266 wifi modula na Arduino
-----------------------------------------
gnd na gnd na Arduinu
tx na digital pin 2 na Arduinu
rx na digital pin 3 na Arduinu
vcc na +3.3 pin na Arduinu
ch_pd na +3.3 pin na Arduinu
esppinout.jpg


Kada smo uspesno spojili sve prema prilozenoj semi, potrebno je isprogramirati mikrokontroler preko USB porta na PC.
Za to je potrebo da skinemo Arduino software sa http://www.arduino.cc/download_handler.php?f=/arduino-1.6.5-r2-windows.exe
Ukoliko koristite Windows operativni sistem. Za Linux i MacOs posetite http://www.arduino.cc/en/Main/Software

Instalirajte softver koji ste skinuli, odaberite COM port na kome se nalazi vas prikljuceni Arduino uredjaj(TOOLS,PORT)
i da odaberete tip Arduina koji je prikljucen (TOOLS,BOARD,Arduino Uno)
Izaberite novi projekat (FILE,NEW)i sa copy paste ubacite sadrzaj programa koji se nalazi ispod.
Programiranje Arduina vrsite sa FILE, UPLOAD.

U samom kodu programa je potrebno izmeniti nekoliko promenljivih koji se ticu vasih potreba.
-Vrednost za zeljenu temperaturu i vlaznost trenutne vredonsti su 27 za temperaturu i 60% za vlagu
-Pristupna sifra i ime vaseg AP (Acess Point, wifi router)
-pristupna sifra (API KEY) za www.ThingSpeak.com preko kog se vrsi prikazivanje trenutnih vrednosti iz boxa



Pre programiranja samog mikrokontrolera, potrebno je registrovati se na www.thingspeak.com radi dobijanja sifre za upload podataka
iz uredjaja na internet.
Novi kanal kreirate sa NEW CHANEL i potrebno je kreirate FIELD1 i FIELD2.Field1 za temperaturu i Field2 za vlaznost vazduha.
U field1 upisite "temp" a u field2 "humi"
API KEY koji je potrebno uneti u program mozete pronaci u tabu API KEYS, pod Read Api Keys:
Njega ubacite u program pre programiranja mikrokontrolera.

Za nastavak je potrbno definisati kako ce izgledati prikaz temperature i vlaznosti na internetu.
To radite isto na thingspeak sajtu pod PLUGINS.
POtrebno je kreirati dva plugina, jedan za temp, drugi za humi. To radite sa NEW PLUGIN, GOOGLE GAUGE,CREATE PLUGIN

Crvena, zelena i zuta polja odnosno njihove vrednosti mozete promeniti na vec kreiranim prikazima na samom sajtu,
u PLUGINS pa EDIT.Sve imate i zadnjem polju pod javascript.Tu je moguce i korigovati velicinu sata za prikaz, ime itd...

Ukoliko ste sve dobro spojili na Arudinu, lepo definisali ime i sifru za wireless i API key,isprogramirali ARduino,
svakih 60 sekundi bi trebalo da imate prikaz nove vrednosti na internetu. A prikaz mozete pratiti i na LCD displeju na samom uredjaju.

Moguce je i izbaciti odredjene komponente ukoliko vas nisu potrebne, recimo LCD DISPLEJ i RELEJNI MODUL.
Znaci necete imate prikaz u boksu, i necete imati kontrolu ventilatora i ovlazivaca/deovlazivaca, ali ce te imati online
prikaz trenutne temperature u boksu, dok ste na poslu :D

Ukoliko imate neki problem pri sastavljanju, programiranju i slicno, mozete da kontaktirate na PM ili direktno ovde.
Probacu da vam pomognem, koliko je u mojoj moci.
Sve komponente mozete da nabavite na Ebay ili Aliexpress po jako jako povoljnim cenama.

izvorni kod za Arduino:

Kod:
/**
* ReadSHT1xValues
* Display values on lcd display and to thingspeak server over esp8266
*/

#include <SHT1x.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <SoftwareSerial.h>
#include <stdlib.h>

#define SSID "IMEVASEGWIFI" //name of wireless access point to connect to
#define PASS "evdeupisitepassword"  //wifi password
String apiKey = "123123123123"; //Ovde upisite vas API Key sa ThingSpeak

// connect 2 to TX
// connect 3 to RX
SoftwareSerial ser(2, 3); // RX, TX


// Specify data and clock connections and instantiate SHT1x object
#define dataPin  11
#define clockPin 12

LiquidCrystal_I2C lcd(0x27,16,2);  // set the LCD address to 0x27 for a 16 chars and 2 line display
SHT1x sht1x(dataPin, clockPin);
int maxtemp=27; //set the max temp
int minhumi=60;// set the min humidity
float temp_c;
  float temp_f;
  float humidity;
  long previousMillis = 0;
  long interval = 60000;  //one minute sending interval
void setup()
{
pinMode(13, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
digitalWrite(13, LOW);
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
ser.begin(9600);
  Serial.begin(9600); // Open serial connection to report values to host
  Serial.println("Starting up");
  lcd.init();  // initialize the lcd
  lcd.backlight();
// reset ESP8266
ser.println("AT+RST");
delay (1000);
connectWiFi();
delay (1000);


}

void loop()
{


  // Read values from the sensor
  temp_c = sht1x.readTemperatureC();
  humidity = sht1x.readHumidity();

  // Print a message to the LCD.


  lcd.setCursor(0, 0);
  lcd.print("Temp: ");
  lcd.print(temp_c);
  lcd.setCursor(0, 1);
  lcd.print("Humidity: ");
  lcd.print(humidity);

  // Print the values to the serial port
  Serial.print("Temperature: ");
  Serial.print(temp_c, 1);
  Serial.print("C / ");
//  Serial.print(temp_f, DEC);
  Serial.print(" Humidity: ");
  Serial.print(humidity,1);
  Serial.println("%");

  /// SEND DATA TO SERVER
unsigned long currentMillis = millis();
  if(currentMillis - previousMillis > interval) {
  // save the last time you blinked the LED
  previousMillis = currentMillis;
  senddata();
  }



if (temp_c - 0.5 > maxtemp)
{
digitalWrite(6, LOW);
}

if (temp_c < maxtemp)
{
digitalWrite(6, HIGH);
}



if (humidity - 1 > minhumi)
{
digitalWrite(7, LOW);

}

if (humidity  < minhumi)
{
digitalWrite(7, HIGH);
}

//  delay(2000);
}

void connectWiFi() {
  Serial.println("SEarching for WiFi network");

  ser.println("AT+cwmode=1");
  delay(1000);
  String cmd = "AT+CWJAP=\"";
  cmd += SSID;
  cmd += "\",\"";
  cmd += PASS;
  cmd += "\"";

  ser.println(cmd);
  delay(5000); //give it time - my access point can be very slow sometimes

  if(ser.find("OK"))  //ie a healthy response
  {
  Serial.println("Connected to WiFi...");
  }
  else
  {
  Serial.println("Not connected to WiFi.");
  }


}

void senddata() {
  // convert to temp:

  float temp = temp_c;
  float hum = humidity;
  // convert to string
  char buf[16];
  String strTemp = dtostrf(temp, 4, 1, buf);

  char test[16];
  String strHumi = dtostrf(hum, 4, 1, test);

  // TCP connection
  String cmd = "AT+CIPSTART=\"TCP\",\"";
  cmd += "184.106.153.149"; // api.thingspeak.com
  cmd += "\",80";
  ser.println(cmd);
  if(ser.find("Error")){
  Serial.println("AT+CIPSTART error");
  return;
  }

  // prepare GET string
  String getStr = "GET /update?api_key=";
  getStr += apiKey;
  getStr +="&field1=";
  getStr += String(strTemp);
  getStr +="&field2=";
  getStr += String(strHumi);

  getStr += "\r\n\r\n";

  // send data length
  cmd = "AT+CIPSEND=";
  cmd += String(getStr.length());
  ser.println(cmd);

  if(ser.find(">")){
  ser.print(getStr);
  delay (1000);
  ser.println("AT+CIPCLOSE");
  }
  else{
  ser.println("AT+CIPCLOSE");
  // alert user
  Serial.println("AT+CIPCLOSE");
  connectWiFi();
  }
}



I neke slike uredjaja u razvoju i primene u pc boksu mada mu je primena u svim boksovima
rsz_img_20150329_171411.jpg rsz_img_20150406_233553.jpg

Srecna samogradnja ovog korisnog uredjaja!
 
Poslednja izmena od urednika:

amneziaHaze

AluGrow
Banovan
19.04.2014
1.783
2.490
188
imam nesto ovako slicno samo umjesto wifi sam koristio motorolu pa preko nje dobijam sms.arduino zaljeva pali ventilaciju javlja kada je bazen skoro prazan svjetlo sam ostavio na mehanicki tajmer iako je i to moglo preko njega.sada trenutno razmisljam kako da napravim motore da sami podizu lampe kada biljka dovoljno naraste razmisljam o senzorima ali problem su mi kukci koji slete na njih pa ih aktiviraju
 
10.11.2008
84
137
33
Hvala ljudi!
Uredjaj sam napravio za svoje potrebe i podelio to sa vama.
Medjutim tu definitivno nije kraj. Moguca je gomila nadgradnji uvog kontrolera,
tipa prikljucivanje Real Time Clocka, pa bi kontroler znao koliko je sati, i samim tim mogao da pali i gasi svetla, zatim dodavanja ph i ec metra za *********** i motora za doziranje nutrijenata...
Ma realno, sky is the limit :D
Voleo bih kada bi se neko od clanova upustio u samogradnju jer je sve ovo uzasno jeftino, pa da mozemo zajedno da prosirimu upotrebnu vrednost i dopisemo kod za to...
 
Poslednja izmena:
16.11.2008
39
15
8
45
Kako razvodis 5V sa jednog pina na vise njih kojima treba napajanje, jer koliko vidim ima samo jedan pin sa 5V, a 5V ti treba za senzor, displej i relej?
Da li postoji neka dodatna ploca na koju dovodis 5V, a onda sa nje razvodis ili...?
 
Poslednja izmena:

zlotvor

Aktivan Član
05.02.2008
217
301
63
balkan
@5150
Odlično odrađeno! Još riješi vremenski program za upravljanje rasvjetom i imaš riješen najbitniji dio upravljanja.

Ja imam u planu nešto slično. Konkretno:
- održavanje nivoa vode u DWC kanti i doziranje nutrienata i svježe vode (faza 1)
- upravljanje rasvjetom (faza 1)
- upravljanje ventilacijom - temperatura i vlaga (faza 1) + mini klima za grijanje/hlađenje/odvlaživanje i održavanje temperature u tanku (faza 2)

Nabavio sam pumpe za doziranje i nešto senzora, ali mi fali volje i vremena trenutno :(
Za sada sam na industrijskom PLC-u koji upravlja ventilacijom i rasvjetom (faza 0).
 
10.11.2008
84
137
33
Odlično odrađeno! Još riješi vremenski program za upravljanje rasvjetom i imaš riješen najbitniji dio upravljanja
Meni trenutno obican digitalni tajmer pali i gasi svetlo, a ovo cudo vodi racuna o vlazi i temperaturi.
Najcesce koristim on line prikaz trenutnih vrednosti, da ne otvaram boks... i tu vidim kako se kretala temperatura i vlaga u prethodnom vremenu...
U sledecoj verziji cu verovatno dodati i senzor za vlaznost zemlje, je ne radim hydro... a imam vec kupljene senzore...
Sve u svemu ovo je lepa osnova za nadogradnju... a kosta stvarno smesno...
 

zlotvor

Aktivan Član
05.02.2008
217
301
63
balkan
@5150
DS1302 modul dobiješ za dolar, a ima u sebi sat i kalendar. Tajmer s njim uvijek zna koliko je sati i kad treba upaliti ili ugasiiti, a zahvaljujući bateriji ne smeta mu ni nestanak struje. Trivijalno na arduinu.
Senzor vlažnosti zemlje - zavisno od izvedbe - se može koristiti i kao senzor nivoa u spremniku. A kad jednom znaš novo spremnika imaš i automatsko dopunjavanje.
Senzor temperature i vlage SHT11 je po meni nepotrebno preskupa komponenta. Ima puno jeftinijih modula, doduše manje točnosti, ali sasvim dovoljno za naše potrebe.

Dozeri za nutriente su ništa drugo nego mini pumpa koja u određenom periodu ispumpa točno odreženu količinu. Tipa 10s=1ml. Uzeo sam na ebayu peristaltske pumpe za printer, mislim da je bilo 30$ 5 komada. Taman za naše potrebe.
Već duže vrijeme proučavam bazensku tehniku i njihova rješenja za mjerenje parametara vode. Od tamo se može puno toga naučiti jer su sustavi jednostavni (da ne kažem primitivni) a ipak pouzdani. Za PH i EC/PPM metar je po meni potrebna dodatna pumpa koja će po potrebi periodički pumati uzorak na mjerenje. Još dvije preistaltske pumpe i nešto elektro ventila treba da se automatizira kalibracija senzora što nije prijeko potrebno ali je poželjno i jednostavno za izvesti.

Toliko za sada, idem slikati moje cvijeće...
 
10.11.2008
84
137
33
Naravno da znam za jeftine rtc, imam ih, medjutim nisam imao potrebe da komplikujem jer opet kazem i digitalni tajmer je jeftino resenje. meni je ovaj uredjaj resio vlagu i temperaturu i online prikaz preko wifi... za to je i namenjen ;)
Sto se tice vlage zemlje i te senzore sam nabavio. izgleda kao ovo
i za divno cudo, opet dolar :D
Sto se tice ph, nema potrebe za povlacenjem uzorka. meri se konstantno u bazenu...
ovako nesto, ali nije bas dolar...
a sto se tice sht11, imao sam par komada koji su mi samo hvatali prasinu :D
morao sam da ih potrosim
 
Poslednja izmena:
  • Sviđa mi se
Reactions: He-Man

zlotvor

Aktivan Član
05.02.2008
217
301
63
balkan
hm, da. Taj senzor za vlagu se ne može koristiti kao nivometar. Za to bi trebao biti kapacitivni. Čitao sam loše stvari o ovom tipu sonde, tj. da se nakon nekog vremena jednostavno "pokvari". PH sonda mi izgleda kvalitetnija nego ona koju ja imam, ali poznajući kineze... Samo čekam priliku da "maznem" jednu lab-grade na poslu, te su opake kvalitete, čak i rabljene.
 
10.11.2008
84
137
33
Za merenje nivoa sam kupio ovo... medjutim nisam jos testirao kako ce se ponasati u rezervoaru.
a moram i malo u skolicu sto se tice hidro....
 

zlotvor

Aktivan Član
05.02.2008
217
301
63
balkan
Odustao sam od tih modula. Ako se dobro sjećam razlog je bio da ne izdrže dugo u uvjetima visoke vlage, a u tanku je uvijek 100 %RH.
 

zlotvor

Aktivan Član
05.02.2008
217
301
63
balkan
Nisam ih testirao, ali sam naručivao za poznanika. Lik ima više godina staža u elektronici nego ja godina (a nisam tinejdžer) hrpu iskustva i znanja. On kaže da je ok ako su uvjeti dobri, u lošim uvjetima će se vjerovatno brzo pokvariti.
Imam iskustva sa industrijskim nivokazima i rijetko koji je ultrazvučni. Siemens ih radi ali u skroz zatvorenoj izvedbi sa metalnim konusom koji prenosi signal.
Endress hauser koristi kapacitivne sonde.

Moj pristup bi bio kapacitivna sonda sa distribuiranim kapacitetima. Sondu staviš u astabil kao kondenzator (može i 555) a rezultat je određena frekvencija na izlazu. Kako se mijenja nivo vode ili vlažnost zemlje, mijenja se i kapacitet, a time i frekv3ncija.

Kasnije stavim link, sad sam na mobitelu.
 
  • Sviđa mi se
Reactions: Stipe
10.11.2008
84
137
33
Druze moj, nismo ovde u industrijskoj vec u diy elektronici. a nauka naperdovala dosta od pojave 555. bez uvrede, ali odosmo lagano u off... ajde neka neko napravi pola uredjaja pa da nastavimo...
 

zlotvor

Aktivan Član
05.02.2008
217
301
63
balkan
Nema veze je li industrija ili uradi sam, cilj je na kraju imati kvalitetan uređaj. U industriji se ne tolerira zastoj, a isto je kod mene u boxu, tako da ja naginjem prema industrijskoj kvaliteti ;)

Što se tiče 555, on je još uvijek izuzetno upotrebljiv a uz to je jeftin. Nema veze što je u opticaju od sedamdesetih.