Skip to content

Technik Blog

Programmieren | Arduino | ESP32 | MicroPython | Python | Raspberry Pi | Raspberry Pi Pico

Menu
  • Smarthome
  • Arduino
  • ESP32 & Co.
  • Raspberry Pi & Pico
  • Solo Mining
  • Über mich
  • Deutsch
  • English
Menu

Arduino UNO – steuern eines DC Motors mit dem Joystick

Posted on 6. November 20219. März 2024 by Stefan Draeger

In diesem Beitrag zeige ich dir wie du an einem Arduino UNO einen DC Motor mithilfe eines 2 Achsen Joystick steuern kannst.

kontrollieren eines DC Motors mit einem Joystick am Arduino UNO
kontrollieren eines DC Motors mit einem Joystick am Arduino UNO

Für dieses Projekt verwende ich zusätzlich die H-Brücke vom Typ L298N welche ich dir bereits im Beitrag H-Brücke L298N am Arduino UNO vorgestellt habe.

L298N DC Motor Shield
L298N DC Motor Shield

  • Benötigte Ressourcen für dieses Projekt
    • Alternative Sets
    • Werkzeuge & Verbrauchsmaterial
  • Aufbau der Schaltung
  • Programmieren des Joysticks & DC Motor in der Arduino IDE
    • Ermitteln der Joystick Positionswerte
    • Mappen der Werte für den Motor
    • steuern des Motors über die H-Brücke L298N

Benötigte Ressourcen für dieses Projekt

Für den Nachbau dieses kleines Projektes benötigst du:

  • einen Arduino UNO R3*,
    • ein USB Datenkabel*,
  • einen kleinen DC Motor mit 5V Spannung*,
  • ein Batteriehalter für 4x AA Batterien*,
  • drei AA Batterien* **,
  • einen Joystick*,
  • ein L298N DC Motor-Driver Shield*,
  • ein paar Breadboardkabel*, sowie
  • ein Breadboard*,

Hinweis von mir: Die mit einem Sternchen (*) markierten Links sind Affiliate-Links. Wenn du über diese Links einkaufst, erhalte ich eine kleine Provision, die dazu beiträgt, diesen Blog zu unterstützen. Der Preis für dich bleibt dabei unverändert. Vielen Dank für deine Unterstützung!

** Die AA Mignon Batterien bekommst du auch recht günstig im Discounter um die Ecke, aber auf ebay.de findest du auch recht günstige Angebote von Namhaften Herstellern.

In diesem Beitrag habe ich als Batterien die Hausmarke „B1“ vom Toom Baumarkt verwendet, diese hatten leider nur kurze Zeit die Leistung um den DC Motor auf „Fullspeed“ anzutreiben.

Daher würde ich empfehlen ein Namhaften Hersteller wie Duracel, Varta oder ähnliches zu verwenden.

Alternative Sets

Du findest einen passenden Motor und einen Arduino UNO auch in einem Set wie Bsp. in dem ELEGOO UNOR3 Arduino Projekt Baukasten Ultimate Starter Kit auf ebay.de.

Das Joystick Shield für den Arduino bzw. Raspberry Pi habe ich dir bereits im Beitrag Arduino Lektion 38: Joystick vorgestellt und auch im Beitrag Arduino Leonardo & Joystick als Mausersatz gezeigt wie du damit deinen Mauszeiger am Computer steuern kannst.

Werkzeuge & Verbrauchsmaterial

Der DC Motor kommt ggf. mit Lötanschlüssen daher, an diese müssen wir zunächst zwei Litzen anlöten und benötigen folgende Werkzeuge & Verbrauchsmaterial:

  • einen 30 Watt Lötkolben*,
  • Lötzinn*,
  • Lötfett*,
  • ein hitzebeständige Unterlage*,
  • eine Dritte Hand*,
  • Litze 0,5 mm*

Aufbau der Schaltung

