ESP8266 - Interruptor de fin de carrera para motor paso a paso

Este tutorial explica cómo usar ESP8266 para controlar un motor paso a paso mediante un interruptor de límite y un controlador L298N. Específicamente, cubriremos:

Acerca del motor paso a paso y del interruptor de fin de carrera

Si no estás familiarizado con el motor paso a paso y el interruptor de fin de carrera (incluyendo la asignación de pines, su funcionamiento, la programación, etc.), los siguientes tutoriales pueden proporcionarte más información:

Diagrama de Cableado

Este tutorial proporciona el diagrama de cableado para dos casos: un motor paso a paso y un interruptor de fin de recorrido; un motor paso a paso y dos interruptores de fin de recorrido.

  • Diagrama de cableado entre ESP8266, motor paso a paso y un interruptor de fin de carrera.
Diagrama de cableado del motor paso a paso y del interruptor de límite ESP8266 NodeMCU

This image is created using Fritzing. Click to enlarge image

Para obtener m\u00e1s informaci\u00f3n, consulte Pines del ESP8266 y c\u00f3mo alimentar ESP8266 y otros componentes.

  • Diagrama de cableado entre ESP8266, el motor paso a paso y dos interruptores de fin de carrera.
Diagrama de cableado para ESP8266 NodeMCU, motor paso a paso y dos interruptores de límite

This image is created using Fritzing. Click to enlarge image

※ Nota:

La conexión de cableado entre el motor paso a paso y el L298N puede variar según el tipo de motor paso a paso. Por lo tanto, es importante echar un vistazo a este tutorial ESP8266 - Stepper Motor para entender cómo realizar la conexión.

Código ESP8266 - Detener el motor paso a paso mediante un interruptor de límite

Existen varios métodos para detener un motor paso a paso:

  • Invocar la función stepper.stop(): Esto no provocará una parada instantánea, sino una parada gradual.
  • Omitir la llamada a la función stepper.run(): Esto resultará en una parada inmediata del motor paso a paso.

El código que se muestra a continuación hará que un motor paso a paso gire de forma continua hasta que se active un fin de carrera, momento en el que se detendrá de inmediato.

