Arduino - Shield Moteur DC

Ce tutoriel vous explique comment contrôler un moteur DC avec Arduino et le Motor Shield Rev3. En détail, nous allons apprendre :

Arduino DC Motor Shield

À Propos du Motor Shield Rev3

L'Arduino Motor Shield Rev3 est basé sur le circuit intégré L298P double pont complet, qui vous permet de piloter deux moteurs DC (ou un moteur pas à pas) avec un contrôle total sur la direction, la vitesse et le freinage.

Le shield offre les fonctionnalités suivantes :

  • Deux canaux moteur (A et B) : Chaque canal peut piloter indépendamment un moteur DC.
  • Contrôle de direction : Faites tourner le moteur en avant ou en arrière avec une broche numérique.
  • Contrôle de vitesse PWM : Ajustez la vitesse du moteur de 0 à 255 avec une broche PWM.
  • Contrôle de frein : Activez ou relâchez le frein sur chaque canal avec une broche numérique.
  • Détection de courant : Lisez le courant consommé par chaque moteur via des broches analogiques.

Le Motor Shield Rev3 est conçu pour le facteur de forme Arduino Uno et se monte directement sur la carte Arduino — aucune breadboard ni câblage complexe nécessaire.

Correspondance des Broches

Function Channel A Channel B
Direction D12 D13
PWM (Speed) D3 D11
Brake D9 D8
Current Sensing A0 A1

Alimentation Externe

Le Motor Shield Rev3 nécessite une source d'alimentation externe pour les moteurs. Connectez votre source d'alimentation (6-12V) aux bornes à vis d'alimentation du shield. L'alimentation de la source externe alimente les moteurs, tandis que l'Arduino peut être alimenté séparément via USB ou sa propre alimentation.

Schéma de Câblage

Tout d'abord, montez l'Arduino Motor Shield Rev3 sur l'Arduino Uno en alignant soigneusement les broches.

Ensuite, connectez le moteur DC au Canal A en utilisant les bornes à vis du shield. Les canaux sont indiqués à côté des bornes à vis.

Enfin, connectez la source d'alimentation externe (par exemple, 2 batteries Li-Ion 3,7V) aux bornes à vis d'alimentation du shield.

Arduino DC Motor Shield wiring diagram

Cette image a été créée avec Fritzing. Cliquez pour agrandir l'image.

Installation de la Bibliothèque

  • Connectez la carte Arduino à votre ordinateur avec un câble USB.
  • Ouvrez l'Arduino IDE, sélectionnez la bonne carte et le bon port.
  • Accédez à l'icône Bibliothèques dans la barre de gauche de l'Arduino IDE.
  • Recherchez "DIYables_DC_Motor", puis trouvez la bibliothèque DIYables_DC_Motor par DIYables.
  • Cliquez sur le bouton Installer pour installer la dernière version de la bibliothèque.
Arduino DC Motor Shield library

Remarque : Cette bibliothèque est autonome, sans dépendances externes.

Structure de Base

Chaque sketch utilisant la bibliothèque DC Motor suit cette structure de base :

#include <DIYables_DC_Motor.h> DIYables_DC_Motor motor(MOTOR_CH_A); // Use Channel A void setup() { motor.begin(); // Initialize motor pins } void loop() { motor.run(MOTOR_FORWARD, 100); // Run forward at speed 100 delay(2000); motor.brake(); // Stop the motor delay(1000); }

motor.begin() initialise les broches de direction, PWM et frein. Ensuite, utilisez motor.run() pour définir la direction et la vitesse, et motor.brake() pour arrêter le moteur. Aucun appel à loop() sur l'objet moteur n'est nécessaire — le moteur tourne en continu jusqu'à ce que vous changiez son état.

Code Arduino - Contrôle du Moteur Canal A

Le code suivant montre comment contrôler un moteur DC sur le Canal A : alternance de direction toutes les 2 secondes avec freinage entre les deux.

