Hola a todos, estoy intentando hacer un rearmador del interruptor de control de potencia de mi contador inteligente, es decir, que cuando la luz salta por consumo no tenga yo que ir al cuadro de luces a bajar y volver a subir el interruptor geneneral.
Hasta ahora lo había conseguido utilizando un power bank, una placa de dos relés, un contactor y un arduino nano.
/*
Para rearmar el ICP de un contador inteligente es necesario abrir y cerrar
el circuito de carga del ICP durante un tiempo mayor a 2 segundos y que no
debe ser siempre el mismo ya que el contador detectaría que se trata de un
automatismo.
Para esto utilizaremos un Contactor 1NO 1NC el contacto normalmente abierto
servirá para abrir el circuito y el normalmente cerrado para alimentar el
arduino.
Utilizaremos un relé para cerrar el circuito del ICP sobre la bobina del
contactor y de esta forma una vez se restablezca la corriente el contactor
vuelva a cerrar, y otro relé para mantener el arduino alimentado durante
los tiempos de conmutación.
*/
int Tiempo;
int Contador;
int const Relecontactor=12;
int const Relevin=11;
int const VContactor=10;
int Alimentacion;
// the setup function runs once when you press reset or power the board
void setup() {
// initialize digital pin LED_BUILTIN as an output.
pinMode(LED_BUILTIN, OUTPUT);
pinMode(Relecontactor, OUTPUT);
pinMode(Relevin, OUTPUT);
pinMode(VContactor, INPUT);
Tiempo=3000;
Contador=0;
digitalWrite(Relevin, LOW); //turn on the rele wich keeps the arduino on we main VIN is off
digitalWrite(LED_BUILTIN, HIGH); // turn the LED off
digitalWrite(Relecontactor, HIGH); // turn off the rele
Tiempo=random(2500,9000);
delay(Tiempo); //Es posible que sea mejor empezar el proceso con el relé
// cerrado, en ese caso sería mejor eliminar estas 5 lineas
}
// the loop function runs over and over again forever
void loop() {
if (Contador<3){
digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level)
digitalWrite(Relecontactor, LOW); // turn on the rele (it needs a 0 voltage for activation)
Tiempo=random(2500,9000);
delay(Tiempo); // wait for random time
digitalWrite(LED_BUILTIN, LOW); // turn the LED off
digitalWrite(Relecontactor, HIGH); // turn off the rele
Tiempo=random(2500,9000);
delay(Tiempo); // wait for random time
}
else {
digitalWrite(LED_BUILTIN, HIGH);
delay(200);
digitalWrite(LED_BUILTIN, LOW);
delay(200);
}
Alimentacion=digitalRead(VContactor);
if (Alimentacion == 1){
digitalWrite(Relevin, LOW);
}
else{
digitalWrite(Relevin, HIGH);
}
Contador++;
delay(15);
}
Ese es el código con el que lo tenia funcionando, pero he descubierto que si salta varias veces en un período corto de tiempo es necesarío rearmar directamente en el boton del contador inteligente.
Es por esto que quiero añadir un servo a todo el conjunto para que tras tres intentos fallidos de rearme, sea el servo el que pulse el boton del contador.
El problema es que en el momento que añado el comando attach para controlar el servo el resto del código deja de funcionar correctamente.
¿alguien tiene alguna idea o le ha pasado algo similar?