Last Updated on 30. September 2023 by sfambach
Die Motorplatine ist perfekt für kleine Roboter-Projekte geeignet, bei denen 2 bis 4 Antriebsmotoren verwendet werden.
Zusätzlich bietet sie Anschlüsse für zwei Servos, Die analogen Ports sind durchgeschleift.
Fakten
Hier die wichtigsten Daten im Überblick:
- 2 Servoanschlüsse
- 2 Motorbrücken
- 1 Schieberegistert
- 1 Resetschalter
- 1 Externer Spannungsanschluss
- 1 Power LED
- Jumper – zur Unterbrechung der Boardspannung
Beschreibung | Wert |
---|---|
Logik-Spannung [V] | 5 |
Ausgangspannung Motor [V] | 4,5 -25 |
Max Ausgangsstrom pro Motor / spitze [mA] | 600 |
Stromspitzen von bis zu [mA] | 1200 |
Servospannung [V] | 5 |
Jumper Trennung Versogungspannung und Boardspannung | 1 |
Versorgungsspannung für Motor [V] | 4,5 -25 |
Nachtrag 30.09.2023: Neuere Platinen scheinen bis 36V Ausgansspannung zu funktionieren
Beschaltung
Motorbrücken
Mit Hilfe der Motorbrücken können 4 Gleichstrommotoren oder 2 Schrittmotoren (mit 4 Leitungen) betrieben werden. Die L293D Motorbrücken können Motoren bis zu einem Strom vom 600mA versorgen. (Kurzzeitig bis zu 1,2 A). Wird ein höherer Strom benötigt können weitere L293D IC’s huckepack auf die vorhandenen aufgelötet und parallel betrieben werden.
Das Schieberegister, ermöglicht es mit nur 3 Pins des Arduinos die Drehrichtungen der Motoren zu bestimmen.
(evtl. mal einen Beitrag zum Scheiberegister einfügen…).
Für die Ansteuerung der Motoren gibt es unteranderem eine Bibliothek von Adarfruit. Diese kann über Git oder die Arduino GUI herunter geladen werden (siehe unten).
https://github.com/adafruit/Adafruit-Motor-Shield-library/zipball/master
Die Motorbrücken belegen die folgenden Pins am Arduino:
- Pin 11 Motor 1 – Geschwindigkeit
- Pin 3 Motor 2 – Geschwindigkeit
- Pin 5 Motor 3 – Geschwindigkeit
- Pin 6 Motor 4 – Geschwindigkeit
- Pin 4, 7, 8, 12 Richtungsvorgabe für alle Motoren über 74HC595 Register.
Servoanschlüsse
Das Bord verfügt über zwei Steckplätze für Standardservos. Jeder Steckplatz hat drei Pins jeweils einen für Strom, Masse und den Steuereingang.
Die Steuereingänge belegen die folgenden Pins am Arduino:
- Pin 9 – Servo 1
- Pin 10 – Servo 2
Externe Spannungsversorgung
Hier können von 4.5V bis zu 25V an Schraubklemmen angelegt werden. Bitte auf die Polung achten sonst rauchts …
Ansichten
Einsatz
- Zwei-Achs-Plotter
- 2 oder 4 Rad-Roboter
- Pan/Tilt Stativ
Programmierung
Biblitheken
Ich habe mir die Bibliothek über GitHub herunter geladen und sie manuell installiert. Über die Arduino GUI geht es etwas einfacher.
Bibliotheksmanger aufrufen:
Nach „motor“ suchen und die „Adafruit Motor Shield Library“ in der letzten Version installieren. Aufgepasst es gibt eine „Adafruit Motor Shield V2“ diese kann leider nicht für die V1 Platine verwendet werden. (Motorplatine V2).
Code
Servos ansteuern
Im Grunde werden die Servos ganz normal über die Arduino Bibliothek angesprochen. Wichtig für die Motorplatine ist nur, dass hier die Servos an Port 9 und 10 angeschlossen sind.
Meine Billigservos, harkeln einwenig an den Endpunkten, diese könnte man noch ausschliessen indem man die Konstanten min und max anpasst.
Über den Faktor kann die Schrittgröße bestimmt werden und über wait die wartezeit zwischen den einzelnen Schritten.
#include <Servo.h> // inlcude library for servos
// init servos
#define SERVO_PIN_1 9
#define SERVO_PIN_2 10
Servo servo1;
Servo servo2;
void setup() {
// initialize serial port
Serial.begin(9600);
// leonardo workaround waiting for serial port to be ok
while(!Serial)delay(1);
// init servos
Serial.print("Init Servos .");
servo1.attach(SERVO_PIN_1); Serial.print(".");
servo2.attach(SERVO_PIN_2); Serial.println(".");
}
const int min = 0, max = 255;
int cur = 0, factor = 1, wait = 10;
void loop() {
// put your main code here, to run repeatedly:
if(cur <= min){ // change to positive direction
cur = 0; factor *= -1;
Serial.println("Start positive direction");
}else if( cur >= 255){ // change to negative direction
cur = 255; factor *= -1;
Serial.println("Start negative direction");
}
Serial.print(".");
servo1.write(cur);
servo2.write(cur);
cur += factor;
delay(wait);
}
Motoren Ansteuern
Für einen ersten Test habe ich das vorhandene Beispielprogramm verwendet.
Einfach auswählen, kopilieren und schon läuft Motor 1.
Um alle 4 Motoren zu testen, was nützlich erscheint um die Drehrichtungen (Polung) zu überprüfen, habe ich die Datei wie folgt angepasst.
Die Ausgabe sollte dann wie folgt aussehen.
Schrittmotor ansteuern
Grundlagen zum Schrittmotor gibts hier.
Für die ersten Tests gibts ein Beispielprogramm.
Sonstiges
Kompatibilität
Der Shield kann mit folgenden Boards verwendet werden.
Arduino Uno
Arduino Leonardo
Uno + WiFi
Bedingt kompatibel, es wird eine externe Spannungquelle benötigt um mehr als einen Servo zu betreiben.
Arduino Mega + WiFi
Fazit
Die Platine kann 4 Motoren und zwei Servos ansteuern was für die meisten RC oder Roboter Projekte ausreichen dürfte. Leider belegt sie hierfür bei voller auslastung schon 10 IOs. Wer mehr IOs benötigt könnte mit der Version 2 der Platine besser bedient sein, diese ist aber aktuell recht teuer.
Verwandte Beiträge
- Preview – Arduino Motor Shield mit L298P
- Arduino Ethernet Platine W5100
- Arduino VS1053 MP3 Audio Shield mit TF Karte
- Daten Logger Shield V 1.0
- NEO-6M GPS Logger Shield V1.0
- Arduino Sensor Platine V5.0 (Sensor Shield)
- FunduMoto L298P High Power Motorbrücken
- Arduino Schraubkontakt Platine (Screw Shield 1.0)
- Arduino Multifunktions- Sensorplatine
- Arduino Multifunktions Zusatzplatine
Quellen
https://playground.arduino.cc/Main/AdafruitMotorShield
https://learn.adafruit.com/adafruit-motor-shield/library-install