ESP8266 - Chave de Fim de Curso do Motor de Passo

Este tutorial ensina como usar o ESP8266 para controlar um motor de passo por meio de uma chave de fim de curso e de um driver L298N. Especificamente, vamos abordar:

Sobre o Motor de Passo e a Chave de Fim de Curso

Se você não está familiarizado com o motor de passo e a chave de fim de curso (incluindo pinagem, funcionamento, programação etc.), os tutoriais a seguir podem dar mais informações:

Diagrama de Ligação

Este tutorial traz o diagrama de ligação para dois casos: Um motor de passo + uma chave de fim de curso, Um motor de passo + duas chaves de fim de curso.

  • Diagrama de Ligação entre o ESP8266, o motor de passo e, e uma chave de fim de curso.
The wiring diagram between ESP8266 NodeMCU and stepper motor and limit switch

This image is created using Fritzing. Click to enlarge image

Para mais informações, veja Pinagem do ESP8266 e como alimentar o ESP8266 e outros componentes.

  • Diagrama de Ligação entre o ESP8266, o motor de passo e, e duas chaves de fim de curso.
The wiring diagram between ESP8266 NodeMCU and stepper motor and two limit switches

This image is created using Fritzing. Click to enlarge image

※ Nota:

A ligação entre o motor de passo e o L298N pode variar dependendo do tipo de motor de passo. Por isso, é importante dar uma olhada neste tutorial ESP8266 - Motor de Passo para entender como fazer a conexão.

Código ESP8266 - Parar o Motor de Passo com uma Chave de Fim de Curso

Existem vários métodos para parar um motor de passo:

  • Chamar a função stepper.stop(): Isso não causa uma parada instantânea, mas sim gradual
  • Omitir a chamada da função stepper.run(): Isso resulta em uma parada imediata do motor de passo

O código abaixo faz o motor de passo girar continuamente até que uma chave de fim de curso seja acionada, e então ele para imediatamente.

/* * Este código de ESP8266 NodeMCU foi desenvolvido por pt.newbiely.com * Este código de ESP8266 NodeMCU é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.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")); } }

Passos Rápidos

Para começar com o ESP8266 no Arduino IDE, siga estes passos:

  • Confira o tutorial como configurar o ambiente para o ESP8266 no Arduino IDE se esta for a sua primeira vez usando o ESP8266.
  • Ligue os componentes como mostrado no diagrama.
  • Conecte a placa ESP8266 ao seu computador usando um cabo USB.
  • Abra o Arduino IDE no seu computador.
  • Escolha a placa ESP8266 correta, como (por exemplo, NodeMCU 1.0 (ESP-12E Module)), e a respectiva porta COM.
  • Conecte um cabo USB ao ESP8266 e ao PC.
  • Abra o Arduino IDE, selecione a placa e a porta apropriadas.
  • Clique no ícone Libraries na barra esquerda do Arduino IDE.
  • Pesquise por “ezButton” e localize a biblioteca de botão fornecida por ArduinoGetStarted.com.
  • Pressione o botão Install para instalar a biblioteca ezButton.
ESP8266 NodeMCU button library
  • Procure por “AccelStepper” e localize a biblioteca AccelStepper criada por Mike McCauley.
  • Pressione o botão Install para adicionar a biblioteca AccelStepper.
ESP8266 NodeMCU AccelStepper library
  • Copie o código e abra-o com o Arduino IDE.
  • Clique no botão Upload para transferir o código para o ESP8266.
  • Se a ligação estiver correta, o motor vai girar no sentido horário.
  • Toque na chave de fim de curso e o motor vai parar na hora.
  • O resultado que aparece no Serial Monitor deve ser parecido com este.
∞
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

Explicação do Código

Confira a explicação linha por linha contida nos comentários do código-fonte!

Código ESP8266 - Mudar a Direção do Motor de Passo com uma Chave de Fim de Curso

O código abaixo faz um motor de passo girar continuamente, e ele inverte sua direção quando uma chave de fim de curso é tocada.

/* * Este código de ESP8266 NodeMCU foi desenvolvido por pt.newbiely.com * Este código de ESP8266 NodeMCU é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.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 }

Passos Rápidos

Para começar com o ESP8266 no Arduino IDE, siga estes passos:

  • Confira o tutorial como configurar o ambiente para o ESP8266 no Arduino IDE se esta for a sua primeira vez usando o ESP8266.
  • Ligue os componentes como mostrado no diagrama.
  • Conecte a placa ESP8266 ao seu computador usando um cabo USB.
  • Abra o Arduino IDE no seu computador.
  • Escolha a placa ESP8266 correta, como (por exemplo, NodeMCU 1.0 (ESP-12E Module)), e a respectiva porta COM.
  • Copie o código e abra-o com o Arduino IDE.
  • Clique no botão Upload para enviar o código ao ESP8266.
  • Se a ligação estiver correta, o motor vai girar no sentido horário.
  • Quando você tocar na chave de fim de curso, a rotação do motor de passo será invertida para o sentido anti-horário.
  • Tocar na chave de fim de curso novamente fará o motor de passo girar no sentido horário outra vez.
  • A saída no Serial Monitor deve ser parecida com esta.
∞
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 - Mudar a Direção do Motor de Passo com duas Chaves de Fim de Curso

O código abaixo faz um motor de passo girar continuamente, e ele inverte sua direção quando qualquer uma de duas chaves de fim de curso é tocada.

/* * Este código de ESP8266 NodeMCU foi desenvolvido por pt.newbiely.com * Este código de ESP8266 NodeMCU é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.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 }

Passos Rápidos

  • Ligue os componentes como mostrado no diagrama.
  • Conecte a placa ESP8266 ao seu computador usando um cabo USB.
  • Abra o Arduino IDE no seu computador.
  • Escolha a placa ESP8266 correta, como (por exemplo, NodeMCU 1.0 (ESP-12E Module)), e a respectiva porta COM.
  • Copie o código e abra-o com o Arduino IDE.
  • Clique no botão Upload na IDE para carregar o código no ESP8266.
  • Se a ligação estiver correta, o motor deve girar no sentido horário.
  • Quando você tocar na chave de fim de curso 1, a direção do motor de passo deve mudar para anti-horário.
  • Tocar na chave de fim de curso 2 deve fazer o motor inverter a direção novamente, desta vez para horário.
  • O resultado exibido no Serial Monitor deve ser parecido com o seguinte.
∞
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

Vídeo

※ NOSSAS MENSAGENS

  • Fique à vontade para compartilhar o link deste tutorial. Porém, por favor, não use nosso conteúdo em outros sites. Investimos muito esforço e tempo para criar este conteúdo, por favor respeite nosso trabalho!