🛠 Pilotage GPIO et LED RGB sur l'Encoder Motor Driver Unit

Unité de pilotage moteur à encodeur M5Stack (DRV8837DSGR) · intermediaire · Apprenez à utiliser les extensions GPIO de l'unité pour piloter des périphériques externes tout en gérant le moteur.

Objectifs

Ce tutoriel vise à exploiter les capacités d'entrée/sortie de l'Encoder Motor Driver Unit (EMDU) au-delà du simple contrôle moteur. Nous allons configurer les broches GPIO disponibles pour interagir avec des capteurs ou actionneurs simples, tout en synchronisant l'état du moteur avec la LED RGB intégrée (WS2812C). L'objectif est de créer un système où la couleur de la LED reflète l'état du moteur (rouge pour arrêt, vert pour marche, bleu pour erreur ou détection de courant élevée), démontrant ainsi la polyvalence de l'interface I2C pour le contrôle périphérique.

Matériel nécessaire

Étapes

  1. Matériel et Connexion : Montez l'EMDU sur le bus Grove I2C de votre contrôleur M5Stack. Connectez le moteur à l'EMDU en respectant la polarité. Branchez l'alimentation externe 6-12V sur l'EMDU. Vérifiez que le moteur tourne librement.
  1. Configuration Logicielle : Installez la bibliothèque M5Stack pour Arduino. Incluez la bibliothèque spécifique à l'EMDU. Initialisez la communication I2C avec l'adresse par défaut 0x2F.
#include <M5Unified.h>
#include <M5_EncoderMotorDriver.h>

M5_EncoderMotorDriver emd;

void setup() {
  M5.begin();
  Wire.begin();
  if (!emd.begin(0x2F)) {
    Serial.println("Erreur d'initialisation EMDU");
    while(1);
  }
  emd.setMode(MODE_CLOSED_LOOP_SPEED); // Boucle fermée vitesse
}
  1. Gestion de la LED RGB : La LED WS2812C est contrôlée via des commandes I2C spécifiques. Écrivez une fonction pour changer la couleur selon l'état.
void setLedStatus(uint8_t r, uint8_t g, uint8_t b) {
  emd.setRgbLed(r, g, b); // Commande I2C dédiée
}
  1. Logique de Contrôle : Dans la boucle loop(), lisez la vitesse mesurée par l'encodeur. Si la vitesse est nulle, allumez la LED en rouge. Si la vitesse est stable, allumez-la en vert. Simulez une détection de courant élevée (via la lecture du registre INA199A si exposé) pour allumer la LED en bleu.
void loop() {
  int speed = emd.getSpeed();
  if (speed == 0) {
    setLedStatus(255, 0, 0); // Rouge
    emd.stopMotor();
  } else {
    setLedStatus(0, 255, 0); // Vert
    emd.setSpeed(100); // Vitesse cible
  }
  delay(100);
}
  1. Test des Entrées (Optionnel) : Si l'unité expose des GPIO via des registres I2C pour des entrées numériques (ex: limiteur de fin de course), configurez le registre de direction GPIO. Lisez l'état via emd.readGpioState() et modifiez la couleur de la LED en conséquence (ex: bleu si bouton pressé).

Vérification

Ouvrez le moniteur série. Vérifiez que la LED s'allume correctement selon les changements d'état du moteur. Débranchez le moteur pour simuler une erreur ou un arrêt, observez le changement de couleur. Assurez-vous qu'aucune erreur I2C n'apparaît dans la console.

Pour aller plus loin

Explorez l'utilisation des interruptions matérielles si disponibles pour réagir instantanément aux changements d'état des GPIO sans polling. Intégrez un capteur de température externe connecté via un module Grove I2C distinct et corréléz la température avec la vitesse du moteur pour une gestion thermique avancée.

Autres tutoriels pour cette carte

Exemples de code pour cette carte

← Retour à la fiche 🛠 Tous les tutoriels