Arduino Mega - DC-Motormodul

Haben Sie einen Arduino Mega und möchten einige Motoren zum Laufen bringen? Das Motor Shield Rev3 ist der schnellste Weg vom Auspacken zur Rotation. Die Header des Mega sind rückwärtskompatibel mit dem Standard-Uno-Pinout, daher sitzt das Shield einfach auf - und mit der DIYables_DC_Motor-Bibliothek können Sie in wenigen Minuten Motorsteuerkode schreiben.

Diese Schritt-für-Schritt-Anleitung behandelt:

Das Mega bringt zusätzliche E/A, mehr SRAM und zusätzliche Hardware-Seriellports mit - praktisch, wenn Ihr Projekt Sensoren oder ein Display neben dem Motorsteuerer ansprechen muss.

Arduino Mega DC Motor Shield

Hardware erforderlich

1×Arduino MEGA
1×Alternativ: DIYables MEGA Development Board
1×USB 2.0 Kabel Typ A/B (für USB-A PC)
1×USB 2.0 Kabel Typ C/B (für USB-C PC)
1×Motor Shield for Arduino
1×DC Motor (e.g, 5V)
1×Power source (e.g., 5V power Adapter)
1×DC-Stromanschluss
1×(Empfohlen) Screw Terminal Block Shield for Arduino Uno/Mega
1×(Empfohlen) Sensors/Servo Expansion Shield for Arduino Mega
1×(Empfohlen) Breadboard Shield for Arduino Mega
1×(Empfohlen) Enclosure for Arduino Mega

Oder Sie können die folgenden Kits kaufen:

1×DIYables Sensor-Kit (18 Sensoren/Displays)
Offenlegung: Einige der in diesem Abschnitt bereitgestellten Links sind Amazon-Affiliate-Links. Wir können eine Provision für Käufe erhalten, die über diese Links getätigt werden, ohne zusätzliche Kosten für Sie. Wir schätzen Ihre Unterstützung.

Verständnis des Motor Shield Rev3

Das Shield trägt einen L298P Dual-Vollbrücken-Treiber - einen einzelnen IC, der zwei unabhängige Gleichstrom-Motorkanäle mit Strom versorgt. Jeder Kanal hat vier Steuersignale:

Signal Zweck
Direction Digitaler Pin - HIGH für einen Drehsinn, LOW für den anderen
PWM Analog (PWM) Pin - Arbeitszyklus von 0 (Stopp) bis 255 (Maximum)
Brake Digitaler Pin - HIGH aktiviert die Bremse, LOW deaktiviert sie
Current Sensing Analoger Pin - Spannung proportional zum Motorstrom

Auf dem Mega landen diese Signale auf denselben physischen Pins wie auf dem Uno:

Funktion Kanal A Kanal B
Direction D12 D13
PWM (Geschwindigkeit) D3 D11
Brake D9 D8
Current Sensing A0 A1

Alle verbleibenden Mega-Pins bleiben für Ihre anderen Peripheriegeräte frei.

Stromversorgung erforderlich

Gleichstrommotoren sind stromhungrig - sie ziehen weit mehr Strom, als USB liefern kann. Verbinden Sie ein 6-12-V-Batteriepaket mit den Stromschraubenklemmen des Shields. Das Mega funktioniert unabhängig über USB.

Schaltplan

Richten Sie das Shield an den Headers des Mega aus und drücken Sie fest, bis jeder Pin sitzt. Verbinden Sie die Gleichstrom-Motorleitungen mit den Kanal A-Schraubenklemmen (auf der Leiterplatte gekennzeichnet). Verdrahten Sie dann Ihr Batteriepaket mit den Stromklemmen.

Arduino Mega DC Motor Shield Schaltplan

Dieses Bild wurde mit Fritzing erstellt. Klicken Sie, um das Bild zu vergrößern.

Installation der Bibliothek

  1. Verbinden Sie Ihren Arduino Mega über ein USB-Kabel mit dem Computer.
  2. Öffnen Sie die Arduino IDE. Wählen Sie Arduino Mega oder Mega 2560 als Board und wählen Sie den richtigen Port.
  3. Gehen Sie zum Libraries Panel auf der linken Seite.
  4. Suchen Sie nach "DIYables_DC_Motor". Finden Sie den Eintrag von DIYables.
  5. Drücken Sie Install.
Arduino DC Motor Shield Bibliothek

Die Bibliothek hat keine externen Abhängigkeiten.

Kode-Skelett

Das Minimum, um einen Motor zum Laufen zu bringen:

#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() setzt die Pin-Modi und aktiviert die Bremse. run() wählt eine Richtung, gibt die Bremse frei und wendet PWM an. brake() sperrt die Welle und setzt PWM auf Null. Das ist der gesamte Steuerablauf.

Beispiel - Kanal A

Drehen Sie einen Motor auf Kanal A und wechseln Sie die Richtung bei jedem Zyklus.