An den Arduino UNO werden die beiden Module wiefolgt angeschlossen:

Sensor / AktorArduino UNO R3
Joystick
GNDGND
+5V5V
VRXanaloger Pin A0
L298N DC Motor Shield
IN1digitaler Pin D1
IN2digitaler Pin D2

Das L298N Modul kannst du mit einer Spannung von +5V bis max. +35V betreiben. Die Eingangsspannung muss ca. 2V über der gewünschten Ausgangsspannung liegen, daher verwende ich in dem finalen Aufbau einen 4x AA Batteriehalter ca. 6,5V (gemessen 6,46V).

Somit ergibt sich folgender zusätzlicher Aufbau mit dem Modul L298N DC Motor Driver Shield:

L298N DC Motor Driver ShieldBauteil
OUT1DC Motor Pin 1
OUT2DC Motor Pin 2
+7VBatteriepack, Pluspol
GNDGND von dem Batteriepack
und zusätzlich an den GND des Arduinos

Hier nun der Aufbau der Schaltung inkl. 9V Blockbatterie:

Aufbau der Schaltung - L298N DC Motor Shield & Joystick am Arduino UNO
Aufbau der Schaltung – L298N DC Motor Shield & Joystick am Arduino UNO

In der Grafik habe ich eine 9V Blockbatterie verwendet, natürlich ist die Ausgangsspannung von knapp 7V deutlich zu hoch für einen 5V Motor, jedoch gibt das Tool zum Erstellen dieser Schaltungen keine passendere Spannungsquelle bereit.

Programmieren des Joysticks & DC Motor in der Arduino IDE

Ermitteln der Joystick Positionswerte

Zunächst müssen wir ermitteln, welche Werte der Joystick liefert.

In meinem Fall habe ich den Joystick am analogen Pin A0 angeschlossen und dieser ist in der mittleren Position beim Wert von 500 und ganz links auf 0 und ganz rechts auf 1023.

void setup() {
  Serial.begin(9600);
}

void loop() {
  Serial.println(analogRead(A0));
  delay(15);
}

Somit haben wir den Wertebereich 500..0 für „Motor drehen nach links“ und 500..1023 „Motor drehen nach rechts“.

Mappen der Werte für den Motor

Ein möglicher analoger Wert am Arduino UNO liegt zwischen 0 und 1023. Diesen müssen wir nun teilen (für links / rechts drehen) und auf ein PWM Signal (0..255) mappen.

#define joystick A0

int value = -1;

void setup() {
  Serial.begin(9600);
}

void loop() {
  int tmpValue = analogRead(joystick);
  
  if(tmpValue == value){
    return;
  } else {
    value = tmpValue;
  }
  
  int motorgeschwindkeit = 0;

  if (value >= 0 && value < 495) {
    motorgeschwindkeit = map(value, 500, 0, 0, 255);
    Serial.println("Motor links drehen!");
  } else if (value > 505) {
    motorgeschwindkeit = map(value, 500, 1023, 0, 255);
    Serial.println("Motor rechts drehen!");
  } else if (value == 500) {
    Serial.println("Motor STOPP!");
  }
  Serial.println(motorgeschwindkeit);
  delay(15);
}

steuern des Motors über die H-Brücke L298N

Wir haben nun die Geschwindigkeit und die Richtung des Motors ermittelt, mit diesen Werten können wir nun mithilfe einer H-Brücke L298N den Motor vorwärts / rückwärts in einer definierbaren Geschwindigkeit drehen lassen.

#define joystick A0

// DC Motor 1
int ena = 10;
int in1 = 9;
int in2 = 8;

const int MOTOR_PWM_START = 45;

int value = -1;

void stoppMotor() {
  digitalWrite(in1, LOW);
  digitalWrite(in2, LOW);
}

