ESP32 - Actuador con Retroalimentación

En un tutorial anterior, hemos aprendido sobre el actuador lineal sin retroalimentación. En este tutorial, vamos a aprender sobre el actuador lineal con retroalimentación (también llamado actuador lineal con retroalimentación). La retroalimentación del actuador lineal proporciona la información para identificar la posición de su recorrido y, a continuación, controlar la posición. En detalle, vamos a aprender:

Acerca del actuador lineal de retroalimentación

Un actuador lineal con retroalimentación es un actuador lineal que cuenta con una señal de retroalimentación que permite identificar su posición y controlarla. La retroalimentación es un potenciómetro que emite un voltaje proporcional a la posición del recorrido.

Disposición de Pines del Actuador Lineal con Retroalimentación

Un actuador lineal con retroalimentación tiene 5 cables:

  • Cable positivo del actuador: Este cable se usa para controlar el actuador lineal mediante voltaje alto (12V, 24V, 48V...).
  • Cable positivo del actuador: Este cable se usa para controlar el actuador lineal mediante voltaje alto (12V, 24V, 48V...).
  • Cable de 5V: Este cable se utiliza para el potenciómetro de retroalimentación. Conecte este cable a 5V o a 3.3V.
  • Cable GND: Este cable se utiliza para el potenciómetro de retroalimentación. Conecte este cable a GND.
  • Cable de potenciómetro: (también llamado cable de retroalimentación, o cable de salida) Este cable entrega el valor de voltaje en proporción a la posición del recorrido.
Diagrama de pines del actuador lineal con retroalimentación

Cómo funciona

Si suministramos alta tensión a los cables positivo y negativo, el recorrido del actuador se extenderá o retraerá. Con más detalle, si conectamos:

  • 12V (12V, 24V, 48V...) y GND al cable positivo y al cable negativo, respectivamente: el actuador lineal se desplaza a toda velocidad hasta que alcance el tope.
  • 12V (12V, 24V, 48V...) y GND al cable negativo y al cable positivo, respectivamente: el actuador lineal se retrae a toda velocidad hasta que alcance el tope.
  • Mientras se extiende o se retrae, si dejamos de alimentar al actuador (GND a ambos cables, positivo y negativo), el actuador deja de extenderse/retraerse.

※ Nota:

  • El valor de voltaje para controlar el actuador depende de la especificación del actuador. Lea la hoja de datos o el manual para conocer el valor de voltaje correspondiente.
  • El actuador puede mantener la posición incluso al detener el suministro de energía mientras soporta una carga.

El voltaje en el hilo del potenciómetro es proporcional a la posición del recorrido en el actuador. Midiendo este voltaje, podemos conocer la posición del recorrido.

Diagrama de cableado

Por favor retire los tres puentes del módulo L298N antes de cablear.

Diagrama de cableado del actuador lineal ESP32 y del controlador L298N

This image is created using Fritzing. Click to enlarge image

Si no sabe c\u00f3mo alimentar ESP32 y otros componentes, encuentre instrucciones en el siguiente tutorial: C\u00f3mo alimentar ESP32.

Cómo controlar la extensión y la retracción de un actuador lineal

Ver el tutorial ESP32 - Actuador

Cómo encontrar la posición del actuador lineal

A continuación se muestra cómo identificar la posición de la carrera en un actuador lineal.

Calibración

  • Identificar la longitud del recorrido del actuador (en milímetros) midiendo (con una regla) o leyendo la hoja de datos
  • Identificar los valores de salida cuando el actuador lineal está completamente extendido y completamente retraído ejecutando el código que se muestra a continuación
/* * Este código de ESP32 fue desarrollado por es.newbiely.com * Este código de ESP32 se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.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); }
  • Podrás ver el registro en el Monitor Serial como se muestra en el siguiente ejemplo
COM6
Send
POTENTIOMETER_MAX = 987 POTENTIOMETER_MIN = 13
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  
  • Anota estos valores
  • Si los valores mínimos y máximos se invierten, intercambia IN1_PIN e IN2_PIN
  • Actualiza tres valores en el código de abajo
  • Código ESP32 que calcula la posición del actuador

    /* * Este código de ESP32 fue desarrollado por es.newbiely.com * Este código de ESP32 se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.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"); }
    • Actualiza los tres valores calibrados en el código
    • Sube el código al ESP32
    • Ver el resultado en el Monitor serie
    COM6
    Send
    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
    Autoscroll Show timestamp
    Clear output
    9600 baud  
    Newline  

    Cómo controlar un actuador lineal a una posición específica

    /* * Este código de ESP32 fue desarrollado por es.newbiely.com * Este código de ESP32 se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.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 utiliza la función analogRead() para leer valores de un ADC (Convertidor Analógico-Digital) conectado a un potenciómetro. El ADC del ESP32 es bueno para proyectos que no requieren alta precisión. Sin embargo, para proyectos que requieren mediciones precisas, tenga en cuenta:

    • El ADC del ESP32 no es perfectamente preciso y podría necesitar calibración para obtener resultados correctos. Cada placa ESP32 puede ser un poco diferente, por lo que necesitas calibrar el ADC para cada placa individual.
    • La calibración puede ser difícil, especialmente para principiantes, y no siempre puede dar los resultados exactos que esperas.

    Para proyectos que requieren alta precisión, considera usar un ADC externo (por ejemplo, ADS1115) con el ESP32 o usar un Arduino, que tiene un ADC más fiable. Si aún quieres calibrar el ADC del ESP32, consulta ESP32 ADC Calibration Driver

    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.

    Referencias de funciones

    Tutoriales Relacionados

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