ESP32 - Schrittmotor und Endschalter

In diesem ESP32-Tutorial zeigen wir, wie man den ESP32, einen Endschalter, den L298N-Treiber und einen Schrittmotor verwendet. Genauer gesagt, behandeln wir Folgendes:

Diese Themen ermöglichen es Ihnen, mit Ihrem ESP32 kontrollierte und vielseitige Bewegungsanwendungen zu erstellen.

Erforderliche Hardware

1×ESP32 ESP-WROOM-32 Entwicklungsmodul
1×USB-Kabel Typ-A zu Typ-C (für USB-A PC)
1×USB-Kabel Typ-C zu Typ-C (für USB-C PC)
1×Endschalter (KW12-3)
1×Endschalter (V-153-1C25)
1×Endschalter (V-155-1C25)
1×Endschalter (V-156-1C25)
1×Stepper Motor Nema 17
1×L298N Motortreiber-Modul
1×12V Netzteil
1×DC-Stromanschluss
1×Verbindungskabel
1×(Empfohlen) Schraubklemmen-Erweiterungsboard für ESP32
1×(Empfohlen) Breakout Expansion Board for ESP32
1×(Empfohlen) Stromverteiler für ESP32

Oder Sie können die folgenden Kits kaufen:

1×DIYables ESP32 Starter-Kit (ESP32 enthalten)
1×DIYables Sensor-Kit (30 Sensoren/Displays)
1×DIYables Sensor-Kit (18 Sensoren/Displays)
Offenlegung: Einige der in diesem Abschnitt bereitgestellten Links sind Amazon-Affiliate-Links. Wir können eine Provision für Käufe erhalten, die über diese Links getätigt werden, ohne zusätzliche Kosten für Sie. Wir schätzen Ihre Unterstützung.

Über Schrittmotor und Endschalter

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

Verdrahtungsdiagramm

Dieses Tutorial liefert die ESP32-Codes für zwei Fälle: einen Schrittmotor mit einem Endschalter und einen Schrittmotor mit zwei Endschaltern.

  • Verdrahtungsdiagramm zwischen dem Schrittmotor und einem Endschalter
Verdrahtungsdiagramm für ESP32-Schrittmotor und Endschalter

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

Wenn Sie nicht wissen, wie Sie ESP32 und andere Komponenten mit Strom versorgen, finden Sie Anleitungen im folgenden Tutorial: Wie man ESP32 mit Strom versorgt.

  • Verdrahtungsdiagramm zwischen dem Schrittmotor und zwei Endschaltern
ESP32-Schrittmotor und zwei Endschalter - Verdrahtungsdiagramm

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

※ Notiz:

Je nach Schrittmotor kann die Verdrahtung zwischen dem Schrittmotor und dem L298N unterschiedlich sein. Bitte werfen Sie einen genauen Blick auf dieses ESP32 - Stepper Motor Tutorial, um zu sehen, wie der Schrittmotor an den L298N-Motortreiber angeschlossen wird.

ESP32-Code - Schrittmotor durch einen Grenzschalter stoppen

Es gibt mehrere Möglichkeiten, einen Schrittmotor zum Stillstand zu bringen:

  • Rufen Sie die Funktion stepper.stop() auf: Auf diese Weise wird der Schrittmotor nicht sofort gestoppt, sondern allmählich
  • Rufen Sie NICHT die Funktion stepper.run() auf: Auf diese Weise wird der Schrittmotor sofort gestoppt

Der unten stehende Code lässt einen Schrittmotor unendlich drehen und stoppt ihn sofort, wenn ein Endschalter berührt wird.

