ESP32 - Actuator met Feedback

In een eerdere tutorial hebben we geleerd over de linear actuator zonder feedback. In deze tutorial gaan we leren over de linear actuator met feedback (ook wel feedback linear actuator genoemd). De feedback van de linear actuator levert informatie om de positie van de slag te bepalen en vervolgens die positie te regelen. Concreet gaan we het volgende leren:

Hardware Benodigd

1×ESP32 ESP-WROOM-32 Ontwikkelingsmodule
1×USB Kabel Type-C
1×12V Linear Actuator met Feedback
1×L298N Motordriver Module
1×12V Voeding Adapter
1×DC Voeding Connector
1×Jumper Draden
1×(Aanbevolen) Schroefklem Uitbreidingsboard voor ESP32
1×(Aanbevolen) Breakout Expansion Board for ESP32
1×(Aanbevolen) Stromsplitter voor ESP32

Of u kunt de volgende kits kopen:

1×DIYables Sensorkit (30 sensoren/displays)
1×DIYables Sensorkit (18 sensoren/displays)
Openbaarmaking: Sommige van de links in deze sectie zijn Amazon-affiliate links. We kunnen een commissie ontvangen voor aankopen die via deze links worden gedaan, zonder extra kosten voor u. We waarderen uw steun.

Over de Feedback Linear Actuator

Een feedback linear actuator is een lineaire actuator die een feedbacksignaal heeft waarmee de positie kan worden bepaald en geregeld. De feedback is een potentiometer die een spanningswaarde afgeeft die evenredig is aan de positie van de slag.

Feedback Linear Actuator Pinout

Een feedback linear actuator heeft 5 draden:

  • Actuator Positieve draad: Deze draad wordt gebruikt om de linear actuator aan te sturen met een hoge spanning (12V, 24V, 48V...).
  • Actuator Negatieve draad: Deze draad wordt gebruikt om de linear actuator aan te sturen via negatieve aansluiting.
  • 5V draad: deze draad is voor de feedback potentiometer. Verbind deze draad met 5V of 3.3V
  • GND draad: deze draad is voor de feedback potentiometer. Verbind deze draad met GND
  • Potentiometer draad: (ook wel feedback draad of output draad genoemd) deze draad geeft een spanningswaarde uit die evenredig is aan de positie van de slag.
Feedback Linear Actuator Pinout

Hoe werkt het

Als we hoge spanning aan de positieve en negatieve draden aansluiten, zal de slag van de actuator uitschuiven of inschuiven. Concreet, als we:

  • 12V (12V, 24V, 48V...) en GND aansluiten op respectievelijk de positieve en negatieve draad: dan schuift de linear actuator met volle snelheid uit tot de limiet bereikt is.
  • 12V (12V, 24V, 48V...) en GND aansluiten op respectievelijk de negatieve en positieve draad: dan schuift de linear actuator met volle snelheid in tot de limiet bereikt is.
  • Tijdens het uitschuiven of inschuiven, als we de stroom naar de actuator uitschakelen (GND op zowel positieve als negatieve draad), stopt de actuator met uitschuiven/inschuiven.

※ Notiz:

  • De spanningswaarde voor het aansturen van de actuator is afhankelijk van de specificaties van de actuator. Raadpleeg het datasheet of de handleiding om de juiste spanning te weten.
  • De actuator kan zijn positie behouden, ook als de stroom wordt uitgeschakeld terwijl hij een last draagt.

De spanning op de potentiometerdraad is evenredig aan de positie van de slag van de actuator. Door deze spanning te meten, kunnen we de positie bepalen.

Bedradingsschema

Verwijder alstublieft de drie jumpers op de L298N module voordat u gaat bedraden.

ESP32 Linear Actuator L298N Driver Wiring Diagram

This image is created using Fritzing. Click to enlarge image

Hoe een linear actuator uit te schuiven/inschuiven besturen

Zie de ESP32 - Actuator tutorial

Hoe de positie van de linear actuator te bepalen

Hieronder ziet u hoe u de positie van de slag van een linear actuator kunt bepalen.

Calibratie

  • Bepaal de lengte van de slag van de actuator (in millimeters) door te meten (met een liniaal) of door het datasheet te raadplegen
  • Bepaal de uitgangswaarden wanneer de linear actuator volledig is uitgeschoven en volledig is ingetrokken door onderstaande code uit te voeren
/* * Deze ESP32 code is ontwikkeld door newbiely.nl * Deze ESP32 code wordt zonder enige beperking aan het publiek beschikbaar gesteld. * Voor volledige instructies en schema's, bezoek: * https://newbiely.nl/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); }
  • U ziet de log op de Serial Monitor zoals in het onderstaande voorbeeld
COM6
Send
POTENTIOMETER_MAX = 987 POTENTIOMETER_MIN = 13
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  
  • Noteer deze waarden
  • Als de min/max waarden zijn verwisseld, verwissel dan IN1_PIN en IN2_PIN
  • Update de drie waarden in onderstaande code
  • ESP32 code die de positie van de actuator berekent

    /* * Deze ESP32 code is ontwikkeld door newbiely.nl * Deze ESP32 code wordt zonder enige beperking aan het publiek beschikbaar gesteld. * Voor volledige instructies en schema's, bezoek: * https://newbiely.nl/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"); }
    • Update de drie gekalibreerde waarden in de code
    • Upload de code naar ESP32
    • Bekijk het resultaat op de Serial Monitor
    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  

    Hoe een linear actuator naar een specifieke positie te besturen

    /* * Deze ESP32 code is ontwikkeld door newbiely.nl * Deze ESP32 code wordt zonder enige beperking aan het publiek beschikbaar gesteld. * Voor volledige instructies en schema's, bezoek: * https://newbiely.nl/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); }

    ※ Notiz:

    Deze tutorial maakt gebruik van de functie analogRead() om waarden te lezen van een ADC (Analog-to-Digital Converter) die is aangesloten op een potentiometer. De ESP32 ADC is geschikt voor projecten die GEEN hoge nauwkeurigheid vereisen. Voor projecten die precieze metingen nodig hebben geldt:

    • De ESP32 ADC is niet perfect nauwkeurig en vereist mogelijk kalibratie voor correcte resultaten. Elke ESP32 board kan enigszins verschillen, dus u moet de ADC kalibreren voor elk bord afzonderlijk.
    • Kalibratie kan lastig zijn, vooral voor beginners, en levert mogelijk niet altijd de gewenste exacte resultaten.

    Voor projecten die hoge precisie vereisen, kunt u overwegen een externe ADC (zoals ADS1115) te gebruiken met de ESP32 of een Arduino die een betrouwbaardere ADC heeft. Als u toch de ESP32 ADC wilt kalibreren, raadpleeg dan de ESP32 ADC Calibration Driver

    Video Tutorial

    We overwegen het maken van videotutorials. Als u videotutorials belangrijk vindt, abonneer u dan op ons YouTube-kanaal om ons te motiveren de video's te maken.

    Bekijk onze video-tutorial voor een visuele begeleiding bij dit project! De video biedt extra inzichten en helpt u beter te begrijpen hoe u de feedback linear actuator met ESP32 kunt gebruiken.

    Gerelateerde Tutorials

    ※ ONZE BERICHTEN

    • U bent welkom om de link naar deze tutorial te delen. Gebruik onze inhoud echter niet op andere websites. We hebben veel moeite en tijd gestoken in het maken van de inhoud, respecteer alstublieft ons werk!