ESP8266 Thiết bị chấp hành có phản hồi

Trong một bài hướng dẫn trước, chúng ta đã thảo luận về ESP8266 - Bộ truyền động. Bài hướng dẫn này sẽ giới thiệu cho bạn về động cơ tuyến tính có phản hồi (còn được gọi là động cơ tuyến tính có phản hồi). Loại động cơ tuyến tính này cung cấp thông tin để xác định vị trí của hành trình của nó và điều khiển nó. Cụ thể, chúng ta sẽ học được:

Phần cứng cần chuẩn bị

1×ESP8266 NodeMCU ESP-12E
1×Recommended: ESP8266 NodeMCU ESP-12E (Uno-form)
1×USB Cable Type-A to Type-C (for USB-A PC)
1×USB Cable Type-C to Type-C (for USB-C PC)
1×12V Linear Feedback Actuator
1×L298N Motor Driver Module
1×12V Power Adapter
1×DC Power Jack
1×dây jumper
1×(Khuyến nghị) Screw Terminal Expansion Board for ESP8266
1×(Khuyến nghị) Power Splitter for ESP8266 Type-C

Or you can buy the following kits:

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

Giới thiệu về Bộ truyền động tuyến tính có hồi tiếp

Một động cơ chấp hành tuyến tính có hồi tiếp là một thiết bị có tín hiệu nhằm xác định vị trí của nó và điều khiển nó. Một biến trở được sử dụng để tạo ra giá trị điện áp tương ứng với vị trí của hành trình làm tín hiệu hồi tiếp.

Sơ đồ chân của động cơ tuyến tính có phản hồi

Một bộ truyền động tuyến tính có phản hồi có 5 dây:

  • Dây dương của động cơ tuyến tính: Dây này được dùng để điều khiển động cơ tuyến tính bằng cách áp dụng điện áp cao (12V, 24V, 48V...).
  • Dây âm của động cơ tuyến tính: Dây này được dùng để điều khiển động cơ tuyến tính bằng cách áp dụng điện áp cao (12V, 24V, 48V...).
  • Dây 5V: dây này dùng cho biến trở phản hồi. Nó nên được kết nối với 5V hoặc 3.3V
  • Dây GND: dây này dùng cho biến trở phản hồi. Nó nên được kết nối với GND
  • Dây biến trở: (còn được gọi là dây phản hồi, hoặc dây đầu ra) dây này cấp ra giá trị điện áp tương ứng với vị trí của hành trình.
sơ đồ các chân của động cơ chấp hành tuyến tính có hồi tiếp

Cách hoạt động

Nếu chúng ta cấp điện áp cao cho dây dương và dây âm, hành trình của bộ truyền động sẽ được kéo dài hoặc rút lại. Cụ thể:

  • Nếu 12V (12V, 24V, 48V...) được kết nối vào dây dương và GND được kết nối vào dây âm, bộ truyền động tuyến tính sẽ mở rộng với vận tốc tối đa cho đến khi đạt tới giới hạn.
  • Nếu 12V (12V, 24V, 48V...) được kết nối vào dây âm và GND được kết nối vào dây dương, bộ truyền động tuyến tính sẽ rút với vận tốc tối đa cho đến khi đạt tới giới hạn.
  • Nếu nguồn điện bị ngắt cho bộ truyền động (GND được kết nối với cả dây dương và dây âm), bộ truyền động sẽ ngừng mở rộng và rút lại.

※ Lưu ý:

  • Điện áp cần thiết để vận hành bộ truyền động được xác định bởi thông số kỹ thuật của nó. Để biết điện áp chính xác, hãy tham khảo bảng đặc tính hoặc hướng dẫn sử dụng.
  • Ngay cả khi nguồn điện đã tắt, bộ truyền động vẫn có thể duy trì vị trí của nó khi chịu một tải trọng.

Điện áp trên dây biến trở liên quan trực tiếp đến vị trí hành trình của bộ truyền động. Bằng cách đo điện áp này, chúng ta có thể xác định vị trí hành trình.

Sơ đồ đấu dây

Hãy tháo hết ba jumper khỏi mô-đun L298N trước khi kết nối dây.

sơ đồ nối dây ESP8266 NodeMCU cho động cơ tuyến tính và bộ điều khiển l298n

This image is created using Fritzing. Click to enlarge image

Xem thêm Sơ đồ chân ESP8266Cách cấp nguồn cho ESP8266.

Cách điều khiển mở rộng và thu lại một bộ truyền động tuyến tính

Xem hướng dẫn ESP8266 - Bộ truyền động.

Cách xác định vị trí của bộ truyền động tuyến tính

Đây là một hình minh họa về cách xác định hành trình của một động cơ truyền động tuyến tính.

Hiệu chuẩn

  • Xác định chiều dài hành trình của bộ truyền động (đơn vị mm) bằng cách đo bằng thước hoặc tham khảo bảng dữ liệu.
  • Để xác định các giá trị đầu ra khi bộ truyền động tuyến tính được mở rộng hoàn toàn và thu hồi hoàn toàn, hãy thực thi đoạn mã dưới đây.
/* * Mã ESP8266 NodeMCU này được phát triển bởi newbiely.vn * Mã ESP8266 NodeMCU 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/esp8266/esp8266-feedback-actuator */ // The code for getting the feedback when the actuator fully extended and retracted #define ENA_PIN 7 // The ESP8266 pin connected to the EN1 pin L298N #define IN1_PIN 6 // The ESP8266 pin connected to the IN1 pin L298N #define IN2_PIN 5 // The ESP8266 pin connected to the IN2 pin L298N #define POTENTIOMETER_PIN A0 // The ESP8266 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); }
  • Bạn sẽ quan sát nhật ký trên Serial Monitor, như được minh họa trong ví dụ dưới đây
COM6
Send
POTENTIOMETER_MAX = 987 POTENTIOMETER_MIN = 13
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Ghi lại ba giá trị trong mã dưới đây. Nếu giá trị tối thiểu và giá trị tối đa bị đảo ngược, hãy đổi chỗ IN1_PIN và IN2_PIN.

Ghi chú ba giá trị trong đoạn mã dưới đây. Nếu giá trị tối thiểu và tối đa bị tráo đổi, hãy hoán đổi IN1_PIN và IN2_PIN.

Mã ESP8266 để tính vị trí của bộ truyền động

/* * Mã ESP8266 NodeMCU này được phát triển bởi newbiely.vn * Mã ESP8266 NodeMCU 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/esp8266/esp8266-feedback-actuator */ #define ENA_PIN 7 // The ESP8266 pin connected to the EN1 pin L298N #define IN1_PIN 6 // The ESP8266 pin connected to the IN1 pin L298N #define IN2_PIN 5 // The ESP8266 pin connected to the IN2 pin L298N #define POTENTIOMETER_PIN A0 // The ESP8266 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"); }
  • Cập nhật mã với ba giá trị đã được hiệu chuẩn.
  • Tải mã lên ESP8266.
  • 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 động cơ chấp hành tuyến tính đến một vị trí xác định

/* * Mã ESP8266 NodeMCU này được phát triển bởi newbiely.vn * Mã ESP8266 NodeMCU 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/esp8266/esp8266-feedback-actuator */ #define ENA_PIN 7 // The ESP8266 pin connected to the EN1 pin L298N #define IN1_PIN 6 // The ESP8266 pin connected to the IN1 pin L298N #define IN2_PIN 5 // The ESP8266 pin connected to the IN2 pin L298N #define POTENTIOMETER_PIN A0 // The ESP8266 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

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ài hướng dẫn liên quan