void moveMotor(bool forward, int motorSpeed) {
  analogWrite(ena, motorSpeed);
  if (forward) {
    digitalWrite(in1, HIGH);
    digitalWrite(in2, LOW);
  } else {
    digitalWrite(in1, LOW);
    digitalWrite(in2, HIGH);
  }
}

void setup() {
  Serial.begin(9600);
  pinMode(ena, OUTPUT);
  pinMode(in1, OUTPUT);
  pinMode(in2, OUTPUT);
}

void loop() {
  int tmpValue = analogRead(joystick);

  if (tmpValue == value) {
    return;
  } else {
    value = tmpValue;
  }

  int motorgeschwindkeit = 0;

  if (value >= 0 && value < 495) {
    motorgeschwindkeit = map(value, 500, 0, MOTOR_PWM_START, 255);
    Serial.println("Motor links drehen!");
    moveMotor(true, motorgeschwindkeit);
  } else if (value > 505) {
    motorgeschwindkeit = map(value, 500, 1023, MOTOR_PWM_START, 255);
    Serial.println("Motor rechts drehen!");
    moveMotor(false, motorgeschwindkeit);
  } else if (value > 495 && value < 505) {
    Serial.println("Motor STOPP!");
    stoppMotor();
  }
  Serial.println(motorgeschwindkeit);
  delay(15);
}

In nachfolgendem Video zeige ich dir nun wie du mit einem Joystick am Arduino UNO einen DC Motor steuern kannst.

Dabei wird die mittlere Position des Joysticks als „Motor AUS“ verwendet.

kontrollieren eines DC Motors am Arduino UNO mit einem Joystick
Dieses Video auf YouTube ansehen.

6 thoughts on “Arduino UNO – steuern eines DC Motors mit dem Joystick”

  1. Michael sagt:
    6. November 2021 um 19:36 Uhr

    Hallo Stefan, danke für die schnelle Lösungsdarstellung. Jetzt wird modifiziert.

    Antworten
    1. Stefan Draeger sagt:
      7. November 2021 um 20:16 Uhr

      Hi Michael,

      gerne geschehen, ich bin ja auch etwas abhängig von euren Ideen / Problemen damit ich Inhalt auf meinem Blog bringen kann.
      Solltest du also mal wieder was haben du weißt ja wie du mich erreichen kannst.

      Gruß,

      Stefan Draeger

      Antworten
  2. Andreas sagt:
    25. Juli 2023 um 17:11 Uhr

    Hallo Herr Draeger,

    wie würde es jetzt funktionieren einen 2. Motor über den selben Joystick anzusteuern? Würde man dann einfach eine zweite Funktion „moveMotor“ erzeugen und dann entsprechend die Daten aus dem Joystick abrufen?

    VG
    Andreas

    Antworten
    1. Stefan Draeger sagt:
      27. Juli 2023 um 20:19 Uhr

      Hi,

      hier benötigt man noch zusätzlich eine zweite H-Brücke und eine extra Funktion.
      Damit man den Code trotzdem übersichtlich und einfach hat, würde ich dazu tendieren eine Funktion zu schreiben, welche die Richtung und den Motor enthält.

      Gruß, Stefan

      Antworten
      1. Andreas sagt:
        31. Juli 2023 um 17:27 Uhr

        Hallo Herr Draeger,

        Tatsächlich funktioniert es auch mit der selben H-Brücke. In der ersten if Anweisung habe ich anstelle des TempValues den Code selbst nochmal aufgerufen mit dem jeweiligen Funktionen und Variablen als Stoppmotor2 z.B. das funktioniert.

        Viele Grüße
        Andreas

        Antworten
        1. Stefan Draeger sagt:
          31. Juli 2023 um 18:58 Uhr

          Hi,

          ja das denke ich schon nur wie sieht es mit der Last aus?
          Man sollte hier die Temperatur im Auge behalten nicht, dass wenn die Motoren zu viel Strom ziehen, etwas kaputtgeht.

          Daher der Ansatz mit einer zweiten H-Brücke.

          Gruß, Stefan

          Antworten

