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 nút nhấn 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 hai nút nhấn, một nút để di chuyển servo sang trái và một nút khác để di chuyển sang phải. Khi bạn nhấn nút bên phải, servo sẽ di chuyển 10 độ sang phải, và khi bạn nhấn nút bên trái, nó sẽ di chuyển cùng một lượng sang trái. Nếu bạn giữ nút, servo sẽ tiếp tục di chuyển theo hướng đó cho đến khi bạn nhả ra.

Dự án này là một cách tuyệt vời để hiểu cách kết nối các nút nhấn với động cơ servo bằng Arduino. Chúng ta sẽ đề cập đến các linh kiện phần cứng cần thiết, hướng dẫn đấu dây và mã code cần thiết để làm cho tất cả hoạt động. Để hiểu rõ hơn, bạn có thể tham khảo video đi kèm với hướng dẫn này (trong video tại 01:00).
Giải thích phần cứng
Đối với dự án này, bạn sẽ cần một bo mạch Arduino, một động cơ servo và hai nút nhấn. Động cơ servo chịu trách nhiệm cho chuyển động, trong khi các nút nhấn đóng vai trò là đầu vào để điều khiển hướng chuyển động đó. Arduino xử lý các đầu vào này và gửi tín hiệu thích hợp đến servo.
Động cơ servo hoạt động dựa trên tín hiệu điều chế độ rộng xung (PWM). Bằng cách gửi các độ rộng xung khác nhau, bạn có thể điều khiển góc của servo. Các nút nhấn sẽ được kết nối với các chân đầu vào kỹ thuật số trên Arduino, và chúng ta sẽ sử dụng điện trở kéo lên nội bộ để đơn giản hóa việc đấu dây.
Chi tiết bảng dữ liệu
| Nhà sản xuất | Nhiều hãng |
|---|---|
| Số bộ phận | SG90 |
| Điện áp Logic/IO | 5 V |
| Điện áp cấp nguồn | 4.8–6 V |
| Dòng điện đầu ra (mỗi kênh) | Tối đa 1.5 A |
| Dòng điện đỉnh (mỗi kênh) | Tối đa 2.5 A |
| Hướng dẫn tần số PWM | 50 Hz |
| Ngưỡng logic đầu vào | 0.3VCC đến 0.7VCC |
| Sụt áp / RDS(on) / bão hòa | 0.4 V |
| Giới hạn nhiệt | 85 °C |
| Kiểu đóng gói | Nhựa |
| Ghi chú / biến thể | Xoay tiêu chuẩn 180° |
- Đảm bảo servo được định mức cho điện áp cấp nguồn của bạn.
- Sử dụng tản nhiệt phù hợp nếu hoạt động ở dòng điện cao.
- Kết nối các nút với đất theo cấu hình kéo lên.
- Chống nhiễu phím (debounce) nếu gặp hành vi bất thường.
- Theo dõi đầu ra nối tiếp để gỡ lỗi.
Hướng dẫn đấu dây

