Servo
V1.2.2
Michael Margolis, Arduino
Arduino
2024/06/27
允许Arduino板控制各种伺服电机。
该库可以控制大量的伺服电机。
它谨慎地使用定时器:该库仅使用1个定时器就可以控制12个伺服电机。
在Arduino Due上,你可以控制多达60个伺服电机。
使用/示例
该库允许Arduino板控制RC(业余爱好)伺服电机。伺服电机有集成齿轮和可精确控制的轴。标准伺服电机允许轴定位在不同角度,通常在0到180度之间。连续旋转伺服电机允许将轴的旋转设置为不同速度。
Servo库支持在大多数Arduino板上控制最多12个电机,在Arduino Mega上控制48个。在Mega以外的板子上,使用该库会禁用9和10引脚的analogWrite()
(PWM)功能,无论这些引脚上是否有Servo。在Mega上,最多可以使用12个伺服电机而不影响PWM功能;使用12到23个电机将禁用11和12引脚的PWM。
要使用这个库:
#include <Servo.h>
电路
伺服电机有三根线:电源、接地和信号。电源线通常是红色,应连接到Arduino板上的5V引脚。接地线通常是黑色或棕色,应连接到Arduino板上的接地引脚。信号线通常是黄色、橙色或白色,应连接到Arduino板上的数字引脚。请注意,伺服电机消耗相当大的功率,所以如果你需要驱动超过一两个,你可能需要从单独的电源供电(即不是Arduino上的5V引脚)。请确保将Arduino和外部电源的接地连接在一起。
示例
兼容性
该库与 avr, megaavr, sam, samd, nrf52, stm32f4, mbed, mbed_nano, mbed_portenta, mbed_rp2040, renesas, renesas_portenta, renesas_uno 架构兼容。
与架构兼容意味着代码可以编译并上传到以下列表中的板子:
Samd
MegaAVR
AVR
Mbed
发布
要使用这个库,请在Arduino IDE中打开库管理器并从那里安装它。
Methods
attach()
将伺服电机变量连接到一个引脚。注意在Arduino IDE 0016及更早版本中,Servo库仅支持9号和10号引脚上的伺服电机。
语法
servo.attach(pin)
servo.attach(pin, min, max)
参数
- servo:
Servo
类型的变量 - pin:伺服电机连接的引脚编号
- min(可选):对应伺服电机最小角度(0度)的脉冲宽度,以微秒为单位(默认为544)
- max(可选):对应伺服电机最大角度(180度)的脉冲宽度,以微秒为单位(默认为2400)
示例
#include <Servo.h>
Servo myservo;
void setup()
{
myservo.attach(9);
}
void loop() {}
另见
- attached()
- detach()
write()
向伺服电机写入一个值,相应地控制轴的位置。在标准伺服电机上,这将设置轴的角度(以度为单位),使轴移动到该方向。在连续旋转伺服电机上,这将设置伺服电机的速度(0表示一个方向的全速,180表示另一个方向的全速,接近90的值表示不移动)。
语法
servo.write(angle)
参数
- servo:Servo类型的变量
- angle:写入伺服电机的值,范围从0到180
示例
#include <Servo.h>
Servo myservo;
void setup()
{
myservo.attach(9);
myservo.write(90); // 将伺服电机设置到中间位置
}
void loop() {}
另请参阅
- attach()
- read()
writeMicroseconds()
以微秒(us)为单位向伺服电机写入一个值,从而控制其轴的位置。在标准伺服电机上,这将设置轴的角度。对于标准伺服电机,参数值1000表示完全逆时针,2000表示完全顺时针,1500表示中间位置。
请注意,一些制造商并不严格遵循这个标准,因此伺服电机通常会响应700到2300之间的值。您可以自由增加这些端点值,直到伺服电机不再继续增加其范围。但是请注意,试图驱动伺服电机超过其端点(通常会发出咆哮声)是一种高电流状态,应该避免。
连续旋转伺服电机对writeMicrosecond函数的响应方式类似于write函数。
语法
servo.writeMicroseconds(us)
参数
- servo: Servo类型的变量
- us: 参数值,以微秒为单位(int类型)
示例
#include <Servo.h>
Servo myservo;
void setup()
{
myservo.attach(9);
myservo.writeMicroseconds(1500); // 将伺服电机设置到中间位置
}
void loop() {}
另请参阅
- attach()
- read()
read()
读取舵机的当前角度(即最后一次调用write()时传递的值)。
语法
servo.read()
参数
- servo: 类型为
Servo
的变量
返回
舵机的角度,范围从0到180度。
另请参见
- write()
attached()
检查 Servo 变量是否连接到某个引脚。
语法
servo.attached()
参数
- servo:
Servo
类型的变量
返回值
如果伺服电机连接到引脚,返回 true
;否则返回 false
。
另请参阅
- attach()
- detach()
detach()
将伺服变量从其引脚上分离。如果所有伺服变量都已分离,则引脚9和10可以使用analogWrite()进行PWM输出。
语法
servo.detach()
参数
- servo:
Servo
类型的变量
另请参阅
- attach()
- attached()