Bài 92: Điều khiển nhiều servo riêng biệt bằng chiết áp | Khóa học Arduino Từng Bước
Trong dự án này, bạn sẽ học cách xây dựng một bộ điều khiển servo đa kênh, độc lập sử dụng Arduino Uno và hai chiết áp. Thay vì một servo duy nhất điều khiển bởi một núm xoay, hướng dẫn này sẽ chỉ cho bạn cách cấp cho mỗi servo một đầu vào analog riêng, cho phép bạn điều khiển hai—và lên đến sáu—động cơ servo một cách độc lập và đồng thời. Đây là một khối xây dựng cơ bản cho bất kỳ dự án nào yêu cầu điều khiển thủ công chính xác nhiều bộ phận chuyển động.

Thiết lập này cực kỳ linh hoạt. Dưới đây là một vài cách thực tế bạn có thể sử dụng nó:
- Robot: Điều khiển nghiêng và xoay của gimbal camera hoặc các khớp đế và tay của một robot nhỏ.
- Hoạt hình: Tạo ra các chuyển động sống động cho một con rối hoặc nhân vật hoạt hình bằng cách điều khiển độc lập đầu và mắt của nó.
- Điều khiển mô hình: Xây dựng một bộ điều khiển tùy chỉnh cho xe RC hoặc máy bay mô hình để điều chỉnh chính xác cánh tà và cánh liệng.
- Tự động hóa: Tạo một trạm điều khiển thủ công cho bộ theo dõi năng lượng mặt trời hoặc một đồ gá định vị đa trục.
Phần cứng cần thiết
- Arduino Uno (hoặc bất kỳ bo mạch tương thích nào)
- 2x Động cơ servo (servo 180 độ tiêu chuẩn được sử dụng ở đây)
- 2x Chiết áp (10kΩ là lựa chọn phổ biến)
- Breadboard và dây jumper
- Nguồn điện 5V ngoài (khuyến nghị cho nhiều servo)
Hướng dẫn đấu dây
Dự án này yêu cầu nhiều dây hơn một chút so với thiết lập một servo, chủ yếu vì bạn cần phân phối nguồn và đất cho nhiều thành phần. Điều quan trọng là sử dụng các thanh nguồn của breadboard để tạo một bus 5V và GND chung. Một sơ đồ đấu dây là cần thiết cho việc xây dựng này.

