ESP8266 Bộ truyền động

Hướng dẫn này sẽ chỉ cho bạn cách sử dụng ESP8266 để điều khiển động cơ chấp hành tuyến tính. Cụ thể, chúng ta sẽ tìm hiểu:

Có hai loại bộ truyền động tuyến tính:

Hướng dẫn này dành cho cơ cấu truyền động tuyến tính không có phản hồi. Nếu bạn quan tâm đến việc tìm hiểu về cơ cấu truyền động tuyến tính có phản hồi, vui lòng tham khảo bài hướng dẫn ESP8266 - Actuator with Feedback.

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×Linear 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)

Về Bộ truyền động tuyến tính

truyền động tuyến tính mở rộng rút lại

Sơ đồ chân của động cơ tuyến tính

Một bộ truyền động tuyến tính có hai dây:

  • Dây dương thường là màu đỏ.
  • Dây âm thường là màu đen.
sơ đồ chân của động cơ truyền động tuyến tính

Cách hoạt động

Khi mua một động cơ tuyến tính, điều quan trọng là biết điện áp mà nó yêu cầu để vận hành. Ví dụ, hãy xem xét một động cơ tuyến tính 12V.

Khi bạn cấp nguồn cho bộ truyền động tuyến tính 12V bằng nguồn 12V:

  • Kết nối 12V và GND với dây dương và dây âm tương ứng: cơ cấu truyền động tuyến tính sẽ mở rộng ở tốc độ tối đa cho đến khi đạt giới hạn.
  • Kết nối 12V và GND với dây âm và dây dương tương ứng: cơ cấu truyền động tuyến tính sẽ rút lại ở tốc độ tối đa cho đến khi đạt giới hạn.

Nếu nguồn điện cấp cho bộ truyền động bị ngắt, quá trình mở rộng hoặc rút lại sẽ dừng.

※ Lưu ý:

Đối với động cơ DC, động cơ servo và động cơ bước không có hộp giảm tốc, khi có tải trọng, nếu nguồn điện bị ngắt, chúng sẽ không duy trì vị trí của mình. Ngược lại, một bộ truyền động có thể giữ được vị trí ngay cả khi nguồn điện bị ngắt trong khi đang mang tải.

Nếu điện áp của nguồn cấp cho cơ cấu chấp hành tuyến tính nhỏ hơn 12V, cơ cấu chấp hành tuyến tính sẽ vẫn mở rộng/rút lại, nhưng không ở tốc độ tối đa của nó. Điều này có nghĩa là việc thay đổi điện áp của nguồn có thể ảnh hưởng đến tốc độ của cơ cấu chấp hành tuyến tính. Tuy nhiên, phương pháp này không được sử dụng phổ biến do khó kiểm soát điện áp của nguồn cấp. Vì vậy, điện áp của nguồn cấp được giữ cố định, và tốc độ của cơ cấu chấp hành tuyến tính được điều chỉnh bằng tín hiệu PWM. Càng cao chu kỳ hoạt động (duty cycle) của PWM, cơ cấu chấp hành tuyến tính mở rộng/rút lại càng nhanh.

cách điều khiển truyền động tuyến tính

Cách điều khiển động cơ tuyến tính bằng ESP8266

Quản lý một bộ truyền động tuyến tính bao gồm:

  • Mở rộng bộ truyền động tuyến tính ở tốc độ tối đa.
  • Rút lại bộ truyền động tuyến tính ở tốc độ tối đa.
  • (Tùy chọn) Điều chỉnh tốc độ mở rộng và rút lại của bộ truyền động tuyến tính.

ESP8266 có thể tạo ra một tín hiệu có thể được sử dụng để điều khiển một bộ truyền động tuyến tính, tuy nhiên, điện áp và dòng điện của tín hiệu này quá thấp để có thể sử dụng ngay. Do đó, một trình điều khiển phần cứng phải được sử dụng để bắc cầu giữa ESP8266 và bộ truyền động tuyến tính. Trình điều khiển có hai chức năng:

  • Khuếch đại tín hiệu điều khiển từ ESP8266 (liên quan đến cả điện áp và dòng điện)
  • Nhận một tín hiệu điều khiển khác từ ESP8266 để đảo ngược cực của nguồn cấp, từ đó cho phép điều khiển hướng

※ Lưu ý:

  • Hướng dẫn này có thể áp dụng cho mọi động cơ tuyến tính, trong đó động cơ tuyến tính 12V chỉ là một ví dụ.
  • Khi điều khiển một động cơ tuyến tính 5V, mặc dù chân ESP8266 xuất ra 5V (cùng mức điện áp với động cơ tuyến tính), bạn vẫn cần một bộ driver giữa ESP8266 và động cơ tuyến tính vì chân ESP8266 không cung cấp đủ dòng điện cho động cơ tuyến tính.

Có nhiều loại chip và module khác nhau có sẵn cho các bộ điều khiển actuator tuyến tính. Trong bài hướng dẫn này, chúng ta sẽ sử dụng driver L298N.

Về Bộ điều khiển L298N

