Servo-library-Arduino
Servo.h
库是一个功能强大且易于使用的、用于通过 Arduino 控制舵机的库。它能让你只需发送合适的脉宽信号,就能控制标准型、连续旋转型以及其他基于脉宽调制(PWM)的各类舵机电机。
Servo.h
库的特性:
- 控制多个舵机:该库支持在多数 Arduino 开发板(如 Uno、Nano)上控制多达 12 个舵机,在 Arduino Mega 开发板上则可控制多达 48 个舵机。
- 简单的应用程序接口(API):它提供了易于使用的函数,用于连接、写入位置以及断开舵机。
- 脉宽调制(PWM)控制:它能生成 PWM 信号来控制所连接舵机的角度或速度。
- 支持模拟和数字舵机:可适用于模拟舵机和数字舵机。
基本功能:
Servo.h
库通过发送 PWM 信号来控制舵机的位置或速度。脉冲的宽度决定了标准舵机的位置,或者连续旋转舵机的速度与方向。
安装 Servo 库:
Servo.h
库包含在默认的 Arduino 集成开发环境(IDE)中,所以无需额外安装。不过,你仍然可以在代码中使用以下代码行手动将其包含进来:
#include <Servo.h>
Servo.h
的关键函数:
attach(pin);
- 将一个舵机对象连接到指定引脚。
- 示例:
myServo.attach(9);
—— 这会将舵机连接到 9 号引脚。
write(angle);
- 将舵机移动到指定角度(针对标准舵机)或者控制其速度和方向(针对连续旋转舵机)。
- 示例:
myServo.write(90);
—— 将舵机移动到 90°。
writeMicroseconds(pulseWidth);
- 通过以微秒为单位指定脉冲宽度,可实现更精确的控制。
- 示例:
myServo.writeMicroseconds(1500);
—— 发送一个 1500 微秒的脉冲。
read();
- 返回舵机上次写入的角度。
- 示例:
int angle = myServo.read();
attached();
- 如果舵机当前已连接到某个引脚,则返回
true
。 - 示例:
if (myServo.attached()) { // 舵机已连接 }
- 如果舵机当前已连接到某个引脚,则返回
detach();
- 将舵机对象从引脚上断开,停止控制。
- 示例:
myServo.detach();
PWM 如何作用于舵机:
Arduino 会生成一个由高脉冲和低脉冲组成的 PWM 信号。高脉冲的持续时间决定了舵机的位置:
- 对于大多数舵机:
- 大约1 毫秒(1000 微秒)*的脉冲宽度对应*0°。
- 大约1.5 毫秒(1500 微秒)*的脉冲宽度对应*90°。
- 大约2 毫秒(2000 微秒)*的脉冲宽度对应*180°。
示例代码:控制单个舵机
以下是一个使用Servo.h
库来控制标准位置型舵机、使其移动到不同角度的简单示例:
#include <Servo.h> // 包含Servo库
Servo myServo; // 创建一个舵机对象
void setup() {
myServo.attach(9); // 将舵机连接到9号引脚
}
void loop() {
myServo.write(0); // 移动到0度
delay(1000); // 等待1秒钟
myServo.write(90); // 移动到90度
delay(1000); // 等待1秒钟
myServo.write(180); // 移动到180度
delay(1000); // 等待1秒钟
}
在这个示例中:
- 舵机被连接到9 号引脚。
- 舵机依次移动到0°、90°*和*180°,每次移动之间有1 秒钟的延迟。
连续旋转舵机示例
以下是一个使用Servo.h
库控制连续旋转舵机的示例:
#include <Servo.h>
Servo myServo; // 创建一个舵机对象
void setup() {
myServo.attach(9); // 将舵机连接到9号引脚
}
void loop() {
myServo.write(0); // 朝一个方向全速旋转
delay(1000); // 运行1秒钟
myServo.write(90); // 停止舵机
delay(1000); // 停止1秒钟
myServo.write(180); // 朝相反方向全速旋转
delay(1000); // 运行1秒钟
}
在这个示例中:
- 0会发送对应朝一个方向全速旋转的脉冲宽度。
- 90可使电机停止。
- 180会发送对应朝相反方向全速旋转的脉冲。
多个舵机示例
要控制多个舵机,只需声明额外的Servo
对象,并对每个对象使用相同的函数即可:
#include <Servo.h>
Servo servo1; // 第一个舵机
Servo servo2; // 第二个舵机
void setup() {
servo1.attach(9); // 将第一个舵机连接到9号引脚
servo2.attach(10); // 将第二个舵机连接到10号引脚
}
void loop() {
servo1.write(90); // 将第一个舵机移动到90度
servo2.write(45); // 将第二个舵机移动到45度
delay(1000); // 等待1秒钟
}
为舵机供电
虽然 Arduino 能够控制舵机,但它通常无法为舵机提供足够的电力,特别是对于高扭矩舵机或者控制多个舵机时更是如此。你应当使用外部电源为舵机供电(例如,根据舵机的规格使用 5 伏或 6 伏电源),并将外部电源和 Arduino 的 ** 接地(GND)** 连接在一起,以确保正常运行。
总结:
Servo.h
库能让你使用 Arduino 轻松控制舵机。- 它在多数 Arduino 开发板上支持多达 12 个舵机,在 Mega 开发板上支持 48 个舵机。
- 该库提供了用于连接、写入、断开以及读取舵机的函数。
- PWM信号控制着舵机的角度或速度。
- 为多个或高扭矩舵机使用外部电源供电,以避免 Arduino 过载。