Arduino - DC-Motor - Endschalter

In diesem Arduino-Tutorial lernen wir, wie man mit dem Arduino einen Gleichstrommotor mithilfe eines Endschalters und des L298N-Treibers steuert. Im Detail werden wir lernen:

Über Gleichstrommotor und Grenzschalter

Wenn Sie nichts über Gleichstrommotoren und Endschalter (Pinbelegung, Funktionsweise, wie man sie programmiert ...) wissen, lernen Sie in den folgenden Tutorials mehr darüber:

Verdrahtungsdiagramm

Dieses Tutorial bietet Arduino-Codes für zwei Fälle: Einen Gleichstrommotor + einen Grenzschalter, Einen Gleichstrommotor + zwei Grenzschalter.

  • Schaltplan zwischen dem Gleichstrommotor und einem Endschalter
Verdrahtungsdiagramm für Arduino-DC-Motor und Grenzschalter

Dieses Bild wurde mit Fritzing erstellt. Klicken Sie, um das Bild zu vergrößern.

  • Verdrahtungsdiagramm zwischen dem Gleichstrommotor und zwei Endschaltern
Schaltplan für Arduino-Gleichstrommotor und zwei Endschalter

Dieses Bild wurde mit Fritzing erstellt. Klicken Sie, um das Bild zu vergrößern.

Arduino-Code – DC-Motor durch einen Endschalter stoppen

Der untenstehende Code lässt einen Gleichstrommotor endlos drehen und stoppt sofort, wenn ein Endschalter berührt wird.

/* * Dieser Arduino Code wurde von newbiely.de entwickelt * Dieser Arduino Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/tutorials/arduino/arduino-dc-motor-limit-switch */ #include <ezButton.h> #define ENA_PIN 7 // The Arduino pin connected to the EN1 pin L298N #define IN1_PIN 6 // The Arduino pin connected to the IN1 pin L298N #define IN2_PIN 5 // The Arduino pin connected to the IN2 pin L298N ezButton limitSwitch(A1); // create ezButton object that attach to pin A1 void setup() { Serial.begin(9600); limitSwitch.setDebounceTime(50); // set debounce time to 50 milliseconds // initialize digital pins as outputs. pinMode(ENA_PIN, OUTPUT); pinMode(IN1_PIN, OUTPUT); pinMode(IN2_PIN, OUTPUT); digitalWrite(ENA_PIN, HIGH); // max speed digitalWrite(IN1_PIN, HIGH); // control motor A spins clockwise digitalWrite(IN2_PIN, LOW); // control motor A spins clockwise } void loop() { limitSwitch.loop(); // MUST call the loop() function first if (limitSwitch.isPressed()) { Serial.println(F("The limit switch: TOUCHED")); digitalWrite(IN1_PIN, LOW); // stop motor digitalWrite(IN2_PIN, LOW); // stop motor } }

Schnelle Schritte

  • Verbinde Arduino über ein USB-Kabel mit dem PC
  • Öffne die Arduino IDE, wähle das richtige Board und den richtigen Port aus
  • Gehe zum Bibliotheken-Symbol in der linken Leiste der Arduino IDE.
  • Suche nach “ezButton”, dann finde die Button-Bibliothek von ArduinoGetStarted.com
  • Klicke auf die Schaltfläche Installieren, um die ezButton-Bibliothek zu installieren.
Arduino-Tasterbibliothek
  • Kopieren Sie den obigen Code und öffnen Sie ihn in der Arduino IDE
  • Klicken Sie auf die Hochladen-Schaltfläche in der Arduino IDE, um den Code auf den Arduino hochzuladen
  • Wenn die Verdrahtung korrekt ist, sehen Sie, dass sich der Motor im Uhrzeigersinn dreht.
  • Berühren Sie den Endschalter.
  • Sie sehen, dass der Motor sofort gestoppt wird.
  • Das Ergebnis im seriellen Monitor sieht wie folgt aus.
COM6
Send
The limit switch: TOUCHED The DC motor is STOPPED The DC motor is STOPPED The DC motor is STOPPED The DC motor is STOPPED
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Code-Erklärung

Sie können die Erklärung in der Kommentarzeile des obigen Arduino-Codes finden.

Arduino-Code - Die Richtung eines Gleichstrommotors durch einen Endschalter ändern

Der untenstehende Code lässt einen Gleichstrommotor unendlich drehen und seine Drehrichtung ändern, wenn ein Grenzschalter berührt wird.

/* * Dieser Arduino Code wurde von newbiely.de entwickelt * Dieser Arduino Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/tutorials/arduino/arduino-dc-motor-limit-switch */ #include <ezButton.h> #define DIRECTION_CCW -1 #define DIRECTION_CW 1 // constants won't change #define ENA_PIN 7 // The Arduino pin connected to the EN1 pin L298N #define IN1_PIN 6 // The Arduino pin connected to the IN1 pin L298N #define IN2_PIN 5 // The Arduino pin connected to the IN2 pin L298N ezButton limitSwitch(A1); // create ezButton object that attach to pin A1 int direction = DIRECTION_CW; void setup() { Serial.begin(9600); limitSwitch.setDebounceTime(50); // set debounce time to 50 milliseconds // initialize digital pins as outputs. pinMode(ENA_PIN, OUTPUT); pinMode(IN1_PIN, OUTPUT); pinMode(IN2_PIN, OUTPUT); digitalWrite(ENA_PIN, HIGH); // max speed digitalWrite(IN1_PIN, HIGH); // control motor A spins clockwise digitalWrite(IN2_PIN, LOW); // control motor A spins clockwise } void loop() { limitSwitch.loop(); // MUST call the loop() function first if (limitSwitch.isPressed()) { Serial.println(F("The limit switch: TOUCHED")); direction *= -1; // change direction Serial.print(F("The direction -> ")); if (direction == DIRECTION_CW) { Serial.println(F("CLOCKWISE")); digitalWrite(IN1_PIN, HIGH); // control motor A spins clockwise digitalWrite(IN2_PIN, LOW); // control motor A spins clockwise } else { Serial.println(F("ANTI-CLOCKWISE")); digitalWrite(IN1_PIN, LOW); // control motor A spins anti-clockwise digitalWrite(IN2_PIN, HIGH); // control motor A spins anti-clockwise } } }

