Arduino Nano - Stappenmotor Limietschakelaar

Deze tutorial legt uit hoe u een Arduino Nano gebruikt om een stappenmotor te bedienen via een limietschakelaar en een L298N driver. Specifiek behandelen we:

Over Stappenmotor en Limietschakelaar

Als u niet vertrouwd bent met de stappenmotor en limietschakelaar (inclusief pinout, functionaliteit en programmeren), kunnen de volgende tutorials u helpen dit te leren:

Bedradingsschema

Deze tutorial biedt het bedradingsschema voor twee situaties: één stappenmotor + één limietschakelaar, en één stappenmotor + twee limietschakelaars.

  • Bedradingsschema tussen Arduino Nano, stappenmotor en een limietschakelaar.
Arduino Nano stappenmotor en limietschakelaar bedrading

This image is created using Fritzing. Click to enlarge image

  • Bedradingsschema tussen Arduino Nano, stappenmotor en twee limietschakelaars.
Arduino Nano stappenmotor en twee limietschakelaars bedrading

This image is created using Fritzing. Click to enlarge image

※ Notiz:

De bedradingsverbinding tussen de stappenmotor en de L298N kan variëren afhankelijk van het type stappenmotor. Raadpleeg voor een succesvolle verbinding de tutorial Arduino Nano - Stappenmotor voor instructies over het aansluiten van de stappenmotor op de L298N motor driver.

Arduino Nano Code - Stappenmotor Stoppen met Limietschakelaar

Een stappenmotor kunt u op verschillende manieren stoppen:

  • Gebruik de stepper.stop() functie: Dit zorgt niet voor een onmiddellijke stop, maar laat de motor geleidelijk vertraagt stoppen.
  • Roep de stepper.run() functie niet aan: Dit zorgt ervoor dat de stappenmotor direct stopt.

De onderstaande code laat een stappenmotor continu draaien totdat de limietschakelaar wordt ingedrukt.

/* * Deze Arduino Nano code is ontwikkeld door newbiely.nl * Deze Arduino Nano code wordt zonder enige beperking aan het publiek beschikbaar gesteld. * Voor volledige instructies en schema's, bezoek: * https://newbiely.nl/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")); } }

Snelle Stappen

  • Verbind de Arduino Nano met een computer via een USB-kabel.
  • Open de Arduino IDE, kies het juiste bord en de juiste poort.
  • Klik op het Libraries icoon in de linkerzijbalk van de Arduino IDE.
  • Zoek naar “ezButton” en vind de button library van ArduinoGetStarted.com.
  • Druk op de Installeren knop om de ezButton bibliotheek te installeren.
Arduino Nano button library
  • Zoek naar “AccelStepper” en vind de AccelStepper bibliotheek gemaakt door Mike McCauley.
  • Druk daarna op de Installeren knop om deze toe te voegen.
Arduino Nano AccelStepper library
  • Kopieer de code hierboven en open deze in de Arduino IDE.
  • Klik in de Arduino IDE op de Upload knop om de code te compileren en te uploaden naar de Arduino Nano.
  • Als de bedrading correct is, zal de motor met de klok mee draaien.
  • Wanneer de limietschakelaar wordt ingedrukt, stopt de motor direct.
  • De output in de Seriële Monitor ziet er als volgt uit.
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 Uitleg

Bekijk de regel-voor-regel uitleg in de commentaarregels van de broncode!

Arduino Nano Code - Draairichting Stappenmotor Veranderen met Limietschakelaar

Een stappenmotor draait continu en de draairichting wordt veranderd wanneer een limietschakelaar wordt ingedrukt. Dit wordt gerealiseerd met de volgende code:

/* * Deze Arduino Nano code is ontwikkeld door newbiely.nl * Deze Arduino Nano code wordt zonder enige beperking aan het publiek beschikbaar gesteld. * Voor volledige instructies en schema's, bezoek: * https://newbiely.nl/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 }

Snelle Stappen

  • Kopieer de code en open deze met de Arduino IDE.
  • Klik in de IDE op de Upload knop om de code naar de Arduino Nano te uploaden.
  • Als de bedrading correct is, draait de motor met de klok mee.
  • Druk de limietschakelaar in en de draairichting van de stappenmotor wordt omgedraaid naar tegen de klok in.
  • Druk de limietschakelaar opnieuw in en de stappenmotor draait weer met de klok mee.
  • De output in de Seriële Monitor ziet er als volgt uit.
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 - Draairichting Stappenmotor Veranderen met twee Limietschakelaars

Laat een stappenmotor continu draaien en wijzig de draairichting wanneer één van de twee limietschakelaars wordt ingedrukt.

/* * Deze Arduino Nano code is ontwikkeld door newbiely.nl * Deze Arduino Nano code wordt zonder enige beperking aan het publiek beschikbaar gesteld. * Voor volledige instructies en schema's, bezoek: * https://newbiely.nl/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 }

Snelle Stappen

  • Kopieer de bovenstaande code en open deze in de Arduino IDE.
  • Klik op de Upload knop om de code naar de Arduino Nano te verzenden.
  • Als de bedrading correct is, zal de motor met de klok mee draaien.
  • Bij indrukken van limietschakelaar 1, zal de draairichting van de stappenmotor worden omgedraaid naar tegen de klok in.
  • Bij indrukken van limietschakelaar 2 zal de draairichting weer veranderen naar met de klok mee.
  • De output in de Seriële Monitor ziet er als volgt uit.
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

We overwegen het maken van videotutorials. Als u videotutorials belangrijk vindt, abonneer u dan op ons YouTube-kanaal om ons te motiveren de video's te maken.

※ ONZE BERICHTEN

  • U bent welkom om de link naar deze tutorial te delen. Gebruik onze inhoud echter niet op andere websites. We hebben veel moeite en tijd gestoken in het maken van de inhoud, respecteer alstublieft ons werk!