Bộ điều khiển L298N có thể được dùng để điều khiển bộ truyền động tuyến tính, động cơ DC và động cơ bước. Bài hướng dẫn này chỉ cho bạn cách sử dụng nó để điều chỉnh bộ truyền động tuyến tính.

Bản đồ chân của bộ điều khiển L298N

bố trí chân của trình điều khiển l298n

Bộ điều khiển L298N có hai kênh, được đánh dấu là A và B. Điều này có nghĩa là nó có thể điều khiển hai động cơ tuyến tính độc lập cùng lúc. Giả sử động cơ tuyến tính A được kết nối với kênh A và động cơ tuyến tính B được kết nối với kênh B. Bộ điều khiển L298N có mười ba chân.

Các chân chung cho cả hai kênh:

  • Chân VCC: Chân này cung cấp nguồn cho bộ truyền động tuyến tính và có thể ở trong khoảng từ 5V đến 35V.
  • Chân GND: Đây là chân đất và phải được nối với 0V (GND).
  • Chân 5V: Chân này cấp nguồn cho mô-đun L298N và có thể được lấy từ đầu ra 5V của ESP8266.

Các tin nhắn ghim của Kênh A:

  • Chân ENA: Các chân này được dùng để điều khiển tốc độ của bộ truyền động tuyến tính A. Bằng cách tháo jumper và kết nối chân này với đầu vào PWM, chúng ta có thể điều khiển tốc độ mà bộ truyền động tuyến tính mở rộng và rút lại.
  • Chân IN1 và IN2: Các chân này được dùng để điều khiển hướng của bộ truyền động tuyến tính. Khi một chân ở mức HIGH và chân kia ở mức LOW, bộ truyền động tuyến tính sẽ mở rộng hoặc rút lại. Nếu cả hai đầu vào đều ở mức HIGH hoặc LOW, bộ truyền động tuyến tính sẽ dừng lại.
  • Chân OUT1 và OUT2: Các chân này được kết nối với bộ truyền động tuyến tính A.

Các chân của kênh B:

  • Các chân ENB: được sử dụng để điều chỉnh tốc độ của động cơ tuyến tính B. Việc tháo jumper và kết nối chân này với đầu vào PWM sẽ cho phép chúng ta điều khiển tốc độ mở rộng và rút ngắn của động cơ tuyến tính B.
  • Các chân IN3 và IN4: được sử dụng để điều khiển hướng di chuyển của một động cơ tuyến tính. Khi một trong số chúng ở mức cao và cái kia ở mức thấp, động cơ tuyến tính sẽ mở rộng hoặc rút ngắn. Nếu cả hai đầu vào đều ở mức cao hoặc thấp, động cơ tuyến tính sẽ ngừng.
  • Các chân OUT3 và OUT4: được kết nối với một động cơ tuyến tính.

Bộ điều khiển L298N có hai nguồn cấp đầu vào:

  • Một dành cho bộ truyền động tuyến tính với phạm vi điện áp từ 5 đến 35V, được kết nối với các chân VCCGND.
  • Một dành cho hoạt động nội bộ của mô-đun L298N, với phạm vi điện áp từ 5 đến 7V, được kết nối với các chân 5V và GND.

Loại bỏ tất cả các jumper trên bộ điều khiển L298N để đơn giản hóa.

Chúng ta có thể điều khiển hai bộ truyền động tuyến tính độc lập đồng thời với sự trợ giúp của ESP8266 và bộ điều khiển L298N. Chỉ cần ba chân từ ESP8266 để điều khiển mỗi bộ truyền động tuyến tính.

※ Lưu ý:

Phần còn lại của hướng dẫn này sẽ tập trung vào việc điều khiển một cơ cấu truyền động tuyến tính thông qua Kênh A. Quá trình điều khiển cho cơ cấu truyền động tuyến tính còn lại là tương tự.

Cách Điều Khiển Động Cơ Tuyến Tính

Chúng ta sẽ nghiên cứu kỹ thuật điều khiển một actuator tuyến tính với sự trợ giúp của bộ điều khiển L298N.

Sơ đồ nối dây

Gỡ bỏ tất cả ba jumper trên mô-đun L298N trước khi kết nối nó.

sơ đồ đấu nối 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 Làm Truyền Động Tuyến Tính Mở Rộng và Rút Lại

Hướng di chuyển của động cơ tuyến tính có thể được điều khiển bằng cách cấp tín hiệu HIGH hoặc LOW cho các chân IN1 và IN2. Bảng dưới đây cho thấy cách điều khiển hướng di chuyển ở cả hai kênh.

IN1 pin IN2 pin Direction
LOW LOW Linear Actuator A stops
HIGH HIGH Linear Actuator A stops
HIGH LOW Linear Actuator A extends
LOW HIGH Linear Actuator A retracts
  • Kéo dài Truyền động tuyến tính A.
digitalWrite(IN1_PIN, HIGH); digitalWrite(IN2_PIN, LOW);
  • Rút lại động cơ tuyến tính A