/* * Dieser ESP32 Code wurde von newbiely.de entwickelt * Dieser ESP32 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/esp32/esp32-stepper-motor-and-limit-switch */ #include <ezButton.h> #include <AccelStepper.h> #define MAX_POSITION 0x7FFFFFFF // maximum of position we can set (long type) ezButton limitSwitch(25); // ESP32 pin: GPIO25 AccelStepper stepper(AccelStepper::FULL4WIRE, 19, 18, 17, 16); // ESP32 pin: GPIO19, GPIO18, GPIO17, GPIO16 bool isStopped = false; void setup() { Serial.begin(9600); limitSwitch.setDebounceTime(50); // set debounce time to 50 milliseconds stepper.setMaxSpeed(500.0); // set the maximum speed stepper.setAcceleration(50.0); // set acceleration stepper.setSpeed(100); // set initial speed stepper.setCurrentPosition(0); // set position stepper.moveTo(MAX_POSITION); } void loop() { limitSwitch.loop(); // MUST call the loop() function first if (limitSwitch.isPressed()) { Serial.println(F("The limit switch: TOUCHED")); isStopped = true; } if (isStopped == false) { // without this part, the move will stop after reaching maximum position if (stepper.distanceToGo() == 0) { // if motor moved to the maximum position stepper.setCurrentPosition(0); // reset position to 0 stepper.moveTo(MAX_POSITION); // move the motor to maximum position again } stepper.run(); // MUST be called in loop() function } else { // without calling stepper.run() function, motor stops immediately // NOTE: stepper.stop() function does NOT stops motor immediately Serial.println(F("The stepper motor is STOPPED")); } }

Schnelle Schritte

  • Wenn Sie ESP32 zum ersten Mal verwenden, sehen Sie wie man die Umgebung für ESP32 in der Arduino IDE einrichtet.
  • Schließen Sie die Verkabelung wie im obigen Bild.
  • Schließen Sie das ESP32-Board über ein Micro-USB-Kabel an Ihren PC an.
  • Öffnen Sie die Arduino IDE auf Ihrem PC.
  • Wählen Sie das richtige ESP32-Board (z. B. ESP32 Dev Module) und den COM-Port aus.
  • Verbinden Sie den ESP32 über USB-Kabel mit dem PC.
  • Öffnen Sie die Arduino IDE, wählen Sie das richtige Board und den richtigen Port.
  • Klicken Sie auf das Libraries-Symbol in der linken Leiste der Arduino IDE.
  • Suchen Sie “ezButton”, und finden Sie dann die Button-Bibliothek von ArduinoGetStarted.com.
  • Klicken Sie auf die Install-Schaltfläche, um die ezButton-Bibliothek zu installieren.
ESP32-Tasterbibliothek
  • Suchen Sie nach “AccelStepper”, dann finden Sie die AccelStepper-Bibliothek von Mike McCauley
  • Klicken Sie auf die Schaltfläche Installieren, um die AccelStepper-Bibliothek zu installieren.
ESP32 AccelStepper-Bibliothek
  • 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 ESP32 hochzuladen
  • Wenn die Verkabelung korrekt ist, sehen Sie, dass der Motor sich im Uhrzeigersinn dreht.
  • Berühren Sie den Endschalter
  • Sie sehen, dass der Motor sofort stoppt
  • Das Ergebnis im Serial Monitor sieht wie unten aus
COM6
Send
The limit switch: TOUCHED The stepper motor is STOPPED The stepper motor is STOPPED The stepper motor is STOPPED The stepper motor is STOPPED
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Code-Erklärung

Sie finden die Erläuterung in der Kommentarzeile des obigen Arduino-Codes.

ESP32-Code - Richtung des Schrittmotors durch einen Endschalter ändern

Der folgende Code lässt einen Schrittmotor unendlich drehen und seine Drehrichtung ändern, wenn ein Endschalter berührt wird.

/* * Dieser ESP32 Code wurde von newbiely.de entwickelt * Dieser ESP32 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/esp32/esp32-stepper-motor-and-limit-switch */ #include <ezButton.h> #include <AccelStepper.h> #define DIRECTION_CCW -1 #define DIRECTION_CW 1 #define MAX_POSITION 0x7FFFFFFF // maximum of position we can set (long type) ezButton limitSwitch(25); // ESP32 pin: GPIO25 AccelStepper stepper(AccelStepper::FULL4WIRE, 19, 18, 17, 16); // ESP32 pin: GPIO19, GPIO18, GPIO17, GPIO16 int direction = DIRECTION_CW; long targetPos = 0; void setup() { Serial.begin(9600); limitSwitch.setDebounceTime(50); // set debounce time to 50 milliseconds stepper.setMaxSpeed(500.0); // set the maximum speed stepper.setAcceleration(50.0); // set acceleration stepper.setSpeed(100); // set initial speed stepper.setCurrentPosition(0); // set position targetPos = direction * MAX_POSITION; stepper.moveTo(targetPos); } 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")); else Serial.println(F("ANTI-CLOCKWISE")); targetPos = direction * MAX_POSITION; stepper.setCurrentPosition(0); // set position stepper.moveTo(targetPos); } // without this part, the move will stop after reaching maximum position if (stepper.distanceToGo() == 0) { // if motor moved to the maximum position stepper.setCurrentPosition(0); // reset position to 0 stepper.moveTo(targetPos); // move the motor to maximum position again } stepper.run(); // MUST be called in loop() function }