/* * Ce code Arduino a été développé par newbiely.fr * Ce code Arduino est mis à disposition du public sans aucune restriction. * Pour des instructions complètes et des schémas de câblage, veuillez visiter: * https://newbiely.fr/tutorials/arduino/arduino-dc-motor-shield */ /* * DIYables_DC_Motor - ChannelA Example * * This example demonstrates how to control a DC motor connected to * Channel A of the Arduino Motor Shield Rev3. The motor alternates * direction every 2 seconds with braking in between. * * Channel A pins: D12 (Direction), D3 (PWM), D9 (Brake), A0 (Current) * * Tutorial: https://diyables.io/motor-shield * * TESTED HARDWARE: * - Arduino Uno R3 * - Arduino Uno R4 WiFi * - Arduino Uno R4 Minima * - Arduino Mega * - Arduino Due * - Arduino Giga * - DIYables STEM V3: https://diyables.io/stem-v3 * - DIYables STEM V4 IoT: https://diyables.io/stem-v4-iot * - DIYables STEM V4B IoT: https://diyables.io/stem-v4b-iot * - DIYables STEM V4B Edu: https://diyables.io/stem-v4-edu * - DIYables MEGA2560 R3: https://diyables.io/atmega2560-board * - It is expected to work with other boards */ #include <DIYables_DC_Motor.h> DIYables_DC_Motor motor(MOTOR_CH_A); bool directionState = false; void setup() { Serial.begin(9600); motor.begin(); Serial.println("Motor Shield - Channel A"); } void loop() { // Toggle direction each cycle directionState = !directionState; int direction = directionState ? MOTOR_FORWARD : MOTOR_BACKWARD; // Run motor with speed 30 (out of 255) motor.run(direction, 30); Serial.print("Running "); Serial.println(directionState ? "FORWARD" : "BACKWARD"); delay(2000); // Brake the motor motor.brake(); Serial.println("Braking"); delay(2000); }

Étapes Rapides

  • Montez le Motor Shield Rev3 sur la carte Arduino.
  • Connectez le moteur DC aux bornes à vis du Canal A.
  • Connectez la source d'alimentation externe.
  • Connectez la carte Arduino à votre ordinateur avec un câble USB.
  • Ouvrez l'Arduino IDE, sélectionnez la bonne carte et le bon port.
  • Copiez le code ci-dessus et collez-le dans l'éditeur de l'Arduino IDE.
  • Cliquez sur le bouton Téléverser dans l'Arduino IDE pour téléverser le code sur Arduino.
  • Ouvrez le Moniteur Série pour voir les messages d'état du moteur.

Le moteur tourne en avant pendant 2 secondes à la vitesse 30, freine pendant 2 secondes, puis tourne en arrière pendant 2 secondes, et recommence.

Résumé de l'API Moteur

Method Description Example
run(direction, speed) Set direction and speed, release brake motor.run(MOTOR_FORWARD, 100)
setSpeed(speed) Set PWM speed (0-255) motor.setSpeed(150)
setDirection(direction) Set direction only motor.setDirection(MOTOR_BACKWARD)
brake() Activate brake and set speed to 0 motor.brake()
release() Release brake motor.release()
readCurrent() Read raw ADC from current sensing pin motor.readCurrent()

Code Arduino - Contrôle du Moteur Canal B

Le code suivant montre comment contrôler un moteur DC sur le Canal B.

