#include "EmonLib.h" // Include EmonLib for energy monitoring
// Definición de pines
#define RESET 15
#define LED 32
#define VOLTAJE 34
#define CORRIENTE 33
#define BUZZER_ALARM 19
#define SCR_CONTROL 25 // Pin para control del SCR
// Variables configurables
float VAC_MIN = 105.5; // Voltaje mínimo permitido
float VAC_MAX = 120.5; // Voltaje máximo permitido
float AMP_MAX = 20.0; // Corriente máxima permitida
// EnergyMonitor instance
EnergyMonitor emon;
// Variables para el monitoreo
float voltage = 0.0;
float current = 0.0;
float power = 0.0;
// Constantes para calibración
const float vCalibration = 42.5; // Factor de calibración de voltaje
const float currCalibration = 1.80; // Factor de calibración de corriente
void setup() {
Serial.begin(115200);
// Configuración de pines
pinMode(LED, OUTPUT);
pinMode(BUZZER_ALARM, OUTPUT);
pinMode(SCR_CONTROL, OUTPUT);
pinMode(RESET, INPUT_PULLUP);
// Inicialización del sensor de energía
emon.voltage(VOLTAJE, vCalibration, 1.7);
emon.current(CORRIENTE, currCalibration);
// Estado inicial
digitalWrite(SCR_CONTROL, HIGH); // Inicialmente activado
digitalWrite(LED, LOW);
digitalWrite(BUZZER_ALARM, LOW);
}
void loop() {
// Medición de parámetros
emon.calcVI(20, 2000);
voltage = emon.Vrms;
current = emon.Irms;
power = emon.apparentPower;
// Monitoreo de condiciones
bool voltageInRange = (voltage >= VAC_MIN && voltage <= VAC_MAX);
bool currentInRange = (current <= AMP_MAX);
// Control de potencia
if (!voltageInRange || !currentInRange) {
digitalWrite(SCR_CONTROL, LOW); // Desactivar carga
digitalWrite(LED, HIGH); // Indicador visual
digitalWrite(BUZZER_ALARM, HIGH); // Alarma sonora
} else {
digitalWrite(SCR_CONTROL, HIGH); // Activar carga
digitalWrite(LED, LOW);
digitalWrite(BUZZER_ALARM, LOW);
}
// Mostrar datos en Serial Monitor
Serial.println("=== Medición AC ===");
Serial.printf("Voltaje: %.2f V\n", voltage);
Serial.printf("Corriente: %.2f A\n", current);
Serial.printf("Potencia: %.2f W\n", power);
Serial.printf("Estado Carga: %s\n", (digitalRead(SCR_CONTROL) ? "ACTIVA" : "DESACTIVADA"));
Serial.println("===================");
delay(500); // Espera 1 segundo entre mediciones
}