Introduction: Arduino Thermostat With 2x DS18b20 I2c 4x16 Display, 2 RGB LED's and 3 Relay's
The Goal of the Project is a Thermostat for my 2 Fish Tank's with LCD Display RGB LED an Relay to control the Heater in the Tank
an a Cooling Fan for the Big Fishtank
Parts:
Arduino Nano or equal
2x RGB LED's or RGB SMD LED or Single Color LED's
1x 2 Channel 5v Relay Modul -> for the Heater's
1x 1 Channel 5v Relay -> for Cooling Fan
2x DS18B20 1 Wire Sensor
1x 4k7 Ohm Resistor for the 1 Wire Bus
6x 220Ohm Resistor for the LED's
1x 20x4 Display with i2c Interface
Breadboard
an a Cooling Fan for the Big Fishtank
Parts:
Arduino Nano or equal
2x RGB LED's or RGB SMD LED or Single Color LED's
1x 2 Channel 5v Relay Modul -> for the Heater's
1x 1 Channel 5v Relay -> for Cooling Fan
2x DS18B20 1 Wire Sensor
1x 4k7 Ohm Resistor for the 1 Wire Bus
6x 220Ohm Resistor for the LED's
1x 20x4 Display with i2c Interface
Breadboard
Step 1: Schematic Without Relay's and Display
This is the Schematic without Display an Relay's
Step 2: Display 20x4 I2c
my Display is equal to this
http://www.sainsmart.com/sainsmart-iic-i2c-twi-serial-2004-20x4-lcd-module-shield-for-arduino-uno-mega-r3.html
SDA -> Arduino A4
SDL -> Arduino A5
GND -> GND
VCC -> 5V
http://www.sainsmart.com/sainsmart-iic-i2c-twi-serial-2004-20x4-lcd-module-shield-for-arduino-uno-mega-r3.html
SDA -> Arduino A4
SDL -> Arduino A5
GND -> GND
VCC -> 5V
Step 3: Relay
2 Relay Modules are connected
1x Dual Channel Modul equal to this for the Heater
1x Single Channel Modul from HonKong for the Fan in the Big Tank
Rel1 -> Arduino D2
Rel2 -> Arduino D3
Rel3 -> Arduino D8
GND -> Arduino GND
VCC -> Arduino 5V
1x Dual Channel Modul equal to this for the Heater
1x Single Channel Modul from HonKong for the Fan in the Big Tank
Rel1 -> Arduino D2
Rel2 -> Arduino D3
Rel3 -> Arduino D8
GND -> Arduino GND
VCC -> Arduino 5V
Step 4: The Code
#include <OneWire.h>
#include <Wire.h>
#include <DallasTemperature.h>
#include <LiquidCrystal_I2C.h>
//RGBLED
int bluePin1 = 10; //Digital Pin für Blaue LED1 in RGB-LED
int greenPin1 = 11; //Digital Pin für Grüne LED1 in RGB-LED
int redPin1 = 12; //Digital Pin für Rote LED1 in RGB-LED
int redIn1 = 0;
int greenIn1 = 1;
int blueIn1 = 2;
int redVal1;
int greenVal1;
int blueVal1;
int bluePin2 = 4; //Digital Pin für Blaue LED2 in RGB-LED
int greenPin2 = 5; //Digital Pin für Grüne LED2 in RGB-LED
int redPin2 = 6; //Digital Pin für Rote LED2 in RGB-LED
int redIn2 = 3;
int greenIn2 = 4;
int blueIn2 = 5;
int redVal2;
int greenVal2;
int blueVal2;
//Relays
int relPin1 = 2; //Digital Pin für Relay1
int relPin2 = 3; //Digital Pin für Relay2
int relPin3 = 8; //Digital Pin für Relay3
int relPin1In = 3;
int relPin2In = 4;
int relPin3In = 5;
int relPin1Val;
int relPin2Val;
int relPin3Val;
//Heizungs Status
int heiz1Val;
int heiz2Val;
#define BACKLIGHT_PIN 13
#define ONE_WIRE_BUS 7
LiquidCrystal_I2C lcd(0x20,20,4); // set the LCD address to 0x20 for a 20 chars and 4 line display
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
void setup() {
Serial.begin(9600);
sensors.begin();
lcd.init(); // initialize the lcd
lcd.backlight();
pinMode(relPin1, OUTPUT); //Output Mode for Relay1
pinMode(relPin2, OUTPUT); //Output Mode for Relay2
pinMode(relPin3, OUTPUT); //Output Mode for Relay3
}
void loop() {
sensors.requestTemperatures();
float temperature1 = sensors.getTempCByIndex(0);
lcd.setCursor(0, 0);
lcd.print("Aquarium: ");
lcd.print(sensors.getTempCByIndex(0));
lcd.print("C");
float temperature2 = sensors.getTempCByIndex(1);
lcd.setCursor(0, 2);
lcd.print("Becken: ");
lcd.print(sensors.getTempCByIndex(1));
lcd.print("C");
//Je nach Temperatur Farbe der RGB-LED anpassen und Rel 1 schalten
if(temperature1 <= 27)
{
redVal1 = 0;
greenVal1 = 0;
blueVal1 = 150;
relPin1Val = LOW;
relPin3Val = LOW;
lcd.setCursor(0, 1);
lcd.print("Heizung ist: Ein ");
}
else if(temperature1 > 27 && temperature1 < 29)
{
redVal1 = 0;
greenVal1 = 150;
blueVal1 = 0;
relPin1Val = HIGH;
relPin3Val = LOW;
lcd.setCursor(0, 1);
lcd.print("Heizung ist: Aus ");
}
else if(temperature1 > 29)
{
redVal1 = 150;
greenVal1 = 0;
blueVal1 = 0;
relPin1Val = HIGH;
relPin3Val = HIGH;
lcd.setCursor(0, 1);
lcd.print("Lueftung ist: Ein ");
}
//Je nach Temperatur Farbe der RGB-LED anpassen und Rel 2 schalten
if(temperature2 <= 27)
{
redVal2 = 0;
greenVal2 = 0;
blueVal2 = 255;
relPin2Val = LOW;
lcd.setCursor(0, 3);
lcd.print("Heizung ist: Ein ");
}
else if(temperature2 > 27 && temperature2 < 29)
{
redVal2 = 0;
greenVal2 = 255;
blueVal2 = 0;
relPin2Val = HIGH;
lcd.setCursor(0, 3);
lcd.print("Heizung ist: Aus ");
}
else if(temperature2 > 29)
{
redVal2 = 255;
greenVal2 = 0;
blueVal2 = 0;
relPin2Val = HIGH;
lcd.setCursor(0, 3);
lcd.print("Lueftung ist: Ein ");
}
{
analogWrite(redPin1, redVal1);
analogWrite(greenPin1, greenVal1);
analogWrite(bluePin1, blueVal1);
analogWrite(redPin2, redVal2);
analogWrite(greenPin2, greenVal2);
analogWrite(bluePin2, blueVal2);
digitalWrite(relPin1, relPin1Val);
digitalWrite(relPin2, relPin2Val);
digitalWrite(relPin3, relPin3Val);
}
}
#include <Wire.h>
#include <DallasTemperature.h>
#include <LiquidCrystal_I2C.h>
//RGBLED
int bluePin1 = 10; //Digital Pin für Blaue LED1 in RGB-LED
int greenPin1 = 11; //Digital Pin für Grüne LED1 in RGB-LED
int redPin1 = 12; //Digital Pin für Rote LED1 in RGB-LED
int redIn1 = 0;
int greenIn1 = 1;
int blueIn1 = 2;
int redVal1;
int greenVal1;
int blueVal1;
int bluePin2 = 4; //Digital Pin für Blaue LED2 in RGB-LED
int greenPin2 = 5; //Digital Pin für Grüne LED2 in RGB-LED
int redPin2 = 6; //Digital Pin für Rote LED2 in RGB-LED
int redIn2 = 3;
int greenIn2 = 4;
int blueIn2 = 5;
int redVal2;
int greenVal2;
int blueVal2;
//Relays
int relPin1 = 2; //Digital Pin für Relay1
int relPin2 = 3; //Digital Pin für Relay2
int relPin3 = 8; //Digital Pin für Relay3
int relPin1In = 3;
int relPin2In = 4;
int relPin3In = 5;
int relPin1Val;
int relPin2Val;
int relPin3Val;
//Heizungs Status
int heiz1Val;
int heiz2Val;
#define BACKLIGHT_PIN 13
#define ONE_WIRE_BUS 7
LiquidCrystal_I2C lcd(0x20,20,4); // set the LCD address to 0x20 for a 20 chars and 4 line display
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
void setup() {
Serial.begin(9600);
sensors.begin();
lcd.init(); // initialize the lcd
lcd.backlight();
pinMode(relPin1, OUTPUT); //Output Mode for Relay1
pinMode(relPin2, OUTPUT); //Output Mode for Relay2
pinMode(relPin3, OUTPUT); //Output Mode for Relay3
}
void loop() {
sensors.requestTemperatures();
float temperature1 = sensors.getTempCByIndex(0);
lcd.setCursor(0, 0);
lcd.print("Aquarium: ");
lcd.print(sensors.getTempCByIndex(0));
lcd.print("C");
float temperature2 = sensors.getTempCByIndex(1);
lcd.setCursor(0, 2);
lcd.print("Becken: ");
lcd.print(sensors.getTempCByIndex(1));
lcd.print("C");
//Je nach Temperatur Farbe der RGB-LED anpassen und Rel 1 schalten
if(temperature1 <= 27)
{
redVal1 = 0;
greenVal1 = 0;
blueVal1 = 150;
relPin1Val = LOW;
relPin3Val = LOW;
lcd.setCursor(0, 1);
lcd.print("Heizung ist: Ein ");
}
else if(temperature1 > 27 && temperature1 < 29)
{
redVal1 = 0;
greenVal1 = 150;
blueVal1 = 0;
relPin1Val = HIGH;
relPin3Val = LOW;
lcd.setCursor(0, 1);
lcd.print("Heizung ist: Aus ");
}
else if(temperature1 > 29)
{
redVal1 = 150;
greenVal1 = 0;
blueVal1 = 0;
relPin1Val = HIGH;
relPin3Val = HIGH;
lcd.setCursor(0, 1);
lcd.print("Lueftung ist: Ein ");
}
//Je nach Temperatur Farbe der RGB-LED anpassen und Rel 2 schalten
if(temperature2 <= 27)
{
redVal2 = 0;
greenVal2 = 0;
blueVal2 = 255;
relPin2Val = LOW;
lcd.setCursor(0, 3);
lcd.print("Heizung ist: Ein ");
}
else if(temperature2 > 27 && temperature2 < 29)
{
redVal2 = 0;
greenVal2 = 255;
blueVal2 = 0;
relPin2Val = HIGH;
lcd.setCursor(0, 3);
lcd.print("Heizung ist: Aus ");
}
else if(temperature2 > 29)
{
redVal2 = 255;
greenVal2 = 0;
blueVal2 = 0;
relPin2Val = HIGH;
lcd.setCursor(0, 3);
lcd.print("Lueftung ist: Ein ");
}
{
analogWrite(redPin1, redVal1);
analogWrite(greenPin1, greenVal1);
analogWrite(bluePin1, blueVal1);
analogWrite(redPin2, redVal2);
analogWrite(greenPin2, greenVal2);
analogWrite(bluePin2, blueVal2);
digitalWrite(relPin1, relPin1Val);
digitalWrite(relPin2, relPin2Val);
digitalWrite(relPin3, relPin3Val);
}
}