Hướng dẫn này là một phần của: Động cơ servo
Tất cả các video liên quan đến động cơ servo đều được liệt kê ở đây. Các liên kết đến các video khác nằm bên dưới bài viết này.
Điều khiển Servo bằng chiết áp sử dụng Arduino
Trong hướng dẫn này, chúng ta sẽ học cách điều khiển động cơ servo bằng chiết áp với Arduino. Chiết áp cho phép chúng ta điều chỉnh góc của servo một cách mượt mà, mang lại khả năng điều khiển vị trí theo thời gian thực. Kết thúc dự án này, bạn sẽ có một hệ thống hoạt động hiển thị giá trị chiết áp và góc servo tương ứng.

Khi xoay chiết áp, góc của động cơ servo thay đổi từ 0 đến 180 độ. Chúng ta sẽ sử dụng đầu vào analog của Arduino để đọc giá trị chiết áp, sau đó ánh xạ giá trị này sang phạm vi hoạt động của servo bằng một công thức đơn giản. Dự án này là một cách tuyệt vời để hiểu cách hoạt động của đầu vào analog và cách điều khiển động cơ bằng chúng (xem video tại 01:45).
Giải thích phần cứng
Đối với dự án này, chúng ta cần một bo mạch Arduino, một động cơ servo và một chiết áp. Chiết áp hoạt động như một điện trở biến đổi, cung cấp điện áp đầu ra tương ứng với vị trí của nó. Đầu ra này được đọc bởi đầu vào analog của Arduino, cho phép chúng ta xác định mức độ cần xoay servo.
Động cơ servo là một loại động cơ có thể được định vị ở một góc cụ thể. Nó nhận tín hiệu điều khiển, cho biết vị trí mong muốn. Servo sẽ xoay đến góc đó dựa trên tín hiệu nhận từ Arduino, khiến nó hữu ích cho nhiều ứng dụng như robot và thiết bị điều khiển từ xa.
Chi tiết thông số kỹ thuật
| Nhà sản xuất | Nhiều hãng |
|---|---|
| Số linh kiện | Servo tiêu chuẩn |
| Điện áp logic/IO | 5 V |
| Điện áp nguồn | 4.8 – 6 V |
| Dòng điện đầu ra (mỗi kênh) | Lên đến 1 A |
| Dòng điện đỉnh (mỗi kênh) | Lên đến 2 A |
| Hướng dẫn tần số PWM | 50 Hz |
| Ngưỡng logic đầu vào | 0.8 V (thấp) / 2.0 V (cao) |
| Sụt áp / RDS(on) / bão hòa | 0.5 V |
| Giới hạn nhiệt | 85 °C |
| Kiểu đóng gói | Kích thước tiêu chuẩn |
| Ghi chú / biến thể | Có sẵn với nhiều kích thước và mô-men xoắn khác nhau |
- Đảm bảo nguồn điện nằm trong giới hạn (4.8 – 6 V).
- Sử dụng giá trị điện trở phù hợp cho chiết áp (khuyến nghị 10 kΩ).
- Kiểm tra cực tính của các kết nối để tránh hoạt động ngược.
- Cẩn thận với nhiệt độ; đảm bảo servo không bị quá tải.
- Giữ dây nối ngắn để giảm nhiễu.
- Sử dụng tụ tách rời qua các chân nguồn nếu cần.
- Xác minh rằng chiết áp được kết nối đúng với chân analog A0.
Hướng dẫn đấu dây

Để đấu dây các linh kiện, trước tiên hãy kết nối chiết áp. Chân giữa của chiết áp nên được kết nối với chân analog A0 trên Arduino. Chân bên trái nên đi đến chân 5V trên Arduino, và chân bên phải nên kết nối với đất (GND).
Tiếp theo, kết nối động cơ servo. Dây đất (thường màu đen hoặc nâu) từ servo nên được kết nối với GND của Arduino. Dây nguồn (thường màu đỏ) nên kết nối với chân 5V trên Arduino. Cuối cùng, dây điều khiển (thường màu vàng hoặc trắng) nên được kết nối với chân kỹ thuật số 9 trên Arduino. Thiết lập này sẽ cho phép Arduino điều khiển servo dựa trên vị trí của chiết áp.

