This tutorial is part of: Độ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 động cơ servo Arduino bằng cách sử dụng biến trở
Trong hướng dẫn này, chúng ta sẽ khám phá cách điều khiển một động cơ servo bằng cách sử dụng một biến trở với Arduino. Mục tiêu là tạo ra một mạch đơn giản, trong đó vị trí của động cơ servo được điều chỉnh dựa trên sự quay của biến trở. Cuối dự án này, bạn sẽ có một mô hình hoạt động mà thay đổi góc servo một cách mượt mà từ 0 đến 180 độ khi bạn xoay biến trở. Đây là một cách tuyệt vời để hiểu những điều cơ bản về đầu vào tương tự và điều khiển servo trong Arduino.
Để đạt được điều này, chúng ta sẽ sử dụng một bo mạch Arduino, một động cơ servo và một biến trở. Biến trở hoạt động như một điện trở biến, cung cấp tín hiệu đầu vào tương tự cho Arduino, từ đó xác định vị trí của động cơ servo tương ứng. Dự án này không chỉ thú vị mà còn mang tính giáo dục, vì nó minh họa các khái niệm chính trong điện tử và lập trình. Để có giải thích chi tiết hơn, hãy chắc chắn xem video (trong video tại 00:00).
Giải thích phần cứng
Trong dự án này, các thành phần chính là bo mạch Arduino, động cơ servo và biến trở. Arduino là bộ não của hoạt động, xử lý đầu vào và điều khiển đầu ra. Động cơ servo là thứ sẽ di chuyển vật lý dựa trên các lệnh mà nó nhận được từ Arduino. Biến trở có thể từ 1k ohm đến 1M ohm cho phép người dùng cung cấp một đầu vào biến đổi chuyển thành chuyển động của servo.
Động cơ servo hoạt động bằng cách nhận tín hiệu PWM (Điều chế độ rộng xung) cho biết vị trí mong muốn. Biến trở, khi được xoay, thay đổi điện trở của nó, được Arduino đọc dưới dạng điện áp tương tự. Động cơ servo hoạt động với 5V. Không hoạt động với 3.3V. Điện áp này sau đó được ánh xạ vào phạm vi chuyển động của động cơ servo, cho phép chuyển động mượt mà từ 0 độ đến 180 độ.
Chi tiết bảng dữ liệu cho động cơ servo SG90
| Nhà sản xuất | Parallax |
|---|---|
| Số hiệu bộ phận | SG90 |
| Điện áp Logic/IO | 5 V |
| Điện áp cung cấp | 4.8-6 V |
| Dòng điện đầu ra (mỗi kênh) | ~500 mA |
| Dòng điện đỉnh (mỗi kênh) | 1 A |
| Hướng dẫn tần số PWM | 50 Hz |
| Ngưỡng logic đầu vào | 0,5 V (thấp), 2,5 V (cao) |
| Sụt áp / RDS(on)/ bão hòa | 0,5 V ở 500 mA |
| Giới hạn nhiệt độ | 0°C đến 60°C |
| Gói | Servo tiêu chuẩn 9g |
| Ghi chú / biến thể | Thường được sử dụng trong các ứng dụng RC |
- Đảm bảo servo không vượt quá định mức dòng điện tối đa của nó.
- Sử dụng bộ tản nhiệt nếu servo hoạt động liên tục ở tải cao.
- Kết nối biến trở với một chân analog để có các phép đo chính xác.
- Hãy cẩn thận với thời gian tín hiệu PWM cho việc điều khiển servo.
- Kiểm tra phạm vi chuyển động của servo để tránh các vật cản vật lý.
Hướng dẫn đấu dây


