ESP32 - Atuador com Feedback

Em um tutorial anterior, aprendemos sobre o atuador linear sem feedback. Neste tutorial, vamos aprender sobre o atuador linear com feedback (também chamado de atuador linear de feedback). O feedback do atuador linear fornece as informações para identificar a posição do seu curso e, assim, controlar a posição. Em detalhes, vamos aprender:

Sobre o Atuador Linear com Feedback

Um atuador linear com feedback é um atuador linear que possui um sinal de feedback que permite identificar sua posição e controlá-la. O feedback é um potenciômetro que fornece um valor de tensão proporcional à posição do curso.

Pinagem do Atuador Linear com Feedback

Um atuador linear com feedback possui 5 fios:

  • Fio positivo do atuador: este fio é usado para controlar o atuador linear usando alta tensão (12V, 24V, 48V...).
  • Fio negativo do atuador: este fio é usado para controlar o atuador linear usando alta tensão (12V, 24V, 48V...).
  • Fio 5V: este fio é usado para o potenciômetro de feedback. Conecte este fio ao 5V ou 3.3V
  • Fio GND: este fio é usado para o potenciômetro de feedback. Conecte este fio ao GND
  • Fio do potenciômetro: (também chamado de fio de feedback, ou fio de saída) este fio fornece um valor de tensão proporcional à 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. Em detalhes, se conectarmos:

  • 12V (12V, 24V, 48V...) e GND no fio positivo e no fio negativo, respectivamente: o atuador linear estende em velocidade máxima até atingir o limite.
  • 12V (12V, 24V, 48V...) e GND no fio negativo e no fio positivo, respectivamente: o atuador linear retrai em velocidade máxima até atingir o limite.
  • Durante a extensão ou retração, se cortarmos a alimentação do atuador (GND nos fios positivo e negativo), o atuador para de estender/retrair

※ Nota:

  • O valor de tensão para controlar o atuador depende da especificação do atuador. Leia o datasheet ou o manual para saber o valor de tensão correspondente.
  • O atuador consegue manter a posição mesmo quando a alimentação é cortada enquanto ele carrega uma carga.

O valor de tensão no fio do potenciômetro é proporcional à posição do curso no atuador. Medindo essa tensão, podemos saber a posição do curso.

Diagrama de Ligação

Remova os três jumpers do módulo L298N antes de fazer a ligação.

Diagrama de Ligação do ESP32 com Atuador Linear e Driver L298N

This image is created using Fritzing. Click to enlarge image

Se você não sabe como alimentar o ESP32 e outros componentes, veja as instruções no tutorial a seguir: Como alimentar o ESP32.

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

Veja o tutorial ESP32 - Atuador

Como encontrar a posição do atuador linear

A seguir mostramos como identificar a posição do curso em um atuador linear.

Calibração

  • Identifique o comprimento do curso do atuador (em milímetros) medindo (com uma régua) ou lendo o datasheet
  • Identifique os valores de saída quando o atuador linear está totalmente estendido e totalmente retraído executando o código abaixo
