Gleichstrommotor mit L298N steuern: Drehzahl und Drehrichtung mit Arduino
Wie funktioniert der Motortreiber L298N? H-Brücke, Pins ENA, IN1 und IN2, 5V-Jumper und Stromversorgung, Drehzahl per PWM, Richtungswechsel, Code für ein Roboterauto mit zwei Motoren, ESP32 und Pico.
Gleichstrommotoren sind die verbreitetsten Motoren: Sie drehen Lüfter, Roboterräder, Wasserpumpen und Spielzeugautos. Einen Motor kannst du aber nicht direkt an einen Arduino-Pin anschließen: Er zieht viel mehr Strom, als der Pin liefern kann, und für die andere Drehrichtung muss seine Polarität umgedreht werden. Der Motortreiber L298N löst beide Probleme auf einmal: Er lässt zwei Gleichstrommotoren unabhängig vor- und rückwärts laufen und regelt ihre Drehzahl per PWM. Er steckt in fast jedem Roboterauto-Projekt.

Wie funktioniert ein Gleichstrommotor und warum braucht er einen Treiber?
Legst du an die beiden Anschlüsse eines Gleichstrommotors eine Spannung an, dreht er sich; drehst du die Polarität um, dreht er andersherum; senkst du die Spannung, wird er langsamer. Schon ein kleiner Spielzeugmotor zieht im Betrieb Hunderte Milliampere und beim Anlaufen oder Blockieren über 1 Ampere. Da der Motor eine Spule ist, erzeugt er beim Abschalten außerdem Spannungsspitzen in Gegenrichtung. Ein Arduino-Pin liefert höchstens 20–40 mA und ist gegen diese Spitzen nicht geschützt; den Motor direkt anzuschließen zerstört den Pin und kann sogar das Board beschädigen.
Was ist eine H-Brücke?
Um einen Motor in beide Richtungen zu drehen, nutzt man eine H-Brücke: vier elektronische Schalter, die wie der Buchstabe "H" um den Motor angeordnet sind. Schließen zwei diagonal gegenüberliegende Schalter, fließt der Strom in eine Richtung durch den Motor; schließt das andere Paar, in die andere. Im L298N stecken zwei solcher H-Brücken, daher steuert er zwei Motoren unabhängig. Jeder Motor nutzt zwei Richtungspins (IN1 und IN2) und einen Drehzahlpin (ENA):
| IN1 | IN2 | ENA | Was der Motor macht |
|---|---|---|---|
| HIGH | LOW | HIGH oder PWM | Dreht vorwärts |
| LOW | HIGH | HIGH oder PWM | Dreht rückwärts |
| HIGH | HIGH | HIGH | Bremst und stoppt schnell |
| Beliebig | Beliebig | LOW | Läuft frei aus und wird von selbst langsamer |
Technische Daten des L298N
| Merkmal | Wert |
|---|---|
| Motorversorgung | 5–35 V (mit gestecktem 5V-Jumper max. 12 V) |
| Strom pro Kanal | 2 A dauerhaft, 3 A kurzzeitig |
| Logikspannung | 5 V (Eingänge erkennen auch 3,3-V-Signale) |
| Spannungsverlust | Etwa 1,5–3 V (so viel weniger kommt am Motor an) |
| Ansteuerbare Motoren | 2 Gleichstrommotoren oder 1 bipolarer Schrittmotor |
| Schutz | Freilaufdioden auf der Platine |

