#define BLYNK_TEMPLATE_ID "TMPL6sN7NNOPa"
#define BLYNK_TEMPLATE_NAME "FinalProject"
#define blynkAuth"DCc0Uz31c2sPq-L5Yw_slCaqUZq_GBTr"
#include <WiFi.h>
#include <BlynkSimpleEsp32.h>
#include <WiFiClient.h>
#include <DHT.h>
#include <LiquidCrystal_I2C.h>
#define DHTPIN 19 // Pin tempat sensor DHT11 atau DHT22 terhubung
#define DHTPIN 27
#define DHTPIN 33
#define DHTTYPE DHT22 // DHT 22 (AM2302)
#define THRESHOLD_TEMP 27 // Ambang batas suhu untuk mengaktifkan pendingin
#define TARGET_TEMP 23 // Suhu target setelah mengaktifkan pendingin
#define RELAY_PIN 14 // Pin yang terhubung ke relay untuk mengontrol air conditioning
#define buzPin 12
const char* ssid = "KOS_HERA";
const char* password = "terserah";
DHT dht1(DHTPIN, DHTTYPE);
DHT dht2(DHTPIN, DHTTYPE);
DHT dht3(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27, 16, 2);
bool isAirConditioningOn = false;
BlynkTimer timer;
void setup() {
Serial.begin(115200);
delay(10);
dht1.begin();
dht2.begin();
dht3.begin();
lcd.begin(16, 2);
lcd.backlight();
connectToWiFi();
Blynk.begin(blynkAuth, ssid, password);
pinMode(RELAY_PIN, OUTPUT);
digitalWrite(RELAY_PIN, LOW);
timer.setInterval(5000L, readSensor);
}
void loop() {
Blynk.run();
timer.run();
}
void readSensor() {
float temperature, humidity;
temperature = dht1.readTemperature();
humidity = dht1.readHumidity();
temperature = dht2.readTemperature();
humidity = dht2.readHumidity();
temperature = dht3.readTemperature();
humidity = dht3.readHumidity();
if (isnan(temperature) || isnan(humidity)) {
Serial.println("Gagal membaca suhu/kelembapan dari sensor DHT!");
return;
}
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Suhu: ");
lcd.print(temperature);
lcd.print(" C");
lcd.setCursor(0, 1);
lcd.print("Kelembapan: ");
lcd.print(humidity);
lcd.print(" %");
if (temperature > THRESHOLD_TEMP && !isAirConditioningOn) {
Serial.println("Suhu terlalu tinggi, mengaktifkan pendingin...");
controlAirConditioning(true); // Mengaktifkan pendingin
isAirConditioningOn = true;
digitalWrite(buzPin, HIGH);
Blynk.virtualWrite(V0,"Suhu terlalu tinggi, pendingin diaktifkan.");
Blynk.virtualWrite(V1,"Suhu terlalu tinggi, pendingin diaktifkan.");
Blynk.virtualWrite(V2,"Suhu terlalu tinggi, pendingin diaktifkan.");
} else if (temperature <= TARGET_TEMP && isAirConditioningOn) {
Serial.println("Suhu telah mencapai target, mematikan pendingin.");
controlAirConditioning(false); // Mematikan pendingin
isAirConditioningOn = false;
digitalWrite(buzPin, HIGH);
}
}
void controlAirConditioning(bool state) {
digitalWrite(RELAY_PIN, state ? HIGH : LOW);
}
void connectToWiFi() {
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}