Arduino Mega - Shield moteur CC

Vous avez un Arduino Mega et vous voulez faire tourner des moteurs ? Le Motor Shield Rev3 est votre chemin le plus rapide de l'ouverture de la boîte à la rotation. Les connecteurs du Mega sont rétrocompatibles avec le brochage standard de l'Uno, donc le shield s'emboîte directement — et avec la bibliothèque DIYables_DC_Motor vous pouvez commencer à écrire du code de contrôle de moteur en quelques minutes.

Ce guide étape par étape couvre :

Le Mega apporte des E/S supplémentaires, plus de SRAM et des ports série matériels supplémentaires — pratique lorsque votre projet doit communiquer avec des capteurs ou un écran en plus du contrôleur de moteur.

Shield moteur CC Arduino Mega

Matériel requis

1×Arduino MEGA
1×Alternativement: DIYables MEGA Development Board
1×Câble USB 2.0 type A/B (pour PC USB-A)
1×Câble USB 2.0 type C/B (pour PC USB-C)
1×Motor Shield for Arduino
1×DC Motor (e.g, 5V)
1×Power source (e.g., 5V power Adapter)
1×Connecteur d'alimentation DC
1×Recommandé: Screw Terminal Block Shield for Arduino Uno/Mega
1×Recommandé: Sensors/Servo Expansion Shield for Arduino Mega
1×Recommandé: Breadboard Shield for Arduino Mega
1×Recommandé: Enclosure for Arduino Mega

Ou vous pouvez acheter les kits suivants:

1×Kit de Capteurs DIYables (18 capteurs/écrans)
Divulgation : Certains des liens fournis dans cette section sont des liens affiliés Amazon. Nous pouvons recevoir une commission pour tout achat effectué via ces liens, sans coût supplémentaire pour vous. Nous vous remercions de votre soutien.

Comprendre le Motor Shield Rev3

Le shield embarque un pilote double pont en H L298P — un seul circuit intégré capable d'alimenter deux canaux de moteur CC indépendants. Chaque canal expose quatre signaux de contrôle :

Signal Purpose
Direction Broche numérique - HAUT pour un sens de rotation, BAS pour l'autre
PWM Broche analogique (PWM) - rapport cyclique de 0 (arrêt) à 255 (maximum)
Brake Broche numérique - HAUT active le frein, BAS le désactive
Current Sensing Broche analogique - tension proportionnelle au courant du moteur

Sur le Mega, ces signaux se trouvent sur les mêmes broches physiques que sur l'Uno :

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

Toutes les autres broches du Mega restent libres pour vos autres périphériques.

Besoins en alimentation

Les moteurs CC sont gourmands — ils tirent beaucoup plus de courant que ce que l'USB peut fournir. Attachez un pack de batteries 6-12 V aux bornes à vis d'alimentation du shield. Le Mega continue à fonctionner depuis l'USB indépendamment.

Schéma de câblage

Alignez le shield avec les connecteurs du Mega et appuyez fermement jusqu'à ce que chaque broche soit bien en place. Connectez les fils du moteur CC aux bornes à vis Canal A (étiquetées sur le PCB). Ensuite, câblez votre pack de batteries aux bornes d'alimentation.

Schéma de câblage du shield moteur CC Arduino Mega

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

Installation de la bibliothèque

  1. Connectez votre Arduino Mega à l'ordinateur via un câble USB.
  2. Ouvrez l'Arduino IDE. Choisissez Arduino Mega ou Mega 2560 comme carte et sélectionnez le bon port.
  3. Allez dans le panneau Bibliothèques sur le côté gauche.
  4. Recherchez « DIYables_DC_Motor ». Trouvez l'entrée de DIYables.
  5. Appuyez sur Installer.
Bibliothèque shield moteur CC Arduino

La bibliothèque n'a aucune dépendance externe.

Squelette de code

Le minimum pour faire tourner un moteur :

#include <DIYables_DC_Motor.h> DIYables_DC_Motor motor(MOTOR_CH_A); void setup() { motor.begin(); } void loop() { motor.run(MOTOR_FORWARD, 100); delay(2000); motor.brake(); delay(1000); }