digitalWrite(IN1_PIN, LOW); digitalWrite(IN2_PIN, HIGH);

※ Lưu ý:

Định hướng của bộ truyền động tuyến tính có thể được đổi bằng cách nối hai chân OUT1 và OUT2 theo thứ tự khác. Để làm điều này, cần đổi chỗ hai chân OUT1 và OUT2 hoặc sửa đổi tín hiệu điều khiển trên hai chân IN1 và IN2 trong mã nguồn.

Cách Dừng Động Cơ Tuyến Tính Khỏi Việc Mở Rộng Hoặc Thu Lại

Bộ truyền động tuyến tính sẽ ngừng kéo dài hoặc thu hồi khi đạt tới giới hạn. Ngoài ra, chúng tôi có thể lập trình cho nó ngừng kéo dài hoặc thu hồi trước khi đạt tới giới hạn.

Có hai phương pháp để dừng bộ truyền động tuyến tính:

  • Giảm tốc độ xuống 0
  • Ngắt nguồn điện
analogWrite(ENA_PIN, 0);
  • Đặt hai chân IN1 và IN2 ở cùng một mức điện áp, có thể là thấp hoặc cao.
digitalWrite(IN1_PIN, LOW); digitalWrite(IN2_PIN, LOW);
  • Hoặc
digitalWrite(IN1_PIN, HIGH); digitalWrite(IN2_PIN, HIGH);

Cách điều khiển tốc độ của bộ truyền động tuyến tính thông qua driver L298N

Việc điều chỉnh tốc độ của bộ truyền động tuyến tính rất dễ. Thay vì thiết lập chân ENA ở mức HIGH, chúng ta có thể phát tín hiệu PWM tới chân ENA. Việc này có thể được thực hiện bằng cách:

  • Kết nối một chân ESP8266 với ENA của L298N
  • Tạo tín hiệu PWM cho chân ENA bằng cách sử dụng hàm analogWrite(). Driver L298N khuếch đại tín hiệu PWM lên bộ truyền động tuyến tính.
analogWrite(ENA_PIN, speed); // speed is a value from 0 to 255

Tốc độ là một giá trị nằm trong khoảng từ 0 đến 255. Khi tốc độ bằng 0, bộ truyền động tuyến tính sẽ dừng lại. Ở tốc độ 255, bộ truyền động tuyến tính sẽ mở rộng hoặc rút ngắn ở vận tốc tối đa của nó.

Mã ví dụ ESP8266

Đoạn mã dưới đây:

  • Tăng tốc cho động cơ tuyến tính lên tốc độ tối đa của nó
  • Dừng động cơ tuyến tính
  • Giảm tốc cho động cơ tuyến tính xuống tốc độ tối đa của nó
  • Dừng động cơ tuyến tính một lần nữa
/* * 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-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 // The setup function runs once on reset or power-up void setup() { // initialize digital pins as outputs. pinMode(ENA_PIN, OUTPUT); pinMode(IN1_PIN, OUTPUT); pinMode(IN2_PIN, OUTPUT); digitalWrite(ENA_PIN, HIGH); } // The loop function repeats indefinitely void loop() { // extend the actuator digitalWrite(IN1_PIN, HIGH); digitalWrite(IN2_PIN, LOW); delay(20000); // actuator will stop extending automatically when reaching the limit // retracts the actuator digitalWrite(IN1_PIN, LOW); digitalWrite(IN2_PIN, HIGH); delay(20000); // actuator will stop retracting automatically when reaching the limit }

Hướng dẫn từng bước

Để bắt đầu với ESP8266 trên Arduino IDE, làm theo các bước sau:

  • Xem hướng dẫn ESP8266 - Cài đặt phần mềm nếu đây là lần đầu tiên bạn sử dụng ESP8266.
  • Nối các thành phần như được hiển thị trong sơ đồ.
  • Kết nối bo mạch ESP8266 với máy tính của bạn bằng cáp USB.
  • Mở Arduino IDE trên máy tính của bạn.
  • Chọn bo mạch ESP8266 đúng, ví dụ: NodeMCU 1.0 (ESP-12E Module), và cổng COM tương ứng của nó.

Hãy tháo cả ba jumper khỏi module L298N.

Sao chép mã ở phía trên và mở nó trong Arduino IDE.

Nhấp vào nút Tải lên trên Arduino IDE để tải mã lên ESP8266.

Bạn sẽ nhận thấy:

  • Động cơ truyền động tuyến tính sẽ mở rộng cho đến khi nó đạt đến giới hạn, sau đó sẽ dừng lại.
  • Động cơ truyền động tuyến tính sẽ giữ ở vị trí đó trong một khoảng thời gian nhất định.
  • Động cơ truyền động tuyến tính sẽ rút lại cho đến khi nó đạt đến giới hạn, sau đó sẽ dừng lại.
  • Động cơ truyền động tuyến tính sẽ giữ ở vị trí đó trong một khoảng thời gian nhất định.
  • Quá trình này sẽ được lặp lại liên tục.

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.

Các tham chiếu hàm