ESP8266 - Atuador com Feedback

Em um tutorial anterior, falamos sobre o atuador linear sem feedback. Este tutorial ensina você sobre o atuador linear com feedback (também conhecido como atuador linear com feedback). Este tipo de atuador linear fornece informações para identificar a posição do seu curso e controlá-lo. Especificamente, vamos aprender:

Sobre o Atuador Linear com Feedback

Um atuador linear com feedback é aquele que tem um sinal para identificar a sua localização e gerenciá-la. Um potenciômetro é usado para gerar o valor de tensão em relação à posição do curso como feedback.

Pinagem do Atuador Linear com Feedback

Um Atuador Linear com Feedback tem 5 fios:

  • Fio positivo do atuador: este fio é usado para controlar o atuador linear aplicando alta tensão (12V, 24V, 48V...).
  • Fio negativo do atuador: este fio é usado para controlar o atuador linear aplicando alta tensão (12V, 24V, 48V...).
  • Fio 5V: este fio é usado para o potenciômetro de feedback. Deve ser conectado a 5V ou 3.3V
  • Fio GND: este fio é usado para o potenciômetro de feedback. Deve ser conectado a GND
  • Fio do potenciômetro: (também chamado de fio de feedback, ou fio de saída) este fio envia o valor de tensão de acordo com a posição do curso.
Pinagem do atuador linear com feedback

Como Funciona

Se fornecermos alta tensão aos fios positivo e negativo, o curso do atuador será estendido ou retraído. Especificamente:

  • Se 12V (12V, 24V, 48V...) for conectado ao fio positivo e GND ao fio negativo, o atuador linear vai estender na velocidade máxima até chegar ao limite.
  • Se 12V (12V, 24V, 48V...) for conectado ao fio negativo e GND ao fio positivo, o atuador linear vai retrair na velocidade máxima até chegar ao limite.
  • Se a alimentação do atuador for cortada (GND nos fios positivo e negativo), o atuador vai parar de estender/retrair.

※ Nota:

  • A tensão necessária para operar o atuador é determinada pelas suas especificações. Para saber a tensão exata, consulte o datasheet ou o manual.
  • Mesmo quando a alimentação é desligada, o atuador pode manter a sua posição enquanto carrega uma carga.

A tensão no fio do potenciômetro está diretamente relacionada à posição do curso do atuador. Medindo essa tensão, podemos descobrir a localização do curso.

Diagrama de Ligação

Retire os três jumpers do módulo L298N antes de conectar os fios.

Diagrama de ligação do atuador linear com driver L298N e ESP8266 NodeMCU

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.

Como controlar a extensão/retração de um atuador linear

Confira o tutorial ESP8266 - Atuador.

Como encontrar a posição do atuador linear

Esta é uma ilustração de como localizar o curso em um atuador linear.

Calibração

  • Determine o comprimento do curso do atuador (em milímetros), medindo com uma régua ou consultando o datasheet.
  • Para descobrir os valores de saída quando o atuador linear está totalmente estendido e totalmente retraído, execute o código abaixo.
/* * 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-feedback-actuator */ // The code for getting the feedback when the actuator fully extended and retracted #define ENA_PIN 7 // The ESP8266 pin connected to the EN1 pin L298N #define IN1_PIN 6 // The ESP8266 pin connected to the IN1 pin L298N #define IN2_PIN 5 // The ESP8266 pin connected to the IN2 pin L298N #define POTENTIOMETER_PIN A0 // The ESP8266 pin connected to the potentiometer of the actuator void setup() { Serial.begin(9600); // initialize digital pins as outputs. pinMode(ENA_PIN, OUTPUT); pinMode(IN1_PIN, OUTPUT); pinMode(IN2_PIN, OUTPUT); digitalWrite(ENA_PIN, HIGH); } void loop() { // extend the actuator digitalWrite(IN1_PIN, HIGH); digitalWrite(IN2_PIN, LOW); delay(20000); // wait for actuator fully extends. It will stop extending automatically when reaching the limit // read the analog in value: int POTENTIOMETER_MAX = analogRead(POTENTIOMETER_PIN); Serial.print("POTENTIOMETER_MAX = "); Serial.println(POTENTIOMETER_MAX); // retracts the actuator digitalWrite(IN1_PIN, LOW); digitalWrite(IN2_PIN, HIGH); delay(20000); // wait for actuator fully extends. It will stop retracting automatically when reaching the limit int POTENTIOMETER_MIN = analogRead(POTENTIOMETER_PIN); Serial.print("POTENTIOMETER_MIN = "); Serial.println(POTENTIOMETER_MIN); }
  • Você vai observar o log no Serial Monitor, como demonstrado no exemplo abaixo
