查看: 1743|回复: 4
打印 上一主题 下一主题

Arduino系列教程之舵机控制

[复制链接] qrcode

33

主题

42

帖子

121

积分

注册会员

Rank: 2

积分
121
楼主
跳转到指定楼层
发表于 2014-9-17 10:00 PM | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

舵机是一种位置伺服的驱动器,它接收一定的控制信号,输出一定的角度,适用于那些需要角度不断变化并可以保持的控制系统。本实验用一块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);//引用脉冲函数
}
}
}
让舵机转动到用户输入数字所对应的角度数的位置,并将角度打印显示到屏幕上。如图:



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

161

主题

519

帖子

1069

积分

金牌会员

Rank: 6Rank: 6

积分
1069
沙发
发表于 2015-1-15 11:51 PM | 只看该作者
新人来了,学习
回复 支持 反对

使用道具 举报

0

主题

113

帖子

46

积分

新手上路

Rank: 1

积分
46
板凳
发表于 2015-2-10 11:43 AM | 只看该作者
帮顶了!!
回复 支持 反对

使用道具 举报

368

主题

2017

帖子

4268

积分

论坛元老

Rank: 8Rank: 8

积分
4268
地板
发表于 2015-3-16 02:16 PM | 只看该作者
谢谢分享顶一个

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 支持 反对

使用道具 举报

0

主题

71

帖子

6

积分

新手上路

Rank: 1

积分
6
5#
发表于 2015-3-17 08:30 PM | 只看该作者
太好了,学习了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表