Đối với thiết lập này, bạn sẽ cần kết nối các thành phần như sau:
Kết nối chân giữa của biến trở (cần gạt) với chân analog của Arduino.A0Hai chân còn lại của biến trở nên được kết nối với5VvàGNDtrên Arduino. Đối với động cơ servo, kết nối dây đỏ với5Vdây đen đếnGND, và dây màu vàng hoặc trắng đến chân số kỹ thuật số9trên Arduino. Sắp xếp này cho phép biến trở cung cấp một tín hiệu analog cho Arduino, điều khiển vị trí của động cơ servo dựa trên tín hiệu đó.
Hãy chắc chắn kiểm tra tất cả các kết nối và đảm bảo rằng servo không bị cản trở trong phạm vi chuyển động của nó. Nếu sử dụng một mô hình Arduino khác, hãy xác nhận rằng các gán chân cho đầu vào analog và đầu ra servo là tương thích.
Ví dụ mã & Hướng dẫn
Dưới đây là một đoạn mã khởi tạo servo và đọc giá trị của biến trở:
#include
Servo myservo; // create servo object to control a servo
int pos = 0; // variable to store the servo position
void setup() {
myservo.attach(9); // attaches the servo on pin 9 to the servo object
}
Trong mã này, chúng tôi bao gồm thư viện Servo và tạo một đối tượng servo gọi làmyservo. Bộ servo được gắn vào chân9, điều này cho phép chúng ta điều khiển nó bằng cách sử dụng chân này.
void loop() {
int sensorValue = analogRead(A0); // read the potentiometer
pos = map(sensorValue, 0, 1023, 0, 180); // map to servo position
myservo.write(pos); // move servo to position
delay(15); // waits 15ms for the servo to reach the position
}
Trong hàm vòng lặp, chúng ta đọc giá trị của biến trở từ chânA0và ánh xạ nó từ phạm vi của nó (0-1023) sang phạm vi của servo (0-180 độ). Themyservo.write(pos)lệnh sau đó di chuyển servo đến vị trí mong muốn dựa trên sự xoay của biến trở.
Trình diễn / Những gì cần mong đợi
Khi bạn chạy chương trình này, bạn sẽ thấy động cơ servo di chuyển mượt mà từ 0 đến 180 độ khi bạn xoay biến trở. Nếu động cơ servo không di chuyển như mong đợi, hãy kiểm tra dây điện và đảm bảo biến trở hoạt động đúng cách. Ngoài ra, hãy đảm bảo Arduino được cấp nguồn đúng cách và mã đã được tải lên mà không có lỗi. Bạn có thể mong đợi thấy động cơ servo phản ánh vị trí của biến trở theo thời gian thực (trong video tại 02:00).
Thời gian video
- 00:00- Giới thiệu về dự án
- 01:30- Giải thích về thiết lập phần cứng
- 03:45- Hướng dẫn đấu dây
- 05:00- Hướng dẫn mã
- 07:30- Buổi trình diễn dự án đã hoàn thành
This tutorial is part of: Động cơ servo
- Controlling a Servo with Push Buttons Using 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)
- Controlling a Servo with a Potentiometer Using Arduino
- Controlling a Servo with Potentiometer and LCD1602 using Arduino
- Controlling Servo Motors Using an Infrared Remote with Arduino
- Đ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
- How to Use Continuous 360° Servo with Arduino
- Arduino Code and Video for PCA9685 16-Channel 12-Bit Servo Controller V1
- Build an Arduino Servo Toggle Switch with a Push Button
/**
*Original source: Arduino IDE
* Arduino Project: Controlling the servo position
* This code is used with a video tutorial for Robojax.com
* Published on April 24, 2017, from Ajax, ON, Canada.
* Written/Edited by Ahmad Shamshiri
* Watch the video on YouTube: https://youtu.be/kZ9b31gVemc
* View tutorial page for this code https://robojax.com/RJT8
* Controlling a servo position using a potentiometer (variable resistor)
*/
#include <Servo.h>
Servo myservo; // create servo object to control a servo
// twelve servo objects can be created on most boards
int pos = 0; // variable to store the servo position
void setup() {
myservo.attach(9); // attaches the servo on pin 9 to the servo object
}
void loop() {
for (pos = 0; pos <= 180; pos += 1) { // goes from 0 degrees to 180 degrees
// in steps of 1 degree
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15ms for the servo to reach the position
}
for (pos = 180; pos >= 0; pos -= 1) { // goes from 180 degrees to 0 degrees
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15ms for the servo to reach the position
}
}
Tài nguyên & tài liệu tham khảo
Chưa có tài nguyên nào.
Tập tin📁
Bảng dữ liệu (pdf)
-
sg90_serveo_motor_datasheet
sg90_serveo_motor_datasheet.pdf0.13 MB