🛠 Control de GPIO y LED RGB en la Encoder Motor Driver Unit

Unidad de control de motor con encoder M5Stack (DRV8837DSGR) · intermediaire · Apprenez à utiliser les extensions GPIO de l'unité pour piloter des périphériques externes tout en gérant le moteur.

Objetivos

Este tutorial tiene como objetivo explotar las capacidades de entrada/salida de la Encoder Motor Driver Unit (EMDU) más allá del simple control del motor. Configuraremos los pines GPIO disponibles para interactuar con sensores o actuadores simples, mientras sincronizamos el estado del motor con el LED RGB integrado (WS2812C). El objetivo es crear un sistema donde el color del LED refleje el estado del motor (rojo para parada, verde para marcha, azul para error o detección de corriente alta), demostrando la versatilidad de la interfaz I2C para el control periférico.

Material Necesario

Pasos

  1. Hardware y Conexión: Monte la EMDU en el bus Grove I2C de su controlador M5Stack. Conecte el motor a la EMDU respetando la polaridad. Conecte la fuente de alimentación externa de 6-12V a la EMDU. Verifique que el motor gire libremente.
  1. Configuración de Software: Instale la biblioteca M5Stack para Arduino. Incluya la biblioteca específica de EMDU. Inicialice la comunicación I2C con la dirección predeterminada 0x2F.
#include <M5Unified.h>
#include <M5_EncoderMotorDriver.h>

M5_EncoderMotorDriver emd;

void setup() {
  M5.begin();
  Wire.begin();
  if (!emd.begin(0x2F)) {
    Serial.println("Error de inicialización EMDU");
    while(1);
  }
  emd.setMode(MODE_CLOSED_LOOP_SPEED); // Bucle cerrado de velocidad
}
  1. Gestión del LED RGB: El LED WS2812C se controla mediante comandos I2C específicos. Escriba una función para cambiar el color según el estado.
void setLedStatus(uint8_t r, uint8_t g, uint8_t b) {
  emd.setRgbLed(r, g, b); // Comando I2C dedicado
}
  1. Lógica de Control: En el loop(), lea la velocidad medida por el encoder. Si la velocidad es cero, encienda el LED en rojo. Si la velocidad es estable, enciéndalo en verde. Simule una detección de corriente alta (leyendo el registro INA199A si está expuesto) para encender el LED en azul.
void loop() {
  int speed = emd.getSpeed();
  if (speed == 0) {
    setLedStatus(255, 0, 0); // Rojo
    emd.stopMotor();
  } else {
    setLedStatus(0, 255, 0); // Verde
    emd.setSpeed(100); // Velocidad objetivo
  }
  delay(100);
}
  1. Prueba de Entradas (Opcional): Si la unidad expone GPIOs a través de registros I2C para entradas digitales (por ejemplo, finales de carrera), configure el registro de dirección GPIO. Lea el estado mediante emd.readGpioState() y cambie el color del LED en consecuencia (por ejemplo, azul si se presiona el botón).

Verificación

Abra el monitor serie. Verifique que el LED se encienda correctamente según los cambios de estado del motor. Desconecte el motor para simular un error o parada, observe el cambio de color. Asegúrese de que no aparezcan errores I2C en la consola.

Para Ir Más Lejos

Explore el uso de interrupciones de hardware si están disponibles para reaccionar instantáneamente a los cambios de estado GPIO sin sondeo. Integre un sensor de temperatura externo conectado a través de un módulo Grove I2C separado y correlacione la temperatura con la velocidad del motor para una gestión térmica avanzada.

Otros tutoriales para esta placa

Ejemplos de código para esta placa

← Volver a la ficha 🛠 Todos los tutoriales