ESP32 Actuator với Phản Hồi

Trong hướng dẫn trước, chúng ta đã học về ESP32 - Linear Actuator (Thiết Bị Truyền Động Thẳng). Trong hướng dẫn này, chúng ta sẽ học về linear actuator có phản hồi (còn gọi là feedback linear actuator). Tín hiệu phản hồi từ linear actuator cung cấp thông tin để xác định vị trí của stroke và từ đó điều khiển vị trí. Cụ thể, chúng ta sẽ học:

Linh Kiện Cần Thiết

1×mô-đun phát triển ESP-WROOM-32
1×Alternatively, ESP32 Uno-form board
1×Alternatively, ESP32 S3 Uno-form board
1×Cáp USB Type-C
1×Linear Actuator 12V với Feedback
1×Module Driver Motor L298N
1×Adapter Nguồn 12V
1×Đầu Jack Nguồn DC
1×Dây Jumper
1×(Khuyến nghị) Screw Terminal Expansion Board for ESP32
1×(Khuyến nghị) Breakout Expansion Board for ESP32
1×(Khuyến nghị) Power Splitter for ESP32

Or you can buy the following kits:

1×DIYables ESP32 Starter Kit (ESP32 included)
1×DIYables Sensor Kit (30 sensors/displays)
1×DIYables Sensor Kit (18 sensors/displays)

Về Feedback Linear Actuator

Feedback linear actuator là một linear actuator có tín hiệu phản hồi cho phép xác định vị trí và điều khiển nó. Phản hồi là một potentiometer xuất ra giá trị điện áp tỷ lệ với vị trí của stroke.

Pinout của Feedback Linear Actuator

Một Feedback Linear Actuator có 5 dây:

  • Dây dương actuator: Dây này được sử dụng để điều khiển linear actuator bằng điện áp cao (12V, 24V, 48V...).
  • Dây âm actuator: Dây này được sử dụng để điều khiển linear actuator bằng điện áp cao (12V, 24V, 48V...).
  • Dây 5V: dây này được sử dụng cho potentiometer phản hồi. Kết nối dây này với 5V hoặc 3.3V
  • Dây GND: dây này được sử dụng cho potentiometer phản hồi. Kết nối dây này với GND
  • Dây potentiometer: (còn gọi là dây phản hồi, hoặc dây output) dây này xuất ra giá trị điện áp tỷ lệ với vị trí của stroke.
feedback linear bộ chấp hành sơ đồ chân

Cách Hoạt Động

Nếu chúng ta cung cấp điện áp cao cho dây dương và âm, stroke của actuator sẽ được mở rộng hoặc thu gọn. Cụ thể, nếu chúng ta kết nối:

  • 12V (12V, 24V, 48V...) và GND với dây dương và dây âm tương ứng: linear actuator mở rộng tốc độ tối đa cho đến khi đạt giới hạn.
  • 12V (12V, 24V, 48V...) và GND với dây âm và dây dương tương ứng: linear actuator thu gọn tốc độ tối đa cho đến khi đạt giới hạn.
  • Trong khi mở rộng hoặc thu gọn, nếu chúng ta ngừng cấp điện cho actuator (GND cho cả dây dương và âm), actuator sẽ dừng mở rộng/thu gọn

※ Lưu ý:

  • Giá trị điện áp để điều khiển actuator phụ thuộc vào thông số kỹ thuật của actuator. Đọc datasheet hoặc hướng dẫn để biết giá trị điện áp tương ứng.
  • Actuator có thể giữ vị trí ngay cả khi ngừng cấp điện trong khi mang tải.

Giá trị điện áp trong dây potentiometer tỷ lệ với vị trí của stroke trên actuator. Bằng cách đo điện áp này, chúng ta có thể biết vị trí của stroke.

Sơ Đồ Đấu Dây

Vui lòng tháo bỏ tất cả ba jumper trên module L298N trước khi đấu dây.

ESP32 linear bộ chấp hành l298n trình điều khiển sơ đồ đấu dây

