#include <DHT.h>
#include <PID_v1.h>
#define DHTPIN 2 // Pin untuk DHT11
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
#define MQ135_PIN A0 // Pin untuk sensor MQ135
#define FAN_PIN 9 // Pin PWM untuk kipas
// Variabel untuk PID
double Setpoint, Input, Output;
double Kp = 2.0, Ki = 5.0, Kd = 1.0; // Tuning PID
PID myPID(&Input, &Output, &Setpoint, Kp, Ki, Kd, DIRECT);
void setup() {
Serial.begin(9600);
dht.begin();
pinMode(MQ135_PIN, INPUT);
pinMode(FAN_PIN, OUTPUT);
// Setpoint untuk kualitas udara ideal (misalnya 300 ppm)
Setpoint = 300;
// Konfigurasi PID
myPID.SetMode(AUTOMATIC);
myPID.SetOutputLimits(0, 255); // Batas PWM untuk kipas
}
void loop() {
// Membaca data sensor
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
int mq135Value = analogRead(MQ135_PIN);
// Konversi nilai MQ135 ke ppm (contoh sederhana)
double airQuality = map(mq135Value, 0, 1023, 0, 500);
// Input PID adalah kualitas udara
Input = airQuality;
// Proses PID
myPID.Compute();
// Kontrol kipas berdasarkan output PID
analogWrite(FAN_PIN, (int)Output);
// Debugging
Serial.print("Humidity: "); Serial.print(humidity);
Serial.print(" % Temperature: "); Serial.print(temperature);
Serial.print(" °C Air Quality: "); Serial.print(airQuality);
Serial.print(" ppm Fan Speed: "); Serial.println(Output);
delay(1000); // Delay 1 detik
}