Servo
更新时间:2017-08-08 阅读:14808
目录
Fireduino Servo
Fireduino Servo 库允许Fireduino板控制舵机。舵机集成了减速齿轮和一个可以精确控制的主轴。标准舵机允许主轴定位到不同的角度,通常是0到180度的范围。连续旋转舵机允许旋转轴被设置为各种不同的速度。
Fireduino板 最多支持多达30个舵机(每个pin都可以与舵机对象变量绑定),未绑定的数字引脚与PWM 功能不冲突。
Fireduino Servo 接线
舵机有三根线:电源线,地线和信号线。电源线通常是红色,应该连接到Fireduino板的5V端子上。地线通常是黑色或者棕色,应该连接到Fireduino板的GND接地端。信号线通常是黄色,橙色或者白色,应该连接到Fireduino板的数字管脚上。
注意舵机图纸的电源!如果你想驱动大于一两个以上的舵机,你可能需要一个隔离电源(而不是Fireduino板上的5V)。务必确认Fireduino的接地端和外部供电的接地端是连在一起的。
部分品牌线色参考
白红黑 白——信号 红——正极 黑——负极
橙红褐 橙——信号 红——正极 褐——负极
Fireduino Servo 相关参数
#define MIN_PULSE_WIDTH 544 // the shortest pulse sent to a servo #define MAX_PULSE_WIDTH 2400 // the longest pulse sent to a servo #define DEFAULT_PULSE_WIDTH 1500 // default pulse width when servo is attached #define REFRESH_INTERVAL 20000 // minumim time to refresh servos in microseconds
Fireduino Servo API
attach(...)
说明 把舵机对象变量与引脚绑定,Fireduino 的数字引脚件都能被绑定。
语法 servo.attach(pin) servo.attach(pin, min, max)
参数 servo : 舵机对象 pin:被绑定的引脚数字编号 min :脉冲宽度,以微秒为单位,对应于舵机的最小角度(0到角度)(默认为544) max:脉冲宽度,以微秒为单位,对应于舵机的最大角度(180到角度),伺服(默认为2400)
返回 内部编号索引
detach()
说明 解除舵机对象与引脚的绑定关系。
语法 servo.detach();
参数 无
返回 无
write(...)
说明 写入一个数值到舵机,控制相应的主轴。标准舵机会设置主轴的角度,并移动主轴到目标位置。
对于一个连续旋转舵机,这将设定舵机的速度(0表示向一个方向全速运转,180表示相反方向全速运转,90左右的值则表示停止)。
语法 servo.write(angle);
参数 servo: 舵机对象的变量 angle: 写入舵机的数值,范围从0到180度。
返回 无
writeMicroseconds(...)
说明 写入一个微秒单位的数值(uS)到舵机,控制相应的主轴。标准舵机会设置主轴的角度。
标准舵机设置1000是完全的逆时针位置,2000是完全的顺时针位置,而1500则在中间(即1.5ms)。
语法 servo.writeMicroseconds(uS);
参数 servo: 舵机类型的变量 uS:微妙级的数值
返回 无
read()
说明 读取当前的舵机角度。
语法 servo.read();
参数 无
返回 当前的舵机角度
readMicroseconds()
说明 读取当前的舵机微秒单位数值。
语法 servo.readMicroseconds();;
参数 无
返回 当前的舵机微秒单位数值
attached()
说明 检查舵机变量是否绑定到管脚。
语法 servo.attached();
参数 无
返回 如果舵机已经绑定则返回True,否则返回False
Fireduino Servo 示例程序
#include <Servo.h> Servo myservo; // create servo object to control a servo // twelve servo objects can be created on most boards int pos = 0; // variable to store the servo position void setup() { myservo.attach(9); // attaches the servo on pin 9 to the servo object } void loop() { for(pos = 0; pos <= 180; pos += 1) // goes from 0 degrees to 180 degrees { // in steps of 1 degree myservo.write(pos); // tell servo to go to position in variable 'pos' delay(15); // waits 15ms for the servo to reach the position } for(pos = 180; pos>=0; pos-=1) // goes from 180 degrees to 0 degrees { myservo.write(pos); // tell servo to go to position in variable 'pos' delay(15); // waits 15ms for the servo to reach the position } }