∞
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
POTENTIOMETER_MAX = 987 POTENTIOMETER_MIN = 13
Ln 11, Col 1
Nodemcu 1.0 (ESP-12E Module) on COM15
2

Anote os três valores no código abaixo. Se os valores mínimo e máximo estiverem invertidos, troque o IN1_PIN e o IN2_PIN.

Anote os três valores no código abaixo. Se os valores mínimo e máximo estiverem transpostos, intercambie o IN1_PIN e o IN2_PIN.

Código ESP8266 que calcula a posição do atuador

/* * 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-feedback-actuator */ #define ENA_PIN 7 // The ESP8266 pin connected to the EN1 pin L298N #define IN1_PIN 6 // The ESP8266 pin connected to the IN1 pin L298N #define IN2_PIN 5 // The ESP8266 pin connected to the IN2 pin L298N #define POTENTIOMETER_PIN A0 // The ESP8266 pin connected to the potentiometer of the actuator #define STROKE_LENGTH 102 // PLEASE UPDATE THIS VALUE (in millimeter) #define POTENTIOMETER_MAX 987 // PLEASE UPDATE THIS VALUE #define POTENTIOMETER_MIN 13 // PLEASE UPDATE THIS VALUE void setup() { Serial.begin(9600); // initialize digital pins as outputs. pinMode(ENA_PIN, OUTPUT); pinMode(IN1_PIN, OUTPUT); pinMode(IN2_PIN, OUTPUT); digitalWrite(ENA_PIN, HIGH); } void loop() { // extend the actuator digitalWrite(IN1_PIN, HIGH); digitalWrite(IN2_PIN, LOW); int potentiometer_value = analogRead(POTENTIOMETER_PIN); int stroke_pos = map(potentiometer_value, POTENTIOMETER_MIN, POTENTIOMETER_MAX, 0, STROKE_LENGTH); Serial.print("The stroke's position = "); Serial.print(stroke_pos); Serial.println(" mm"); }
  • Atualize o código com os três valores calibrados.
  • Faça o upload do código para o ESP8266.
  • Confira o resultado no Serial Monitor.
∞
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 stroke's position = 2 mm The stroke's position = 35 mm The stroke's position = 43 mm The stroke's position = 60 mm The stroke's position = 68 mm The stroke's position = 79 mm The stroke's position = 83 mm The stroke's position = 96 mm The stroke's position = 100 mm
Ln 11, Col 1
Nodemcu 1.0 (ESP-12E Module) on COM15
2

Como controlar um atuador linear até uma posição específica

/* * 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-feedback-actuator */ #define ENA_PIN 7 // The ESP8266 pin connected to the EN1 pin L298N #define IN1_PIN 6 // The ESP8266 pin connected to the IN1 pin L298N #define IN2_PIN 5 // The ESP8266 pin connected to the IN2 pin L298N #define POTENTIOMETER_PIN A0 // The ESP8266 pin connected to the potentiometer of the actuator #define STROKE_LENGTH 102 // PLEASE UPDATE THIS VALUE (in millimeter) #define POTENTIOMETER_MAX 987 // PLEASE UPDATE THIS VALUE #define POTENTIOMETER_MIN 13 // PLEASE UPDATE THIS VALUE #define TOLERANCE 5 // in millimeter int targetPosition_mm = 50; // in millimeter void setup() { Serial.begin(9600); // initialize digital pins as outputs. pinMode(ENA_PIN, OUTPUT); pinMode(IN1_PIN, OUTPUT); pinMode(IN2_PIN, OUTPUT); digitalWrite(ENA_PIN, HIGH); } void loop() { int potentiometer_value = analogRead(POTENTIOMETER_PIN); int stroke_pos = map(potentiometer_value, POTENTIOMETER_MIN, POTENTIOMETER_MAX, 0, STROKE_LENGTH); Serial.print("The stroke's position = "); Serial.print(stroke_pos); Serial.println(" mm"); if (stroke_pos < (targetPosition_mm - TOLERANCE)) ACTUATOR_extend(); else if (stroke_pos > (targetPosition_mm + TOLERANCE)) ACTUATOR_retract(); else ACTUATOR_stop(); } void ACTUATOR_extend() { digitalWrite(IN1_PIN, HIGH); digitalWrite(IN2_PIN, LOW); } void ACTUATOR_retract() { digitalWrite(IN1_PIN, LOW); digitalWrite(IN2_PIN, HIGH); } void ACTUATOR_stop() { digitalWrite(IN1_PIN, LOW); digitalWrite(IN2_PIN, LOW); }

Vídeo

Referências de Funções

Tutoriais Relacionados

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