/* * Ce code Arduino a été développé par newbiely.fr * Ce code Arduino est mis à disposition du public sans aucune restriction. * Pour des instructions complètes et des schémas de câblage, veuillez visiter: * https://newbiely.fr/tutorials/arduino/arduino-dc-motor-shield */ /* * DIYables_DC_Motor - ChannelB Example * * This example demonstrates how to control a DC motor connected to * Channel B of the Arduino Motor Shield Rev3. The motor alternates * direction every 2 seconds with braking in between. * * Channel B pins: D13 (Direction), D11 (PWM), D8 (Brake), A1 (Current) * * Tutorial: https://diyables.io/motor-shield * * TESTED HARDWARE: * - Arduino Uno R3 * - Arduino Uno R4 WiFi * - Arduino Uno R4 Minima * - Arduino Mega * - Arduino Due * - Arduino Giga * - DIYables STEM V3: https://diyables.io/stem-v3 * - DIYables STEM V4 IoT: https://diyables.io/stem-v4-iot * - DIYables STEM V4B IoT: https://diyables.io/stem-v4b-iot * - DIYables STEM V4B Edu: https://diyables.io/stem-v4-edu * - DIYables MEGA2560 R3: https://diyables.io/atmega2560-board * - It is expected to work with other boards */ #include <DIYables_DC_Motor.h> DIYables_DC_Motor motor(MOTOR_CH_B); bool directionState = false; void setup() { Serial.begin(9600); motor.begin(); Serial.println("Motor Shield - Channel B"); } void loop() { // Toggle direction each cycle directionState = !directionState; int direction = directionState ? MOTOR_FORWARD : MOTOR_BACKWARD; // Run motor with speed 30 (out of 255) motor.run(direction, 30); Serial.print("Running "); Serial.println(directionState ? "FORWARD" : "BACKWARD"); delay(2000); // Brake the motor motor.brake(); Serial.println("Braking"); delay(2000); }

Étapes Rapides

  • Connectez le moteur DC aux bornes à vis du Canal B (au lieu du Canal A).
  • Copiez le code ci-dessus et collez-le dans l'éditeur de l'Arduino IDE.
  • Cliquez sur le bouton Téléverser dans l'Arduino IDE pour téléverser le code sur Arduino.
  • Ouvrez le Moniteur Série.

Le comportement est identique au Canal A — la seule différence est le canal utilisé.

Code Arduino - Les Deux Canaux

Le code suivant montre comment contrôler deux moteurs DC simultanément, un sur chaque canal.

/* * Ce code Arduino a été développé par newbiely.fr * Ce code Arduino est mis à disposition du public sans aucune restriction. * Pour des instructions complètes et des schémas de câblage, veuillez visiter: * https://newbiely.fr/tutorials/arduino/arduino-dc-motor-shield */ /* * DIYables_DC_Motor - BothChannels Example * * This example demonstrates how to control two DC motors simultaneously, * one on Channel A and one on Channel B of the Arduino Motor Shield Rev3. * * Channel A pins: D12 (Direction), D3 (PWM), D9 (Brake), A0 (Current) * Channel B pins: D13 (Direction), D11 (PWM), D8 (Brake), A1 (Current) * * Tutorial: https://diyables.io/motor-shield * * TESTED HARDWARE: * - Arduino Uno R3 * - Arduino Uno R4 WiFi * - Arduino Uno R4 Minima * - Arduino Mega * - Arduino Due * - Arduino Giga * - DIYables STEM V3: https://diyables.io/stem-v3 * - DIYables STEM V4 IoT: https://diyables.io/stem-v4-iot * - DIYables STEM V4B IoT: https://diyables.io/stem-v4b-iot * - DIYables STEM V4B Edu: https://diyables.io/stem-v4-edu * - DIYables MEGA2560 R3: https://diyables.io/atmega2560-board * - It is expected to work with other boards */ #include <DIYables_DC_Motor.h> DIYables_DC_Motor motorA(MOTOR_CH_A); DIYables_DC_Motor motorB(MOTOR_CH_B); void setup() { Serial.begin(9600); motorA.begin(); motorB.begin(); Serial.println("Motor Shield - Both Channels"); } void loop() { // Both motors forward motorA.run(MOTOR_FORWARD, 100); motorB.run(MOTOR_FORWARD, 100); Serial.println("Both FORWARD"); delay(2000); // Brake both motors motorA.brake(); motorB.brake(); Serial.println("Both BRAKING"); delay(1000); // Both motors backward motorA.run(MOTOR_BACKWARD, 100); motorB.run(MOTOR_BACKWARD, 100); Serial.println("Both BACKWARD"); delay(2000); // Brake both motors motorA.brake(); motorB.brake(); Serial.println("Both BRAKING"); delay(1000); // Motors in opposite directions motorA.run(MOTOR_FORWARD, 150); motorB.run(MOTOR_BACKWARD, 150); Serial.println("A FORWARD, B BACKWARD"); delay(2000); // Brake both motors motorA.brake(); motorB.brake(); Serial.println("Both BRAKING"); delay(1000); }