Schnelle Schritte

  • Kopieren Sie den obigen Code und öffnen Sie ihn mit der Arduino-IDE.
  • Klicken Sie auf die Schaltfläche Hochladen in der Arduino-IDE, um den Code auf den Arduino hochzuladen.
  • Wenn die Verkabelung korrekt ist, sehen Sie, wie sich der Motor im Uhrzeigersinn dreht.
  • Berühren Sie den Endschalter.
  • Sie sehen, dass sich die Richtung des DC-Motors gegen den Uhrzeigersinn ändert.
  • Berühren Sie den Endschalter erneut.
  • Sie sehen, dass sich die Richtung des DC-Motors wieder auf den Uhrzeigersinn ändert.
  • Das Ergebnis im Seriemonitor sieht unten so aus.
COM6
Send
The limit switch: TOUCHED The direction -> ANTI-CLOCKWISE The limit switch: TOUCHED The direction -> CLOCKWISE
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Arduino-Code - Richtungswechsel des Gleichstrommotors durch zwei Grenzschalter

Der unten stehende Code lässt einen Gleichstrommotor endlos drehen und die Richtung ändern, wenn einer von zwei Endschaltern berührt wird.

/* * Dieser Arduino Code wurde von newbiely.de entwickelt * Dieser Arduino Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/tutorials/arduino/arduino-dc-motor-limit-switch */ #include <ezButton.h> #define DIRECTION_CCW -1 #define DIRECTION_CW 1 #define ENA_PIN 7 // The Arduino pin connected to the EN1 pin L298N #define IN1_PIN 6 // The Arduino pin connected to the IN1 pin L298N #define IN2_PIN 5 // The Arduino pin connected to the IN2 pin L298N ezButton limitSwitch_1(A0); // create ezButton object that attach to pin A0 ezButton limitSwitch_2(A1); // create ezButton object that attach to pin A1 int direction = DIRECTION_CW; int prev_direction = DIRECTION_CW; void setup() { Serial.begin(9600); limitSwitch_1.setDebounceTime(50); // set debounce time to 50 milliseconds limitSwitch_2.setDebounceTime(50); // set debounce time to 50 milliseconds // initialize digital pins as outputs. pinMode(ENA_PIN, OUTPUT); pinMode(IN1_PIN, OUTPUT); pinMode(IN2_PIN, OUTPUT); digitalWrite(ENA_PIN, HIGH); // max speed digitalWrite(IN1_PIN, HIGH); // control motor A spins clockwise digitalWrite(IN2_PIN, LOW); // control motor A spins clockwise } void loop() { limitSwitch_1.loop(); // MUST call the loop() function first limitSwitch_2.loop(); // MUST call the loop() function first if (limitSwitch_1.isPressed()) { direction *= -1; // change direction Serial.println(F("The limit switch 1: TOUCHED")); } if (limitSwitch_2.isPressed()) { direction *= -1; // change direction Serial.println(F("The limit switch 2: TOUCHED")); } if (prev_direction != direction) { Serial.print(F("The direction -> ")); if (direction == DIRECTION_CW) { Serial.println(F("CLOCKWISE")); digitalWrite(IN1_PIN, HIGH); // control motor A spins clockwise digitalWrite(IN2_PIN, LOW); // control motor A spins clockwise } else { Serial.println(F("ANTI-CLOCKWISE")); digitalWrite(IN1_PIN, LOW); // control motor A spins anti-clockwise digitalWrite(IN2_PIN, HIGH); // control motor A spins anti-clockwise } prev_direction = direction; } }

Schnelle Schritte

  • Kopieren Sie den obigen Code und öffnen Sie ihn mit der Arduino-IDE.
  • Klicken Sie auf die Schaltfläche Hochladen in der Arduino-IDE, um den Code auf den Arduino hochzuladen.
  • Wenn die Verkabelung korrekt ist, sehen Sie, dass sich der Motor im Uhrzeigersinn dreht.
  • Berühren Sie den Endschalter 1.
  • Sie werden sehen, dass sich die Richtung des DC-Motors gegen den Uhrzeigersinn ändert.
  • Berühren Sie den Endschalter 2.
  • Sie werden sehen, dass sich die Richtung des DC-Motors auf den Uhrzeigersinn ändert.
  • Das Ergebnis im seriellen Monitor sieht wie folgt aus.
COM6
Send
The limit switch 1: TOUCHED The direction -> ANTI-CLOCKWISE The limit switch 2: TOUCHED The direction -> CLOCKWISE
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Video Tutorial

Wir erwägen die Erstellung von Video-Tutorials. Wenn Sie Video-Tutorials für wichtig halten, abonnieren Sie bitte unseren YouTube-Kanal , um uns zu motivieren, die Videos zu erstellen.

※ UNSERE NACHRICHTEN

  • Sie können gerne den Link zu diesem Tutorial teilen. Bitte verwenden Sie jedoch unsere Inhalte nicht auf anderen Websites. Wir haben viel Mühe und Zeit in die Erstellung der Inhalte investiert, bitte respektieren Sie unsere Arbeit!