#include <Adafruit_Sensor.h>
#include <DHT.h>
#include <DHT_U.h>
#define BLYNK_TEMPLATE_ID "TMPL6w1x19HMd"
#define BLYNK_TEMPLATE_NAME "UAS IoT"
#define BLYNK_AUTH_TOKEN "fjcaOvl4_9lImcMh9HmZQrRFzwze-9Cz"
#include <WiFi.h>
#include <BlynkSimpleEsp32.h>
char auth[] = "fjcaOvl4_9lImcMh9HmZQrRFzwze-9Cz";
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
#define DHT_PIN 26
#define DHTTYPE DHT22
DHT_Unified dht (DHT_PIN, DHTTYPE);
#define PIR1 34
#define TRIGGER_PIN 25
#define ECHO_PIN 33
#define RedLED 23
#define OrangeLED 22
#define YellowLED 21
#define GreenLED 19
#define BlueLED 18
int motionCount = 0;
BlynkTimer timer;
void setup() {
Serial.begin(115200);
dht.begin();
pinMode(PIR1, INPUT);
pinMode(TRIGGER_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(RedLED, OUTPUT);
pinMode(OrangeLED, OUTPUT);
pinMode(YellowLED, OUTPUT);
pinMode(GreenLED, OUTPUT);
pinMode(BlueLED, OUTPUT);
Blynk.begin(auth, ssid, pass);
timer.setInterval(1000L, sendMotionCount);
}
void loop() {
//data diambil 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 diambil dari sensor PIR
int pir1Value = digitalRead(PIR1);
//data diambil 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;
//LED berdasarkan data dari sensor
digitalWrite(RedLED, (pir1Value == LOW && distance <= 100));
digitalWrite(OrangeLED, (pir1Value == HIGH));
digitalWrite(YellowLED, (pir1Value == HIGH && distance <= 100));
digitalWrite(GreenLED, (temperature <= 35.0));
digitalWrite(BlueLED, (pir1Value == HIGH || distance <= 100 && temperature >= 15.0));
//data akan 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 selama 1 detik
Blynk.run();
timer.run();
checkMotion();
}
void checkMotion(){
int motionState = digitalRead(PIR1);
if(motionState == HIGH){
digitalWrite(OrangeLED, HIGH); //LED akan menyala selama 0.5 detik
delay(1000);
digitalWrite(OrangeLED, LOW); //LED mati
motionCount++;
Serial.println("Gerakan terdeteksi!");
Serial.println(motionCount);
}
}
void sendMotionCount(){
Blynk.virtualWrite(V0, motionCount); //mengirim jumah gerakan ke blynk widget V0
}