Étapes Rapides

  • Connectez un moteur DC au Canal A et un autre au Canal B.
  • Copiez le code ci-dessus et collez-le dans l'éditeur de l'Arduino IDE.
  • Cliquez sur le bouton Téléverser dans l'Arduino IDE pour téléverser le code sur Arduino.
  • Ouvrez le Moniteur Série.

Les deux moteurs tournent en avant ensemble, puis en arrière ensemble, puis dans des directions opposées — avec des pauses de freinage entre les deux.

Code Arduino - Détection de Courant

Le code suivant montre comment lire le courant consommé par un moteur DC en utilisant la broche de détection de courant intégrée.

/* * Ce code Arduino a été développé par newbiely.fr * Ce code Arduino est mis à disposition du public sans aucune restriction. * Pour des instructions complètes et des schémas de câblage, veuillez visiter: * https://newbiely.fr/tutorials/arduino/arduino-dc-motor-shield */ /* * DIYables_DC_Motor - CurrentSensing Example * * This example demonstrates how to read the current drawn by a DC motor * connected to Channel A of the Arduino Motor Shield Rev3. * * The Motor Shield Rev3 provides current sensing via analog pins: * Channel A: A0 * Channel B: A1 * * Tutorial: https://diyables.io/motor-shield * * TESTED HARDWARE: * - Arduino Uno R3 * - Arduino Uno R4 WiFi * - Arduino Uno R4 Minima * - Arduino Mega * - Arduino Due * - Arduino Giga * - DIYables STEM V3: https://diyables.io/stem-v3 * - DIYables STEM V4 IoT: https://diyables.io/stem-v4-iot * - DIYables STEM V4B IoT: https://diyables.io/stem-v4b-iot * - DIYables STEM V4B Edu: https://diyables.io/stem-v4-edu * - DIYables MEGA2560 R3: https://diyables.io/atmega2560-board * - It is expected to work with other boards */ #include <DIYables_DC_Motor.h> DIYables_DC_Motor motor(MOTOR_CH_A); void setup() { Serial.begin(9600); motor.begin(); Serial.println("Motor Shield - Current Sensing"); } void loop() { // Run motor forward motor.run(MOTOR_FORWARD, 100); // Read and print current sensing value int current = motor.readCurrent(); Serial.print("Current sensing (raw ADC): "); Serial.println(current); delay(500); }

Étapes Rapides

  • Connectez un moteur DC au Canal A.
  • Copiez le code ci-dessus et collez-le dans l'éditeur de l'Arduino IDE.
  • Cliquez sur le bouton Téléverser dans l'Arduino IDE pour téléverser le code sur Arduino.
  • Ouvrez le Moniteur Série.
  • Observez la valeur brute de détection de courant ADC se mettre à jour toutes les 500 ms.

Notes sur la Détection de Courant

Le Motor Shield Rev3 fournit une détection de courant via les broches analogiques A0 (Canal A) et A1 (Canal B). La méthode readCurrent() renvoie une valeur ADC brute. Pour convertir en courant réel (en ampères), vous devez appliquer le facteur de conversion approprié basé sur le circuit de détection de courant du shield.

Code Arduino - Broches Personnalisées

Le code suivant montre comment créer un objet moteur avec des assignations de broches personnalisées au lieu d'utiliser les constantes de canal prédéfinies.

