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í.
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  

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í.
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  

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.
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

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!