Bauteile · 5 Min. Lesezeit

Was ist ein Schrittmotor? Präzise Drehung mit 28BYJ-48 und ULN2003 am Arduino

Wie funktioniert ein Schrittmotor? Anschluss von 28BYJ-48 und ULN2003, Schritte pro Umdrehung (2048), Bibliotheken Stepper und AccelStepper, auf einen Winkel drehen, NEMA 17 mit A4988, ESP32 und Pico.

Ein Schrittmotor teilt seine Drehung in kleine, gleich große Schritte. Bei jedem Befehl dreht er um einen festen Winkel weiter, daher weißt du ohne zusätzlichen Sensor genau, wo der Motor steht. 3D-Drucker, CNC-Maschinen, Kameraslider und automatische Vorhänge nutzen Schrittmotoren wegen dieser Präzision. Der günstigste Einstieg mit dem Arduino ist der Motor 28BYJ-48 mit der dazu verkauften Treiberplatine ULN2003.

28BYJ-48 Schrittmotor mit ULN2003-Treiberplatine
Schrittmotor 28BYJ-48 und ULN2003-Treiber: Der 5-polige Stecker des Motors passt in die Buchse der Platine; die vier LEDs zeigen, welche Spule gerade aktiv ist.

Wie funktioniert ein Schrittmotor?

Im Schrittmotor sind mehrere Spulen um einen gezahnten Magnetrotor angeordnet. Werden die Spulen in einer bestimmten Reihenfolge bestromt, zieht es den Rotor jedes Mal zur nächsten Spule und er rückt einen Schritt weiter. Läuft die Reihenfolge schnell ab, dreht der Motor schnell, läuft sie langsam ab, dreht er langsam; kehrst du sie um, dreht er andersherum. Weil der Motor jeden Schritt zählt, ist seine Position bekannt – bei Überlastung kann er aber Schritte verlieren, ohne es zu merken.

Schrittmotor, Servo oder Gleichstrommotor?

MerkmalGleichstrommotorServomotorSchrittmotor
BewegungDreht dauerhaftFährt einen Winkel an (meist 0–180°)Beliebig viele Umdrehungen, Schritt für Schritt
PositionsinformationKeineJa (eingebaute Rückmeldung)Durch Zählen der Schritte bekannt
GeschwindigkeitSehr schnellMittelNiedrig bis mittel
Drehmoment bei niedriger DrehzahlGeringMittelHoch
Typischer EinsatzRäder, Lüfter, PumpenRoboterarm, Schloss, Lenkung3D-Drucker, CNC, Slider, Uhren

Reicht es, einen Winkel anzufahren und zu halten, ist ein Servo einfacher; Details in Was ist ein Servomotor? Brauchst du schnelle, dauerhafte Drehung, passen ein Gleichstrommotor und ein L298N-Motortreiber besser. Für Aufgaben, bei denen der Motor mehrere Umdrehungen machen und trotzdem seine Position kennen muss, ist der Schrittmotor unschlagbar.

Technische Daten des 28BYJ-48

MerkmalWert
Typ4-phasiger unipolarer Schrittmotor
Betriebsspannung5 V DC
Internes GetriebeEtwa 1:64
Schritte pro Umdrehung2048 (Vollschritt), 4096 (Halbschritt)
SchrittwinkelEtwa 0,18° (Vollschritt)
StromaufnahmeEtwa 200–250 mA
HöchstdrehzahlEtwa 10–15 U/min
Adern5 (Rot ist der gemeinsame Anschluss)

Anschluss des ULN2003-Treibers

Der 5-polige Stecker des Motors passt nur in einer Richtung in die Buchse der ULN2003-Platine, falsch einstecken geht nicht. Verbinde die Pins IN1–IN4 der Platine mit den Arduino-Pins 8–11 und die Anschlüsse + und – mit einer 5-V-Versorgung. Der ULN2003 ist ein Darlington-Transistorarray, das das kleine Signal des Arduino-Pins auf den Strom verstärkt, den die Spule braucht; die vier LEDs zeigen, wie die Spulen nacheinander schalten.