/* * Este código de ESP8266 NodeMCU fue desarrollado por es.newbiely.com * Este código de ESP8266 NodeMCU se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/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")); } }

Pasos R\u00e1pidos

Para empezar con ESP8266 en el IDE de Arduino, siga estos pasos:

  • Consulta el tutorial de cómo configurar el entorno para ESP8266 en Arduino IDE si es la primera vez que usas ESP8266.
  • Conecta los componentes como se muestra en el diagrama.
  • Conecta la placa ESP8266 a tu computadora usando un cable USB.
  • Abre el IDE de Arduino en tu computadora.
  • Selecciona la placa ESP8266 correcta, como (p. ej. NodeMCU 1.0 (ESP-12E Module)), y su puerto COM respectivo.
  • Conecta un cable USB a la ESP8266 y al PC.
  • Abre el IDE de Arduino, selecciona la placa y el puerto apropiados.
  • Haz clic en el icono Librerías en la barra izquierda del IDE de Arduino.
  • Busca “ezButton”, luego localiza la biblioteca de botones proporcionada por ArduinoGetStarted.com.
  • Haz clic en el botón Instalar para instalar la biblioteca ezButton.
Biblioteca de botones para ESP8266 NodeMCU
  • Busca “AccelStepper” y localiza la biblioteca AccelStepper creada por Mike McCauley.
  • Pulsa el botón Instalar para añadir la biblioteca AccelStepper.
Biblioteca AccelStepper para ESP8266 NodeMCU
  • Copie el código y ábralo con el IDE de Arduino.
  • Haga clic en el botón Subir para transferir el código al ESP8266.
  • Si el cableado está hecho correctamente, el motor girará en sentido horario.
  • Pulse el interruptor de límite y el motor se detendrá de inmediato.
  • El resultado que aparece en el Monitor Serial debería verse así.
Newbiely | Arduino IDE 2.3.8
──
File
Edit
Sketch
Tools
Help
Nodemcu 1.0 (ESP-12E Module)
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Nodemcu 1.0 (ESP-12E Module)' on 'COM15')
New Line
9600 baud
The limit switch: TOUCHED The stepper motor is STOPPED The stepper motor is STOPPED The stepper motor is STOPPED The stepper motor is STOPPED
Ln 11, Col 1
Nodemcu 1.0 (ESP-12E Module) on COM15
2

Explicación del código

Consulta la explicación línea por línea contenida en los comentarios del código fuente.

Código ESP8266: Cambiar la dirección del motor paso a paso mediante un interruptor de límite

El código que se muestra a continuación hace que un motor paso a paso gire de forma continua y que invierta su dirección cuando se active un interruptor de fin de carrera.

/* * Este código de ESP8266 NodeMCU fue desarrollado por es.newbiely.com * Este código de ESP8266 NodeMCU se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/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 }

Pasos R\u00e1pidos

Para empezar con ESP8266 en el IDE de Arduino, siga estos pasos:

  • Consulta el tutorial cómo configurar el entorno para ESP8266 en Arduino IDE si es la primera vez que usas ESP8266.
  • Conecta los componentes tal como se muestra en el diagrama.
  • Conecta la placa ESP8266 a tu computadora usando un cable USB.
  • Abre Arduino IDE en tu computadora.
  • Elige la placa ESP8266 correcta, por ejemplo (p. ej. NodeMCU 1.0 (ESP-12E Module)), y su puerto COM respectivo.
  • Copia el código y ábrelo con el Arduino IDE.
  • Haz clic en el botón Upload para enviar el código al ESP8266.
  • Si el cableado es correcto, el motor girará en sentido horario.
  • Al tocar el interruptor de límite, la rotación del motor paso a paso se invertirá hacia el sentido antihorario.
  • Al volver a tocar el interruptor de límite, el motor paso a paso volverá a girar en sentido horario.
  • La salida en el Monitor Serial debería verse así.
Newbiely | Arduino IDE 2.3.8
──
File
Edit
Sketch
Tools
Help
Nodemcu 1.0 (ESP-12E Module)
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Nodemcu 1.0 (ESP-12E Module)' on 'COM15')
New Line
9600 baud
The limit switch: TOUCHED The direction -> ANTI-CLOCKWISE The limit switch: TOUCHED The direction -> CLOCKWISE
Ln 11, Col 1
Nodemcu 1.0 (ESP-12E Module) on COM15
2

Código ESP8266 - Cambiar la dirección del motor paso a paso mediante dos interruptores de límite

El código que se muestra a continuación hace que un motor paso a paso gire de forma continua, y cambiará su dirección cuando se toque cualquiera de dos interruptores de límite.

/* * Este código de ESP8266 NodeMCU fue desarrollado por es.newbiely.com * Este código de ESP8266 NodeMCU se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/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 }

Pasos R\u00e1pidos

  • Conecte los componentes como se muestra en el diagrama.
  • Conecte la placa ESP8266 a su computadora usando un cable USB.
  • Abra el Arduino IDE en su computadora.
  • Elija la placa ESP8266 correcta, como (p. ej. NodeMCU 1.0 (ESP-12E Module)), y su puerto COM correspondiente.
  • Copie el código y ábralo con el Arduino IDE.
  • Haga clic en el botón Upload en el IDE para cargar el código en el ESP8266.
  • Si el cableado es correcto, el motor debería girar en sentido horario.
  • Al tocar el interruptor de límite 1, la dirección del motor paso a paso debe cambiar a antihorario.
  • Al tocar el interruptor de límite 2 debería hacer que el motor invierta la dirección nuevamente, esta vez en sentido horario.
  • El resultado mostrado en el Monitor Serial debería verse como se muestra a continuación.
Newbiely | Arduino IDE 2.3.8
──
File
Edit
Sketch
Tools
Help
Nodemcu 1.0 (ESP-12E Module)
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Nodemcu 1.0 (ESP-12E Module)' on 'COM15')
New Line
9600 baud
The limit switch 1: TOUCHED The direction -> ANTI-CLOCKWISE The limit switch 2: TOUCHED The direction -> CLOCKWISE
Ln 11, Col 1
Nodemcu 1.0 (ESP-12E Module) on COM15
2

Video Tutorial

Estamos considerando crear tutoriales en video. Si considera que los tutoriales en video son importantes, suscríbase a nuestro canal de YouTube para motivarnos a crear los videos.

※ NUESTROS MENSAJES

  • No dude en compartir el enlace de este tutorial. Sin embargo, por favor no use nuestro contenido en otros sitios web. Hemos invertido mucho esfuerzo y tiempo en crear el contenido, ¡por favor respete nuestro trabajo!