Módulo 2

Uso del watchdog timer

Conceptos Fundamentales de Programación

ESP32 Mecatrónica IoT UNAM

Introducción Teórica

El Watchdog Timer (WDT) es un temporizador de hardware incorporado en el microcontrolador ESP32 que reinicia automáticamente el sistema si el programa se bloquea o se cuelga. Se utiliza para manejar excepciones y errores en el software, asegurándose de que el sistema siga funcionando incluso si ocurre un bloqueo.

En mecatrónica e IoT, el WDT es esencial para mantener la integridad del sistema y evitar daños potenciales a los componentes. Por ejemplo, si un sistema de control de un robot se bloquea durante un movimiento, podría causar un accidente. Un WDT puede reiniciar el sistema y evitar que esto ocurra.

En la industria, el WDT se utiliza en una variedad de aplicaciones como sistemas de control de procesos, sistemas de seguridad, dispositivos médicos y más. En México, se utiliza en la industria automotriz, de manufactura y electrónica, entre otras.

Explicación Técnica Detallada

El ESP32 tiene dos WDTs: el Software Watchdog Timer y el Hardware Watchdog Timer. El WDT de software se puede configurar en el software, mientras que el WDT de hardware está incorporado en el hardware.

El WDT de hardware se activa por defecto y tiene un tiempo de espera de 13 segundos. Si su código entra en un bucle infinito y no llama a la función delay() o yield(), el WDT reiniciará el ESP32.

Para utilizar el WDT en el ESP32 con Arduino IDE, puede usar la biblioteca esp_task_wdt. Aquí hay un ejemplo de cómo configurar el WDT:

C++
#include "esp_task_wdt.h"

void setup() {
  Serial.begin(115200);
  esp_task_wdt_init(5, true); // configure WDT, 5 seconds timeout
}

void loop() {
  esp_task_wdt_reset(); // reset WDT
  delay(1);
}

En este ejemplo, inicializamos el WDT con un tiempo de espera de 5 segundos. En el bucle principal, reseteamos el WDT cada vez que entra en el loop. Si el loop se bloquea y no puede resetear el WDT, el sistema se reiniciará después de 5 segundos.

Ejercicios Prácticos Visuales

1

Uso básico del WDT

Básico 45 min

Objetivo: Configurar y usar el WDT en el ESP32.

Materiales: ESP32, Arduino IDE.

Resultados esperados: El sistema se reiniciará si no se resetea el WDT en 5 segundos.

C++ - Código de ejemplo
#include "esp_task_wdt.h"

void setup() {
  Serial.begin(115200);
  esp_task_wdt_init(5, true); // configure WDT, 5 seconds timeout
}

void loop() {
  esp_task_wdt_reset(); // reset WDT
  delay(1);
}

Proyecto Aplicado

Sistema de control de robot con WDT

Aplicación práctica en mecatrónica: Sistema de control de un robot con WDT para garantizar operación continua y segura.

Integración con sensores/actuadores: El sistema controla los motores del robot y utiliza sensores de proximidad.

Lista de materiales:
  • ESP32
  • Motores
  • Sensores de proximidad
  • Baterías
  • Arduino IDE
Procedimiento paso a paso:
  1. Configurar el WDT con tiempo apropiado
  2. Escribir el código para controlar los motores
  3. Implementar lectura de sensores
  4. Verificar el funcionamiento del WDT

Evaluación y Troubleshooting

Problemas comunes:
  • El sistema se reinicia continuamente
  • El WDT no reinicia el sistema
  • Tiempo de espera inadecuado
  • WDT no habilitado correctamente
Soluciones:
  • Verificar que se resetea el WDT correctamente
  • Ajustar el tiempo de espera apropiado
  • Verificar la habilitación del WDT
  • Revisar el código en bucles críticos
Criterios de evaluación:
  • Funcionamiento correcto del WDT
  • Reinicio del sistema en caso de bloqueo
  • Lectura correcta de los sensores
  • Control correcto de los motores