This image is created using Fritzing. Click to enlarge image

Nếu bạn chưa rõ cách cấp nguồn cho ESP32 và các linh kiện khác, xem: Cách Cung Cấp Nguồn Điện Cho ESP32.

Cách điều khiển mở rộng/thu gọn linear actuator

Xem hướng dẫn ESP32 - Linear Actuator (Thiết Bị Truyền Động Thẳng)

Cách tìm vị trí của linear actuator

Phần dưới đây cho thấy cách xác định vị trí của stroke trên linear actuator.

Hiệu Chuẩn

  • Xác định chiều dài của stroke của actuator (theo milimeter) bằng cách đo (sử dụng thước) hoặc đọc datasheet
  • Xác định các giá trị output khi linear actuator được mở rộng hoàn toàn và thu gọn hoàn toàn bằng cách chạy code dưới đây
/* * Mã ESP32 này được phát triển bởi newbiely.vn * Mã ESP32 này được cung cấp để sử dụng công khai, không có ràng buộc. * Để xem hướng dẫn chi tiết và sơ đồ kết nối, vui lòng truy cập: * https://newbiely.vn/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); }
  • Bạn sẽ thấy log trên Serial Monitor như ví dụ dưới đây
COM6
Send
POTENTIOMETER_MAX = 987 POTENTIOMETER_MIN = 13
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  
  • Ghi lại những giá trị này
  • Nếu các giá trị min/max bị hoán đổi, hãy hoán đổi IN1_PIN và IN2_PIN
  • Cập nhật ba giá trị trong code dưới đây
  • Code ESP32 tính toán vị trí của actuator

    /* * Mã ESP32 này được phát triển bởi newbiely.vn * Mã ESP32 này được cung cấp để sử dụng công khai, không có ràng buộc. * Để xem hướng dẫn chi tiết và sơ đồ kết nối, vui lòng truy cập: * https://newbiely.vn/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"); }
    • Cập nhật ba giá trị đã hiệu chuẩn vào code
    • Upload code lên ESP32
    • Xem kết quả trên 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  

    Cách điều khiển linear actuator đến một vị trí cụ thể

    /* * Mã ESP32 này được phát triển bởi newbiely.vn * Mã ESP32 này được cung cấp để sử dụng công khai, không có ràng buộc. * Để xem hướng dẫn chi tiết và sơ đồ kết nối, vui lòng truy cập: * https://newbiely.vn/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); }

    ※ Lưu ý:

    Hướng dẫn này sử dụng hàm analogRead() để đọc giá trị từ ADC (Analog-to-Digital Converter) kết nối với potentiometer. ADC của ESP32 tốt cho các dự án KHÔNG cần độ chính xác cao. Tuy nhiên, đối với các dự án cần đo lường chính xác, hãy lưu ý:

    • ADC của ESP32 không hoàn toàn chính xác và có thể cần hiệu chuẩn để có kết quả đúng. Mỗi board ESP32 có thể khác nhau một chút, vì vậy bạn cần hiệu chuẩn ADC cho từng board riêng lẻ.
    • Hiệu chuẩn có thể khó khăn, đặc biệt đối với người mới bắt đầu, và có thể không luôn cho kết quả chính xác như bạn mong muốn.

    Đối với các dự án cần độ chính xác cao, hãy cân nhắc sử dụng ADC bên ngoài (ví dụ ADS1115) với ESP32 hoặc sử dụng Arduino, có ADC đáng tin cậy hơn. Nếu bạn vẫn muốn hiệu chuẩn ADC của ESP32, tham khảo ESP32 ADC Calibration Driver

    Video Tutorial

    Việc sản xuất video tốn rất nhiều thời gian. Nếu video hướng dẫn hữu ích cho việc học của bạn, hãy đăng ký kênh YouTube để ủng hộ. Nếu nhu cầu đủ cao, chúng tôi sẽ cố gắng làm thêm nhiều video.

    Bình Luận