Arduino Thiết bị chấp hành

Trong hướng dẫn này, chúng ta sẽ học:

Bài hướng dẫn này dành cho động cơ tuyến tính không có phản hồi. Nếu bạn muốn tìm hiểu về động cơ tuyến tính có phản hồi, hãy xem bài hướng dẫn Arduino - Cơ cấu chấp hành có phản hồi.

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

1×Arduino Uno R3
1×USB 2.0 cable type A/B (for USB-A PC)
1×USB 2.0 cable type C/B (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 Block Shield for Arduino Uno
1×(Khuyến nghị) Breadboard Shield for Arduino Uno
1×(Khuyến nghị) Enclosure for Arduino Uno
1×(Khuyến nghị) Prototyping Base Plate & Breadboard Kit for Arduino UNO

Or you can buy the following kits:

1×DIYables STEM V3 Starter Kit (Arduino included)
1×DIYables Sensor Kit (30 sensors/displays)
1×DIYables Sensor Kit (18 sensors/displays)

Về Động cơ truyền động tuyến tính

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

Bảng chân của động cơ tuyến tính

Động cơ tuyến tính có hai dây:

  • Dây dương: thường màu đỏ
  • Dây âm: thường màu đen
bố trí chân của động cơ tuyến tính

Cách hoạt động

Khi bạn mua một bộ truyền động tuyến tính, bạn cần biết nó hoạt động ở điện áp nào. Ví dụ, hãy lấy một bộ truyền động tuyến tính 12V làm ví dụ.

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

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

Trong khi mở rộng hoặc thu lại, nếu chúng ta ngừng cấp nguồn cho bộ truyền động (GND nối vào cả dây dương và dây âm), bộ truyền động sẽ dừng mở rộng hoặc thu lại.

※ Lưu ý:

Đối với động cơ DC, động cơ servo và động cơ bước không có hộp số, khi mang tải, nếu chúng ta ngừng cấp nguồn, chúng không thể giữ vị trí. Khác với các động cơ này, bộ truyền động có thể giữ vị trí ngay cả khi ngừng cấp nguồn trong khi mang tải.

Nếu cấp nguồn cho các động cơ truyền động tuyến tính ở mức dưới 12V, động cơ tuyến tính vẫn mở rộng và thu lại nhưng không ở tốc độ tối đa. Điều đó có nghĩa là nếu ta thay đổi điện áp của nguồn cung cấp, ta có thể thay đổi tốc độ của động cơ tuyến tính. Tuy nhiên, phương pháp này không được áp dụng trong thực tế vì khó kiểm soát điện áp của nguồn cấp. Thay vào đó, ta cố định điện áp của nguồn cấp và điều khiển tốc độ của động cơ tuyến tính bằng tín hiệu PWM. Càng cao tỉ lệ duty cycle của PWM, thì động cơ tuyến tính mở rộng/thu lại càng nhanh.

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

Cách điều khiển bộ truyền động tuyến tính bằng Arduino

Việc điều khiển một bộ truyền động tuyến tính bao gồm:

  • Kéo dài truyền động tuyến tính ở tốc độ tối đa.
  • Rút ngắn truyền động tuyến tính ở tốc độ tối đa.
  • (tùy chọn) điều khiển tốc độ kéo dài/rút ngắn.

Arduino có thể phát tín hiệu để điều khiển động cơ tuyến tính. Tuy nhiên, tín hiệu này có điện áp và dòng điện thấp; chúng ta không thể sử dụng nó để điều khiển động cơ tuyến tính. Chúng ta cần sử dụng một bộ driver phần cứng ở giữa Arduino và động cơ tuyến tính. Bộ driver thực hiện hai chức năng:

  • Khuếch đại tín hiệu điều khiển từ Arduino (dòng điện và điện áp)
  • Nhận tín hiệu điều khiển khác từ Arduino để hoán đổi cực của nguồn cấp → để điều khiển hướng

※ Lưu ý:

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

Có nhiều loại chip; các module (ví dụ L293D, L298N) có thể được sử dụng làm bộ điều khiển cho actuator tuyến tính. Trong bài hướng dẫn này, chúng ta sẽ sử dụng bộ điều khiển L298N.

※ Lưu ý:

Bạn cũng có thể sử dụng rơ-le làm bộ điều khiển. Tuy nhiên, nó đòi hỏi 4 rơ-le để điều khiển một bộ truyền động tuyến tính duy nhất (mở rộng/thu lại).

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

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

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

sơ đồ chân của bộ điều khiển l298n

L298N Driver có hai kênh, được gọi là kênh A và kênh B. Do đó, L298N Driver có thể điều khiển hai động cơ tuyến tính độc lập cùng một lúc. Giả sử động cơ tuyến tính A được kết nối với kênh A, động cơ tuyến tính B được kết nối với kênh B. L298N Driver có 13 chân:

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

  • Chân VCC: cấp nguồn cho động cơ tuyến tính. Nó có thể ở trong khoảng từ 5 đến 35V.
  • Chân GND: là chân đất chung, cần được kết nối với GND (0V).
  • Chân 5V: cấp nguồn cho mô-đun L298N. Nó có thể được cấp nguồn bằng 5V từ Arduino.

Các ghim của Kênh A:

  • Các chân ENA được sử dụng để điều khiển tốc độ của bộ truyền động tuyến tính A. Việc bỏ jumper và kết nối chân này với đầu vào PWM sẽ cho phép chúng ta kiểm soát tốc độ mở và rút của bộ truyền động tuyến tính A.
  • Các chân IN1 và IN2 được sử dụng để điều khiển hướng di chuyển của một bộ truyền động tuyến tính. Khi một trong số chúng ở mức HIGH và cái còn lại ở 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 ở mức HIGH hoặc LOW, bộ truyền động tuyến tính sẽ dừng.
  • Các chân OUT1 và OUT2 được kết nối với một 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 khiển tốc độ của bộ truyền động 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 của bộ truyền động tuyến tính B.
  • Các chân IN3 và IN4 được dùng để điều khiển hướng di chuyển của một bộ truyền động tuyến tính. Khi một trong số chúng ở mức HIGH và cái còn lại ở mức LOW, bộ truyền động tuyến tính sẽ mở rộng hoặc rút ngắn. 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.
  • Các chân OUT3 và OUT4 được kết nối với một bộ truyền động tuyến tính.

Như được mô tả ở trên, bộ điều khiển L298N có hai nguồn cấp điện đầu vào:

  • Một dành cho bộ truyền động tuyến tính (các chân VCCGND): từ 5 đến 35V.
  • Một dành cho hoạt động nội bộ của mô-đun L298N (các chân 5V và GND): từ 5 đến 7V.

Mạch điều khiển L298N cũng có ba jumper dành cho các mục đích nâng cao hoặc mục đích khác. Để đơn giản, xin tháo toàn bộ các jumper trên mạch L298N.

Chúng ta có thể điều khiển hai cơ cấu chấp hành tuyến tính độc lập với nhau cùng lúc bằng cách sử dụng Arduino và bộ điều khiển L298N. Để điều khiển mỗi cơ cấu chấp hành tuyến tính, chỉ cần ba chân từ Arduino.

※ Lưu ý:

Phần còn lại của bài hướng dẫn này điều khiển một bộ truyền động tuyến tính bằng kênh A. Việc điều khiển bộ truyền động tuyến tính còn lại tương tự.

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

Chúng ta sẽ học cách điều khiển bộ truyền động tuyến tính bằng driver L298N.

Sơ đồ đấu dây

Vui lòng tháo toàn bộ ba jumper trên mô-đun L298N trước khi đấu dây.

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

This image is created using Fritzing. Click to enlarge image

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

Hướng di chuyển của động cơ truyền động tuyến tính có thể được điều khiển bằng cách cấp tín hiệu logic HIGH/LOW cho các chân IN1 và IN2. Bảng dưới đây minh họa cách điều khiển hướng ở 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 bộ truyền động tuyến tính A
digitalWrite(IN1_PIN, HIGH); digitalWrite(IN2_PIN, LOW);
  • Rút lại bộ truyền động tuyến tính A
digitalWrite(IN1_PIN, LOW); digitalWrite(IN2_PIN, HIGH);

※ Lưu ý:

Hướng di chuyển bị đảo ngược khi hai chân OUT1 và OUT2 được kết nối tới hai chân của động cơ tuyến tính theo cách ngược lại. Nếu vậy, chỉ cần hoán đổi giữa chân OUT1 và OUT2 hoặc thay đổi tín hiệu điều khiển trên các chân IN1 và IN2 trong mã nguồn.

Cách Dừng Động Cơ Tuyến Tính Mở Rộng hoặc Rút Lại

Bộ truyền động tuyến tính tự động dừng quá trình kéo dài hoặc rút lại khi đạt đến giới hạn. Chúng ta cũng có thể lập trình để ngừng quá trình kéo dài hoặc rút lại khi nó chưa đạt đến giới hạn.

Có hai cách để dừng bộ truyền động tuyến tính.

  • Điều khiển tốc độ về 0
analogWrite(ENA_PIN, 0);
  • Điều khiển hai chân IN1 và IN2 ở cùng một mức (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 Động Cơ Tuyến Tính Qua Bộ Điều Khiển L298N

Việc điều khiển tốc độ của bộ chấp hành tuyến tính rất đơn giản. Thay vì điều khiển chân ENA ở mức cao, chúng ta phát tín hiệu PWM cho chân ENA. Chúng ta có thể làm điều này bằng cách:

  • Kết nối một chân của Arduino tớ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(). Bộ điều khiển L298N khuếch đại tín hiệu PWM để điều khiể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ị từ 0 đến 255. Nếu tốc độ bằng 0, bộ truyền động tuyến tính dừng lại. Nếu tốc độ bằng 255, bộ truyền động tuyến tính mở rộng/thu lại ở tốc độ tối đa.

Mã ví dụ Arduino

Đoạn mã dưới đây thực hiện điều gì:

  • Kéo dài bộ truyền động ở tốc độ tối đa
  • Dừng bộ truyền động tuyến tính
  • Rút ngắn bộ truyền động ở tốc độ tối đa
  • Dừng bộ truyền động tuyến tính
/* * Mã Arduino này được phát triển bởi newbiely.vn * Mã Arduino 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/arduino/arduino-actuator */ // constants won't change const int ENA_PIN = 9; // the Arduino pin connected to the EN1 pin L298N const int IN1_PIN = 6; // the Arduino pin connected to the IN1 pin L298N const int IN2_PIN = 5; // the Arduino pin connected to the IN2 pin L298N // the setup function runs once when you press reset or power the board 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 runs over and over again forever 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

  • Gỡ bỏ cả ba jumper trên module L298N.
  • Sao chép mã ở trên và mở bằng Arduino IDE.
  • Nhấn Upload nút trên Arduino IDE để nạp mã lên Arduino.
  • Bạn sẽ thấy:
    • động cơ truyền động tuyến tính kéo dài ra và sau đó dừng lại khi tới giới hạn
    • động cơ truyền động tuyến tính giữ nguyên vị trí trong một khoảng thời gian
    • động cơ truyền động tuyến tính rút lại và sau đó dừng lại khi tới giới hạn
    • động cơ truyền động tuyến tính giữ nguyên vị trí trong một khoảng thời gian
    • Quá trình ở trên được lặp lại.

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.

Tài liệu tham khảo về hàm