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和外部电源的接地连接在一起。

示例

  • Knob: 通过转动电位器控制伺服电机的轴
  • Sweep: 来回摆动伺服电机的轴

兼容性

该库与 avr, megaavr, sam, samd, nrf52, stm32f4, mbed, mbed_nano, mbed_portenta, mbed_rp2040, renesas, renesas_portenta, renesas_uno 架构兼容。

架构兼容意味着代码可以编译并上传到以下列表中的板子:

Samd

Arduino MKR 1000 WiFi

Arduino MKR WiFi 1010

Arduino MKR FOX 1200

Arduino MKR WAN 1300

Arduino MKR WAN 1310

Arduino MKR GSM 1400

Arduino MKR NB 1500

Arduino MKR Vidor 4000

Arduino MKR Zero

Arduino Nano 33 IoT

Arduino Zero

MegaAVR

Arduino Uno WiFi Rev 2

Arduino Nano Every

AVR

Arduino Micro

Arduino Leonardo

Arduino Mega

Arduino Nano

Arduino UNO Arduino Yún

Mbed

Arduino Nano 33 BLE Sense

Arduino Nano 33 BLE

Arduino Nano RP2040 Connect

发布

要使用这个库,请在Arduino IDE中打开库管理器并从那里安装它。

1.2.2 (最新)
1.1.7
1.1.3
1.0.3

1.2.1
1.1.6
1.1.2
1.0.2

1.2.0
1.1.5
1.1.1
1.0.1

1.1.8
1.1.4
1.1.0
1.0.0

Methods

attach()

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()

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()

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()

read()

读取舵机的当前角度(即最后一次调用write()时传递的值)。

语法

servo.read()

参数

  • servo: 类型为Servo的变量

返回

舵机的角度,范围从0到180度。

另请参见

  • write()

attached()

attached()

检查 Servo 变量是否连接到某个引脚。

语法

servo.attached()

参数

  • servo: Servo 类型的变量

返回值

如果伺服电机连接到引脚,返回 true;否则返回 false

另请参阅

  • attach()
  • detach()

detach()

detach()

将伺服变量从其引脚上分离。如果所有伺服变量都已分离,则引脚9和10可以使用analogWrite()进行PWM输出。

语法

servo.detach()

参数

  • servo: Servo类型的变量

另请参阅

  • attach()
  • attached()

最后修改:2024 年 10 月 13 日
如果觉得我的文章对你有用,请随意赞赏