#include <Adafruit_Sensor.h>
#include <DHT.h>
#include <DHT_U.h>
#define BLYNK_TEMPLATE_ID "TMPL6kRqWeenx"
#define BLYNK_TEMPLATE_NAME "KONTROL SENSOR"
#define BLYNK_AUTH_TOKEN "CnjRHSgFIbLgFbxMUbR4QkV3CMzuONXE"
#include <WiFi.h>
#include <BlynkSimpleEsp32.h>
char auth[] = "CnjRHSgFIbLgFbxMUbR4QkV3CMzuONXE"; // Ganti dengan token autentikasi Blynk Anda
char ssid[] = "Wokwi-GUEST"; // Ganti dengan nama WiFi Anda
char pass[] = ""; // Ganti dengan kata sandi WiFi Anda
#define DHT_PIN 26 // sensor DHT22
#define DHTTYPE DHT22 // Jenis sensor DHT22 yang digunakan
DHT_Unified dht(DHT_PIN, DHTTYPE);
#define PIR1 34 // sensor PIR 1
//#define PIR2 35 // sensor PIR 2
//#define PIR3 34 // sensor PIR 3
#define TRIGGER_PIN 25 // trigger sensor ultrasonik
#define ECHO_PIN 33 // echo sensor ultrasonik
#define RLED 23 // LED merah
#define OLED 22 // LED orange
#define YLED 21 // LED kuning
#define GLED 19 // LED hijau
#define BLED 18 // LED biru
int motionCount = 0; // Variabel untuk menghitung gerakan
BlynkTimer timer;
void setup() {
Serial.begin(115200);
dht.begin();
pinMode(PIR1, INPUT);
//pinMode(PIR2, INPUT);
//pinMode(PIR3, INPUT);
pinMode(TRIGGER_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(RLED, OUTPUT);
pinMode(OLED, OUTPUT);
pinMode(YLED, OUTPUT);
pinMode(GLED, OUTPUT);
pinMode(BLED, OUTPUT);
Blynk.begin(auth, ssid, pass);
timer.setInterval(1000L, sendMotionCount); // Mengirim jumlah gerakan setiap 1 detik
}
void loop() {
// data dari sensor DHT22
sensors_event_t event;
dht.temperature().getEvent(&event);
float temperature = event.temperature;
dht.humidity().getEvent(&event);
float humidity = event.relative_humidity;
// data dari sensor PIR
int pir1Value = digitalRead(PIR1);
//int pir2Value = digitalRead(PIR2);
//int pir3Value = digitalRead(PIR3);
// data dari sensor ultrasonik
long duration, distance;
digitalWrite(TRIGGER_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIGGER_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIGGER_PIN, LOW);
duration = pulseIn(ECHO_PIN, HIGH);
distance = duration / 29.1 / 2;
// Fungsi LED berdasarkan data sensor
digitalWrite(RLED, (pir1Value == LOW && distance <= 100));
digitalWrite(OLED, (pir1Value == HIGH ));
digitalWrite(YLED, ((pir1Value == HIGH) && distance <= 100));{delay(150);}
digitalWrite(GLED, (temperature <= 32.0));
// LED biru menyala jika ada sensor yang aktif
digitalWrite(BLED, (pir1Value == HIGH || distance <= 100 && temperature >= 15.0));
// hasil data ditampilkan ke Serial Monitor
Serial.print("Suhu: ");
Serial.print(temperature);
Serial.print("°C, Kelembaban: ");
Serial.print(humidity);
Serial.print("%, Jarak: ");
Serial.print(distance);
Serial.println(" cm");
delay(1000); // Delay 1 detik
Blynk.run();
timer.run();
checkMotion();
}
void checkMotion()
{
int motionState = digitalRead(PIR1);
if (motionState == HIGH)
{
digitalWrite(OLED, HIGH); // Nyalakan LED selama 0.5 detik
delay(1000);
digitalWrite(OLED, LOW); // Matikan LED
motionCount++;
Serial.println("Gerakan Terdeteksi!"); // Tampilkan pesan di konsol
Serial.println(motionCount);
}
}
void sendMotionCount()
{
Blynk.virtualWrite(V0, motionCount); // Kirim jumlah gerakan ke widget Label (V0)
}