🛠 Découverte des entrées-sorties : LED RGB et lecture d'encodeurs
Objectifs
Ce tutoriel vise à comprendre comment le module 4-Encoder Motor Driver communique avec un microcontrôleur hôte via le bus I2C. Nous allons explorer deux aspects fondamentaux des entrées-sorties : la sortie (contrôle de la LED RGB WS2812C intégrée pour le feedback visuel) et l'entrée (lecture des impulsions des encodeurs pour le retour de position). Ce module est idéal pour les débutants car il centralise la complexité du pilotage moteur, permettant de se concentrer sur la logique de communication.
Matériel nécessaire
- Une carte M5Stack (Core2, StickC+ ou similaire) avec bibliothèque M5Stack installée.
- Le module Unit 4-Encoder Motor Driver (DRV8837DSGR).
- Câbles Grove HY2.0-4P.
- Un moteur à engrenages avec encodeur (connecté au port moteur 1).
- Ordinateur avec Arduino IDE.
Étapes
- Connexion physique : Connectez le module à la carte M5Stack via un câble Grove. Assurez-vous que le connecteur correspond aux broches I2C (SDA/SCL). Alimentez le module soit via le port Grove (5V), soit via l'entrée DC externe si vos moteurs nécessitent plus de puissance (6-12V).
- Configuration du code : Incluez les bibliothèques nécessaires. Le module utilise l'adresse I2C par défaut 0x24.
#include <Wire.h>
#include "M5StackUnit4EncoderMotorDriver.h"
M5StackUnit4EncoderMotorDriver motorDriver;
void setup() {
M5.begin();
Wire.begin();
// Initialisation du module
motorDriver.init();
// Réglage de la LED RGB en rouge pour indiquer le démarrage
motorDriver.setRgbColor(255, 0, 0);
}
- Lecture des encodeurs : Dans la boucle principale, lisez la position actuelle du moteur connecté au canal 1. Les encodeurs fournissent des impulsions que le module convertit en position numérique.
void loop() {
// Lecture de la position du moteur 1
int32_t position = motorDriver.getEncoderPosition(1);
// Affichage sur le terminal série
Serial.printf("Position Moteur 1: %ld\n", position);
// Changer la couleur de la LED selon la position (exemple simple)
if (position > 100) {
motorDriver.setRgbColor(0, 255, 0); // Vert
} else {
motorDriver.setRgbColor(0, 0, 255); // Bleu
}
delay(100);
}
- Téléversement : Compilez et téléversez le code sur votre carte M5Stack. Ouvrez le moniteur série à 115200 bauds.
Vérification
Observez la LED RGB sur le module. Elle doit s'allumer en rouge au démarrage, puis changer de couleur (vert ou bleu) en fonction de la position de l'encodeur. Si vous faites tourner manuellement l'axe du moteur, les valeurs affichées dans le moniteur série doivent changer. Si la LED ne s'allume pas, vérifiez l'alimentation et l'adresse I2C (0x24). Si les valeurs ne changent pas, vérifiez le branchement du moteur à 6 fils (moteur + encodeur).
Pour aller plus loin
Une fois la lecture maîtrisée, explorez les modes de contrôle en boucle fermée. Le module permet de définir une vitesse cible ou une position cible, et il gère automatiquement la régulation PID. Essayez d'utiliser la fonction setTargetPosition pour déplacer le moteur vers une position précise sans avoir à gérer les calculs manuellement.
Autres tutoriels pour cette carte
- Premier branchement et mise en route du Driver Moteur 4-Encoder
- Automatiser un châssis robotique avec le Driver 4-Encoder
- Premier branchement et mise en route du 4-Encoder Motor Driver
- Pilotage GPIO et LED RGB sur le Driver Moteur 4-Encodeurs
- Automatisation et Boucle Fermée avec le Driver 4-Encoder
- Premier branchement et initialisation du module 4-Encoder Motor Driver
Exemples de code pour cette carte
i2c-motor-spin.inoarduinoclosed-loop-speed-control.inoarduinorelative-position-move.inoarduinorgb-led-status-indicator.inoarduinodifferential-drive-robot.inoarduinoi2c_basic_motor_control.pyPython