Arduino Nano - Endschalter für Schrittmotor

Dieses Tutorial zeigt dir, wie man einen Arduino Nano verwendet, um einen Schrittmotor über einen Endschalter und einen L298N-Treiber zu steuern. Genauer gesagt behandeln wir Folgendes:

Erforderliche Hardware

1×Official Arduino Nano
1×Alternativ: DIYables ATMEGA328P Nano Development Board
1×USB-A-zu-Mini-B-Kabel
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 Arduino Nano
1×(Empfohlen) Breakout-Erweiterungsboard für Arduino Nano
1×(Empfohlen) Stromverteiler für Arduino Nano

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, Funktionalität und Programmierung) nicht vertraut sind, können Ihnen die folgenden Tutorials beim Lernen helfen:

Verdrahtungsdiagramm

Dieses Tutorial liefert das Verdrahtungsschema für zwei Fälle: einen Schrittmotor + einen Endschalter, einen Schrittmotor + zwei Endschalter.

  • Verdrahtungsdiagramm zwischen ESP8266, Schrittmotor und einem Endschalter.
Arduino Nano Schrittmotor- und Endschalter-Verdrahtungsdiagramm

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

  • Schaltplan zwischen dem ESP8266, dem Schrittmotor und zwei Endschaltern.
Arduino Nano Schrittmotor und zwei Endschalter Verdrahtungsdiagramm

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

Siehe Der beste Weg, den Arduino Nano und andere Komponenten mit Strom zu versorgen.

※ Notiz:

Die Verkabelung zwischen dem Schrittmotor und dem L298N kann je nach Typ des Schrittmotors variieren. Um eine erfolgreiche Verbindung zu gewährleisten, lesen Sie bitte das Arduino Nano - Stepper Motor Tutorial für Anweisungen dazu, wie der Schrittmotor an den L298N-Motortreiber angeschlossen wird.

Arduino Nano-Quellcode – Schrittmotor durch Endschalter stoppen

Man kann einen Schrittmotor auf verschiedene Arten stoppen:

  • Rufen Sie die Funktion stepper.stop() auf: Dies wird den Motor nicht sofort zum Stillstand bringen, sondern dafür sorgen, dass er allmählich verlangsamt wird
  • Rufen Sie nicht die Funktion stepper.run() auf: Dies wird dazu führen, dass der Schrittmotor sofort zum Stillstand kommt

Der untenstehende Code bewirkt, dass sich ein Schrittmotor kontinuierlich dreht, bis ein Endschalter betätigt wird.

/* * Dieser Arduino Nano Code wurde von newbiely.de entwickelt * Dieser Arduino Nano 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-nano/arduino-nano-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(5); // create ezButton object for pin D5 AccelStepper stepper(AccelStepper::FULL4WIRE, A3, A2, A1, A0); 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

  • Verbinde das Arduino Nano mit einem Computer über ein USB-Kabel.
  • Öffne die Arduino IDE, wähle das richtige Board und den richtigen Port.
  • Klicke auf das Bibliotheken-Symbol in der linken Leiste der Arduino IDE.
  • Suche nach “ezButton” und finde die Button-Bibliothek von ArduinoGetStarted.com.
  • Drücke den Install-Button, um die ezButton-Bibliothek zu installieren.
Arduino Nano Button-Bibliothek
  • Suchen Sie nach “AccelStepper” und finden Sie die von Mike McCauley erstellte AccelStepper-Bibliothek.
  • Drücken Sie dann die Schaltfläche Installieren, um sie hinzuzufügen.
Arduino Nano AccelStepper-Bibliothek
  • 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 zu kompilieren und auf den Arduino Nano hochzuladen.
  • Wenn die Verkabelung korrekt ist, sollte sich der Motor im Uhrzeigersinn drehen.
  • Wenn der Endschalter betätigt wird, sollte der Motor sofort anhalten.
  • Das auf dem seriellen Monitor angezeigte Ergebnis sollte wie folgt 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!

Arduino Nano Code - Drehrichtung des Schrittmotors durch einen Grenzschalter ändern

Ein Schrittmotor wird kontinuierlich gedreht, und seine Drehrichtung wird geändert, wenn ein Endschalter berührt wird. Dies wird durch den folgenden Code erreicht:

/* * Dieser Arduino Nano Code wurde von newbiely.de entwickelt * Dieser Arduino Nano 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-nano/arduino-nano-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(5); // create ezButton object for pin D5 AccelStepper stepper(AccelStepper::FULL4WIRE, A3, A2, A1, A0); 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

  • 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 Arduino Nano hochzuladen.
  • Wenn die Verkabelung korrekt ist, dreht sich der Motor im Uhrzeigersinn.
  • Berühren Sie den Endschalter, und die Drehrichtung des Schrittmotors wird auf Gegen-Uhrzeigersinn umgekehrt.
  • Berühren Sie den Endschalter erneut, und der Schrittmotor wird sich im Uhrzeigersinn drehen.
  • Das Ergebnis im Serial Monitor sollte so 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  

Arduino Nano Code - Ändern Sie die Richtung des Schrittmotors durch zwei Endschalter

Lassen Sie einen Schrittmotor kontinuierlich drehen und die Drehrichtung wechseln, wenn einer der beiden Endschalter betätigt wird.

/* * Dieser Arduino Nano Code wurde von newbiely.de entwickelt * Dieser Arduino Nano 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-nano/arduino-nano-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(5); // create ezButton object for pin D5 ezButton limit_switch_2(12); // create ezButton object for pin D12 AccelStepper stepper(AccelStepper::FULL4WIRE, A3, A2, A1, A0); 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

  • Kopieren Sie den obigen Code und öffnen Sie ihn in der Arduino IDE.
  • Klicken Sie auf die Schaltfläche Hochladen, um den Code an das Arduino Nano zu senden.
  • Wenn die Verkabelung korrekt ist, sollte sich der Motor im Uhrzeigersinn drehen.
  • Wenn Sie Grenzschalter 1 berühren, sollte sich die Drehrichtung des Schrittmotors gegen den Uhrzeigersinn ändern.
  • Wenn Sie Grenzschalter 2 berühren, sollte sich die Drehrichtung des Schrittmotors wieder auf den Uhrzeigersinn ändern.
  • Das Ergebnis im seriellen Monitor sollte so 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!