#include <DHT.h>
#include <WiFi.h>
#include <Thingspeak.h>
#include <Servo.h>
#define DHTPIN 32 // Pin DHT22
#define DHTTYPE DHT22 // Tipe DHT
#define MQPIN 34 // Pin MQ-7
#define PIRPIN 14 // Pin PIR
#define SERVO_PIN 12 // Pin Servo
#define RELAY_PIN 13 // Pin Relay
const char* ssid = "Han"; // Ganti dengan SSID WiFi kamu
const char* password = "87654321"; // Ganti dengan password WiFi kamu
unsigned long myChannelNumber = 2684188; // Ganti dengan channel number kamu
const char* myWriteAPIKey = "QHLBUR79SV1X1N7I"; // Ganti dengan API key kamu
DHT dht(DHTPIN, DHTTYPE);
Servo myServo;
bool lastMotionDetected = false;
void setup() {
Serial.begin(115200);
dht.begin();
myServo.attach(SERVO_PIN);
pinMode(PIRPIN, INPUT);
pinMode(RELAY_PIN, OUTPUT);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi...");
}
Serial.println("Connected to WiFi");
Thingspeak.begin(WiFi);
}
void loop() {
// Baca data dari DHT22
float h = dht.readHumidity();
float t = dht.readTemperature();
// Baca data dari MQ-7
int mqValue = analogRead(MQPIN);
// Deteksi gerakan dengan PIR
bool motionDetected = digitalRead(PIRPIN);
if (motionDetected != lastMotionDetected) {
if (motionDetected) {
Serial.println("Motion detected!");
} else {
Serial.println("No motion detected.");
}
lastMotionDetected = motionDetected;
}
// Kontrol Servo untuk pemberi pakan otomatis
if (motionDetected) {
myServo.write(90); // Atur servo ke posisi tertentu
delay(1000); // Tunggu 1 detik
myServo.write(0); // Kembali ke posisi awal
}
// Kontrol Relay untuk kipas
if (t > 30) { // Jika suhu lebih dari 30 derajat
digitalWrite(RELAY_PIN, HIGH); // Kipas menyala
} else {
digitalWrite(RELAY_PIN, LOW); // Kipas mati
}
// Kirim data ke Thingspeak
if (isnan(h) || isnan(t) || mqValue < 0) {
Serial.println("Failed to read from DHT or MQ");
return;
}
Thingspeak.setField(1, t); // Suhu
Thingspeak.setField(2, h); // Kelembaban
Thingspeak.setField(3, mqValue); // Kadar gas
Thingspeak.setField(4, motionDetected); // Status gerakan
Thingspeak.writeFields(myChannelNumber, myWriteAPIKey);
delay(10000); // Delay 10 detik sebelum pengukuran berikutnya
}