/* * Este código de ESP32 foi desenvolvido por pt.newbiely.com * Este código de ESP32 é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/esp32/esp32-actuator-with-feedback */ // the code for getting the feedback when the actuator fully extended and retracted #define ENA_PIN 27 // The ESP32 pin GPIO27 connected to the EN1 pin L298N #define IN1_PIN 26 // The ESP32 pin GPIO26 connected to the IN1 pin L298N #define IN2_PIN 25 // The ESP32 pin GPIO25 connected to the IN2 pin L298N #define POTENTIOMETER_PIN 36 // The ESP32 pin GPIO36 (ADC0) connected to the potentiometer of the actuator void setup() { Serial.begin(9600); // set the ADC attenuation to 11 dB (up to ~3.3V input) analogSetAttenuation(ADC_11db); // 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ê verá o log no Serial Monitor como no exemplo abaixo
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
ESP32 Dev Module
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'ESP32 Dev Module' on 'COM15')
New Line
9600 baud
POTENTIOMETER_MAX = 987 POTENTIOMETER_MIN = 13
Ln 11, Col 1
ESP32 Dev Module on COM15
2
  • Anote esses valores
  • Se os valores mínimo/máximo estiverem trocados, troque IN1_PIN e IN2_PIN
  • Atualize os três valores no código abaixo
  • Código ESP32 que calcula a posição do atuador

    /* * Este código de ESP32 foi desenvolvido por pt.newbiely.com * Este código de ESP32 é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/esp32/esp32-actuator-with-feedback */ #define ENA_PIN 27 // The ESP32 pin GPIO27 connected to the EN1 pin L298N #define IN1_PIN 26 // The ESP32 pin GPIO26 connected to the IN1 pin L298N #define IN2_PIN 25 // The ESP32 pin GPIO25 connected to the IN2 pin L298N #define POTENTIOMETER_PIN 36 // The ESP32 pin GPIO36 (ADC0) connected to the potentiometer of the actuator #define STROKE_LENGTH 102 // PLEASE UPDATE THIS VALUE (in millimeter) #define POTENTIOMETER_MAX 2340 // PLEASE UPDATE THIS VALUE #define POTENTIOMETER_MIN 13 // PLEASE UPDATE THIS VALUE void setup() { Serial.begin(9600); // set the ADC attenuation to 11 dB (up to ~3.3V input) analogSetAttenuation(ADC_11db); // 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 os três valores calibrados no código
    • Faça o upload do código para o ESP32
    • Veja o resultado no Serial Monitor
    ∞
    Newbiely | Arduino IDE 2.3.8
    ──
    ☐
    ✕
    File
    Edit
    Sketch
    Tools
    Help
    ESP32 Dev Module
    Newbiely.ino
    ···
    8 Serial.println("Hello World!");
    Output
    Serial Monitor
    Message (Enter to send message to 'ESP32 Dev 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
    ESP32 Dev Module on COM15
    2

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

    /* * Este código de ESP32 foi desenvolvido por pt.newbiely.com * Este código de ESP32 é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/esp32/esp32-actuator-with-feedback */ #define ENA_PIN 27 // The ESP32 pin GPIO27 connected to the EN1 pin L298N #define IN1_PIN 26 // The ESP32 pin GPIO26 connected to the IN1 pin L298N #define IN2_PIN 25 // The ESP32 pin GPIO25 connected to the IN2 pin L298N #define POTENTIOMETER_PIN 36 // The ESP32 pin GPIO36 (ADC0) connected to the potentiometer of the actuator #define STROKE_LENGTH 102 // PLEASE UPDATE THIS VALUE (in millimeter) #define POTENTIOMETER_MAX 2340 // 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); // set the ADC attenuation to 11 dB (up to ~3.3V input) analogSetAttenuation(ADC_11db); // 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); }

    ※ Nota:

    Este tutorial usa a função analogRead() para ler valores de um ADC (Conversor Analógico-Digital) conectado a um potenciômetro. O ADC do ESP32 é bom para projetos que NÃO precisam de alta precisão. Porém, para projetos que precisam de medições precisas, observe:

    • O ADC do ESP32 não é perfeitamente preciso e pode precisar de calibração para obter resultados corretos. Cada placa ESP32 pode ser um pouco diferente, então você precisa calibrar o ADC de cada placa individualmente.
    • A calibração pode ser difícil, especialmente para iniciantes, e nem sempre pode fornecer os resultados exatos que você deseja.

    Para projetos que precisam de alta precisão, considere usar um ADC externo (ex.: ADS1115) com o ESP32 ou usar um Arduino, que possui um ADC mais confiável. Se ainda assim quiser calibrar o ADC do ESP32, consulte o ESP32 ADC Calibration Driver

    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!