Để đấu dây các linh kiện, hãy bắt đầu bằng việc kết nối động cơ servo. Kết nối dây màu đỏ của servo với chân 5V trên Arduino, dây màu đen với chân GND, và dây tín hiệu màu vàng hoặc trắng với chân 9 trên Arduino. Chân này sẽ điều khiển vị trí của servo.
Tiếp theo, đấu dây các nút nhấn. Kết nối một đầu của nút bên phải với chân 2 và đầu kia với đất. Đối với nút bên trái, kết nối một đầu với chân 12 và đầu kia cũng với đất. Thiết lập này cho phép các điện trở kéo lên nội bộ giữ các chân ở mức cao khi các nút không được nhấn.
Ví dụ mã code & hướng dẫn chi tiết
Hãy bắt đầu với mã code để điều khiển servo bằng một nút nhấn. Mã code khởi tạo đối tượng servo và đặt một góc ban đầu. Đây là một đoạn trích ngắn:
int angle = 90; // góc ban đầu cho servo
int angleStep = 10; // kích thước bước cho chuyển động
Trong đoạn mã này, angle đại diện cho vị trí hiện tại của servo, trong khi angleStep xác định mức độ servo di chuyển với mỗi lần nhấn nút. Mã code này rất quan trọng để theo dõi vị trí của servo.
Tiếp theo, chúng ta có hàm setup nơi chúng ta gắn servo và cấu hình các chân đầu vào:
void setup() {
Serial.begin(9600); // thiết lập serial
myservo.attach(9); // gắn servo vào chân 9
pinMode(2, INPUT_PULLUP); // cấu hình chân nút nhấn
}
Trong setup, chúng ta khởi tạo màn hình nối tiếp và gắn servo vào chân 9. Nút trên chân 2 được đặt làm đầu vào với điện trở kéo lên, giúp đơn giản hóa việc đấu dây và tránh cần điện trở ngoài.
Cuối cùng, chúng ta xem xét hàm loop xử lý việc nhấn nút:
while(digitalRead(2) == LOW) {
angle = angle + angleStep; // tăng góc
myservo.write(angle); // di chuyển servo
}
Vòng lặp này liên tục kiểm tra xem nút có được nhấn hay không. Khi nó được nhấn, góc tăng lên theo bước đã xác định và servo di chuyển tương ứng. Điều quan trọng là đảm bảo góc nằm trong giới hạn (0 đến 180 độ) để tránh làm hỏng servo.
Trình diễn / Điều gì sẽ xảy ra
Khi bạn nhấn nút bên phải, servo sẽ di chuyển sang phải theo các bước tăng 10 độ cho đến khi đạt tối đa 180 độ. Tương tự, nhấn nút bên trái sẽ di chuyển nó sang trái. Nếu bạn giữ một nút, servo sẽ tiếp tục di chuyển theo hướng đó cho đến khi bạn nhả nút (trong video tại 01:00).
Các lỗi thường gặp bao gồm các vấn đề về đấu dây, chẳng hạn như kết nối sai hoặc đầu vào trôi nổi. Luôn đảm bảo các kết nối của bạn chắc chắn và bạn đang sử dụng đúng các chân như được chỉ định trong mã code.
Hướng dẫn này là một phần của: Động cơ servo
- 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 sử dụng Arduino
- Đ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 with a push button with Arduino
When a push button is pressed, the servo starts moving to the right or left until
it reaches 180 and then returns to 0 degrees.
May 22, 2018 at 01:00
Written by Ahmad S. for Robojax.com in Ajax, Ontario, Canada
Watch a video for this code at https://youtu.be/7woqNH_qby4
This code is taken from http://robojax.com/learn/arduino
*/
#include <Servo.h>
Servo myservo; // create servo object to control a servo
int angle =90; // initial angle for servo
int angleStep =10;
void setup() {
// Servo button demo by Robojax.com
Serial.begin(9600); // setup serial
myservo.attach(9); // attaches the servo on pin 9 to the servo object
pinMode(2,INPUT_PULLUP);
Serial.println("Robojax Servo Button ");
}
void loop() {
while(digitalRead(2) == LOW){
// change the angle for the next time through the loop:
angle = angle + angleStep;
// reverse the direction of the movement at the ends of the angle:
if (angle <= 0 || angle >= 180) {
angleStep = -angleStep;
}
myservo.write(angle); // move the servo to the desired angle
Serial.print("Moved to: ");
Serial.print(angle); // print the angle
Serial.println(" degrees");
delay(100); // waits for the servo to get there
}// while
}
/*
Controlling a servo with two push buttons with Arduino
When the left push button is pressed, the servo starts moving to the left until it reaches 180 (or zero) degrees.
When the right push button is pressed, the servo starts moving to the right until it reaches 180 (or zero) degrees.
At any instance, if the button is released, the servo stops.
May 22, 2018, at 01:00
Written by Ahmad S. for Robojax.com in Ajax, Ontario, Canada
Watch a video for this code at https://youtu.be/7woqNH_qby4
This code is taken from http://robojax.com/learn/arduino
*/
#include <Servo.h>
Servo myservo; // create servo object to control a servo
int angle =90; // initial angle for servo
int angleStep =5;
#define LEFT 12 // pin 12 is connected to left button
#define RIGHT 2 // pin 2 is connected to right button
void setup() {
// Servo button demo by Robojax.com
Serial.begin(9600); // setup serial
myservo.attach(9); // attaches the servo on pin 9 to the servo object
pinMode(LEFT,INPUT_PULLUP); // assign pin 12 as input for Left button
pinMode(RIGHT,INPUT_PULLUP);// assign pin 2 as input for right button
myservo.write(angle);// send servo to the middle at 90 degrees
Serial.println("Robojax Servo Button ");
}
void loop() {
// Servo button demo by Robojax.com
while(digitalRead(RIGHT) == LOW){
if (angle > 0 && angle <= 180) {
angle = angle - angleStep;
if(angle < 0){
angle = 0;
}else{
myservo.write(angle); // move the servo to desired angle
Serial.print("Moved to: ");
Serial.print(angle); // print the angle
Serial.println(" degree");
}
}
delay(100); // waits for the servo to get there
}// while
// Servo button demo by Robojax.com
while(digitalRead(LEFT) == LOW){
// Servo button demo by Robojax.com
if (angle >= 0 && angle <= 180) {
angle = angle + angleStep;
if(angle >180){
angle =180;
}else{
myservo.write(angle); // move the servo to desired angle
Serial.print("Moved to: ");
Serial.print(angle); // print the angle
Serial.println(" degree");
}
}
delay(100); // 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
Chưa có tài nguyên nào.
Tập tin📁
Không có tệp nào khả dụng.