/* * Dieser Arduino Mega Code wurde von newbiely.de entwickelt * Dieser Arduino Mega Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/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); }

Schritte zum Hochladen

  • Montieren Sie das Shield auf dem Mega und verdrahten Sie den Motor mit Kanal A.
  • Stecken Sie das Batteriepaket und das USB-Kabel ein.
  • Fügen Sie den Kode in die Arduino IDE ein, wählen Sie das Board und den Port und drücken Sie Upload.
  • Öffnen Sie den Seriellen Monitor (9600 Baud), um die Statusausgabe anzusehen.

Der Motor sollte sich zwei Sekunden in eine Richtung drehen, zwei Sekunden anhalten, zwei Sekunden in die andere Richtung drehen und dann wiederholen.

API auf einen Blick

Methode Effekt Beispielaufruf
run(dir, speed) Richtung + Geschwindigkeit auf einmal; gibt Bremse automatisch frei motor.run(MOTOR_FORWARD, 100)
setSpeed(speed) Stellt nur PWM (0-255) ein motor.setSpeed(200)
setDirection(dir) Wechselt nur die Richtung motor.setDirection(MOTOR_BACKWARD)
brake() Vollständiger Stopp - Bremse an, PWM aus motor.brake()
release() Bremse aus motor.release()
readCurrent() Rohes ADC vom Erfassungs-Pin (-1 wenn nicht verfügbar) motor.readCurrent()

Beispiel - Kanal B

Gleiche Logik, anderer Kanal.

/* * Dieser Arduino Mega Code wurde von newbiely.de entwickelt * Dieser Arduino Mega Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/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); }

Schritte zum Hochladen

  • Verschieben Sie die Motordrähte zu Kanal B.
  • Laden Sie hoch und öffnen Sie den Seriellen Monitor.

Die einzige Kodeänderung ist die Kanalkonstate.

Beispiel - Betrieb mit Dualmotoren

Steuern Sie zwei Motoren gleichzeitig und durchlaufen Sie synchronisierte und entgegengesetzte Muster.

/* * Dieser Arduino Mega Code wurde von newbiely.de entwickelt * Dieser Arduino Mega Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/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); }

Schritte zum Hochladen

  • Verbinden Sie einen Motor mit Kanal A und einen zweiten Motor mit Kanal B.
  • Laden Sie hoch und beobachten Sie den Seriellen Monitor.

Das Programm führt beide Motoren vorwärts, dann rückwärts und dann in entgegengesetzten Richtungen aus - mit einer Bremspause zwischen den einzelnen Phasen.

Beispiel - Stromüberwachung

Lesen Sie den Stromerfassungs-Pin, während der Motor läuft.

/* * Dieser Arduino Mega Code wurde von newbiely.de entwickelt * Dieser Arduino Mega Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/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); }

Schritte zum Hochladen

  • Verbinden Sie einen Motor mit Kanal A.
  • Laden Sie hoch, öffnen Sie den Seriellen Monitor und beobachten Sie die ADC-Ablesungen, die alle halbe Sekunde aktualisiert werden.

Details der Stromerfassung

Die Pins A0 (Kanal A) und A1 (Kanal B) geben eine Spannung aus, die proportional zum Motorstrom ist. Auf dem 10-Bit-ADC des Mega beträgt der Bereich 0-1023. Multiplizieren Sie mit dem dokumentierten Faktor mV-pro-Ampere des Shields, um die tatsächliche Strömung umzurechnen.

Beispiel - Benutzerdefinierte Pin-Zuordnung

Setzen Sie die Standard-Pins außer Kraft, wenn Ihre Hardware vom Standard-Shield-Layout abweicht.

/* * Dieser Arduino Mega Code wurde von newbiely.de entwickelt * Dieser Arduino Mega Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/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); }

Schritte zum Hochladen

  • Bearbeiten Sie die Konstruktor-Argumente, um Ihre tatsächliche Verdrahtung zu entsprechen.
  • Laden Sie hoch und testen Sie.

Häufige Probleme und Lösungen

Symptom Wahrscheinliche Ursache Behebung
Motor bewegt sich nicht Falscher Kanal im Kode ausgewählt Passen Sie MOTOR_CH_A / MOTOR_CH_B an die von Ihnen verwendete Schraubenklemme an
Motor dreht sich kaum PWM-Wert zu niedrig Versuchen Sie eine höhere Geschwindigkeit - fangen Sie mit 100 an
Motor läuft aber keine Stromablesung 3-Pin-Konstruktor verwendet (keine Erfassung) Verwenden Sie den Kanal-Konstruktor oder den 4-Pin-Konstruktor
Shield wird heiß Motor blockiert oder zieht zu viel Strom Reduzieren Sie die Last oder verwenden Sie einen Motor innerhalb der Bewertung von 2 A pro Kanal des Shields
Keine Reaktion überhaupt Externe Stromversorgung fehlt Überprüfen Sie doppelt die Batterieverbindungen und die Spannung

Arduino Mega DC Motor Shield - Vollständige Demo

Das folgende ist ein Schritt-für-Schritt-Video-Tutorial, das alle Beispiele des DC Motor Shield demonstriert:

Plattformunterstützung

Vollständig auf Arduino-Standard-APIs integriert - kompatibel mit jeder von Arduino unterstützten Architektur.

※ UNSERE NACHRICHTEN

  • Sie können gerne den Link zu diesem Tutorial teilen. Bitte verwenden Sie jedoch unsere Inhalte nicht auf anderen Websites. Wir haben viel Mühe und Zeit in die Erstellung der Inhalte investiert, bitte respektieren Sie unsere Arbeit!