Un pequeño truco que nos puede ayudar en nuestros desarrollos es el uso de watchdog o perro guardián en arduino, esto es un mecanismo de seguridad que realiza un reset del arduino en caso de bloqueo del mismo.
Este bloqueo puede ser producido por ruido eléctrico que acaba llegando a las patillas de nuestro microcontrolador, proveniente de motores o cargas inductivas en general.
El WDT lo que hace fundamentalmente es resetear el micro tras un periodo de tiempo determinado. Su funcionamiento es similar a la Interrupción por Desbordamiento de un Timer, que se produce cuando un Timer que es incrementado continuamente pasa de su valor máximo al mínimo para comenzar de nuevo a contar.
A mi personalmente no me gusta esta opción y creo que debe ser la ultima opción, pero reconozco su utilidad en ciertos casos, pero lo importante en estos casos es depurar al límite el programa antes de activar el Wachtdog. Éste puede enmascarar errores de diseño de nuestro programa que deberían contemplarse por si mismos y no recurrir al Watchdog para sacarnos de ellos.
El perro guardan puede ser activado dentro de un proyecto de domotica ExControl de forma sencilla, solo se tiene que marcar la opción de perro guardián que se encuentra en la pestaña General en la parte superior Izquierda, vea la imagen en la que se encuentra resaltada esta opción en color rojo.
No obstante esto por si solo puede no ser suficiente, si nuestro arduino es un clon es muy probable que tengamos que actualizar el bootlader para que esta función se comporte correctamente.
Si necesitamos hacer la actualización consultamos este post.
Para comprobar si el sistema funciona correctamente podemos usar este código de ejemplo, al abrir la consola serial se ejecutara una cuenta que se ira reiniciando sola cuando se dispare el perro guardián, si esta cuenta no se reinicia o se queda bloqueada es necesario que actualicemos el bootloader de nuestra placa.
//Incluimos Libreria #include <avr/wdt.h> int c=1; void setup() { wdt_disable();//Disabled durante las configuraciones, algunas configuranciones llevan mucho tiempo wifi, gsm... /************************/ //Zona de configuraciones Serial.begin(9600); Serial.println("Inicando Sistema"); /************************/ wdt_enable(WDTO_8S );//Una vez configurado el sistema iniciamos perro guardian, en este ejemplo 8sg } void loop() { Serial.print("Ciclo numero "); Serial.println(c); delay(c*1000); c+=1; wdt_reset(); }
COMO USAR EL PERRO GUARDIÁN FUERA DE ExControl.
Bueno vamos al código, el funcionamiento es muy sencillo y la cosa se reduce a algunas lineas de código.
//Incluimos Libreria #include <avr/wdt.h> int c=1; void setup() { wdt_disable();//Disabled durante las configuraciones, algunas configuranciones llevan mucho tiempo wifi, gsm... /************************/ //Zona de configuraciones Serial.begin(9600); Serial.println("Inicando Sistema"); /************************/ wdt_enable(WDTO_4S );//Una vez configurado el sistema iniciamos perro guardian, en este ejemplo 8sg } void loop() { wdt_reset();//tenemos que reiniciar para que el perro guardan no se dispare por tiempo }
Como veis es sencillisimo, ademas podemos configurar diferentes tiempos para el reset, desde 30mSg hasta 8 segundo, esto lo hacemos de la siguiente manera.
WDTO_15MS
WDTO_30MS
WDTO_60MS
WDTO_120MS
WDTO_250MS
WDTO_500MS
WDTO_1S
WDTO_2S
WDTO_4S
- WDTO_8S