一、舵机的概述
伺服电机通常被称为舵机,它是一种带有输出轴的小装置。当我们向伺服器发送一个控制信号时,输出轴就可以转到特定的位置。只要控制信号持续不变,伺服机构就会保持轴的角度位置不改变。如果控制信号发生变化,输出轴的位置也会相应发生变化。
二、需要的器件
舵机,跳线若干
舵机有很多规格,但是所有的舵机都有外接三根线,分别用棕、红、橙三种颜色进行区分,由于舵机品牌不同,颜色也会有所差异,棕色为接地线,红色为电源正极线,橙色为信号线。
三、舵机如何控制转动角度
脉冲宽度调制(PWM):控制线用于传输角度控制信号,这个角度是由控制信号脉冲的持续时间决定。
舵机的控制一般需要一个20ms左右的时基脉冲,该脉冲的高电平部分一般为0.5ms-2.5ms范围,总间隔为2ms。脉冲的宽度将决定马达转动的距离。如1.5毫秒的脉冲,电机将转向90度的位置(通常称为中立位置,对于180°舵机来说,就是90°位置)。
四、代码程序
//UART send 1~9==>20~180 degree
int servopin=9;//设置舵机驱动脚到数字口9
int myangle;//定义角度变量
int pulsewidth;//定义脉宽变量
int val;
void servopulse(int servopin,int myangle)//*定义一个 脉冲函数, 用来模拟方式产生PWM值
{
pulsewidth=(myangle*11)+500;//将角度转化为500-2480 的脉宽 10微秒/9度
digitalWrite(servopin,HIGH);//将舵机接口电平置高
delayMicroseconds(pulsewidth);//延时脉宽值的秒数
digitalWrite(servopin,LOW);//将舵机接口电平置低
delay(20-pulsewidth/1000); //延时周期内剩余时间
}
void setup()
{
pinMode(servopin,OUTPUT);//设定舵机接口为输出接口
Serial.begin(9600);//设置波特率为9600
Serial.println("servo=o_seral_simple ready");
}
void loop()//将0 到9 的数转化为0 到180 角度,并让LED 闪炊乐相应数的次数
{
val=Serial.read();//读取串口收到的数据
if(val>'0'&&val<='9') //判断收到数据值是否符合范围
{
val=val-'0';//将ASCII码转换成数值
val=val*(180/9);//将数字转化为角度
Serial.print("moving servo to ");
Serial.print(val,DEC);
Serial.println();
for(int i=0;i<=50;i++) //给予舵机足够的时间让它转到指定角度
{
servopulse(servopin,val);//引用脉冲函数
}
}
}
五、实物连接及结果
视频我没上传好,就是弄好后打开控制台窗口,按下1-9,分别回车观察到舵机以每次20°的大小进行转动,最后按下1又自动转到你最开时候舵机的状态。