Schreibe einen Kommentar Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Fragen oder Feedback?

Du hast eine Idee, brauchst Hilfe oder möchtest Feedback loswerden?
Support-Ticket erstellen

Newsletter abonnieren

Bleib auf dem Laufenden: Erhalte regelmäßig Updates zu neuen Projekten, Tutorials und Tipps rund um Arduino, ESP32 und mehr – direkt in dein Postfach.

Jetzt Newsletter abonnieren

Unterstütze meinen Blog

Wenn dir meine Inhalte gefallen, freue ich mich über deine Unterstützung auf Tipeee.
So hilfst du mit, den Blog am Leben zu halten und neue Beiträge zu ermöglichen.

draeger-it.blog auf Tipeee unterstützen

Vielen Dank für deinen Support!
– Stefan Draeger

Kategorien

Tools

  • Unix-Zeitstempel-Rechner
  • ASCII Tabelle
  • Spannung, Strom, Widerstand und Leistung berechnen
  • Widerstandsrechner
  • 8×8 LED Matrix Tool
  • 8×16 LED Matrix Modul von Keyestudio
  • 16×16 LED Matrix – Generator

Links

Blogverzeichnis Bloggerei.de TopBlogs.de das Original - Blogverzeichnis | Blog Top Liste Blogverzeichnis trusted-blogs.com

Stefan Draeger
Königsberger Str. 13
38364 Schöningen

Tel.: 01778501273
E-Mail: info@draeger-it.blog

Folge mir auf

  • Impressum
  • Datenschutzerklärung
  • Disclaimer
  • Cookie-Richtlinie (EU)
©2025 Technik Blog | Built using WordPress and Responsive Blogily theme by Superb
Cookie-Zustimmung verwalten
Wir verwenden Technologien wie Cookies, um Geräteinformationen zu speichern und/oder darauf zuzugreifen. Wir tun dies, um das Surferlebnis zu verbessern und um personalisierte Werbung anzuzeigen. Wenn Sie diesen Technologien zustimmen, können wir Daten wie das Surfverhalten oder eindeutige IDs auf dieser Website verarbeiten. Wenn Sie Ihre Zustimmung nicht erteilen oder zurückziehen, können bestimmte Funktionen beeinträchtigt werden.
Funktional Immer aktiv
Die technische Speicherung oder der Zugang ist unbedingt erforderlich für den rechtmäßigen Zweck, die Nutzung eines bestimmten Dienstes zu ermöglichen, der vom Teilnehmer oder Nutzer ausdrücklich gewünscht wird, oder für den alleinigen Zweck, die Übertragung einer Nachricht über ein elektronisches Kommunikationsnetz durchzuführen.
Vorlieben
Die technische Speicherung oder der Zugriff ist für den rechtmäßigen Zweck der Speicherung von Präferenzen erforderlich, die nicht vom Abonnenten oder Benutzer angefordert wurden.
Statistiken
Die technische Speicherung oder der Zugriff, der ausschließlich zu statistischen Zwecken erfolgt. Die technische Speicherung oder der Zugriff, der ausschließlich zu anonymen statistischen Zwecken verwendet wird. Ohne eine Vorladung, die freiwillige Zustimmung deines Internetdienstanbieters oder zusätzliche Aufzeichnungen von Dritten können die zu diesem Zweck gespeicherten oder abgerufenen Informationen allein in der Regel nicht dazu verwendet werden, dich zu identifizieren.
Marketing
Die technische Speicherung oder der Zugriff ist erforderlich, um Nutzerprofile zu erstellen, um Werbung zu versenden oder um den Nutzer auf einer Website oder über mehrere Websites hinweg zu ähnlichen Marketingzwecken zu verfolgen.
Optionen verwalten Dienste verwalten Verwalten von {vendor_count}-Lieferanten Lese mehr über diese Zwecke
Einstellungen anzeigen
{title} {title} {title}