Motoren 1×1

Kontakt: MediaDock
Hier erhältst du eine Übersicht, der gängigsten Motoren, die du mit deinem Arduino UNO ansteuern kannst.
DC-Motoren
DC-Motoren werden dadurch bewegt, dass ein Gleichstrom (DC) in sie eingespeist wird. Sie können daher auch ohne Arduino-Board, nur mit einer externen Stromquelle gesteuert werden. Durch die Höhe der verwendeten Stromspannung kann die die Geschwindigkeit des Motors verändert werden. Bei einer Umkehrung der Stromflussrichtung passt sich die Drehrichtung an.
Vorteile
- Günstig
- Schnell
- Simple Bedienung
Beispiel
Set-up
Für das nachfolgende Beispiel nutzen wir einen 3V-6V DC-Motor mit einem DFRobot Quad Motor-Shield (beide in der Arduino Kit Motor Extension enthalten).
Um den DC-Motor zu nutzen, steckst du zuerst das Driver-Shield auf deinen Arduino UNO. Den Motor schliesst du über seine Wires an die M1 Schraubterminals an. Als letztes muss das Shield über eine externe Stromquelle gespiesen werden. Dafür kannst du ein Netzteil mit entsprechender Spannung (bei diesem Shield sind das 2.5V-13.5V) nehmen, die Enden abisolieren und über die Power-Klemmanschlüsse mit dem Shield verbinden. Achte dabei auf die richtige Polarität – sonst wird sich dein Motor in die falsche Richtung drehen.
Am Ende sollte das ganze so aussehen:
Bevor du den Motor nutzt, beachte Folgendes:
- Verbinde keine DC-Motoren direkt mit deinem Arduino-Board.
- Stecke das Netzteil, das mit dem Shield verbunden ist, aus, bevor du etwas am Set-up änderst.
Code
Jetzt bist du bereit, dein Arduino-Broad mit deinem Laptop zu verbinden und es mit dem untenstehenden Beispiel-Code zu flashen. Dieses Programm wechselt kontinuierlich zwischen einer sekundenlangen Rotation im urzeigersinn gefolgt von einer sekundenlangen Rotation im Gegenuhrzeigersinn.
// Loop einer sekundenlangen Rotation im urzeigersinn, gefolgt von einer sekundenlangen Rotation im Gegenuhrzeigersinn.
// Pins definieren
const int sp1pin = 3; // Pin für Geschwindigkeit Achse M1
const int dir1pin = 4; // Pin für Drehrichtung Achse M1
// Variablen definieren
int sp = 100; // Variable für Geschwindigkeit des Motors (0-255)
// Code, der nur einmal ausgeführt wird
void setup() {
// Die Achsen-Pins als Outputs festlegen
pinMode(sp1pin, OUTPUT);
pinMode(dir1pin, OUTPUT);
}
// Code, der im Loop ausgeführt wird
void loop() {
// Eine Sekunde lang im Uhrzeigersinn drehen
digitalWrite(dir1pin, HIGH); // Drehrichtung bestimmen. HIGH = Uhrzeigersinn / LOW = Gegenuhrzeigersinn
analogWrite(sp1pin, sp); // Geschwindigkeit bestimmen
delay(1000);
// Eine Sekunde lang gegen den Uhrzeigersinn drehen
digitalWrite(dir1pin, LOW); // Drehrichtung bestimmen: HIGH = Uhrzeigersinn / LOW = Gegenuhrzeigersinn
analogWrite(sp1pin, sp); // Geschwindigkeit bestimmen
delay(1000);
}
Servo-Motoren
Servo-Motoren bewegen sich innerhalb eines bestimmten Winkelbereichs. Sie werden durch ein Signal angesteuert, welches ihnen vorgibt, zu welcher Position innerhalb dieser Reichweite sie sich bewegen sollen. Dadurch können präzise, gleichbleibende Punkte abgefahren werden.
Vorteile
- Präzise
- Schnell
- Absolute Positionierung möglich
Beispiel
Set-up
Für das nachfolgende Beispiel nutzen wir einen 4.8V-6V Micro-Servo (in der Arduino Kit Motor Extension enthalten).
Um den Servo anzusteuern, kannst du ihn direkt mit dem Arduino-Board verbinden. Führe dazu die Stromversorgung des Motors zum 5V-Output des Arduinos. Die Erdung des Servos schliesst du an einem der GND-Eingänge an. Die übrige Wire ist das Steuersignal, die du in die Buchse ~9 steckst.
Am Ende sollte das ganze so aussehen:
Bevor du den Motor nutzt, beachte Folgendes:
- Falls du einen Servo nutzt, der mehr Spannung benötigt, arbeite stattdessen mit einer externen Stromquelle. Eine Anleitung dazu findest du hier.
Code
Jetzt bist du bereit, dein Arduino-Broad mit deinem Laptop zu verbinden und es mit dem untenstehenden Beispiel-Code zu flashen. Dieses Programm wird den Motor im Loop durch seinen vollständigen Winkelbereich (0-180 Grad) und wieder zurück in die Ausgangsposition (180-0 Grad) bewegen. Dieser Sketch nutzt zusätzlich die Arduino Servo Library. Falls du diese noch nicht installiert hast, kannst du das unter Sketch > Include Library > Manage Library tun.
<img class="alignnone size-medium wp-image-9363" src="https://sites.hslu.ch/werkstatt/wp-content/uploads/sites/13/2025/03/Screenshot-2025-03-26-at-13.06.19-1000x561.png" alt="" width="1000" height="561" />// Loop einer vollständige Bewegung (0-180 Grad) gefolgt von einer Bewegung zurück in die Ausgangsposition (180-0 Grad).
#include <Servo.h> // Servo-Library hinzufügen
Servo ser1; // Ein Servo-Objekt erstellen
// Pins definieren
const int ser1pin = 9;
// Variablen definieren
int pos = 0; // Variable für die Position des Motors festlegen
// Code, der nur einmal ausgeführt wird
void setup() {
ser1.attach(ser1pin); // Den Motor an den entsprechenden Pin knüpfen
}
// Code, der im Loop ausgeführt wird
void loop() {
// Sartet von der 0-Grad-Position und bewegt sich bis zur 180-Grad-Position
for (pos = 0; pos <= 180; pos += 1) {
ser1.write(pos); // Stellt den Servo auf seine neue Position "pos" ein.
delay(15);
}
// Sartet von der 180-Grad-Position und bewegt sich bis zur 0-Grad-Position
for (pos = 180; pos >= 0; pos -= 1) {
ser1.write(pos); // Stellt den Servo auf seine neue Position "pos" ein.
delay(15);
}
Stepper-Motoren
Stepper-Motoren bewegen sich in gleichmässigen, kontrollierbaren «Schritten». So kann genau gesteuert werden, um wie viel Grad sie sich jeweils vor- oder zurückbewegen sollen. Anders als bei Servos kann dabei auf ganze, durchgehende Rotationen zurückgegriffen werden. Dadurch ist aber keine Ansteuerung einer absoluten Position ohne Hilfsmittel möglich.
Vorteile
- Präzise
- Günstig
- Kraftvoll
Beispiel
Set-up
Für das nachfolgende Beispiel nutzen wir einen 12V NEMA Stepper-Motor mit einem CNC-Shield und einem A4988 Motor-Driver (alle drei in der Arduino Kit Motor Extension enthalten).
Stecke als erstes das CNC-Shield auf deinen Arduino UNO. Danach platzierst du einen Driver auf einem der vier Motorverbindungen auf dem Board. In unserem Bespiel nehmen wir den mit X angeschriebenen Anschluss. Achte dabei darauf, dass du den Treiber richtigherum anbringst: Der Enable-Pin am A4988 muss in die Enable-Buchse am Shield (beide mit EN angeschrieben). Im Anschluss wird der Stepper-Motor an die 4 übrigbleibenden Pins seitlich des Drivers angeschlossen. Als letztes nimmst du ein Netzteil mit passender Spannung (bei diesem Shield sind das 12V-36V), isolierst die Enden ab und verbindest sie mit den Power-Klemmanschlüsse auf dem Shield. Achte dabei auf die richtige Polarität – sonst kann dein Board beschädigt werden.
Am Ende sollte das ganze so aussehen:
Bevor du den Motor nutzt, beachte Folgendes:
- Stecke das Netzteil, das mit dem Shield verbunden ist, aus, bevor du etwas am Set-up änderst.
- Stecke keine Driver and die Achsen, an die du nicht ebenfalls einen Motor anschliesst.
Code
Jetzt bist du bereit, dein Arduino-Broad mit deinem Laptop zu verbinden und es mit dem untenstehenden Beispiel-Code zu flashen. Dieses Programm loopt durch eine komplette Rotation im urzeigersinn gefolgt von einer Rotation im Gegenuhrzeigersinn.
// Loop einer kompletten Rotation im urzeigersinn gefolgt von einer Rotation im Gegenuhrzeigersinn.
// Pins definieren
const int stepXpin = 2; // Pin für Step-Aktivierung Achse X
const int dirXpin = 5; // Pin für Drehrichtung Achse X
const int enPin=8; // Enable-Pin
// Variablen definieren
const int stepsRev = 360/1.8; // Anzahl Steps pro Umdrehung (200)
long unsigned sp; // Variable für Geschwindigkeit des Motors in Form von Mikrosekunden zwischen den Steps
// Code, der nur einmal ausgeführt wird
void setup() {
// Enable-Pin als Output festlegen
pinMode(enPin, OUTPUT);
digitalWrite(enPin, LOW);
// Die Achsen-Pins als Outputs festlegen
pinMode(stepXpin, OUTPUT);
pinMode(dirXpin, OUTPUT);
}
// Code, der im Loop ausgeführt wird
void loop() {
// Eine Rotation im Uhrzeigersinn
digitalWrite(dirXpin, HIGH); // Drehrichtungen bestimmen. HIGH = Uhrzeigersinn, LOW = Gegenuhrzeigersinn
for (int i; i=0; i<stepsRev) {
digitalWrite(stepXpin, HIGH);
delay(sp);
digitalWrite(stepXpin, LOW);
delay(sp);
}
// Eine Rotation im Gegenuhrzeigersinn
digitalWrite(dirXpin, LOW); // Drehrichtungen bestimmen. HIGH = Uhrzeigersinn, LOW = Gegenuhrzeigersinn
for (int i =0; i<stepsRev; i++) {
digitalWrite(stepXpin, HIGH);
delay(sp);
digitalWrite(stepXpin, LOW);
delay(sp);
}
}