Arduino - 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 a informação para identificar a posição do seu curso e, assim, controlar essa 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 e controlar a sua posição. 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 tem 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 aplicarmos alta tensão aos fios positivo e negativo, o curso do atuador vai estender ou retrair. 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 dois 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 sem alimentação enquanto 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 Arduino com Atuador Linear e Driver L298N

This image is created using Fritzing. Click to enlarge image

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

Veja o tutorial Arduino - Atuador

Como encontrar a posição do atuador linear

O conteúdo abaixo mostra 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 Arduino foi desenvolvido por pt.newbiely.com * Este código de Arduino é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/arduino/arduino-actuator-with-feedback */ // the code for getting the feedback when the actuator fully extended and retracted #define ENA_PIN 9 // the Arduino pin connected to the EN1 pin L298N #define IN1_PIN 6 // the Arduino pin connected to the IN1 pin L298N #define IN2_PIN 5 // the Arduino pin connected to the IN2 pin L298N #define POTENTIOMETER_PIN A0 // the Arduino 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 ver o log no Serial Monitor como no exemplo abaixo
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Uno
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Uno' on 'COM15')
New Line
9600 baud
POTENTIOMETER_MAX = 987 POTENTIOMETER_MIN = 13
Ln 11, Col 1
Arduino Uno 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 Arduino que calcula a posição do atuador

    /* * Este código de Arduino foi desenvolvido por pt.newbiely.com * Este código de Arduino é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/arduino/arduino-actuator-with-feedback */ #define ENA_PIN 9 // the Arduino pin connected to the EN1 pin L298N #define IN1_PIN 6 // the Arduino pin connected to the IN1 pin L298N #define IN2_PIN 5 // the Arduino pin connected to the IN2 pin L298N #define POTENTIOMETER_PIN A0 // the Arduino 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 os três valores calibrados no código
    • Carregue o código no Arduino
    • Veja o resultado no Serial Monitor
    ∞
    Newbiely | Arduino IDE 2.3.8
    ──
    ☐
    ✕
    File
    Edit
    Sketch
    Tools
    Help
    Arduino Uno
    Newbiely.ino
    ···
    8 Serial.println("Hello World!");
    Output
    Serial Monitor
    Message (Enter to send message to 'Arduino Uno' 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
    Arduino Uno on COM15
    2

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

    /* * Este código de Arduino foi desenvolvido por pt.newbiely.com * Este código de Arduino é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/arduino/arduino-actuator-with-feedback */ #define ENA_PIN 9 // the Arduino pin connected to the EN1 pin L298N #define IN1_PIN 6 // the Arduino pin connected to the IN1 pin L298N #define IN2_PIN 5 // the Arduino pin connected to the IN2 pin L298N #define POTENTIOMETER_PIN A0 // the Arduino 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!