ULN2003-PinArduino Uno
IN1D8
IN2D9
IN3D10
IN4D11
+ (5–12 V)Externe 5 V (für einen Motor geht auch der 5V-Pin des Uno)
– (GND)GND (gemeinsam mit dem Arduino)
Der 28BYJ-48 zieht etwa 240 mA. Ein per USB versorgter Uno schafft einen Motor; bei zwei Motoren oder weiteren Lasten nimmst du eine externe 5-V-Quelle und verbindest die Massen. Auch im Stillstand fließt Strom durch die Spulen, deshalb wird der Motor warm; wartet er länger, gib die Spulen frei, indem du alle vier Pins auf LOW setzt.

Erste Drehung mit der Stepper-Bibliothek

Die Stepper-Bibliothek ist in der Arduino IDE schon enthalten. Achten musst du nur auf die Pinreihenfolge: Für den 28BYJ-48 wird das Objekt in der Reihenfolge 8, 10, 9, 11 (IN1, IN3, IN2, IN4) angelegt. Schreibst du 8, 9, 10, 11, zittert der Motor auf der Stelle statt zu drehen – der häufigste Fehler.

Arduino (C++)
1#include <Stepper.h>
2
3const int STEPS_PER_REV = 2048;                  // 28BYJ-48 tam tur / full revolution
4Stepper motor(STEPS_PER_REV, 8, 10, 9, 11);      // sıra: IN1, IN3, IN2, IN4 / order: IN1, IN3, IN2, IN4
5
6void setup() {
7  motor.setSpeed(10);                            // devir/dakika, en fazla ~15 / RPM, max ~15
8}
9
10void loop() {
11  motor.step(STEPS_PER_REV);        // bir yönde tam tur / one full turn
12  delay(1000);
13  motor.step(-STEPS_PER_REV / 2);   // ters yönde yarım tur / half a turn back
14  delay(1000);
15}
Um einen Winkel in Schritte umzurechnen, nutze Schritte = Winkel × 2048 / 360. 90 Grad sind also 512 Schritte, 45 Grad 256 Schritte.

Positionssteuerung mit einem Potentiometer

Speicherst du die aktuelle Position des Motors in einer Variablen, kannst du ihn an jeden beliebigen Punkt fahren. Der folgende Code rechnet die Stellung des Potentiometers in 0–2048 Schritte um, und der Motor folgt dem Drehknopf an dieselbe Stelle. Eine Toleranz von 10 Schritten ignoriert kleines Zittern. Den Anschluss des Potentiometers erklärt Was ist ein Potentiometer?

Arduino (C++)
1#include <Stepper.h>
2
3Stepper motor(2048, 8, 10, 9, 11);
4int position = 0;                                    // şu anki adım / current step
5
6void setup() {
7  motor.setSpeed(12);
8}
9
10void loop() {
11  int target = map(analogRead(A0), 0, 1023, 0, 2048);  // potansiyometre → hedef / pot → target
12  if (abs(target - position) > 10) {                 // küçük titreşimleri yok say / ignore jitter
13    motor.step(target - position);
14    position = target;
15  }
16}

AccelStepper: sanftes Beschleunigen ohne Blockieren

Der Befehl step() der Stepper-Bibliothek hält dein Programm an, bis die Bewegung fertig ist; so lange kannst du weder Taster lesen noch ein Display aktualisieren. AccelStepper, das du im Bibliotheksverwalter installierst, bewegt den Motor im Hintergrund Schritt für Schritt und ergänzt Beschleunigung und Abbremsen, um ruckartige Starts zu vermeiden. Für den 28BYJ-48 nutzt man den Halbschrittmodus (HALF4WIRE), in dem eine Umdrehung 4096 Schritte hat:

Arduino (C++)
1#include <AccelStepper.h>
2
3// 28BYJ-48 + ULN2003, yarım adım: tur başına 4096 / half-step: 4096 per turn
4AccelStepper motor(AccelStepper::HALF4WIRE, 8, 10, 9, 11);
5
6void setup() {
7  motor.setMaxSpeed(1000);      // adım/saniye / steps per second
8  motor.setAcceleration(400);   // adım/saniye² / steps per second²
9  motor.moveTo(4096);           // bir tur ileri / one turn forward
10}
11
12void loop() {
13  if (motor.distanceToGo() == 0) {
14    motor.moveTo(-motor.currentPosition());   // geri dön / go back
15  }
16  motor.run();                  // her döngüde çağır, bekletmez / call every loop, non-blocking
17}

