ESP8266 - Schrittmotor-Endschalter

Dieses Tutorial erläutert, wie Sie den ESP8266 verwenden, um einen Schrittmotor über einen Endschalter und einen L298N-Treiber zu steuern. Genauer gesagt werden wir Folgendes behandeln:

Erforderliche Hardware

1×ESP8266 NodeMCU
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 ESP8266
1×(Empfohlen) Stromverteiler für ESP8266 Typ-C

Oder Sie können die folgenden Kits kaufen:

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 mit dem Schrittmotor und dem Endschalter (einschließlich Pinbelegung, Funktionsweise, Programmierung usw.) nicht vertraut sind, können Ihnen die folgenden Tutorials weitere Informationen liefern:

Verdrahtungsdiagramm

Dieses Tutorial enthält das Verdrahtungsdiagramm für zwei Fälle: Einen Schrittmotor + einen Endschalter, Einen Schrittmotor + zwei Endschalter.

  • Verdrahtungsdiagramm zwischen ESP8266, Schrittmotor und einem Endschalter.
ESP8266 NodeMCU-Schrittmotor- und Endschalter-Verdrahtungsdiagramm

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

Weitere Informationen finden Sie unter ESP8266-Pinbelegung und wie man ESP8266 und andere Komponenten mit Strom versorgt.

  • Verdrahtungsdiagramm zwischen ESP8266, Schrittmotor und zwei Endschaltern.
Verdrahtungsdiagramm für ESP8266 NodeMCU-Schrittmotor und zwei Endschalter

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

※ Notiz:

Die Verdrahtung zwischen dem Schrittmotor und dem L298N kann je nach Typ des Schrittmotors variieren. Daher ist es wichtig, sich dieses ESP8266 - Schrittmotor Tutorial anzusehen, um zu verstehen, wie die Verbindung hergestellt wird.

ESP8266-Code - Schrittmotor durch einen Endschalter stoppen

Es gibt verschiedene Methoden, einen Schrittmotor zu stoppen:

  • Rufen Sie die Funktion stepper.stop() auf: Dies wird keinen sofortigen Stopp verursachen, sondern einen allmählichen Stopp
  • Den Aufruf der Funktion stepper.run() weglassen: Dies führt zu einem sofortigen Stopp des Schrittmotors

Der untenstehende Code bewirkt, dass sich ein Schrittmotor kontinuierlich dreht, bis ein Endschalter betätigt wird, woraufhin der Motor sofort stoppt.

/* * Dieser ESP8266 NodeMCU Code wurde von newbiely.de entwickelt * Dieser ESP8266 NodeMCU 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/esp8266/esp8266-stepper-motor-limit-switch */ #include <ezButton.h> #include <AccelStepper.h> #define MAX_POSITION 0x7FFFFFFF // maximum of position we can set (long type) ezButton limit_switch(D0); // create ezButton object that attach to the ESP8266 pin D0 AccelStepper stepper(AccelStepper::FULL4WIRE, D1, D2, D5, D6); bool is_stopped = false; void setup() { Serial.begin(9600); limit_switch.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() { limit_switch.loop(); // MUST call the loop() function first if (limit_switch.isPressed()) { Serial.println(F("The limit switch: TOUCHED")); is_stopped = true; } if (is_stopped == 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 { // If the stepper.run() function is not invoked, the motor stops immediately // NOTE: invoking the stepper.stop() does NOT stop the motor immediately. Serial.println(F("The stepper motor is STOPPED")); } }

Schnelle Schritte

Um mit dem ESP8266 in der Arduino IDE zu beginnen, befolgen Sie diese Schritte:

  • Schau dir das Tutorial zur Einrichtung der Entwicklungsumgebung für ESP8266 in der Arduino IDE an, falls du ESP8266 zum ersten Mal verwendest.
  • Verdrahte die Bauteile wie im Diagramm gezeigt.
  • Verbinde das ESP8266-Board über ein USB-Kabel mit deinem Computer.
  • Öffne die Arduino IDE auf deinem Computer.
  • Wähle das richtige ESP8266-Board, z. B. NodeMCU 1.0 (ESP-12E-Modul), und den entsprechenden COM-Port.
  • Schließe ein USB-Kabel an das ESP8266-Board und den PC an.
  • Öffne die Arduino IDE und wähle das passende Board und den passenden Port aus.
  • Klicke auf das Libraries-Symbol in der linken Leiste der Arduino IDE.
  • Suche nach “ezButton”, finde anschließend die von ArduinoGetStarted.com bereitgestellte Button-Bibliothek.
  • Drücke die Install-Schaltfläche, um die ezButton-Bibliothek zu installieren.
ESP8266 NodeMCU-Tasterbibliothek
  • Suchen Sie nach “AccelStepper” und finden Sie die von Mike McCauley erstellte AccelStepper-Bibliothek.
  • Drücken Sie die Schaltfläche Installieren, um die AccelStepper-Bibliothek hinzuzufügen.
ESP8266 NodeMCU AccelStepper-Bibliothek
  • Kopiere den Code und öffne ihn mit der Arduino-IDE.
  • Klicke auf die Hochladen-Schaltfläche, um den Code auf den ESP8266 zu übertragen.
  • Wenn die Verkabelung korrekt ist, dreht sich der Motor im Uhrzeigersinn.
  • Tippe den Endschalter an, und der Motor wird sofort gestoppt.
  • Das Ergebnis, das im Serial Monitor angezeigt wird, sollte so aussehen.
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

