Search Code

Điều khiển động cơ servo Arduino bằng cách sử dụng biến trở

Đ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ấtParallax
Số hiệu bộ phậnSG90
Điện áp Logic/IO5 V
Điện áp cung cấp4.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ố PWM50 Hz
Ngưỡng logic đầu vào0,5 V (thấp), 2,5 V (cao)
Sụt áp / RDS(on)/ bão hòa0,5 V ở 500 mA
Giới hạn nhiệt độ0°C đến 60°C
GóiServo 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

Arduino wiring for controlling Servo motor with Potentiometer
Arduino wiring for controlling Servo motor with Potentiometer
Arduino wiring for servo motor
Arduino wiring for servo motor

Đố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ới5VGNDtrê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

Hình ảnh

Arduino wiring for controlling Servo motor with Potentiometer
Arduino wiring for controlling Servo motor with Potentiometer
Arduino wiring for servo motor
Arduino wiring for servo motor
11-Controlling a servo position using a potentiometer using Arduino
Ngôn ngữ: C++
/**
*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)