Stärkere Motoren: NEMA 17 und A4988

A4988 Schrittmotortreiber-Modul
A4988-Schrittmotortreiber: Gesteuert wird nur über die Pins STEP und DIR; das kleine Poti darauf begrenzt den Motorstrom.

Für kraftintensive Aufgaben wie 3D-Drucker und CNC-Maschinen nutzt man bipolare Schrittmotoren wie den NEMA 17. Sie machen 200 Schritte pro Umdrehung (1,8°) und sind viel stärker als der 28BYJ-48. Angesteuert werden sie mit Treibern wie dem A4988 oder DRV8825: Bei jedem STEP-Puls macht der Motor einen Schritt, der Pin DIR legt die Richtung fest. Der Treiber läuft mit 8–35 V und teilt per Mikroschritt jeden Schritt bis zu 16-fach für eine weichere Bewegung.

Arduino (C++)
1const int STEP_PIN = 3;
2const int DIR_PIN = 4;
3
4void setup() {
5  pinMode(STEP_PIN, OUTPUT);
6  pinMode(DIR_PIN, OUTPUT);
7}
8
9void loop() {
10  digitalWrite(DIR_PIN, HIGH);          // yön / direction
11  for (int i = 0; i < 200; i++) {       // NEMA 17'de 200 adım = 1 tur / 200 steps = 1 turn
12    digitalWrite(STEP_PIN, HIGH);
13    delayMicroseconds(800);             // küçüldükçe hız artar / smaller = faster
14    digitalWrite(STEP_PIN, LOW);
15    delayMicroseconds(800);
16  }
17  delay(1000);
18}
Stelle vor dem Betrieb eines A4988 mit seinem Poti die Strombegrenzung passend zu deinem Motor ein, setze einen 100-µF-Kondensator an die Motorversorgung und zieh niemals die Motorkabel ab, solange der Treiber Strom hat – das kann ihn sofort zerstören.

Schrittmotor mit ESP32 und Raspberry Pi Pico

Die Eingänge des ULN2003 arbeiten problemlos mit 3,3-V-Signalen; den Motor versorgst du trotzdem separat mit 5 V. Am ESP32 funktioniert AccelStepper unverändert; nutze Pins außerhalb von 6–11 und 34–39, zum Beispiel GPIO 19, 18, 5 und 17. Am Pico drehst du den Motor mit MicroPython, indem du die Halbschrittfolge nacheinander auf die vier Pins schreibst:

MicroPython
1from machine import Pin
2import time
3
4pins = [Pin(n, Pin.OUT) for n in (2, 3, 4, 5)]      # IN1–IN4 → GP2–GP5
5SEQ = [[1,0,0,0],[1,1,0,0],[0,1,0,0],[0,1,1,0],
6       [0,0,1,0],[0,0,1,1],[0,0,0,1],[1,0,0,1]]    # yarım adım dizisi / half-step sequence
7
8def rotate(steps, delay_ms=2):
9    direction = 1 if steps > 0 else -1
10    for i in range(abs(steps)):
11        for pin, value in zip(pins, SEQ[(i * direction) % 8]):
12            pin.value(value)
13        time.sleep_ms(delay_ms)
14    for pin in pins:
15        pin.value(0)                                   # bobinleri bırak / release coils
16
17rotate(4096)        # bir tur / one turn (half-step)
18rotate(-1024)       # çeyrek tur geri / quarter turn back

Projektideen mit Schrittmotoren

  • Analoguhr: eine Tischuhr, deren Stunden- und Minutenzeiger von Schrittmotoren gedreht werden.
  • Kameraslider: eine Schiene, die die Kamera für Zeitraffer sehr langsam bewegt.
  • Automatischer Fischfutterautomat: ein Mechanismus, der zweimal am Tag seinen Behälter dreht und Futter ausgibt.
  • Sonnennachführung: ein Panel mit zwei Lichtsensoren zur hellsten Richtung drehen; zum Licht siehe LDR-Lichtsensor.
  • Drehteller: ein Teller, der ein Objekt für Produktfotos oder 3D-Scans in gleichen Winkeln dreht.
  • Automatischer Vorhang: ein Motor, der die Vorhangschnur aufwickelt und sich seine Position merkt.