begin() configure les modes de broche et active le frein. run() choisit une direction, désactive le frein et applique PWM. brake() verrouille l'arbre et met le PWM à zéro. C'est tout le flux de contrôle.

Exemple - Canal A

Faire tourner un moteur sur le Canal A, en changeant de direction à chaque cycle.

/* * Ce code Arduino Mega a été développé par newbiely.fr * Ce code Arduino Mega 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-mega/arduino-mega-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 pour téléverser

  • Montez le shield sur le Mega et câblez le moteur au Canal A.
  • Branchez le pack de batteries et le câble USB.
  • Collez le code dans l'Arduino IDE, sélectionnez la carte et le port, et appuyez sur Téléverser.
  • Ouvrez le Moniteur Série (9600 bauds) pour voir la sortie d'état.

Le moteur devrait tourner dans un sens pendant deux secondes, s'arrêter pendant deux secondes, inverser pendant deux secondes, et répéter.

API en un coup d'œil

Method Effect Sample Call
run(dir, speed) Direction + speed in one shot; auto-releases brake motor.run(MOTOR_FORWARD, 100)
setSpeed(speed) Adjusts PWM (0-255) only motor.setSpeed(200)
setDirection(dir) Flips direction only motor.setDirection(MOTOR_BACKWARD)
brake() Full stop - brake on, PWM off motor.brake()
release() Brake off motor.release()
readCurrent() Raw ADC from the sensing pin (-1 if unavailable) motor.readCurrent()

Exemple - Canal B

La même logique, canal différent.

/* * Ce code Arduino Mega a été développé par newbiely.fr * Ce code Arduino Mega 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-mega/arduino-mega-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 pour téléverser

  • Déplacez les fils du moteur vers le Canal B.
  • Téléversez et ouvrez le Moniteur Série.

Le seul changement de code est la constante de canal.

Exemple - Fonctionnement double moteur

Contrôlez deux moteurs à la fois, en alternant entre des patterns synchronisés et opposés.

/* * Ce code Arduino Mega a été développé par newbiely.fr * Ce code Arduino Mega 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-mega/arduino-mega-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 pour téléverser

  • Connectez un moteur au Canal A et un deuxième moteur au Canal B.
  • Téléversez et regardez le Moniteur Série.

Le programme fait fonctionner les deux moteurs en avant, puis tous les deux en arrière, puis dans des directions opposées — avec une pause de freinage entre chaque phase.

Exemple - Surveillance du courant

Lisez la broche de détection de courant pendant que le moteur tourne.

/* * Ce code Arduino Mega a été développé par newbiely.fr * Ce code Arduino Mega 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-mega/arduino-mega-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 pour téléverser

  • Connectez un moteur au Canal A.
  • Téléversez, ouvrez le Moniteur Série et observez les lectures ADC se mettre à jour toutes les demi-secondes.

Détails de la détection de courant

Les broches A0 (Canal A) et A1 (Canal B) produisent une tension proportionnelle au courant du moteur. Sur le CAN 10 bits du Mega, la plage est de 0 à 1023. Multipliez par le facteur mV-par-ampère documenté du shield pour convertir en courant réel.

Exemple - Mappage de broches personnalisé

Remplacez les broches par défaut lorsque votre matériel s'écarte de la disposition standard du shield.

/* * Ce code Arduino Mega a été développé par newbiely.fr * Ce code Arduino Mega 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-mega/arduino-mega-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 pour téléverser

  • Modifiez les arguments du constructeur pour correspondre à votre câblage réel.
  • Téléversez et testez.

Problèmes courants et solutions

Symptom Likely Cause Fix
Le moteur ne bouge pas Mauvais canal sélectionné dans le code Faites correspondre MOTOR_CH_A / MOTOR_CH_B à la borne à vis utilisée
Le moteur tourne à peine Valeur PWM trop faible Essayez une vitesse plus élevée - commencez avec 100
Le moteur tourne mais pas de lecture de courant Constructeur 3 broches utilisé (pas de détection) Utilisez le constructeur de canal ou le constructeur 4 broches

※ 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 !