Arduino - DC Motor Shield

Dieses Tutorial zeigt dir, wie du einen Gleichstrommotor mit Arduino und dem Motor Shield Rev3 steuerst. Im Einzelnen werden wir lernen:

Arduino DC Motor Shield

Erforderliche Hardware

1×Arduino Uno R3
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) Schraubklemmenblock-Shield für Arduino Uno
1×(Empfohlen) Sensors/Servo Expansion Shield for Arduino Uno
1×(Empfohlen) Breadboard-Shield für Arduino Uno
1×(Empfohlen) Gehäuse für Arduino Uno
1×(Empfohlen) Prototyping-Grundplatte & Breadboard-Kit für Arduino Uno

Oder Sie können die folgenden Kits kaufen:

1×DIYables STEM V3 Starter-Kit (Arduino enthalten)
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.

Über Motor Shield Rev3

Das Arduino Motor Shield Rev3 basiert auf dem L298P Dual-Vollbrücken-Treiber IC, mit dem du zwei Gleichstrommotoren (oder einen Schrittmotor) mit vollständiger Kontrolle über Richtung, Geschwindigkeit und Bremsung fahren kannst.

Das Shield bietet die folgenden Funktionen:

  • Zwei Motorkanäle (A und B): Jeder Kanal kann unabhängig einen Gleichstrommotor antreiben.
  • Richtungssteuerung: Stelle den Motor so ein, dass er mit einem digitalen Pin vorwärts oder rückwärts dreht.
  • PWM-Geschwindigkeitssteuerung: Passe die Motorgeschwindigkeit von 0 bis 255 mit einem PWM-Pin an.
  • Bremssteuerung: Engagiere oder gebe die Bremse auf jedem Kanal mit einem digitalen Pin frei.
  • Strommessung: Lese den von jedem Motor gezogenen Strom über analoge Pins.

Das Motor Shield Rev3 ist für den Arduino Uno Formfaktor ausgelegt und sitzt direkt auf dem Arduino-Board auf - kein Steckbrett oder komplexe Verdrahtung erforderlich.

Pin-Zuordnung

Funktion Kanal A Kanal B
Richtung D12 D13
PWM (Geschwindigkeit) D3 D11
Bremse D9 D8
Strommessung A0 A1

Externe Stromversorgung

Das Motor Shield Rev3 benötigt eine externe Stromquelle für die Motoren. Verbinde deine Stromquelle (6-12V) mit den Stromschraubenklemmen am Shield. Der Strom aus der externen Quelle treibt die Motoren an, während der Arduino separat über USB oder seine eigene Stromversorgung versorgt werden kann.

Verdrahtungsdiagramm

Montiere zunächst das Arduino Motor Shield Rev3 oben auf dem Arduino Uno und richte die Pins sorgfältig aus.

Verbinde dann den Gleichstrommotor mit Kanal A über die Schraubenklemmen am Shield. Die Kanäle sind neben den Schraubenklemmen gekennzeichnet.

Verbinde abschließend die externe Stromquelle (z.B. 2x 3,7V Li-Ionen-Batterien) mit den Stromschraubenklemmen am Shield.

Arduino DC Motor Shield Verdrahtungsdiagramm

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

Bibliotheksinstallation

  • Verbinde das Arduino-Board mit einem USB-Kabel mit deinem Computer.
  • Öffne Arduino IDE und wähle das richtige Board und den richtigen Port aus.
  • Navigiere zum Symbol Libraries in der linken Leiste der Arduino IDE.
  • Suche "DIYables_DC_Motor" und finde die DIYables_DC_Motor-Bibliothek von DIYables.
  • Klicke auf die Schaltfläche Install, um die neueste Version der Bibliothek zu installieren.
Arduino DC Motor Shield Bibliothek

Hinweis: Diese Bibliothek ist in sich geschlossen und hat keine externen Abhängigkeiten.

Grundstruktur

Jede Skizze, die die DC Motor-Bibliothek verwendet, folgt dieser grundlegenden Struktur:

#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() initialisiert die Richtungs-, PWM- und Bremspins. Verwende danach motor.run() zum Einstellen von Richtung und Geschwindigkeit und motor.brake() zum Stoppen des Motors. Kein loop()-Aufruf auf dem Motorenobjekt erforderlich - der Motor läuft kontinuierlich, bis du seinen Zustand änderst.

Arduino Code - Steuerung des Kanals A Motor

Der folgende Code zeigt, wie man einen Gleichstrommotor auf Kanal A steuert: Richtungswechsel alle 2 Sekunden mit Bremsen dazwischen.