Typische Fehler und ihre Lösungen

  • Der Motor zittert, dreht aber nicht: Die Pinreihenfolge in der Stepper-Bibliothek stimmt nicht; schreib 8, 10, 9, 11 statt 8, 9, 10, 11.
  • Der Motor verliert Schritte: Zu hohe Drehzahl oder zu schwere Last; halte den 28BYJ-48 unter 15 U/min und ergänze Beschleunigung mit AccelStepper.
  • Der Arduino startet neu: Die Versorgung reicht nicht; versorge den Motor aus einer externen 5-V-Quelle und verbinde die Massen.
  • Der Motor wird im Stillstand heiß: Die Spulen bleiben bestromt; setze nach der Bewegung alle vier Pins auf LOW.
  • Die Umdrehungen stimmen nicht: Im Vollschritt sind es 2048 Schritte, im Halbschritt 4096, beim NEMA 17 dagegen 200. Verwechsle Modus und Motor nicht.
  • Mit dem A4988 dreht der Motor nicht: Die Strombegrenzung ist zu niedrig, die Motorversorgung fehlt oder RESET und SLEEP sind nicht miteinander verbunden.

Ein Schrittmotor ist der einfachste Weg zu sagen "dreh genau so weit", und er ist die Grundlage von Maschinen wie CNC-Fräsen und 3D-Druckern. In der BlueGrays-App findest du Projekte zur Nutzung des 28BYJ-48 und zum Bau eines 360-Grad-Servos aus einem Schrittmotor Schritt für Schritt mit Schaltplänen und Code.

Häufige Fragen

Wie viele Schritte macht der 28BYJ-48 pro Umdrehung?

Etwa 2048 im Vollschritt- und etwa 4096 im Halbschrittmodus. Da das interne Getriebe nicht genau 1:64 hat, kann sich bei sehr langen Bewegungen eine kleine Abweichung aufbauen; bei präzisen Aufgaben setzt man die Position ab und zu mit einem Endschalter auf null.

Warum zittert mein Schrittmotor, dreht aber nicht?

Meist werden die Spulen in der falschen Reihenfolge angesteuert. In der Stepper-Bibliothek des Arduino müssen die Pins für den 28BYJ-48 in der Reihenfolge 8, 10, 9, 11 (IN1, IN3, IN2, IN4) stehen. Auch zu hohe Drehzahl oder eine zu schwache Versorgung lassen den Motor zittern statt drehen.

Kann ich den ULN2003 aus dem 5V-Pin des Arduino versorgen?

Für einen einzelnen 28BYJ-48 meist ja; der Motor zieht etwa 240 mA, das schafft USB. Bei zwei Motoren, Servos oder weiteren Lasten werden Regler und USB-Port des Arduino überfordert; dann nimmst du eine externe 5-V-Quelle und verbindest die Massen.

Woher kennt ein Schrittmotor seine Position?

Ein Schrittmotor misst seine Position nicht, er kennt sie durch Zählen der Schritte. Deshalb fährt man ihn beim Start an einen Referenzpunkt (etwa einen Endschalter), um ihn zu nullen, und vermeidet Schrittverluste durch Überlast oder zu hohe Drehzahl.

Soll ich einen Schrittmotor oder einen Servomotor nehmen?

Reicht es, einen Winkel zwischen 0 und 180 Grad anzufahren und zu halten, ist ein Servo einfacher und hat seinen Treiber schon eingebaut. Für mehrere Umdrehungen, starkes Drehmoment bei niedriger Drehzahl oder sehr genaue Positionierung wählst du einen Schrittmotor.

Was ist der Unterschied zwischen 28BYJ-48 und NEMA 17?

Der 28BYJ-48 ist ein kleiner, günstiger 5-V-Motor, der dank Getriebe langsam, aber präzise dreht. Der NEMA 17 ist ein viel stärkerer und schnellerer bipolarer Motor mit 200 Schritten pro Umdrehung; er braucht einen Treiber wie den A4988 und 12–24 V. Für Hobbyprojekte nimmt man den 28BYJ-48, für Maschinen wie 3D-Drucker und CNC-Fräsen den NEMA 17.

Alle Projekte ansehen
Verwendung von Schrittmotoren
#67Mittel
Premium

Verwendung von Schrittmotoren

