Arduino Uno 同时控制多路舵机
目录
在这次实验,展示如何同时控制6个舵机,也是Arduino Uno在不使用另外的舵机驱动版的情况下,能控制的最多数量舵机。
值得注意的是,Arduino Uno能连舵机的口是需要PWM的,也就是板子上带~(波浪)的引脚。
舵机比较耗电,Arduino Uno驱动2-3个9克舵机问题不大,但为了让舵机都能稳定运行,需要增加外部电源。本实验使用的是5V舵机,可以直接把外接电源接到Arduino Uno的DC电源口。
然而外接其他电源时,必须搞清楚正负极的接法,在有经验的人的指导下进行,切记不要在不清不楚抱着侥幸心理的情况下进行接线,有可能会发生不可预计的电子伤害。
实验效果
实验中,舵机的运行分别是: 1,全部舵机同时一起从0度的位置转向179度的位置; 2,全部舵机同时一起从180度的位置转向1度的位置; 3,全部舵机同时一起快速转到90度的位置; 4,全部舵机同时一起快速转到180度的位置; 5,全部舵机同时一起快速转到90度的位置; 6,3个舵机转到0度的位置,3个舵机转到180度的位置 7,3个舵机转从0度的位置转到179度的位置,3个舵机转到180度的位置转到1度的位置 8,3个舵机转从180度的位置转到1度的位置,3个舵机转到0度的位置转到179度的位置
具体请观看视频:
元件说明
舵机(基础) https://lingshunlab.com/book/arduino/arduino-uno-drive-servo
如果没有单独使用过以上元件,建议先分别实现一次。
BOM表
名称 | 数量 |
---|---|
Arduino Uno | x1 |
舵机 | x6 |
5V2A电源 | x1 |
面包板 | x1 |
跳线(杜邦线) | 若干 |
接线方式
Arduino Uno 引脚 | <---> | 舵机引脚_1 |
---|---|---|
5V | <-> | VCC(红色) |
GND | <-> | GND(黑色或褐色) |
3 | <-> | 信号线(橙色) |
Arduino Uno 引脚 | <---> | 舵机引脚_2 |
---|---|---|
5V | <-> | VCC(红色) |
GND | <-> | GND(黑色或褐色) |
5 | <-> | 信号线(橙色) |
Arduino Uno 引脚 | <---> | 舵机引脚_3 |
---|---|---|
5V | <-> | VCC(红色) |
GND | <-> | GND(黑色或褐色) |
6 | <-> | 信号线(橙色) |
Arduino Uno 引脚 | <---> | 舵机引脚_4 |
---|---|---|
5V | <-> | VCC(红色) |
GND | <-> | GND(黑色或褐色) |
9 | <-> | 信号线(橙色) |
Arduino Uno 引脚 | <---> | 舵机引脚_5 |
---|---|---|
5V | <-> | VCC(红色) |
GND | <-> | GND(黑色或褐色) |
10 | <-> | 信号线(橙色) |
Arduino Uno 引脚 | <---> | 舵机引脚_6 |
---|---|---|
5V | <-> | VCC(红色) |
GND | <-> | GND(黑色或褐色) |
11 | <-> | 信号线(橙色) |
程序提点
程序大体和之前的舵机基础篇的实验一样,只是更多的使用了for()循环语句。 for 循环允许您编写一个执行指定次数的循环控制结构。
然而舵机转动到目标位置,是需要时间的,所以大幅度转动的话,需要使用delay()等待一下。
程序实现
// lingshunlab.com
// 加载 舵机 库
#include <Servo.h>
Servo servo_1; // 创建一个名为 servo_1 的 舵机实例 (名称可随你喜欢命名)
Servo servo_2;
Servo servo_3;
Servo servo_4;
Servo servo_5;
Servo servo_6;
void setup() {
servo_1.attach(3); // 配置myservo实例的引脚为9
servo_2.attach(5);
servo_3.attach(6);
servo_4.attach(9);
servo_5.attach(10);
servo_6.attach(11);
}
void loop() {
// 控制所有舵机 从 0度 到 179度 转动
for(int i = 0; i < 180; i++) {
servo_1.write(i);
servo_2.write(i);
servo_3.write(i);
servo_4.write(i);
servo_5.write(i);
servo_6.write(i);
delay(10);
}
delay(500);
// 控制所有舵机 从 180度 到 1度 转动
for(int i = 180; i > 0; i--) {
servo_1.write(i);
servo_2.write(i);
servo_3.write(i);
servo_4.write(i);
servo_5.write(i);
servo_6.write(i);
delay(10);
}
delay(500);
// 控制所有舵机转动至 90度 的位置
servo_1.write(90);
servo_2.write(90);
servo_3.write(90);
servo_4.write(90);
servo_5.write(90);
servo_6.write(90);
delay(500);
// 控制所有舵机转动至 180度 的位置
servo_1.write(180);
servo_2.write(180);
servo_3.write(180);
servo_4.write(180);
servo_5.write(180);
servo_6.write(180);
delay(500);
// 控制所有舵机转动至 90度 的位置
servo_1.write(90);
servo_2.write(90);
servo_3.write(90);
servo_4.write(90);
servo_5.write(90);
servo_6.write(90);
delay(500);
// 分别控制部分舵机转动至 0度 或 90度 的位置
servo_1.write(0);
servo_2.write(180);
servo_3.write(0);
servo_4.write(180);
servo_5.write(0);
servo_6.write(180);
delay(500);
// 同时分别控制 0度 位置的舵机,转向 179度 的位置
// 同时分别控制 180度 位置的舵机,转向 1度 的位置
for(int i = 0; i < 180; i++){
servo_1.write(0+i);
servo_2.write(180-i);
servo_3.write(0+i);
servo_4.write(180-i);
servo_5.write(0+i);
servo_6.write(180-i);
delay(10);
}
delay(500);
// 同时分别控制 180度 位置的舵机,转向 1度 的位置
// 同时分别控制 0度 位置的舵机,转向 179度 的位置
for(int i = 0; i < 180; i++){
servo_1.write(180-i);
servo_2.write(0+i);
servo_3.write(180-i);
servo_4.write(0+i);
servo_5.write(180-i);
servo_6.write(0+i);
delay(10);
}
delay(500);
}
相关连接
Arduino使用舵机的第一篇,演示接线 使用 Arduino Uno 驱动舵机