Arduino - Schrittmotor und Endschalter

In diesem Arduino-Tutorial lernen wir, wie man Arduino, Endschalter, den L298N-Treiber und einen Schrittmotor verwendet. Genauer gesagt werden wir Folgendes lernen:

Über Schrittmotor und Endschalter

Wenn du nichts über den Schrittmotor und den Endschalter weißt (Pinbelegung, Funktionsweise, Programmierung ...), lerne in den folgenden Tutorials:

Verdrahtungsdiagramm

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

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

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

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

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

※ Notiz:

Je nach Schrittmotor kann die Verdrahtungsverbindung zwischen dem Schrittmotor und dem L298N unterschiedlich sein. Bitte werfen Sie einen genauen Blick auf dieses Arduino - Schrittmotor Tutorial, um zu sehen, wie man den Schrittmotor an den L298N-Motortreiber anschließt.

Arduino-Code - Schrittmotor durch einen Endschalter stoppen

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

  • Rufen Sie die Funktion stepper.stop() auf: Auf diese Weise stoppt der Schrittmotor nicht sofort, 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 endlos drehen und stoppt ihn sofort, 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-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(A0); // create ezButton object that attach to pin A0; AccelStepper stepper(AccelStepper::FULL4WIRE, 7, 6, 5, 4); 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

  • Schließe Arduino über ein USB-Kabel an den PC an
  • Öffne die Arduino IDE, wähle das richtige Board und den richtigen Port
  • Gehe zum Bibliotheken-Symbol in der linken Leiste der Arduino IDE.
  • Suche „ezButton“, und finde dann die Button-Bibliothek von ArduinoGetStarted.com
  • Klicke auf die Installieren-Schaltfläche, um die ezButton-Bibliothek zu installieren.
Arduino-Tasterbibliothek
  • Suchen Sie “AccelStepper”, dann finden Sie die AccelStepper-Bibliothek von Mike McCauley
  • Klicken Sie auf die Schaltfläche Installieren, um die AccelStepper-Bibliothek zu installieren.
Arduino AccelStepper-Bibliothek
  • Kopieren Sie den obigen Code und öffnen Sie ihn mit der Arduino IDE
  • Klicken Sie auf die Hochladen-Schaltfläche in der Arduino IDE, um den Code auf Arduino hochzuladen
  • Wenn die Verkabelung korrekt ist, sehen Sie, dass sich der Motor im Uhrzeigersinn dreht
  • Berühren Sie den Endschalter
  • Sie sehen, dass der Motor sofort stoppt
  • Das Ergebnis im Seriemonitor sieht wie folgt 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 Erklärung in der Kommentarzeile des obigen Arduino-Codes.

Arduino-Code - Richtungswechsel des Schrittmotors durch einen Grenzschalter

Der unten stehende Code lässt einen Schrittmotor endlos drehen und die Richtung ändern, wenn ein Endschalter betätigt 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-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(A0); // create ezButton object that attach to pin A0; AccelStepper stepper(AccelStepper::FULL4WIRE, 7, 6, 5, 4); 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 mit der Arduino IDE.
  • Klicken Sie auf die Schaltfläche Hochladen 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 werden sehen, dass sich die Richtung des Schrittmotors gegen den Uhrzeigersinn ändert.
  • Berühren Sie erneut den Endschalter.
  • Sie werden sehen, dass sich die Richtung des Schrittmotors wieder zum Uhrzeigersinn ändert.
  • Das Ergebnis im seriellen Monitor 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 Schrittmotors durch zwei Endschalter

Der untenstehende Code lässt einen Schrittmotor unendlich drehen und die Richtung ändern, wenn einer der beiden 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-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(A0); // create ezButton object that attach to pin A0; ezButton limitSwitch_2(A1); // create ezButton object that attach to pin A1; AccelStepper stepper(AccelStepper::FULL4WIRE, 7, 6, 5, 4); 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

  • Kopieren Sie den obigen Code und öffnen Sie ihn mit der Arduino-IDE
  • Klicken Sie in der Arduino-IDE auf die Schaltfläche Hochladen, um den Code auf den Arduino hochzuladen
  • Wenn die Verkabelung korrekt ist, sehen Sie, dass der Motor sich im Uhrzeigersinn dreht
  • Berühren Sie den Endschalter 1
  • Sie sehen, dass sich die Richtung des Schrittmotors gegen den Uhrzeigersinn ändert
  • Berühren Sie den Endschalter 2
  • Sie sehen, dass sich die Richtung des Schrittmotors im 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!