Pins und Stromversorgung des L298N
| Pin oder Klemme | Funktion |
|---|---|
| OUT1, OUT2 | Die beiden Anschlüsse von Motor A |
| OUT3, OUT4 | Die beiden Anschlüsse von Motor B |
| 12V (VS) | Motorversorgung: Pluspol von Akku oder Netzteil |
| GND | Gemeinsame Masse: Minuspol des Akkus und GND des Arduino kommen hierhin |
| 5V | Mit gestecktem 5V-Jumper 5-V-Ausgang, ohne Jumper Eingang für die Logikversorgung |
| ENA, ENB | Drehzahleingänge (PWM); mit gesteckten Jumpern läuft der Motor immer mit voller Drehzahl |
| IN1, IN2, IN3, IN4 | Richtungseingänge |
Einen Motor vorwärts, rückwärts und unterschiedlich schnell drehen
Zieh zuerst den Jumper von ENA ab und verbinde ENA mit Arduino-Pin D9, IN1 mit D8 und IN2 mit D7. Den Motor schließt du an OUT1 und OUT2 an, einen Akkupack aus 2 × 18650 (7,4 V) oder 4–6 AA-Batterien an die Klemmen 12V und GND; GND führst du auch zum GND des Arduino. Die Funktion motor() unten nimmt einen Wert von -255 bis 255: positiv heißt vorwärts, negativ rückwärts, null bremsen. Das Prinzip der Drehzahlregelung erklärt Was ist PWM?
1const int ENA = 9; // hız (PWM) / speed (PWM)
2const int IN1 = 8;
3const int IN2 = 7;
4
5void motor(int speed) { // -255 … 255
6 if (speed == 0) { // fren / brake
7 digitalWrite(IN1, HIGH);
8 digitalWrite(IN2, HIGH);
9 analogWrite(ENA, 255);
10 return;
11 }
12 digitalWrite(IN1, speed > 0); // ileri ya da geri / forward or backward
13 digitalWrite(IN2, speed < 0);
14 analogWrite(ENA, abs(speed));
15}
16
17void setup() {
18 pinMode(ENA, OUTPUT);
19 pinMode(IN1, OUTPUT);
20 pinMode(IN2, OUTPUT);
21}
22
23void loop() {
24 motor(200); delay(2000); // ileri / forward
25 motor(0); delay(500); // dur / stop
26 motor(-120); delay(2000); // yavaşça geri / slowly backward
27 motor(0); delay(500);
28}Roboterauto mit zwei Motoren: vorwärts, rückwärts, links, rechts
Roboterautos haben keine Lenkung; sie drehen, indem die beiden Räder mit unterschiedlicher Drehzahl und Richtung laufen. Drehen beide Motoren vorwärts, fährt das Auto geradeaus; läuft der linke rückwärts und der rechte vorwärts, dreht es sich auf der Stelle nach links. Die Funktion drive() unten nimmt die Drehzahl beider Motoren getrennt von -255 bis 255 entgegen:
1// Sol motor / left motor: ENA=9, IN1=8, IN2=7 — Sağ motor / right motor: ENB=10, IN3=5, IN4=4
2const int ENA = 9, IN1 = 8, IN2 = 7;
3const int ENB = 10, IN3 = 5, IN4 = 4;
4
5void drive(int left, int right) { // her biri -255 … 255 / each -255 … 255
6 digitalWrite(IN1, left >= 0); digitalWrite(IN2, left < 0);
7 digitalWrite(IN3, right >= 0); digitalWrite(IN4, right < 0);
8 analogWrite(ENA, abs(left));
9 analogWrite(ENB, abs(right));
10}
11
12void setup() {
13 int pins[] = {ENA, IN1, IN2, ENB, IN3, IN4};
14 for (int p : pins) pinMode(p, OUTPUT);
15}
16
17void loop() {
18 drive(200, 200); delay(1500); // ileri / forward
19 drive(-200, 200); delay(600); // sola dön / turn left
20 drive(200, -200); delay(600); // sağa dön / turn right
21 drive(-180, -180); delay(1000); // geri / backward
22 drive(0, 0); delay(1000); // dur / stop
23}Mit einem Abstandssensor vorne am Auto entsteht ein Roboter, der bei einem Hindernis anhält und dreht; zum Sensor siehe HC-SR04 Entfernungssensor. Nutzt du am Uno die Servo-Bibliothek, Vorsicht: Sie schaltet PWM an den Pins 9 und 10 ab; leg ENA und ENB dann auf die Pins 5 und 6.
L298N mit ESP32 und Raspberry Pi Pico
Die Eingänge des L298N werten alles über etwa 2,3 V als HIGH, daher funktionieren sie direkt mit den 3,3-V-Signalen von ESP32 und Pico; die Logikversorgung des Moduls bleibt aber bei 5 V. Am ESP32 nutzt du denselben Arduino-Code mit PWM-fähigen Pins für ENA und ENB (zum Beispiel GPIO 25 und 26); die Pins 34–39 können nichts ausgeben. Am Pico sieht die Steuerung eines Motors mit MicroPython so aus:
1from machine import Pin, PWM
2import time
3
4ena = PWM(Pin(15), freq=1000)
5in1 = Pin(14, Pin.OUT)
6in2 = Pin(13, Pin.OUT)
7
8def motor(speed): # -100 … 100
9 in1.value(speed > 0)
10 in2.value(speed < 0)
11 ena.duty_u16(int(abs(speed) * 655.35))
12
13while True:
14 motor(80); time.sleep(2) # ileri / forward
15 motor(0); time.sleep(0.5) # dur / stop
16 motor(-50); time.sleep(2) # geri / backwardL298N, TB6612FNG oder MOSFET?
| Treiber | Vorteile | Nachteile | Geeignet für |
|---|---|---|---|
| L298N | Günstig, robust, 2 A pro Kanal | Etwa 2 V Verlust, wird warm, groß | Hobbyroboter, 6–12-V-Motoren |
| TB6612FNG | Klein, effizient (MOSFET), 3,3-V-tauglich | 1,2 A dauerhaft, max. 13,5 V | Kleine Akkuroboter |
| L9110S | Sehr klein und günstig | Etwa 800 mA pro Kanal | Minimotoren |
| Einzelner MOSFET (etwa IRLZ44N) | Sehr effizient, hoher Strom | Nur eine Richtung | Lüfter, Pumpen, LED-Streifen |
Musst du einen Motor nur ein- und ausschalten, reicht ein Relais – die Drehzahl kann es aber nicht regeln; den Vergleich findest du in Was ist ein Relaismodul? Für die Wahl eines passenden Transistors oder MOSFETs hilft das Werkzeug Transistoren.
Projektideen mit dem L298N
- Hindernis ausweichender Roboter: ein Auto, das mit einem HC-SR04 Hindernisse erkennt und die Richtung wechselt.
- Auto mit Bluetooth-Steuerung: ein Roboter, den du über einen HC-05 mit einer App am Handy lenkst.
- Auto mit Joystick-Steuerung: die zwei Achsen eines Joysticks in die Drehzahlen zweier Motoren umrechnen; Details in Joystick-Modul verwenden.
- Linienfolger: ein Auto, das mit Infrarotsensoren einer schwarzen Linie am Boden folgt.
- Automatischer Vorhang: ein motorisiertes System, das den Vorhang morgens bei Licht öffnet und abends schließt.
- Förderband: ein kleines Förderband, dessen Geschwindigkeit du mit einem Potentiometer einstellst.
Typische Fehler und ihre Lösungen
- Die LED des Moduls leuchtet, aber der Motor dreht nicht: Die Massen sind nicht verbunden, der ENA-Jumper wurde entfernt, aber der Pin nicht angeschlossen, oder der PWM-Wert ist zu klein.
- Der Arduino startet neu, sobald der Motor läuft: Motor und Arduino hängen an derselben schwachen Quelle; getrennt versorgen und einen 100-nF-Kondensator an die Motoranschlüsse löten.
- Der Motor ist sehr langsam und schwach: Der L298N schluckt etwa 2 V; erhöhe die Akkuspannung (zum Beispiel 2 × 18650) oder nimm einen effizienteren Treiber.
- Der Motor dreht nur in eine Richtung: Einer der IN-Pins ist nicht angeschlossen, oder der Code schreibt für beide Richtungen dieselben Werte.
- Der L298N wird sehr heiß: Der Motor zieht zu viel Strom; achte darauf, dass der Kühlkörper frei liegt, und wähle bei Bedarf einen stärkeren Treiber.
- 9-V-Blockbatterie verwenden: Sie liefert keinen hohen Strom und ist schnell leer; nutze einen wiederaufladbaren 18650- oder AA-Pack.
Sobald du die Motorsteuerung mit dem L298N beherrschst, steht dir die Welt der Roboterprojekte offen. In der BlueGrays-App findest du Projekte mit L298N – ein Bluetooth-gesteuertes Auto und einen Roboter, der Hindernissen ausweicht – Schritt für Schritt mit Schaltplänen und Code.
Häufige Fragen
Wie viele Motoren kann der L298N ansteuern?
Da der L298N zwei H-Brücken enthält, steuert er zwei Gleichstrommotoren unabhängig vor- und rückwärts und mit unterschiedlicher Drehzahl. Nutzt man beide Kanäle zusammen, kann er auch einen bipolaren Schrittmotor treiben.
Wofür ist der 5V-Jumper am L298N?
Mit gestecktem Jumper erzeugt der Regler auf der Platine aus der Motorversorgung 5 V für den Chip; diese 5 V kannst du auch zur Versorgung des Arduino nutzen. Liegt die Motorversorgung über 12 V, kann der Regler überhitzen; zieh dann den Jumper und speise separate 5 V in den 5V-Pin ein.
Welche Batterie gehört an den L298N?
Für kleine 6–9-V-Motoren eignen sich 2 × 18650-Lithiumzellen (7,4 V) oder 6 AA-Batterien (9 V). Weil der L298N etwa 2 V verliert, wählst du eine Quelle etwas über der Nennspannung des Motors. 9-V-Blockbatterien liefern nicht genug Strom für Motoren.
Warum zieht man den ENA-Jumper ab?
Mit gestecktem Jumper auf ENA läuft der Motor immer mit voller Drehzahl. Willst du die Drehzahl regeln, ziehst du den Jumper und verbindest ENA mit einem PWM-Pin des Arduino; dann stellst du die Drehzahl mit analogWrite zwischen 0 und 255 ein.
Warum dreht mein Motor bei niedriger Drehzahl nicht?
Ein Motor braucht eine Mindestspannung, um die Reibung zu überwinden und anzulaufen, und der Spannungsverlust des L298N erschwert das zusätzlich. Meist brummt der Motor nur, wenn der PWM-Wert unter 80–120 fällt. Lege im Code eine Mindestdrehzahl fest oder nutze eine höhere Versorgungsspannung.
Funktioniert der L298N mit ESP32 und Raspberry Pi Pico?
Ja. Die Eingänge des L298N erkennen 3,3-V-Signale als HIGH, daher lässt er sich direkt an ESP32 und Pico anschließen. Die Logikseite des Moduls wird trotzdem mit 5 V versorgt, und alle Massen müssen verbunden sein.
Projekte, die du danach bauen kannst
Alle Projekte ansehen
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

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

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.

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.

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