/* * Ce code Arduino a été développé par newbiely.fr * Ce code Arduino est mis à disposition du public sans aucune restriction. * Pour des instructions complètes et des schémas de câblage, veuillez visiter: * https://newbiely.fr/tutorials/arduino/arduino-dc-motor-shield */ /* * DIYables_DC_Motor - CustomPins Example * * This example demonstrates how to create a motor object with * custom pin assignments instead of using the predefined channels. * * Tutorial: https://diyables.io/motor-shield * * TESTED HARDWARE: * - Arduino Uno R3 * - Arduino Uno R4 WiFi * - Arduino Uno R4 Minima * - Arduino Mega * - Arduino Due * - Arduino Giga * - DIYables STEM V3: https://diyables.io/stem-v3 * - DIYables STEM V4 IoT: https://diyables.io/stem-v4-iot * - DIYables STEM V4B IoT: https://diyables.io/stem-v4b-iot * - DIYables STEM V4B Edu: https://diyables.io/stem-v4-edu * - DIYables MEGA2560 R3: https://diyables.io/atmega2560-board * - It is expected to work with other boards */ #include <DIYables_DC_Motor.h> // Custom pin assignment: direction=12, pwm=3, brake=9, currentSensing=A0 DIYables_DC_Motor motor(12, 3, 9, A0); bool directionState = false; void setup() { Serial.begin(9600); motor.begin(); Serial.println("Motor Shield - Custom Pins"); } void loop() { // Toggle direction each cycle directionState = !directionState; int direction = directionState ? MOTOR_FORWARD : MOTOR_BACKWARD; // Run motor motor.run(direction, 30); Serial.print("Running "); Serial.println(directionState ? "FORWARD" : "BACKWARD"); delay(2000); // Brake the motor motor.brake(); Serial.println("Braking"); delay(2000); }

Étapes Rapides

  • Ajustez les numéros de broches dans le constructeur pour correspondre à votre câblage.
  • Copiez le code ci-dessus et collez-le dans l'éditeur de l'Arduino IDE.
  • Cliquez sur le bouton Téléverser dans l'Arduino IDE pour téléverser le code sur Arduino.

Cette approche est utile lorsque vous utilisez un pilote de moteur non standard ou une configuration de broches modifiée.

Dépannage

Si le code ne fonctionne pas, voici quelques problèmes courants que vous pouvez résoudre :

  • Le moteur ne tourne pas : Vérifiez que le moteur est correctement connecté aux bornes à vis du bon canal.
  • Mauvais canal : Assurez-vous que les définitions de broches dans votre code correspondent au canal auquel vous avez connecté le moteur (Canal A ou Canal B).
  • Pas d'alimentation : Vérifiez que la source d'alimentation externe est connectée et fonctionne. Le moteur a besoin d'une alimentation externe — USB seul n'est pas suffisant pour le fonctionnement du moteur.
  • Rotation faible ou nulle : Augmentez la valeur de vitesse dans setSpeed() ou run(). Une vitesse très basse (par exemple, inférieure à 20) peut ne pas suffire à surmonter le couple de démarrage du moteur.
  • Direction inversée : Échangez simplement les deux fils du moteur sur la borne à vis, ou changez MOTOR_FORWARD en MOTOR_BACKWARD dans votre code.

Démo Complète du Shield Moteur DC Arduino

Voici un tutoriel vidéo étape par étape démontrant tous les exemples du Shield Moteur DC :

Compatibilité des Plateformes

La bibliothèque utilise uniquement les API standard Arduino (pinMode, digitalWrite, analogWrite, analogRead) et prend en charge toutes les plateformes Arduino (architectures=*).

※ NOS MESSAGES

  • N'hésitez pas à partager le lien de ce tutoriel. Cependant, veuillez ne pas utiliser notre contenu sur d'autres sites web. Nous avons investi beaucoup d'efforts et de temps pour créer ce contenu, veuillez respecter notre travail !