🚀 Mega Proyek IoT: Absen Otomatis dengan ESP32-CAM
Sistem absen otomatis yang menggabungkan ESP32-CAM + OLED/LCD + Sensor + LED indikator + Dashboard Online (Blynk/ThingSpeak/MQTT).
🎯 Tujuan: Siswa mampu membuat sistem IoT yang mendeteksi wajah untuk absensi, menampilkan status di layar, dan mengirim data real-time ke dashboard online.
🔧 Komponen yang Dibutuhkan
- ESP32-CAM (AI-Thinker)
- OLED 128x64 I2C atau LCD 16x2 I2C
- Sensor PIR (opsional, untuk deteksi gerakan)
- LED merah/hijau + resistor 220Ω
- MicroSD Card (opsional, untuk menyimpan foto)
- Kabel jumper, breadboard
- WiFi Internet
- Software: Arduino IDE + Library ESP32-CAM + DHT + OLED/LCD + Blynk + PubSubClient
1️⃣ Arsitektur Sistem
- ESP32-CAM menangkap wajah siswa.
- Face Recognition Library mengenali wajah.
- LED indikator merah/hijau menandakan absensi berhasil atau gagal.
- Layar OLED/LCD menampilkan nama siswa dan status absensi.
- Data absensi dikirim ke Blynk, ThingSpeak, dan/atau MQTT.
- Sensor PIR mendeteksi keberadaan siswa (opsional) sebelum capture wajah.
2️⃣ Contoh Kode ESP32 Mega Proyek
Kode berikut menggabungkan kamera, OLED, LED, sensor PIR, dan integrasi dashboard Blynk/ThingSpeak/MQTT:
#include "esp_camera.h"
#include <WiFi.h>
#include <Wire.h>
#include <Adafruit_SSD1306.h>
#include <BlynkSimpleEsp32.h>
#include <PubSubClient.h>
// ====================== WIFI & DASHBOARD ======================
const char* ssid = "NAMA_WIFI";
const char* password = "PASSWORD_WIFI";
char blynk_auth[] = "AUTH_TOKEN_BLYNK";
const char* mqtt_server = "broker.hivemq.com"; // MQTT broker
WiFiClient espClient;
PubSubClient client(espClient);
// ====================== OLED ======================
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
// ====================== Sensor & LED ======================
#define LED_GREEN 2
#define LED_RED 15
#define PIR_PIN 13
#define CAMERA_MODEL_AI_THINKER
void setup() {
Serial.begin(115200);
// WiFi
WiFi.begin(ssid, password);
while(WiFi.status() != WL_CONNECTED){
delay(500); Serial.print(".");
}
Serial.println("WiFi Connected");
// Blynk
Blynk.begin(blynk_auth, ssid, password);
// MQTT
client.setServer(mqtt_server, 1883);
// OLED
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)){
Serial.println("OLED init failed");
while(1);
}
display.clearDisplay();
display.display();
// LED & PIR
pinMode(LED_GREEN, OUTPUT);
pinMode(LED_RED, OUTPUT);
pinMode(PIR_PIN, INPUT);
// Kamera init
camera_config_t config;
// PIN kamera AI-Thinker
config.ledc_channel = LEDC_CHANNEL_0;
config.ledc_timer = LEDC_TIMER_0;
config.pin_d0 = 5; config.pin_d1 = 18; config.pin_d2 = 19; config.pin_d3 = 21;
config.pin_d4 = 36; config.pin_d5 = 39; config.pin_d6 = 34; config.pin_d7 = 35;
config.pin_xclk = 0; config.pin_pclk = 22; config.pin_vsync = 25; config.pin_href = 23;
config.pin_sscb_sda = 26; config.pin_sscb_scl = 27; config.pin_pwdn = 32; config.pin_reset = -1;
config.xclk_freq_hz = 20000000; config.pixel_format = PIXFORMAT_JPEG;
config.frame_size = FRAMESIZE_VGA; config.jpeg_quality = 10; config.fb_count = 2;
esp_camera_init(&config);
}
void loop() {
Blynk.run();
if(!client.connected()) reconnectMQTT();
client.loop();
// Deteksi siswa
if(digitalRead(PIR_PIN) == HIGH){
// Capture wajah dan lakukan face recognition
bool wajah_terkenal = faceRecognition();
// Tampilkan status di OLED
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(0,20);
if(wajah_terkenal){
display.println("ABSEN SUKSES");
digitalWrite(LED_GREEN,HIGH);
digitalWrite(LED_RED,LOW);
sendToDashboard("SUKSES");
} else {
display.println("TIDAK TERDAFTAR");
digitalWrite(LED_GREEN,LOW);
digitalWrite(LED_RED,HIGH);
sendToDashboard("GAGAL");
}
display.display();
delay(3000);
digitalWrite(LED_GREEN,LOW);
digitalWrite(LED_RED,LOW);
}
}
// ====================== Fungsi Face Recognition ======================
bool faceRecognition(){
// Dummy: ganti dengan library ESP32 face recognition
// Kembalikan true jika wajah dikenali
return random(0,2); // simulasi: 50% sukses
}
// ====================== Fungsi Dashboard ======================
void sendToDashboard(String status){
// Blynk
Blynk.virtualWrite(V1, status);
// MQTT
client.publish("esp/absen", status.c_str());
// ThingSpeak
if(WiFi.status()==WL_CONNECTED){
WiFiClient client_http;
HTTPClient http;
String url = "http://api.thingspeak.com/update?api_key=API_KEY&field1=" + status;
http.begin(client_http, url);
http.GET();
http.end();
}
}
// ====================== MQTT Reconnect ======================
void reconnectMQTT(){
while(!client.connected()){
Serial.print("Connecting MQTT...");
if(client.connect("ESP32Absen")) client.subscribe("esp/led");
else delay(2000);
}
}
📝 Aktivitas Siswa
- Setup ESP32-CAM + OLED/LCD + LED + PIR sensor.
- Implementasikan face recognition menggunakan library ESP32 Face Recognition.
- Tambahkan dashboard Blynk untuk menampilkan status absensi real-time.
- Kirim data absensi ke ThingSpeak dan MQTT broker.
- Tambahkan LED indikator: hijau untuk wajah dikenal, merah untuk tidak dikenal.
- Uji sistem dengan beberapa wajah siswa dan catat akurasi deteksi.
📘 Penjelasan
- ESP32-CAM → menangkap gambar siswa secara real-time.
- Face Recognition → mengenali siswa dan memutuskan status absensi.
- OLED/LCD → menampilkan status langsung di perangkat.
- PIR sensor → opsional untuk mendeteksi keberadaan siswa sebelum capture.
- Dashboard Online (Blynk/ThingSpeak/MQTT) → monitoring real-time dari smartphone atau PC.
- LED indikator memberikan feedback visual cepat untuk absensi.
No comments:
Post a Comment