ESP32 HC-SR04 Ultraschall-Entfernungsmesser
Der Ultraschallsensor HC-SR04 berechnet die Entfernung, indem er die Zeit misst, die die von ihm ausgesendete Schallwelle benötigt, um auf ein Objekt zu treffen und zurückzukehren (Time of Flight). In diesem Projekt senden wir mit dem ESP32 einen 10-Mikrosekunden-Impuls an den TRIG-Pin und lesen die vom ECHO-Pin kommende Echozeit mit `pulseIn()`. Die berechnete Entfernung geben wir in cm im Serial Monitor aus. Da der HC-SR04 mit 5 V betrieben wird, ist ein **Spannungsteiler** am ECHO-Pin zwingen

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

HC-SR04 Abstandsmessung (serielle Anzeige)
HC-SR04 Ultraschallsensor zur Abstandsmessung und Anzeige des Ergebnisses in cm auf dem seriellen Monitor. Er lehrt das Prinzip der Abstandsberechnung mit Schallwellen.
Weitere Artikel
Lerne, warum ein Gleichstrommotor nicht direkt an den Arduino gehört, wie eine H-Brücke funktioniert, wie du den L298N anschließt und versorgst, Drehzahl und Richtung per PWM steuerst und ein Roboterauto mit zwei Motoren baust.