Hãy phân tích các kết nối, như được giải thích trong video (trong video ở 02:23). Đầu tiên, thiết lập các thanh nguồn của bạn: kết nối chân 5V của Arduino với thanh dương của breadboard và chân GND với thanh âm. Điều này giúp bạn dễ dàng truy cập nguồn cho tất cả các thành phần của mình.
Chiết áp: Mỗi chiết áp hoạt động như một bộ chia điện áp. Kết nối chân bên phải của mỗi chiết áp với thanh 5V và chân bên trái với thanh GND. Chân giữa là "cần gạt" và cung cấp một điện áp thay đổi. Kết nối chân giữa của chiết áp thứ nhất với đầu vào analog A0, và chân giữa của chiết áp thứ hai với A1 (trong video ở 03:22).
Động cơ servo: Mỗi servo có ba dây. Kết nối dây màu tối (thường là đen hoặc nâu) với thanh GND. Kết nối dây giữa (thường là đỏ) với thanh 5V. Cuối cùng, kết nối dây tín hiệu (thường là cam hoặc vàng) với một chân hỗ trợ PWM trên Arduino. Dây tín hiệu của servo thứ nhất đi đến chân 3, và dây tín hiệu của servo thứ hai đi đến chân 5 (trong video ở 04:01). Hãy nhớ, bạn phải sử dụng các chân hỗ trợ PWM (được đánh dấu bằng dấu ngã "~" trên Uno) để điều khiển servo.
Giải thích mã
Mã dựa trên ví dụ "Knob" tiêu chuẩn từ Arduino IDE nhưng được sửa đổi để xử lý hai servo. Logic rất đơn giản: đọc giá trị analog từ một chiết áp, ánh xạ nó thành một góc, và ra lệnh cho servo di chuyển đến góc đó. Phần cấu hình ở đầu mã là nơi bạn sẽ thực hiện tất cả các điều chỉnh của mình.
Đây là phần có thể cấu hình bởi người dùng xác định các chân và tạo các đối tượng servo:
#include <Servo.h>
//**** cài đặt servo 1
Servo servo1;
const int servo1PotPin = A0;
const int servo1Pin = 3;// Phải sử dụng chân hỗ trợ PWM
int servo1Value;
//**** kết thúc cài đặt servo 1
//**** cài đặt servo 2
Servo servo2;
const int servo2PotPin = A1;
const int servo2Pin = 5;// Phải sử dụng chân hỗ trợ PWM
int servo2Value;
//**** kết thúc cài đặt servo 2
Đây là phần cốt lõi của cấu hình. Để thêm một servo thứ ba, bạn sẽ sao chép khối "cài đặt servo 2", thay đổi tất cả các số "2" thành "3", gán một chân analog mới (ví dụ: A2) và một chân PWM mới (ví dụ: 9). Lớp Servo được tích hợp sẵn trong Arduino IDE, vì vậy không cần thêm thư viện nào.
Trong hàm setup(), lệnh servo.attach(pin) cho Arduino biết chân nào được kết nối với dây tín hiệu của mỗi servo. Bạn phải có một dòng cho mỗi servo bạn đang sử dụng.
void setup() {
//Robojax.com nhiều servo
servo1.attach(servo1Pin);
servo2.attach(servo2Pin);
}
Trong loop(), mã đọc giá trị chiết áp, ánh xạ nó thành phạm vi 0-180 độ, và ghi góc đó đến servo. delay(5) ở cuối là một tham số điều chỉnh. Như được trình bày trong video, giảm giá trị này từ 15 xuống 5 mili giây làm cho chuyển động của servo mượt mà hơn nhiều và loại bỏ rung (trong video ở 12:00).
Trình diễn dự án trực tiếp
Khi bạn đã đấu dây mạch và tải mã lên, việc trình diễn là ngay lập tức. Khi bạn cấp nguồn cho Arduino, mỗi servo sẽ di chuyển đến một vị trí được xác định bởi cài đặt hiện tại của chiết áp tương ứng. Khi bạn xoay một núm, servo của nó sẽ mượt mà theo chuyển động. Video chứng minh rằng hai servo hoạt động hoàn toàn độc lập, cho phép các chuyển động phức tạp, đồng thời. Nếu bạn nhận thấy bất kỳ sự giật hoặc rung nào, việc điều chỉnh giá trị delay() trong vòng lặp là điều đầu tiên nên thử.
Chương
- [00:00] Giới thiệu và Tổng quan dự án
- [00:56] Hiểu về động cơ Servo
- [02:23] Sơ đồ đấu dây cho hai Servo và chiết áp
- [04:15] Giải thích chi tiết về đấu dây
- [06:49] Giải thích mã: Cấu hình và Thiết lập
- [09:15] Giải thích mã: Logic điều khiển và Ánh xạ
- [11:15] Trình diễn trực tiếp và Tinh chỉnh
/*
* Control two or more servo motors
* using potentiometers.
* Modified by Ahmad Shamshiri on Oct 17, 2019 at 20:13
* in Ajax, Ontario, Canada . www.Robojax.com
* This code on robojax https://robojax.com/RJT766
*
* Original code from Arduino IDE: File->Examples->Servo->knob
*
Controlling a servo position using a potentiometer (variable resistor)
by Michal Rinott <http://people.interaction-ivrea.it/m.rinott>
modified on 8 Nov 2013
by Scott Fitzgerald
http://www.arduino.cc/en/Tutorial/Knob
* Get this code and other Arduino codes from Robojax.com
* * This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.*
* This code has been download from Robojax.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
#include <Servo.h>
//**** servo 1 settings
Servo servo1;
const int servo1PotPin =A0;
const int servo1Pin = 3;// Must use PWM enabled pin
int servo1Value;
//**** servo 1 settings END
//**** servo 2 settings
Servo servo2;
const int servo2PotPin =A1;
const int servo2Pin = 5;// Must use PWM enabled pin
int servo2Value;
//**** servo 1 settings END
void setup() {
//Robojax.com multiple servo
servo1.attach(servo1Pin);
servo2.attach(servo2Pin);
}
void loop() {
//Robojax.com multiple servo
servo1Value = analogRead(servo1PotPin);
servo1Value = map(servo1Value, 0, 1023, 0, 180);
servo1.write(servo1Value);
servo2Value = analogRead(servo2PotPin);
servo2Value = map(servo2Value, 0, 1023, 0, 180);
servo2.write(servo2Value);
delay(5);
//Robojax.com multiple servo
}// loop end
Nghĩ bạn có thể cần
-
Amazon
-
Amazon
-
eBay
-
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📁
Các tập tin khác
-
Tài liệu dữ liệu động cơ SG90 Seroo
robojax-servo-SG90_datasheet.pdf0.12 MB