Arduino Động cơ servo

Trong bài hướng dẫn này, chúng ta sẽ học cách sử dụng động cơ servo với Arduino. Cụ thể, chúng ta sẽ học:

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×động cơ servo
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)

Giới thiệu về động cơ servo

Động cơ servo là một thành phần có thể quay trục (thường từ 0° đến 180°). Nó được dùng để điều khiển vị trí góc của một vật thể.

Bản đồ chân

Động cơ servo được sử dụng trong ví dụ này có ba chân:

  • Chân VCC: (thông thường màu đỏ) cần được kết nối với VCC (5V)
  • Chân GND: (thông thường màu đen hoặc nâu) cần được kết nối với GND (0V)
  • Chân tín hiệu: (thông thường màu vàng hoặc cam) nhận tín hiệu điều khiển PWM từ một chân của Arduino.
cấu hình chân động cơ servo

Cách hoạt động

Phần này chứa thông tin nâng cao có thể gây quá tải. Nếu bạn chưa chắc về nội dung, hãy bỏ qua và chuyển sang phần tiếp theo.

Sau khi kết nối chân VCC và chân GND tới 5V và 0V tương ứng, chúng ta có thể điều khiển động cơ servo bằng cách sinh tín hiệu PWM phù hợp tới chân tín hiệu.

Góc được xác định bởi độ rộng xung PWM.

Bảng đặc tính của động cơ servo cung cấp cho chúng ta các tham số sau:

  • Chu kỳ PWM (PERIOD)
  • Độ rộng tối thiểu của PWM (WIDTH_MAX)
  • Độ rộng tối đa của PWM (WIDTH_MIN)

Các tham số này được cố định trong thư viện Servo của Arduino. Chúng ta KHÔNG cần biết giá trị của các tham số.

Góc được xác định như sau:

  • Nếu độ rộng PWM bằng WIDTH_MIN, động cơ servo quay về 0°.
  • Nếu độ rộng PWM bằng WIDTH_MAX, động cơ servo quay về 180°.
  • Nếu độ rộng PWM nằm giữa WIDTH_MINWIDTH_MAX, động cơ servo quay tới góc từ 0° đến 180° theo tỷ lệ.
cách hoạt động của động cơ servo

Arduino - Động cơ Servo

Một số chân của Arduino có thể được lập trình để tạo tín hiệu PWM. Chúng ta có thể điều khiển động cơ servo bằng cách kết nối chân tín hiệu của động cơ servo với một chân của Arduino và lập trình để tạo tín hiệu PWM trên chân của Arduino.

Nhờ thư viện Servo của Arduino (Arduino Servo library), việc điều khiển động cơ servo trở nên dễ như ăn bánh. Thậm chí chúng ta còn KHÔNG CẦN biết cách hoạt động của động cơ servo. Chúng ta cũng KHÔNG CẦN biết cách tạo tín hiệu PWM. Chúng ta chỉ CẦN học cách sử dụng thư viện.

Sơ đồ đấu dây

Bạn có thể gặp các sơ đồ mạch trên mạng mô tả một kết nối từ chân VCC của động cơ servo trực tiếp tới chân 5V của bảng Arduino, như hình dưới đây. Mặc dù cách tiếp cận này có thể hoạt động, nó được khuyến cáo không nên làm vì nguy cơ làm hỏng bảng Arduino.

sơ đồ đấu dây động cơ servo Arduino

This image is created using Fritzing. Click to enlarge image

Thay vào đó, để bảo vệ bảng Arduino của bạn, chúng tôi mạnh mẽ khuyến nghị sử dụng nguồn cấp ngoài cho động cơ servo. Sơ đồ nối dưới đây minh họa cách kết nối động cơ servo với nguồn cấp ngoài.

sơ đồ nối dây nguồn cấp ngoài cho động cơ servo Arduino

This image is created using Fritzing. Click to enlarge image

Vui lòng đảm bảo bạn kết nối GND của nguồn cung cấp bên ngoài với GND của bo mạch Arduino. Đừng bỏ qua bước quan trọng này để vận hành đúng.