Einfaches Projekt, das einen 28BYJ-48 Schrittmotor mit einer ULN2003A-Treiberplatine um eine volle Umdrehung im und gegen den Uhrzeigersinn dreht. Lehrt die Schritt- und Richtungssteuerung des Schritt

4.5(31)
41
360-Grad-Servomotor-Konstruktion aus Schrittmotor
#68Mittel
Premium

360-Grad-Servomotor-Konstruktion aus Schrittmotor

Servoähnliches Steuerungsprojekt, das den Schrittmotor in bestimmten Winkeln (0°-360°) positionieren und Grad pro Schritt berechnen kann. Es lehrt eine präzise Winkelberechnung und Positionsverfolgung

4.5(22)
30
Servo-Steuerung mit Joystick
#60Mittel
Premium

Servo-Steuerung mit Joystick

Schwenk-Neige-Projekt, das zwei Servomotoren in X- und Y-Achse unabhängig voneinander mit einem Joystick-Modul steuert. Lehrt die Logik der Joystick-Servo-Integration und der Positionsverfolgung.

4.7(42)
58
ESP32-Servomotor (Steuerung über Potentiometer)
#118Mittel
Premium

ESP32-Servomotor (Steuerung über Potentiometer)

In diesem Projekt steuern wir einen SG90-Servomotor mit einem Potentiometer. Wir stellen den Servowinkel ein, indem wir den vom Potentiometer gelesenen Analogwert auf den Bereich von 0 bis 180 Grad abbilden. Dank der ESP32Servo-Bibliothek kann jeder GPIO-Pin des ESP32 ein PWM-Signal erzeugen. Dies ist eine grundlegende Steuerungsmethode für Roboterarme, Kamera-Gimbals und automatische Türmechanismen.

4.3(29)
42
Bluetooth-gesteuertes Auto mit L298N
#80Fortgeschritten
Premium

Bluetooth-gesteuertes Auto mit L298N

2WD (zweimotoriges, vierrädriges) Roboterauto-Projekt, das vom Telefon aus mit Arduino und HC-05 Bluetooth-Modul gesteuert werden kann. Insgesamt vier Räder werden gleichzeitig angetrieben, indem zwei

5.0(38)
64
Roboter zur Hindernisvermeidung
#81Fortgeschritten
Premium

Roboter zur Hindernisvermeidung

Wie wäre es, ein intelligentes Fahrzeug zu bauen, das seinen Weg selbst findet? Der Obstacle Avoiding Robot scannt dank des Ultraschallsensors vor ihm ständig seine Umgebung. Wenn er auf ein Hindernis

5.0(38)
49
Led-Steuerung mit Joystick
#59Mittel
Premium

Led-Steuerung mit Joystick

Steuerungsprojekt, das LEDs in 4 verschiedenen Richtungen aufleuchten lässt, je nach den Werten der X- und Y-Achse des Joystick-Moduls. Lehrt das Lesen des analogen Joysticks und die Logik der Richtun

4.7(50)
66
ESP32-Parksensor (HC-SR04 + 5-LED-Leiste + Summer + OLED)
#142Fortgeschritten
Premium

ESP32-Parksensor (HC-SR04 + 5-LED-Leiste + Summer + OLED)

Die ESP32-Version des Parkhilfesensors für Autos! Mit dem Ultraschallsensor HC-SR04 messen wir den Abstand zum Objekt vor dem Fahrzeug. Je weiter sich das Objekt nähert, desto mehr leuchten die 5 LEDs der Leiste auf (grün → gelb → rot) und die Intervalle der Summer-Signaltöne werden kürzer. Wenn das Objekt sehr nahe kommt (unter 10 cm), ertönt ein Daueralarm und alle LEDs leuchten. Auf dem SSD1306-OLED-Display werden der aktuelle Wert in cm in großer Schrift, ein Statustext (NICHT / VORSICHT / N

0.0(0)
14

Lerne, wie ein Schrittmotor Schritt für Schritt dreht, wie du den 28BYJ-48 mit dem ULN2003 an den Arduino anschließt, ihn auf jeden Winkel drehst, mit AccelStepper sanft beschleunigst und zu kräftigen NEMA-17-Motoren übergehst.

Was ist ein Schrittmotor? Präzise Drehung mit 28BYJ-48 und ULN2003 am Arduino | BlueGrays