#define BLYNK_TEMPLATE_ID "TMPL6X6LdcABp"
#define BLYNK_TEMPLATE_NAME "Monitoring Mesin Packaging"
#define BLYNK_AUTH_TOKEN "EiH2NjqbbV-xsTdai9P4Rty06oGlku5A"
#define BLYNK_PRINT Serial
#define DEBOUNCE_DELAY 50
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
char auth[] = BLYNK_AUTH_TOKEN;
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
// Pin untuk sensor LDR
const int POT1_PIN = 35; // Sensor LDR 1 di GPIO35
const int POT2_PIN = 32; // Sensor LDR 2 di GPIO32
// Pin untuk Push Button
const int BUTTON_PIN = 23; // Push button di GPIO23
// Variabel nilai sensor dan pushbutton
int POT1_value = 0;
int POT2_value = 0;
int button_state = 0;
int last_button_state = HIGH; // Menyimpan status tombol sebelumnya
unsigned long last_debounce_time = 0; // Variabel untuk menyimpan waktu terakhir perubahan status tombol
float TeganganSebelumnya = 0.0;
float ArusSebelumnya = 0.0;
const float AmbangBatas_Tegangan = 1.0; // Ambang batas perbedaan tegangan (volt)
const float AmbangBatas_Arus = 0.1; // Ambang batas perbedaan arus (ampere)
// Variabel untuk counter
int counter = 0;
// Daya spesifikasi mesin
const float Daya_spesifikasi = 1800; // Dalam Watt
void setup() {
Serial.begin(115200);
Blynk.begin(auth, ssid, pass);
// Inisialisasi pin untuk Push Button
pinMode(BUTTON_PIN, INPUT_PULLUP);
// Inisialisasi pin untuk LDR
pinMode(POT1_PIN, INPUT); // Pin untuk LDR1
pinMode(POT2_PIN, INPUT); // Pin untuk LDR2
}
void loop() {
baca_nilai_parameter();
baca_push_button();
Blynk.run();
// Menunggu 50ms sebelum membaca lagi
delay(50);
}
void baca_nilai_parameter() {
// Membaca nilai lux dari LDR1 sebagai tegangan
POT1_value = analogRead(POT1_PIN);
// float Vwiper1 = (POT1_value / 4095.0) * 3.3;
float Tegangan = (POT1_value / 4095.0) * 260.0;
// float Tegangan = POT1_value;
// Membaca nilai lux dari LDR2 sebagai Arus
POT2_value = analogRead(POT2_PIN);
// float Vwiper2 = (POT2_value / 4095.0) * 3.3;
float Arus = (POT2_value / 4095.0) * 20.0;
// float Arus = POT2_value;
// Menghitung nilai Daya (P = V x I)
float Daya_digunakan = Tegangan * Arus;
// Menghitung efisiensi daya
float Efisiensi_daya = (Daya_digunakan / Daya_spesifikasi) * 100; // Efisiensi dalam persen
// Print nilai
if (fabs(Tegangan - TeganganSebelumnya) > AmbangBatas_Tegangan || fabs(Arus - ArusSebelumnya) > AmbangBatas_Arus) {
// Menampilkan nilai LDR, counter, dan status tombol
Serial.print("Tegangan: ");
Serial.println(Tegangan);
Serial.print("Arus: ");
Serial.println(Arus);
Serial.print("Daya: ");
Serial.println(Daya_digunakan);
Serial.print("Efisiensi Daya: ");
Serial.println(Efisiensi_daya);
Serial.println();
Serial.print("Counter: ");
Serial.println(counter);
Serial.println();
// Blynk.virtualWrite(V0, Tegangan);
// Blynk.virtualWrite(V1, Arus);
// Blynk.virtualWrite(V2, Daya_digunakan);
// Blynk.virtualWrite(V3, Efisiensi_daya);
TeganganSebelumnya = Tegangan; // Update nilai tegangan sebelumnya
ArusSebelumnya = Arus; // Update nilai arus sebelumnya
}
}
void baca_push_button() {
// Membaca status push button
button_state = digitalRead(BUTTON_PIN);
// Mengecek apakah tombol ditekan (dari HIGH ke LOW)
if (button_state == LOW && last_button_state == HIGH) {
unsigned long current_time = millis();
// Cek apakah sudah cukup waktu sejak terakhir kali tombol ditekan (debounce)
if (current_time - last_debounce_time > DEBOUNCE_DELAY) {
counter++; // Menambah nilai counter
Serial.print("Counter: ");
Serial.println(counter);
Serial.println();
last_debounce_time = current_time; // Update waktu terakhir tombol ditekan
Blynk.virtualWrite(V4, counter);
}
}
// Menyimpan status tombol saat ini sebagai status terakhir
last_button_state = button_state;
}Tegangan
Arus
Counter