Tìm kiếm mã

Điều khiển Servo bằng chiết áp sử dụng Arduino

Đ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ấtNhiều hãng
Số linh kiệnServo tiêu chuẩn
Điện áp logic/IO5 V
Điện áp nguồn4.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ố PWM50 Hz
Ngưỡng logic đầu vào0.8 V (thấp) / 2.0 V (cao)
Sụt áp / RDS(on) / bão hòa0.5 V
Giới hạn nhiệt85 °C
Kiểu đóng góiKí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

Arduino wiring or servo motor with pot
Arduino wiring or servo motor with pot

Để đấ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.

Arduino Schemtic of wiring servo motor with pot

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ình ảnh

Arduino wiring or servo motor with pot
Arduino wiring or servo motor with pot
Arduino Schemtic of wiring servo motor with pot
Arduino Schemtic of wiring servo motor with pot
SG90_servo_motor-1
SG90_servo_motor-1
SG90_servo_motor-0
SG90_servo_motor-0
96-Controlling a servo position using a potentiometer
Ngôn ngữ: C++
/*
 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

Tài nguyên & tài liệu tham khảo

Tập tin📁

Không có tệp nào khả dụng.