1. Giới thiệu Servo motor
Servo motor là một dạng động cơ điện đặc biệt với góc quay nằm trong khoảng từ 0 – 180°. Servo motor thường dùng để đóng ngắt các hệ thống một cách tự động.
Bên trong một server motor.
2. Thiết kế mạch điều khiển Servo motor với board Arduino
Mạch điều khiển Servo motor với Arduino gồm 1 board Arduino, 1 Servo motor, có thể thêm 1 biến trở để điều khiển góc quay của Servo motor.
Để Servo motor hoạt động, cần cấp nguồn cho Servo motor. Một chân của motor phải kết nối với một chân của Arduino có khả năng xuất xung PWM (~3, ~ 5, ~ 6, ~ 9, ~ 10, ~ 11) để chịu sự điều khiển của Arduino.
Có thể dùng thêm biến trở để điều khiển góc quay của Servo motor.
3. Chương trình điều khiển Servo motor
Điều khiển góc quay của Servo motor từ 0-180° và ngược lại
Để lập trình điều khiển Servo motor, chúng ta sử dụng thư viện <Servo.h>. Thư viện này đã được tích hợp sẵn trong Arduino IDE nên không cần cài đặt. Cần khai báo một đối tượng Servo để đại diện cho Servo motor kết nối với Arduino. Dùng hàm write() để gán góc quay cho Servo motor. Góc quay của Servo motor có giá trị trong khoảng từ 0 – 180.
#include <Servo.h>//Khai báo thư viện điều khiển Servo
Servo myservo;//Khai báo đối tượng Servo
int servoPin = 9;//Chân kết nối Servo với Arduino
void setup(){
myservo.attach(servoPin);//Khai báo chân kết nối Servo với Arduino
}
void loop()
{
for(int pos = 0; pos < 180; pos += 1){
myservo.write(pos);//Gán góc quay cho Servo
delay(15);
}
for(int pos = 180; pos>=1; pos-=1){
myservo.write(pos);//Gán góc quay cho Servo
delay(15);
}
}
Kết quả
Điều khiển góc quay của Servo motor bằng biến trở
Xem lại cách lập trình sử dụng biến trở trong bài Lập trình điều khiển DC motor với board mạch Arduino. Khi giá trị điện áp lấy ra từ biến trở thay đổi thì góc quay của Servo motor thay đổi.
#include <Servo.h>//Khai báo thư viện điều khiển Servo
Servo myservo;//Khai báo đối tượng Servo
int servoPin = 9;//Chân kết nối Servo với Arduino
int rv = A0;//Chân kết nối biến trở với Arduino
void setup(){
myservo.attach(servoPin);//Khai báo chân kết nối Servo với Arduino
}
void loop()
{
int value = analogRead(rv);//Đọc giá trị điện áp từ biến trở
int pos = map(value,0,1023,0,180);//chuyển thang đo của value từ 0-1023 sang 0-180
myservo.write(pos);//Gán góc quay cho Servo
}
Anh cho em hỏi là: Nếu động cơ bắt đầu chạy, nó tiến tới vị trí trung gian. Nếu bấm nút S1, động cơ sẽ quay theo nhịp về bên trái tất cả 45°. Nếu bấm nút S5, động cơ sẽ quay theo nhịp về bên phải tối đa 45°. Vẫn kết nối pin9 thì như nào ạ. Mong anh giúp
Chào em,
Để làm như yêu cầu của em thì em xem phần Điều khiển góc quay của Servo motor từ 0-180° và ngược lại và kết hợp với button thì em xem lại bài Lập trình điều khiển led bằng nút bấm với board mạch Arduino để biết cách sử dụng button.