Arduino系列教程-017 舵机控制
2014-02-10 11:20
393 查看
本教程来至yingcloud.com网站
舵机是一种位置伺服的驱动器,它接收一定的控制信号,输出一定的角度,适用于那些需要角度不断变化并可以保持的控制系统。本实验用一块Arduino来驱动舵机。
舵机由电路板上的IC 判断转动方向,再驱动无核心马达开始转动,透过减速齿轮将动力传至摆臂,同时由位置检测器送回信号,判断是否已经到达定位。适用于那些需要角度不断变化并可以保持的控制系统。当电机转速一定时,通过级联减速齿轮带动电位器旋转,使得电压差为0,电机停止转动。一般舵机旋转的角度范围是0 度到180 度。从图上可以看出舵机有三根接线 ,棕色为接地线,红色为电源正极线,橙色为信号线,接线就这样了。
int myangle;//定义角度变量
int pulsewidth;//定义脉宽变量
int val;
void servopulse(int servopin,int myangle)//定义一个脉冲函数
{
pulsewidth=(myangle*11)+500;//将角度转化为500-2480 的脉宽值
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';//将特征量转化为数值变量
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);//引用脉冲函数
}
}
}
让舵机转动到用户输入数字所对应的角度数的位置,并将角度打印显示到屏幕上。如图:
舵机是一种位置伺服的驱动器,它接收一定的控制信号,输出一定的角度,适用于那些需要角度不断变化并可以保持的控制系统。本实验用一块Arduino来驱动舵机。
元器件
舵机、面包线、Arduino板
实验接线图
舵机由电路板上的IC 判断转动方向,再驱动无核心马达开始转动,透过减速齿轮将动力传至摆臂,同时由位置检测器送回信号,判断是否已经到达定位。适用于那些需要角度不断变化并可以保持的控制系统。当电机转速一定时,通过级联减速齿轮带动电位器旋转,使得电压差为0,电机停止转动。一般舵机旋转的角度范围是0 度到180 度。从图上可以看出舵机有三根接线 ,棕色为接地线,红色为电源正极线,橙色为信号线,接线就这样了。
程序代码
int servopin=9;//定义数字接口9 连接伺服舵机信号线int myangle;//定义角度变量
int pulsewidth;//定义脉宽变量
int val;
void servopulse(int servopin,int myangle)//定义一个脉冲函数
{
pulsewidth=(myangle*11)+500;//将角度转化为500-2480 的脉宽值
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';//将特征量转化为数值变量
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);//引用脉冲函数
}
}
}
让舵机转动到用户输入数字所对应的角度数的位置,并将角度打印显示到屏幕上。如图:
总结与思考
实验比较简单,从效果来看舵机需要人为的输入一个角度才会转动,将变化的脉冲值转化为角度值并随着转动,这就是本次实验。在连线时要注意接线错误,不要将线接反。相关文章推荐
- 【Arduino入门教程之二】控制舵机转动
- Arduino系列教程-06 按键控制
- Arduino教程 模拟输入输出以及电机和舵机控制
- 【转】物联网跟我动手做系列教程—第三篇 实验三如何用arduino+ethernet shield与yeelink结合5分钟实现web远程家电控制(代码已更新)
- Arduino系列教程之 – PWM 的秘密(上)
- Windows 8实例教程系列 - 布局控制
- Arduino系列教程-021 光控声音
- Swift教程翻译系列——控制流之循环
- arduino uno + 舵机 + dht11 + 杜邦线 + usb + 面包板 测温度 控制舵机运动
- Arduino 摇杆控制 舵机
- 树莓派开发系列教程9——树莓派GPIO控制
- Arduino系列教程-01 Hello World!
- Windows 8实例教程系列 - 布局控制 推荐
- Arduino系列教程-09 模拟值读取
- swift入门教程系列7-控制流
- Windows 8实例教程系列 - 布局控制
- Arduino系列教程-02 点亮LED灯
- Arduino系列教程-010 感光灯
- 树莓派开发系列教程9——树莓派GPIO控制
- springsecurity权限控制系列教程:1 入门