Arduino - Stappenmotor en Eindschakelaar

In deze Arduino tutorial leert u hoe u Arduino, een eindschakelaar, L298N driver en een stappenmotor gebruikt. We gaan in detail behandelen:

Hardware Benodigd

1×Arduino Uno R3
1×USB 2.0 kabel type A/B
1×Eindschakelaar (KW12-3)
1×Eindschakelaar (V-156-1C25)
1×Stappenmotor Nema 17
1×L298N Motordriver Module
1×12V Voeding
1×DC-Stroomaansluiting
1×Jumperdraden
1×(Aanbevolen) Schroefklem Block Shield voor Arduino Uno
1×(Aanbevolen) Breadboard-Shield voor Arduino Uno
1×(Aanbevolen) Behuizing voor Arduino Uno
1×(Aanbevolen) Prototyping Basisplaat & Breadboard Kit voor Arduino Uno

Of u kunt de volgende kits kopen:

1×DIYables Sensorkit (30 sensoren/displays)
1×DIYables Sensorkit (18 sensoren/displays)
Openbaarmaking: Sommige van de links in deze sectie zijn Amazon-affiliate links. We kunnen een commissie ontvangen voor aankopen die via deze links worden gedaan, zonder extra kosten voor u. We waarderen uw steun.

Over Stappenmotor en Eindschakelaar

Als u nog niet bekend bent met de stappenmotor en eindschakelaar (pinout, werking, hoe te programmeren, etc.), bekijk dan de volgende tutorials:

Bedradingsschema

Deze tutorial bevat Arduino code voor twee situaties: Eén stappenmotor + één eindschakelaar, en één stappenmotor + twee eindschakelaars.

  • Bedradingsschema tussen de stappenmotor en één eindschakelaar
Arduino stappenmotor en eindschakelaar bedrading

This image is created using Fritzing. Click to enlarge image

  • Bedradingsschema tussen de stappenmotor en twee eindschakelaars
Arduino stappenmotor en twee eindschakelaars bedrading

This image is created using Fritzing. Click to enlarge image

※ Notiz:

Afhankelijk van de stappenmotor kan de bedrading tussen de stappenmotor en L298N verschillen. Bekijk daarom deze Arduino - Stappenmotor tutorial om te zien hoe u de stappenmotor aansluit op de L298N motor driver.

Arduino Code - Stappenmotor Stoppen met een Eindschakelaar

Er zijn verschillende manieren om een stappenmotor te stoppen:

  • Roep de functie stepper.stop() aan: Hiermee stopt de motor NIET direct, maar geleidelijk
  • Roep NIET de functie stepper.run() aan: Hiermee stopt de motor direct

De onderstaande code laat een stappenmotor oneindig draaien en stopt deze direct bij aanraking van de eindschakelaar

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

Snelle Stappen

  • Verbind de Arduino met de PC via de USB-kabel
  • Open de Arduino IDE, selecteer het juiste bord en poort
  • Ga naar het Libraries icoon in de linkerzijbalk van de Arduino IDE.
  • Zoek op “ezButton” en vind de button library van ArduinoGetStarted.com
  • Klik op de Install knop om de ezButton library te installeren.
Arduino button library
  • Zoek op “AccelStepper” en vind de AccelStepper library van Mike McCauley
  • Klik op de Install knop om de AccelStepper library te installeren.
Arduino AccelStepper library
  • Kopieer de bovenstaande code en open deze met de Arduino IDE
  • Klik op de Upload knop in de Arduino IDE om de code te uploaden naar de Arduino
  • Als de bedrading correct is, ziet u dat de motor met de klok mee draait.
  • Druk op de eindschakelaar
  • U zult zien dat de motor onmiddellijk stopt
  • Het resultaat op 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

Lees de regel-voor-regel uitleg in de commentaarregels van de code!

Arduino Code - Draairichting van Stappenmotor Veranderen met een Eindschakelaar

De onderstaande code laat een stappenmotor oneindig draaien en verandert de draairichting zodra de eindschakelaar wordt ingedrukt

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

Snelle Stappen

  • Kopieer de bovenstaande code en open deze met de Arduino IDE
  • Klik op de Upload knop in de Arduino IDE om de code naar de Arduino te uploaden
  • Als de bedrading correct is, draait de motor met de klok mee
  • Druk op de eindschakelaar
  • U zult zien dat de draairichting van de stappenmotor verandert naar tegen de klok in
  • Druk nogmaals op de eindschakelaar
  • U zult zien dat de draairichting weer verandert naar met de klok mee
  • Het resultaat op de Seriële Monitor ziet er zo 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 Code - Draairichting van Stappenmotor Veranderen met Twee Eindschakelaars

De onderstaande code laat een stappenmotor oneindig draaien en verandert de draairichting zodra één van de twee eindschakelaars wordt ingedrukt

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

Snelle Stappen

  • Kopieer de bovenstaande code en open deze met de Arduino IDE
  • Klik op de Upload knop in de Arduino IDE om de code naar de Arduino te uploaden
  • Als de bedrading correct is, draait de motor met de klok mee
  • Druk op eindschakelaar 1
  • U zult zien dat de draairichting verandert naar tegen de klok in
  • Druk op eindschakelaar 2
  • U zult zien dat de draairichting weer verandert naar met de klok mee
  • Het resultaat op 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.

Bekijk onze video tutorial voor een visuele begeleiding bij dit project! De video biedt extra inzichten om deze stappenmotor met eindschakelaar opstelling succesvol te laten werken.

※ 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!