Cách Lập Trình Cho Động Cơ Servo

  • Bao gồm thư viện:
#include <Servo.h>
  • Khai báo một đối tượng Servo:
Servo myServo;

Nếu bạn điều khiển nhiều động cơ servo, bạn chỉ cần khai báo thêm các đối tượng Servo.

Servo myServo1; Servo myServo2;
  • Thiết lập chân điều khiển của Arduino, nối với chân tín hiệu của động cơ servo. Ví dụ, chân 9:
myServo.attach(9);
  • Cuối cùng, xoay góc của động cơ servo đến góc mong muốn. Ví dụ, 90°:
myServo.write(90);

Mã Arduino

/* * 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-servo-motor */ #include <Servo.h> Servo servo; // create servo object to control a servo void setup() { servo.attach(9); // attaches the servo on pin 9 to the servo objectư servo.write(0); // rotate slowly servo to 0 degrees immediately } void loop() { for (int pos = 0; pos <= 180; pos += 1) { // rotate slowly from 0 degrees to 180 degrees, one by one degree // in steps of 1 degree servo.write(pos); // control servo to go to position in variable 'pos' delay(10); // waits 10ms for the servo to reach the position } for (int pos = 180; pos >= 0; pos -= 1) { // rotate from 180 degrees to 0 degrees, one by one degree servo.write(pos); // control servo to go to position in variable 'pos' delay(10); // waits 10ms for the servo to reach the position } }

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

  • Kết nối Arduino với máy tính qua cáp USB
  • Mở Arduino IDE, chọn board và cổng đúng
  • Sao chép mã ở trên và mở bằng Arduino IDE
  • Nhấn nút Tải lên trên Arduino IDE để tải mã lên Arduino
Arduino ide - cách tải mã lên
  • Xem kết quả: Động cơ servo quay chậm từ 0 jusqu đến 180° và sau đó quay ngược từ 180° về 0°

Giải thích mã nguồn

Bạn có thể tìm lời giải thích ở dòng chú thích của mã Arduino ở trên.

Cách điều khiển tốc độ của động cơ servo

Thông qua việc sử dụng map()millis(), chúng ta có thể điều khiển tốc độ của động cơ servo một cách mượt mà mà không làm chậm các đoạn mã khác

/* * 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-servo-motor */ #include <Servo.h> Servo myServo; unsigned long MOVING_TIME = 3000; // moving time is 3 seconds unsigned long moveStartTime; int startAngle = 30; // 30° int stopAngle = 90; // 90° void setup() { myServo.attach(9); moveStartTime = millis(); // start moving // TODO: other code } void loop() { unsigned long progress = millis() - moveStartTime; if (progress <= MOVING_TIME) { long angle = map(progress, 0, MOVING_TIME, startAngle, stopAngle); myServo.write(angle); } // TODO: other code }

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.

Thử thách bản thân

Sử dụng động cơ servo để thực hiện một trong các dự án sau:

Kiến thức bổ sung

  • Thư viện Servo hỗ trợ tối đa 12 động cơ trên Arduino UNO và 48 động cơ trên Arduino Mega.
  • Nguồn từ pin 5V của Arduino có thể KHÔNG đủ cho động cơ servo trong một số trường hợp sau:
    • Sử dụng một động cơ servo có mô-men xoắn cao, có thể nâng một vật nặng.
    • Sử dụng nhiều động cơ servo.

    Trong các trường hợp này, chúng ta có thể cần cung cấp nguồn cấp điện bổ sung cho động cơ servo.

    Động cơ servo Arduino có công suất bổ sung

    This image is created using Fritzing. Click to enlarge image

    Như chúng ta có thể thấy trong sơ đồ ở trên, chân VCC của động cơ servo không kết nối với chân 5V của Arduino. Nó kết nối với chân dương của một nguồn cấp điện bổ sung.

    Xin lưu ý rằng:

    • Không kết nối chân dương của nguồn cấp phụ vào chân 5V của Arduino.
    • Phải kết nối chân âm của nguồn cấp phụ với chân GND của Arduino.