🍪 Privacy & Transparency

We and our partners use cookies to Store and/or access information on a device. We and our partners use data for Personalised ads and content, ad and content measurement, audience insights and product development. An example of data being processed may be a unique identifier stored in a cookie. Some of our partners may process your data as a part of their legitimate business interest without asking for consent. To view the purposes they believe they have legitimate interest for, or to object to this data processing use the vendor list link below. The consent submitted will only be used for data processing originating from this website. If you would like to change your settings or withdraw consent at any time, the link to do so is in our privacy policy accessible from our home page..

Vendor List | Privacy Policy
Skip to content

Technik Blog

Programmieren | Arduino | ESP32 | MicroPython | Python | Raspberry PI

Menu
  • Projekte
    • LED’s
    • Servo & Schrittmotoren
    • Sound
    • LCD’s
    • Kommunikation
    • Sicherheit
    • Weekend Project
  • Arduino
    • Tutorials
    • ProMini
      • Anschließen & Programmieren
    • Nano
      • Arduino Nano – Übersicht
    • UNO
      • Übersicht
    • MEGA 2560
      • Übersicht
    • Leonardo
      • Übersicht
    • NodeMCU
      • NodeMCU – “Einer für (fast) Alles!”
    • Lilypad
      • Arduino: Lilypad “Jetzt Geht’s Rund!”
    • WEMOS
      • WEMOS D1 – Arduino UNO kompatibles Board mit ESP8266 Chip
      • WEMOS D1 Mini – Übersicht
      • Wemos D1 mini Shields
    • STM32x
      • STM32F103C8T6 – Übersicht
    • Maker UNO
      • Maker UNO – Überblick und Test
    • ATTiny85
      • Mini Arduino mit ATTiny85 Chip
      • ATtiny85 mit dem Arduino UNO beschreiben
  • Android
  • Über mich
  • DeutschDeutsch
  • EnglishEnglish
Menu

Arduino UNO – steuern eines DC Motors mit dem Joystick

Posted on 6. November 202129. April 2023 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,

* 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 Namenhaften 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 Namenhaften 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üsse 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

Kategorien

Tools

  • 8×8 LED Matrix Tool
  • 8×16 LED Matrix Modul von Keyestudio
  • 16×16 LED Matrix – Generator
  • Widerstandsrechner
  • Rechner für Strom & Widerstände
  • ASCII Tabelle

Meta

  • Videothek
  • Impressum
  • Datenschutzerklärung
  • Disclaimer
  • Kontakt
  • Cookie-Richtlinie (EU)

Links

Blogverzeichnis Bloggerei.de Blogverzeichnis TopBlogs.de das Original - Blogverzeichnis | Blog Top Liste Blogverzeichnis trusted-blogs.com
©2023 Technik Blog | Built using WordPress and Responsive Blogily theme by Superb