Sky Control V1 - Temperature and Humidity Controller With Relays

7,836

19

13

Introduction: Sky Control V1 - Temperature and Humidity Controller With Relays

This intructable will teach you how to make very cheap Sky Control module (temperature and humidity controller). All the parts cost below 10$.

The module is based on Arduino Uno. It uses a DHT22 sensor to measure temperature and humidity. The results are displayed on LCD Screen and pre-sets can be changed by using buttons. By using 2 relays you are able to connect any humidifier and heating element up to 2.5 kW. In this project devices connected to relays should have separate power source (even for 5V heating plate and humidifier that I’m using in my terrarium). In next project I will add Dust Sensor for controlling Air Pollution

Shopping List

1. Arduino uno

2. DHT22 sensor - https://tinyurl.com/lm7pgqa

3. LCD Keypad Shield - https://tinyurl.com/lcd-keypad

4. 2-channel 5v relay Module - https://tinyurl.com/2-channel-relay

Optional

1. Arudiono Screw Shield – to make this easier to connect - https://tinyurl.com/screw-shield

2. Heating plate - https://tinyurl.com/kqu9ra5

3. USB ultrasonic nebulizer - https://tinyurl.com/msc7svv

Step 1: Wiring

Connect everything as shown on schematics (Fritizng file and parts available to download below)

I’m not showing LCD wiring as it slides on top of Arduino.

Remember to put 4.7 kohm resistor between 5V and SIG nodes od DHT22. You can buy DHT sensors with built in resistor, if so you don’t need external one.

To connect anything to relay – power source goes to COM1 and COM2 in relay and devices that should be turned on and off to NO1 and NO2 (NO – Normally Open).

I'm using Screw Shield - so i do not have to solder anything

Step 2: The Code - It Looks Bad on the Site, But Grab Attached File

/*Sky Control - Temperature and humidity sensor with relays made by ArkadiuszO2 v1
* Please read comments * Shopping list includes: * 1. Arduino Uno * 2. DHT22 sensor * 3. 2 channel relay - 5V * 4. DFRobot LCD Keypad Shield * * In V2 i will add Air quality sensor based on Sharp's GP2Y1010AU0F */
#include <LiquidCrystal.h>
#include <DFR_key.h>
#include <DHT.h>
//Starting values after boot up, you can change them
int temp = 25;
int hum = 50;
//For DHT22 (AM2023)
#define DHTPIN 15
#define DHTTYPE DHT22
const int relay1 =  18;
const int relay2 =  19;
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal lcd(8, 9, 4, 5, 6, 7); 
DFR_Key keypad;
int localKey = 0;
String keyString = "";
int lcd_key     = 0;
int adc_key_in  = 0;

#define btnRIGHT 0
#define btnUP 1 #define btnDOWN 2 #define btnLEFT 3 #define btnSELECT 4 #define btnNONE 5

