#include <LiquidCrystal_I2C.h>
#include <DHT.h>
#define DHTPIN 8
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
// put your setup code her, to run once:
Serial.begin(115200);
Serial.println("Economical And Smart Fan");
lcd.begin(16, 2);
dht.begin();
pinMode(13, OUTPUT);
}
void loop() {
//kelembapan
float normal = 30;
float dingin = 70;
float kelembapan = dht.readHumidity();
//suhu
float rendah = 15;
float tinggi = 35;
float suhu = dht.readTemperature();
//intensitas_kipas
float mati = 15;
float hidup = 30;
suhu = 20;
kelembapan = 35;
//kelembapan_normal
float kelembapan_normal;
if (kelembapan >= dingin) {
kelembapan_normal = 0;
} else if (normal < kelembapan && kelembapan < dingin){
kelembapan_normal = (dingin - kelembapan) / (dingin - normal);
} else if (kelembapan <= normal){
kelembapan_normal = 1;
}
//kelembaban_dingin
float kelembapan_dingin;
if (kelembapan < normal) {
kelembapan_dingin = 0;
} else if (kelembapan >= normal && kelembapan <= dingin){
kelembapan_dingin = (kelembapan - normal) / (dingin - normal);
} else if (kelembapan > dingin){
kelembapan_dingin = 1;
}
Serial.println("normal [kelembapan]: " + String(kelembapan_normal, 4));
Serial.println("dingin [kelembapan]: " + String(kelembapan_dingin, 4));
//suhu_rendah
//suhu rendah
float suhu_rendah;
if (suhu >= tinggi) {
suhu_rendah = 0;
} else if (rendah < suhu && suhu < tinggi) {
suhu_rendah = (tinggi - suhu) / (tinggi - rendah);
} else if (suhu <= rendah) {
suhu_rendah = 1;
}
//suhu tinggi
float suhu_tinggi;
if (suhu < rendah){
suhu_tinggi = 0;
} else if (suhu >= rendah && suhu <= tinggi) {
suhu_tinggi = (suhu - rendah) / (tinggi - rendah);
} else if (suhu > tinggi) {
suhu_tinggi = 1;
}
Serial.println("rendah [suhu]: " + String(suhu_rendah, 4));
Serial.println("tinggi [suhu]: " + String(suhu_tinggi, 4));
//RULE [R1]
float apredikat1 = min(kelembapan_normal, suhu_rendah);
Serial.println("a predikat 1: " + String(apredikat1, 4));
float z1 = hidup - apredikat1 * (hidup - mati);
Serial.println("z1: " + String(z1, 4));
//RULE [R2]
float apredikat2 = min(kelembapan_dingin, suhu_rendah);
Serial.println("a predikat 2: " + String(apredikat2, 4));
float z2 = hidup - apredikat2 * (hidup - mati);
Serial.println("z2: " + String(z2, 4));
//RULE [R3]
float apredikat3 = min(kelembapan_normal, suhu_tinggi);
Serial.println("a predikat 3: " + String(apredikat3, 4));
float z3 = apredikat3 * (hidup - mati) + mati;
Serial.println("z1: " + String(z3, 4));
//RULE [R4]
float apredikat4 = min(kelembapan_dingin, suhu_tinggi);
Serial.println("a predikat 4: " + String(apredikat4, 4));
float z4 = apredikat4 * (hidup - mati) + mati;
Serial.println("z1: " + String(z4, 4));
//Nilai Z
float z = (apredikat1 * z1 + apredikat2 * z2 + apredikat3 * z3 + apredikat4 * z4) /
(apredikat1 + apredikat2 + apredikat3 + apredikat4);
Serial.println("z: " + String(z, 4));
//Menampilkan di LCD
lcd.setCursor(0, 0);
lcd.println("Lembap=");
lcd.print(kelembapan);
lcd.println(" %");
lcd.setCursor(0, 1);
lcd.println("Suhu=");
lcd.print(suhu);
lcd.println(" C");
delay(1500);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Intensitas Kipas: ");
lcd.setCursor(0, 1);
lcd.print(z);
delay(1500);
lcd.clear();
if (z <= 25){
digitalWrite(12, LOW);
lcd.print("Kipas:");
lcd.setCursor(0, 1);
lcd.print("Mati");
}
else if(z >= 30){
digitalWrite(12, HIGH);
lcd.print("Kipas:");
lcd.setCursor(0, 1);
lcd.print("Hidup");
}
delay(3000);
lcd.clear();
delay(1000);
}