Schau dir die zeilenweise Erklärung an, die in den Kommentaren des Quellcodes enthalten ist!

ESP8266-Code - Richtungsänderung des Schrittmotors durch einen Endschalter

Der untenstehende Code bewirkt, dass sich ein Schrittmotor kontinuierlich dreht, und die Drehrichtung wird umgekehrt, wenn ein Endschalter berührt wird.

/* * Dieser ESP8266 NodeMCU Code wurde von newbiely.de entwickelt * Dieser ESP8266 NodeMCU 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/esp8266/esp8266-stepper-motor-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 limit_switch(D0); // create ezButton object that attach to the ESP8266 pin D0 AccelStepper stepper(AccelStepper::FULL4WIRE, D1, D2, D5, D6); int direction = DIRECTION_CW; long target_pos = 0; void setup() { Serial.begin(9600); limit_switch.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 target_pos = direction * MAX_POSITION; stepper.moveTo(target_pos); } void loop() { limit_switch.loop(); // MUST call the loop() function first if (limit_switch.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")); target_pos = direction * MAX_POSITION; stepper.setCurrentPosition(0); // set position stepper.moveTo(target_pos); } // 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(target_pos); // move the motor to maximum position again } stepper.run(); // MUST be called in loop() function }

Schnelle Schritte

Um mit ESP8266 in der Arduino-IDE zu beginnen, befolgen Sie diese Schritte:

  • Schau dir das Tutorial wie man die Umgebung für ESP8266 in der Arduino IDE einrichtet an, falls dies dein erstes Mal mit ESP8266 ist.
  • Verbinde die Bauteile wie im Diagramm gezeigt.
  • Schließe das ESP8266-Board mit einem USB-Kabel an deinen Computer an.
  • Öffne die Arduino IDE auf deinem Computer.
  • Wähle das richtige ESP8266-Board, z. B. NodeMCU 1.0 (ESP-12E Module), und den entsprechenden COM-Port.
  • Kopiere den Code und öffne ihn in der Arduino IDE.
  • Klicke auf die Schaltfläche Upload, um den Code an den ESP8266 zu senden.
  • Wenn die Verkabelung korrekt ist, dreht sich der Motor im Uhrzeigersinn.
  • Beim Berühren des Grenzschalters dreht sich der Schrittmotor gegen den Uhrzeigersinn.
  • Wenn du den Grenzschalter erneut berührst, dreht sich der Schrittmotor wieder im Uhrzeigersinn.
  • Die Ausgabe im Serial Monitor sollte wie folgt aussehen.
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  

ESP8266-Code - Die Richtung des Schrittmotors durch zwei Endschalter ändern

Der unten stehende Code lässt einen Schrittmotor kontinuierlich drehen, und er kehrt seine Drehrichtung um, wenn einer von zwei Endschaltern berührt wird.

/* * Dieser ESP8266 NodeMCU Code wurde von newbiely.de entwickelt * Dieser ESP8266 NodeMCU 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/esp8266/esp8266-stepper-motor-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 limit_switch_1(D0); // create ezButton object that attach to the ESP8266 pin D0 ezButton limit_switch_2(D8); // create ezButton object that attach to the ESP8266 pin D8 AccelStepper stepper(AccelStepper::FULL4WIRE, D1, D2, D5, D6); int stepper_state = STATE_MOVE; int direction = DIRECTION_CW; long target_pos = 0; void setup() { Serial.begin(9600); limit_switch_1.setDebounceTime(50); // set debounce time to 50 milliseconds limit_switch_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() { limit_switch_1.loop(); // MUST call the loop() function first limit_switch_2.loop(); // MUST call the loop() function first if (limit_switch_1.isPressed()) { stepper_state = STATE_CHANGE_DIR; Serial.println(F("The limit switch 1: TOUCHED")); } if (limit_switch_2.isPressed()) { stepper_state = STATE_CHANGE_DIR; Serial.println(F("The limit switch 2: TOUCHED")); } switch (stepper_state) { 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")); stepper_state = STATE_MOVE; // after changing direction, go to the next state to move the motor break; case STATE_MOVE: target_pos = direction * MAX_POSITION; stepper.setCurrentPosition(0); // set position stepper.moveTo(target_pos); stepper_state = 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(target_pos); // move the motor to maximum position again } break; } stepper.run(); // MUST be called in loop() function }

Schnelle Schritte

  • Verdrahten Sie die Komponenten wie im Diagramm gezeigt.
  • Schließen Sie das ESP8266-Board über ein USB-Kabel an Ihren Computer an.
  • Öffnen Sie die Arduino-IDE auf Ihrem Computer.
  • Wählen Sie das richtige ESP8266-Board, z. B. NodeMCU 1.0 (ESP-12E Module), und den jeweiligen COM-Port.
  • Kopieren Sie den Code und öffnen Sie ihn mit der Arduino-IDE.
  • Klicken Sie in der IDE auf die Hochladen-Schaltfläche, um den Code auf den ESP8266 hochzuladen.
  • Wenn die Verkabelung korrekt ist, sollte der Motor sich im Uhrzeigersinn drehen.
  • Wenn Sie Endschalter 1 berühren, sollte sich die Drehrichtung des Schrittmotors auf gegen den Uhrzeigersinn ändern.
  • Beim Berühren des Endschalters 2 sollte der Motor erneut die Richtung ändern, diesmal wieder zum Uhrzeigersinn.
  • Das im Serial Monitor angezeigte Ergebnis sollte wie folgt aussehen.
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!