/* * Dieser Arduino Code wurde von newbiely.de entwickelt * Dieser Arduino 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/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); }

Schnelle Schritte

  • Montiere das Motor Shield Rev3 auf dem Arduino-Board.
  • Verbinde den Gleichstrommotor mit den Schraubenklemmen des Kanals A.
  • Verbinde die externe Stromquelle.
  • Verbinde das Arduino-Board mit einem USB-Kabel mit deinem Computer.
  • Öffne Arduino IDE und wähle das richtige Board und den richtigen Port aus.
  • Kopiere den obigen Code und füge ihn in den Editor der Arduino IDE ein.
  • Klicke auf die Schaltfläche Upload in der Arduino IDE, um Code auf Arduino hochzuladen.
  • Öffne den Serial Monitor, um die Motorstatusmeldungen zu sehen.

Der Motor dreht sich 2 Sekunden lang vorwärts bei Geschwindigkeit 30, bremst 2 Sekunden lang, dreht sich dann 2 Sekunden lang rückwärts und wiederholt sich.

Zusammenfassung der Motor-API

Methode Beschreibung Beispiel
run(direction, speed) Stelle Richtung und Geschwindigkeit ein, gebe Bremse frei motor.run(MOTOR_FORWARD, 100)
setSpeed(speed) Stelle PWM-Geschwindigkeit ein (0-255) motor.setSpeed(150)
setDirection(direction) Stelle nur Richtung ein motor.setDirection(MOTOR_BACKWARD)
brake() Aktiviere Bremse und stelle Geschwindigkeit auf 0 motor.brake()
release() Gebe Bremse frei motor.release()
readCurrent() Lese Raw ADC vom Strommessung-Pin motor.readCurrent()

Arduino Code - Steuerung des Kanals B Motor

Der folgende Code zeigt, wie man einen Gleichstrommotor auf Kanal B steuert.

/* * Dieser Arduino Code wurde von newbiely.de entwickelt * Dieser Arduino 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/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); }

Schnelle Schritte

  • Verbinde den Gleichstrommotor mit den Schraubenklemmen des Kanals B (statt Kanal A).
  • Kopiere den obigen Code und füge ihn in den Editor der Arduino IDE ein.
  • Klicke auf die Schaltfläche Upload in der Arduino IDE, um Code auf Arduino hochzuladen.
  • Öffne den Serial Monitor.

Das Verhalten ist identisch mit Kanal A - der einzige Unterschied ist der verwendete Kanal.

Arduino Code - Beide Kanäle

Der folgende Code zeigt, wie man zwei Gleichstrommotoren gleichzeitig steuert, einen auf jedem Kanal.

/* * Dieser Arduino Code wurde von newbiely.de entwickelt * Dieser Arduino 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/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); }

Schnelle Schritte

  • Verbinde einen Gleichstrommotor mit Kanal A und einen anderen mit Kanal B.
  • Kopiere den obigen Code und füge ihn in den Editor der Arduino IDE ein.
  • Klicke auf die Schaltfläche Upload in der Arduino IDE, um Code auf Arduino hochzuladen.
  • Öffne den Serial Monitor.

Beide Motoren laufen zusammen vorwärts, dann zusammen rückwärts, dann in entgegengesetzten Richtungen - mit Bremsenpausen dazwischen.

Arduino Code - Strommessung

Der folgende Code zeigt, wie man den von einem Gleichstrommotor gezogenen Strom mit dem eingebauten Strommessungs-Pin ausliest.

/* * Dieser Arduino Code wurde von newbiely.de entwickelt * Dieser Arduino 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/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); }

Schnelle Schritte

  • Verbinde einen Gleichstrommotor mit Kanal A.
  • Kopiere den obigen Code und füge ihn in den Editor der Arduino IDE ein.
  • Klicke auf die Schaltfläche Upload in der Arduino IDE, um Code auf Arduino hochzuladen.
  • Öffne den Serial Monitor.
  • Beobachte den Raw-ADC-Strommesswert, der sich alle 500 ms aktualisiert.

Hinweise zur Strommessung

Das Motor Shield Rev3 bietet Strommessung über die analogen Pins A0 (Kanal A) und A1 (Kanal B). Die readCurrent()-Methode gibt einen Raw-ADC-Wert zurück. Um in tatsächlichen Strom (in Ampere) umzuwandeln, musst du den entsprechenden Umrechnungsfaktor basierend auf der Strommessung-Schaltung des Shields anwenden.

Arduino Code - Benutzerdefinierte Pins

Der folgende Code zeigt, wie man ein Motorenobjekt mit benutzerdefinierten Pin-Zuweisungen erstellt, statt die vordefinierten Kanalkonstanten zu verwenden.

/* * Dieser Arduino Code wurde von newbiely.de entwickelt * Dieser Arduino 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/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); }

Schnelle Schritte

  • Passe die Pin-Nummern im Konstruktor an deine Verdrahtung an.
  • Kopiere den obigen Code und füge ihn in den Editor der Arduino IDE ein.
  • Klicke auf die Schaltfläche Upload in der Arduino IDE, um Code auf Arduino hochzuladen.

Dieser Ansatz ist nützlich, wenn man einen nicht standardisierten Motortreiber oder eine modifizierte Pin-Konfiguration verwendet.

Fehlerbehebung

Wenn der Code nicht funktioniert, gibt es einige häufige Probleme, die du beheben kannst:

  • Motor dreht sich nicht: Überprüfe, ob der Motor ordnungsgemäß mit den Schraubenklemmen des richtigen Kanals verbunden ist.
  • Falscher Kanal: Stelle sicher, dass die Pin-Definitionen in deinem Code dem Kanal entsprechen, mit dem du den Motor verbunden hast (Kanal A oder Kanal B).
  • Keine Stromversorgung: Überprüfe, dass die externe Stromquelle angeschlossen und funktioniert. Der Motor benötigt externe Stromversorgung - USB allein reicht nicht für den Motorbetrieb.
  • Schwache oder keine Drehung: Erhöhe den Geschwindigkeitswert in setSpeed() oder run(). Eine sehr niedrige Geschwindigkeit (z.B. unter 20) reicht möglicherweise nicht aus, um das Anfahrtsmoment des Motors zu überwinden.
  • Richtung umgekehrt: Tausche einfach die beiden Motordrähte an der Schraubenklemme aus, oder ändere MOTOR_FORWARD in MOTOR_BACKWARD in deinem Code.

Arduino DC Motor Shield - Vollständige Demo

Im Folgenden findest du ein Schritt-für-Schritt-Video-Tutorial, das alle Beispiele des DC Motor Shield zeigt:

Plattformunterstützung

Die Bibliothek verwendet nur Arduino-Standard-APIs (pinMode, digitalWrite, analogWrite, analogRead) und unterstützt alle Arduino-Plattformen (architectures=*).

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