Arduino - Actuator met Feedback

In een eerdere tutorial hebben we geleerd over de lineaire actuator zonder feedback. In deze handleiding gaan we aan de slag met de lineaire actuator met feedback (ook wel feedback linear actuator genoemd). De feedback van de actuator geeft informatie om de positie van de slag te bepalen en vervolgens de positie te regelen. We zullen in detail leren:

Over de Feedback Linear Actuator

Een feedback linear actuator is een lineaire actuator met een feedbacksignaal dat de positie van de slag kan identificeren en hiermee de actuator kan aansturen. De feedback bestaat uit een potentiometer die een spanningswaarde afgeeft, evenredig aan de positie van de actuator.

Pinout Feedback Linear Actuator

Een feedback linear actuator heeft 5 draden:

  • Actuator Positief: Deze draad wordt gebruikt om de actuator aan te sturen met een hoge spanning (12V, 24V, 48V...).
  • Actuator Negatief: Deze draad is de negatieve aansluiting voor de actuator. (NB: in de originele tekst lijkt een dubbele vermelding van “Actuator Positive wire”, dit is hier gecorrigeerd naar positief en negatief.)
  • 5V draad: Deze draad levert 5V voor de feedback potentiometer. Verbind met 5V of 3.3V op de Arduino.
  • GND draad: Deze draad is de aarde voor de feedback potentiometer. Verbind met GND op de Arduino.
  • Potentiometer draad (ook wel feedback draad of output draad genoemd): Deze draad geeft een spanning af die proportioneel is aan de slagpositie.
Feedback Linear Actuator Pinout

Hoe Werkt Het

Wanneer we hoge spanning toepassen op de positieve en negatieve actuator draden, zal de actuator uitschuiven of intrekken. In detail, als we verbinden:

  • 12V (12V, 24V, 48V...) op de positieve draad en GND op de negatieve draad: dan schuift de actuator met volle snelheid uit tot de begrenzing.
  • 12V (12V, 24V, 48V...) op de negatieve draad en GND op de positieve draad: dan trekt de actuator met volle snelheid in tot de begrenzing.
  • Tijdens het uitschuiven of intrekken, als we de voeding afzetten (GND op zowel positieve als negatieve draad), stopt de actuator met bewegen.

※ Notiz:

  • De spanningswaarde om de actuator aan te sturen hangt af van de specificaties van de actuator. Raadpleeg de datasheet of handleiding voor de juiste waarden.
  • De actuator kan zijn positie vasthouden zelfs nadat de voeding is gestopt, ook onder belasting.

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

Bedradingsschema

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

Arduino Linear Actuator L298N Driver Wiring Diagram

This image is created using Fritzing. Click to enlarge image

Hoe de actuator uitschuiven/intrekken aansturen

Zie de Arduino - Actuator tutorial

Hoe de positie van de lineaire actuator bepalen

Onderstaand wordt getoond hoe u de positie van de actuator meet.

Calibratie

  • Bepaal de slaglengte van de actuator (in millimeter) door te meten (met een liniaal) of uit de datasheet af te lezen.
  • Bepaal de outputwaarden wanneer de actuator volledig is uitgeschoven en volledig ingetrokken door onderstaande code te draaien.
/* * Deze Arduino code is ontwikkeld door newbiely.nl * Deze Arduino code wordt zonder enige beperking aan het publiek beschikbaar gesteld. * Voor volledige instructies en schema's, bezoek: * https://newbiely.nl/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); }
  • U ziet dan de log in de Serial Monitor, bijvoorbeeld:
COM6
Send
POTENTIOMETER_MAX = 987 POTENTIOMETER_MIN = 13
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  
  • Noteer deze waarden
  • Als de min/max waarden omgekeerd lijken, verwissel dan IN1_PIN en IN2_PIN
  • Pas de drie waarden aan in onderstaande code
  • Arduino code die de positie van de actuator berekent

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

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

    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.

    Opmerkingen

    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!