Schnelle Schritte

  • 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 ESP32 hochzuladen.
  • Wenn die Verkabelung korrekt ist, sehen Sie, dass sich der Motor im Uhrzeigersinn dreht.
  • Berühren Sie den Endschalter.
  • Sie sehen, dass sich die Drehrichtung des Schrittmotors gegen den Uhrzeigersinn ändert.
  • Berühren Sie erneut den Endschalter.
  • Sie sehen, dass sich die Drehrichtung des Schrittmotors wieder zum Uhrzeigersinn ändert.
  • Das Ergebnis im seriellen Monitor sieht wie folgt 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  

ESP32-Code – Richtungswechsel des Schrittmotors durch zwei Endschalter

Der untenstehende Code lässt einen Schrittmotor endlos drehen und die Drehrichtung ändern, wenn einer von zwei Endschaltern berührt wird.

/* * Dieser ESP32 Code wurde von newbiely.de entwickelt * Dieser ESP32 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/esp32/esp32-stepper-motor-and-limit-switch */ #include <ezButton.h> #include <AccelStepper.h> #define DIRECTION_CCW -1 #define DIRECTION_CW 1 #define STATE_CHANGE_DIR 1 #define STATE_MOVE 2 #define STATE_MOVING 3 #define MAX_POSITION 0x7FFFFFFF // maximum of position we can set (long type) ezButton limitSwitch_1(25); // ESP32 pin: GPIO25 ezButton limitSwitch_2(26); // ESP32 pin: GPIO26 AccelStepper stepper(AccelStepper::FULL4WIRE, 19, 18, 17, 16); // ESP32 pin: GPIO19, GPIO18, GPIO17, GPIO16 int stepperState = STATE_MOVE; int direction = DIRECTION_CW; long targetPos = 0; 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 stepper.setMaxSpeed(500.0); // set the maximum speed stepper.setAcceleration(50.0); // set acceleration stepper.setSpeed(100); // set initial speed stepper.setCurrentPosition(0); // set position } void loop() { limitSwitch_1.loop(); // MUST call the loop() function first limitSwitch_2.loop(); // MUST call the loop() function first if (limitSwitch_1.isPressed()) { stepperState = STATE_CHANGE_DIR; Serial.println(F("The limit switch 1: TOUCHED")); } if (limitSwitch_2.isPressed()) { stepperState = STATE_CHANGE_DIR; Serial.println(F("The limit switch 2: TOUCHED")); } switch (stepperState) { case STATE_CHANGE_DIR: direction *= -1; // change direction Serial.print(F("The direction -> ")); if (direction == DIRECTION_CW) Serial.println(F("CLOCKWISE")); else Serial.println(F("ANTI-CLOCKWISE")); stepperState = STATE_MOVE; // after changing direction, go to the next state to move the motor break; case STATE_MOVE: targetPos = direction * MAX_POSITION; stepper.setCurrentPosition(0); // set position stepper.moveTo(targetPos); stepperState = STATE_MOVING; // after moving, go to the next state to keep the motor moving infinity break; case STATE_MOVING: // without this state, the move will stop after reaching maximum position if (stepper.distanceToGo() == 0) { // if motor moved to the maximum position stepper.setCurrentPosition(0); // reset position to 0 stepper.moveTo(targetPos); // move the motor to maximum position again } break; } stepper.run(); // MUST be called in loop() function }

Schnelle Schritte

  • Kopiere den obigen Code und öffne ihn in der Arduino IDE
  • Klicke auf den Hochladen-Button in der Arduino IDE, um den Code auf den ESP32 hochzuladen
  • Wenn die Verkabelung korrekt ist, wirst du sehen, dass sich der Motor im Uhrzeigersinn dreht.
  • Berühre den Grenzschalter 1.
  • Du wirst sehen, dass sich die Drehrichtung des Schrittmotors gegen den Uhrzeigersinn ändert.
  • Berühre den Grenzschalter 2.
  • Du wirst sehen, dass sich die Drehrichtung des Schrittmotors im Uhrzeigersinn ändert.
  • Das Ergebnis im seriellen Monitor sieht folgendermaßen 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!