Ví dụ mã và hướng dẫn chi tiết
Hãy xem xét các phần chính của mã. Đầu tiên, chúng ta bao gồm thư viện Servo và tạo một đối tượng servo:
#include
Servo myservo; // tạo đối tượng servo để điều khiển servo
Mã này khởi tạo servo và chuẩn bị cho việc điều khiển. Bước tiếp theo liên quan đến việc đọc giá trị chiết áp:
int val = analogRead(potpin); // đọc giá trị của chiết áp
Ở đây, giá trị đọc từ chiết áp được lưu trong biến val. Giá trị sẽ nằm trong khoảng từ 0 đến 1023, tương ứng với vị trí của chiết áp. Sau đó, chúng ta ánh xạ giá trị này sang phạm vi của servo:
val = map(val, 0, 1023, 0, 180); // chia tỷ lệ để sử dụng với servo
Dòng này chuyển đổi giá trị của chiết áp sang phạm vi phù hợp cho động cơ servo. Cuối cùng, chúng ta đặt servo đến vị trí đã tính toán:
myservo.write(val); // đặt vị trí servo theo giá trị đã chia tỷ lệ
Lệnh này yêu cầu servo di chuyển đến góc xác định dựa trên vị trí của chiết áp. Bạn có thể tìm thấy mã hoàn chỉnh được tải bên dưới bài viết.
Trình diễn / Điều gì sẽ xảy ra
Khi bạn chạy chương trình, xoay chiết áp sẽ điều chỉnh góc của động cơ servo một cách mượt mà. Bạn sẽ thấy các giá trị góc được in trên màn hình nối tiếp khi xoay núm. Nếu servo hoạt động bất thường, hãy kiểm tra dây nối của bạn, đặc biệt là các kết nối đến chiết áp và servo (xem video tại 04:30).
Servo sẽ phản hồi ngay lập tức với các thay đổi về vị trí của chiết áp. Nếu bạn nhận thấy độ trễ hoặc giật, hãy cân nhắc giảm độ trễ trong mã để cải thiện khả năng phản hồi.
Hướng dẫn này là một phần của: Động cơ servo
- Điều khiển Servo bằng nút nhấn sử dụng Arduino
- Control a Servo Motor with a Push Button: Move Servo and Return SPB-1
- Control a Servo Motor with a Push Button: Move Servo in One Direction SPB-2
- Controlling a Servo Motor with a Push Button: Move Servo While Button Is Pressed (SPB-3)
- Điều khiển Servo bằng chiết áp và LCD1602 sử dụng Arduino
- Điều khiển động cơ Servo bằng điều khiển từ xa hồng ngoại với Arduino
- Điều khiển động cơ servo Arduino bằng cách sử dụng biến trở
- Điều khiển vị trí servo bằng cử chỉ tay cho Arduino
- Controlling Two or More Servos with Potentiometers Using an Arduino
- How to Control a 360° Servo with Three Push-Button Switches
- Cách sử dụng Servo 360° liên tục với Arduino
- Mã Arduino và Video cho Bộ điều khiển Servo PCA9685 16 kênh 12-bit V1
- Xây dựng Công tắc Bật/Tắt Servo Arduino với Nút Nhấn
/*
Controlling a servo position using a potentiometer (variable resistor)
by Michal Rinott <http://people.interaction-ivrea.it/m.rinott>
modified on 8 November 2013
by Scott Fitzgerald
http://www.arduino.cc/en/Tutorial/Knob
Update by Ahmad Shamshiri for Robojax.com in Ajax, Ontario, Canada
Watch video for this code at https://youtu.be/X_drE5tLbz0
This code is taken from http://robojax.com/learn/arduino
*/
#include <Servo.h>
Servo myservo; // create servo object to control a servo
int potpin = A0; // analog pin used to connect the potentiometer
int val; // variable to read the value from the analog pin
void setup() {
// Servo knob demo by Robojax.com
Serial.begin(9600); // setup serial
myservo.attach(9); // attaches the servo on pin 9 to the servo object
}
void loop() {
// Servo knob demo by Robojax.com
val = analogRead(potpin); // reads the value of the potentiometer (value between 0 and 1023)
Serial.print(val);
Serial.print(" ");
val = map(val, 0, 1023, 0, 180); // scale it to use it with the servo (value between 0 and 180)
myservo.write(val); // sets the servo position according to the scaled value
// Servo knob demo by Robojax.com
Serial.print(val);
Serial.println();
delay(200); // waits for the servo to get there
}
Nghĩ bạn có thể cần
-
AmazonServo motor on Amazonamzn.to
-
AliExpressPurchase SG90 servo motor 180 or 360 from AliExpresss.click.aliexpress.com
Tài nguyên & tài liệu tham khảo
-
Bên ngoàiSG90 Servosamzn.to
Tập tin📁
Không có tệp nào khả dụng.