int read_LCD_buttons(){
adc_key_in = analogRead(0); if (adc_key_in > 1000) return btnNONE; if (adc_key_in < 50) return btnRIGHT; if (adc_key_in < 250) return btnUP; if (adc_key_in < 450) return btnDOWN; if (adc_key_in < 650) return btnLEFT; if (adc_key_in < 850) return btnSELECT; } void setup() { pinMode(relay1, OUTPUT); pinMode(relay2, OUTPUT); lcd.begin(16, 2); lcd.clear(); lcd.setCursor(0, 0); lcd.print("Sky control v1"); lcd.setCursor(0, 1); lcd.print("Instr on Select"); delay(2500); Serial.begin(9600); dht.begin(); delay(1000); lcd.clear(); //Sample rate (default 10 ms) keypad.setRate(10); digitalWrite(relay1, HIGH); digitalWrite(relay2, HIGH);}

void loop() {

float h = dht.readHumidity(); float t = dht.readTemperature(); if (isnan(t) || isnan(h)) { //checking sensor operation lcd.begin(16, 2); lcd.clear(); lcd.setCursor(0, 0); lcd.print("Sensor broken!!"); delay(10000); } else { //You can change values (step) after each button press, default is 1'C for step and 5% humidity lcd_key = read_LCD_buttons(); switch (lcd_key){ case btnLEFT:{ temp = temp +1; break; } case btnRIGHT:{ temp = temp - 1; break; } case btnUP:{ hum = hum + 5; break; } case btnDOWN:{ hum = hum - 5; break; } case btnSELECT:{ lcd.begin(16, 2); lcd.clear(); lcd.setCursor(0, 0); lcd.print("Hum Up/Down +-5%"); lcd.setCursor(0, 1); lcd.print("Temp L/R +-1"); lcd.print((char)223); lcd.print("C"); delay (5000); break; } } lcd.setCursor(0, 0); lcd.print("Hum: "); lcd.print(h); lcd.print("%"); lcd.print("("); lcd.print(hum); lcd.print("%)"); lcd.setCursor(0, 1); lcd.print("Tem: "); lcd.print(t); lcd.print((char)223); lcd.print("("); lcd.print(temp); lcd.print((char)223); lcd.print(")");

//adding this so the humidifier will not be powering on and off constantly (humidifier will exceed upper limit by 10% - IF YOU NEED EXACT VALUES COMMENT THIS SECTION AND UNCOMMENT NEXT !! 

int H = hum + 10;
if(h < hum ) digitalWrite(relay1, LOW); else if (h >= H) digitalWrite(relay1, HIGH);

/* <- UNCOMMENT THIS IF YOU NEED EXACT VALUES BUT COMMENT 5 LINES ABOVE if(h < hum ) digitalWrite(relay1, LOW); else digitalWrite(relay1, HIGH); */

if(t < temp ) digitalWrite(relay2, LOW); else digitalWrite(relay2, HIGH);

}

}

Step 3: Operation

Upon pressing Select you will see basic operation instruction

Up/Down changes preset humidity by +- 5%

Left/Right changes preset temperature by +-1 °C

In the code you will find that humidifier will exceed preset limit by 10% - this is done so it will not be powering it on and off constantly, so ie. you have set 50% target humidity - the relay will power on the humidifier when reading will reach 49% and power it down when it reaches 60%. You can change that by modifying the code.

4 People Made This Project!

Recommendations

  • For the Home Contest

    For the Home Contest
  • Big and Small Contest

    Big and Small Contest
  • Make It Bridge

    Make It Bridge

13 Comments

0
dalagangbukid
dalagangbukid

18 days ago

I am new to arduino. Can i use this setup for egg incubator?

0
Abdullrazaq
Abdullrazaq

Question 3 months ago

Im new to arduino but have tried this project. I keep getting the message 'DHT' does not name a type. Thank you

0
AlanH191
AlanH191

6 months ago

Im new to arduino but have tried this project. I keep getting the message "no matching function for call to DFR_Key::DFR_Key(). Can anybody help please?

0
AlanH191
AlanH191

Reply 5 months ago

Thanks Gratak, I did as you suggested but now get "DRF_key.h no such file or directory" Do you know if other people have this problem and were I might find the answer please? Rgds. Alan

0
trevorsmith44
trevorsmith44

2 years ago

Hi I'm very new to arduino, but found this so interesting as I've started to grow mushrooms, my question is probably very simple for you but how do I power the heat pad?

0
JibinC
JibinC

Question 3 years ago

Do u know how to control only the humidity with a donut humidifier without the lcd keypad shield.I am trying to make a incubator for a school project at a cheap price and I already have the thermostat.If u know please help me

0
Jenderalmabuk
Jenderalmabuk

3 years ago

thank you very Much. Suggestion: Add Delay 200 on case button

0
DávidT267
DávidT267

3 years ago

Thanks for your share, it's an amazing project. I made it too, but by me the left and select buttons are switched off. I have tried to print in the button values to serial monitor but doesnt solved the problem :(

1
ekervancioglu
ekervancioglu

3 years ago

Does arduino keep new temperature or humidty setting after repowering,

0
ErcanÖ2
ErcanÖ2

4 years ago

thank you i solved the problem

0
Swansong
Swansong

5 years ago

Thanks for sharing :)

0
Gratak
Gratak

Reply 5 years ago

You're welcome :)