// Include libraries
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include "DHT.h"
#define DEBUG 1 // set 1 for serial read statements
// define ON/OFF
#define ON 1 // change to 1 if inverted logic
#define OFF 0 // change to 0 if inverted logic
#if DEBUG == 1
#define debug(x) Serial.print(x)
#define debugln(x) Serial.println(x)
#else
#define debug(x)
#define debugln(x)
#endif
// parameters
#define MaxLevel 28 // celcius -- temperature fan on above and equal to
#define MinLevel 28 // celcius -- temperature fan off below
// Pinout
#define led_pin 2 // onboard led
// DHT sensor
#define DHTPIN 4 // connect dht sensor to pin 4
// Fan Pin
#define fan_pin 5 // connect fan to pin 5
// lcd definitions
#define refresh_rate 500 // lcd refresh rate in ms
// LCD
LiquidCrystal_I2C lcd(0x27, 16, 2); // set the LCD address to 0x27 for a 16 chars and 2 line display
// upload scan code to know address
// SCL -> 22 && SDA -> 21
// DHT Sensor ------------------------------------------------------------
// DHT dht = DHT(DHTPIN, DHT11, 6); // DHT11
DHT dht = DHT(DHTPIN, DHT22, 6); // DHT22 For simulation
unsigned long prev = 0; // previous time
bool fan_status = false;
bool led_status = false;
void fan_on(bool value)
{
digitalWrite(fan_pin, value);
}
void read_send_Data()
{
float temperature_ = dht.readTemperature();
float f = dht.readTemperature(true);
int humidity = dht.readHumidity();
// LCD display values
lcd.clear();
// DHT sensor
lcd.setCursor(0, 0);
lcd.print("T:");
lcd.print(temperature_, 1);
lcd.print("C");
lcd.setCursor(9, 0);
lcd.print("H:");
lcd.print(humidity);
lcd.print("%");
// Fan Control
if (temperature_ >= MaxLevel)
{
fan_status = true;
Serial.println("Fan ON\n");
fan_on(ON);
}
else if (temperature_ < MinLevel)
{
fan_status = false;
Serial.println("Fan OFF\n");
fan_on(OFF);
}
// Fan Verdict
lcd.setCursor(0, 1);
if (!fan_status)
lcd.print("OK Fan:OFF");
else
lcd.print("HIGH! Fan:ON");
// debug print
Serial.print("Humidity: ");
Serial.print(humidity, 1);
Serial.print("% Temperature: ");
Serial.print(temperature_, 1);
Serial.print("C & ");
Serial.print(f, 1);
Serial.println("F");
// Serial.println("Temperature: " + String(temperature_) + " C Humidity: " + String(humidity) + " %");
}
void setup()
{
// Initializing serial commmunication
Serial.begin(9600);
lcd.init(); // initialize the lcd
lcd.backlight(); // Make sure backlight is on
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(F("Starting..."));
Serial.println(F("Smart Temperature Fan")); // print to serial monitor
// Set pin modes
pinMode(fan_pin, OUTPUT);
pinMode(led_pin, OUTPUT);
digitalWrite(led_pin, LOW); // turn off fan
fan_on(ON);
lcd.setCursor(0, 1);
dht.begin();
Serial.println(F("Done Initializing..."));
lcd.clear();
// lcd.setCursor(0, 0);
// lcd.print(F("Smart Temp Sensor"));
delay(500);
}
void loop()
{
digitalWrite(led_pin, led_status); // turn off fan
if (millis() - prev > refresh_rate)
{
led_status = !led_status;
read_send_Data();
prev = millis();
}
delay(10);
}