#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4); // set the LCD address to 0x27 for a 16 chars and 2 line display
#include <I2C_RTC.h>
static DS1307 RTC;
char* week[] = {"SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"};
#include "DHT.h"
#define DHTPIN 5
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
#include <Ultrasonic.h>
Ultrasonic ultrasonic(11, 10); //trig,echo
int distance;
int motion_pin = 6;
int buzzer_pin = 4;
int pump_pin = 7;
int fan_pin = 8;
int lamp_pin = 9;
void setup()
{
Serial.begin(9600);
lcd.init();
lcd.backlight();
RTC.begin();
dht.begin();
RTC.setHourMode(CLOCK_H24);
/*RTC.setWeek(2);
RTC.setDate(28,8,23);
RTC.setTime(23,29,00);*/
pinMode(motion_pin, INPUT);
pinMode(buzzer_pin, OUTPUT);
pinMode(pump_pin, OUTPUT);
pinMode(fan_pin, OUTPUT);
pinMode(lamp_pin, OUTPUT);
}
void loop()
{
//=========== DATE VIEW ============
lcd.setCursor(3, 0);
lcd.print(week[RTC.getWeek()]);
lcd.print(",");
if (RTC.getDay() < 10)
{
lcd.print("0");
}
lcd.print(RTC.getDay());
lcd.print("-");
if (RTC.getMonth() < 10)
{
lcd.print("0");
}
lcd.print(RTC.getMonth());
lcd.print("-");
lcd.print(RTC.getYear());
//=========== TIME VIEW ============
lcd.setCursor(6, 1);
if (RTC.getHours() < 10)
{
lcd.print("0");
}
lcd.print(RTC.getHours());
lcd.print(":");
if (RTC.getMinutes() < 10)
{
lcd.print("0");
}
lcd.print(RTC.getMinutes());
lcd.print(":");
if (RTC.getSeconds() < 10)
{
lcd.print("0");
}
lcd.print(RTC.getSeconds());
//=========== SCHEDULE ============
if (RTC.getHours() == 10 && RTC.getMinutes() == 53 && RTC.getSeconds() == 0)
{
digitalWrite(lamp_pin, HIGH);
}
else if (RTC.getHours() == 14 && RTC.getMinutes() == 23 && RTC.getSeconds() == 0)
digitalWrite(lamp_pin, LOW);
//=========== TEMPERATUR & HUMIDITY ============
float h = dht.readHumidity();
lcd.setCursor(1, 2);
lcd.print("H:");
lcd.print(h);
lcd.print("% ");
float t = dht.readTemperature();
lcd.print("T:");
lcd.print(t);
lcd.print("C");
//=========== CONTROL FAN ============
if (t >= 30)
{
digitalWrite(fan_pin, HIGH);
}
else
digitalWrite(fan_pin, LOW);
//=========== DISTANCE ============
distance = ultrasonic.read();
lcd.setCursor(1, 3);
lcd.print("D:");
lcd.print(distance);
lcd.print("Cm ");
if (distance >= 200)
{
digitalWrite(pump_pin, HIGH);
}
else
digitalWrite(pump_pin, LOW);
//=========== MOTION ============
int status_motion = digitalRead(motion_pin);
lcd.print("M:");
lcd.print(status_motion);// akan auto 0 setelah 5 detik
//=========== CONTROL BUZZER ============
if (status_motion == 1)
{
digitalWrite(buzzer_pin, HIGH);
}
else
digitalWrite(buzzer_pin, LOW);
}Lamp
Pump