Arduino舵机控制1
来源:互联网 发布:程序员适合写那些博客 编辑:程序博客网 时间:2024/05/01 20:57
Arduino:舵机控制
舵机,又称伺服马达,是一种具有闭环控制系统的机电结构。舵机主要是由外壳、电路板、无核心马达、齿轮与位置检测器所构成。其工作原理是由控制器发出PWM(脉冲宽度调制)信号给舵机,经电路板上的IC处理后计算出转动方向,再驱动无核心马达转动,透过减速齿轮将动力传至摆臂,同时由位置检测器(电位器)返回位置信号,判断是否已经到达设定位置,一般舵机只能旋转180度。
舵机有3根线,棕色为地,红色为电源正,橙色为信号线,但不同牌子的舵机,线的颜色可能不同,请大家注意。
舵机的转动的角度是通过调节PWM(脉冲宽度调制)信号的占空比来实现的,标准PWM(脉冲宽度调制)信号的周期固定为20ms(50Hz),理论上脉宽分布应在1ms到2ms之间,但是,事实上脉宽可由0.5ms到2.5ms之间,脉宽和舵机的转角0°~180°相对应。有一点值得注意的地方,由于舵机牌子不同,对于同一信号,不同牌子的舵机旋转的角度也会有所不同。
舵机角度和占空比的关系
下面这个小实验的目标是用电位器控制舵机的角度,正好在前一个实验里,电位器都还没有拆掉。需要特别注意的是供电部分,舵机转动时电流会比较大,Arduino上的电源芯片可能会因过流保护到发热而损坏,电源需要接到外部供电,切不可使用USB供电。
舵机的棕色线接GND,红色线接VIN(我猜这个是直接连到外接电源的正极),黄色是数据线,接在PWM的7号管脚。电位器的连接稍微有点变换,因为管脚们施展不开,我把正极连在3.3V的接口上,这样模拟输入的范围就变成了0到660左右。前面说了,舵机分别用0.5ms到2.5ms之间的脉冲来对应0到180度左右的角度,我们可以用pulsewidth=(angle*11)+500这样的公式,把0到180度的转角映射到500到2480的脉冲时间。
代码:
view plaincopy to clipboardprint?
01.int readPin = 6; //用来连接电位器
02.int servopin = 7; //定义舵机接口数字接口7
03.
04.void servopulse(int angle)//定义一个脉冲函数
05.{
06. int pulsewidth=(angle*11)+500; //将角度转化为500-2480的脉宽值
07. digitalWrite(servopin,HIGH); //将舵机接口电平至高
08. delayMicroseconds(pulsewidth); //延时脉宽值的微秒数
09. digitalWrite(servopin,LOW); //将舵机接口电平至低
10. delayMicroseconds(20000-pulsewidth);
11.}
12.
13.void setup()
14.{
15. pinMode(servopin,OUTPUT);//设定舵机接口为输出接口
16.}
17.
18.void loop()
19.{
20. //读取电位器(传感器)的读数,接到3.3V,值范围从0到660左右
21. int readValue = analogRead(readPin);
22. //把值的范围映射到0到165左右
23. int angle = readValue / 4;
24. //发送50个脉冲
25. for(int i=0;i<50;i++)
26. {
27. //引用脉冲函数
28. servopulse(angle);
29. }
30.}
int readPin = 6; //用来连接电位器
int servopin = 7; //定义舵机接口数字接口7
void servopulse(int angle)//定义一个脉冲函数
{
int pulsewidth=(angle*11)+500; //将角度转化为500-2480的脉宽值
digitalWrite(servopin,HIGH); //将舵机接口电平至高
delayMicroseconds(pulsewidth); //延时脉宽值的微秒数
digitalWrite(servopin,LOW); //将舵机接口电平至低
delayMicroseconds(20000-pulsewidth);
}
void setup()
{
pinMode(servopin,OUTPUT);//设定舵机接口为输出接口
}
void loop()
{
//读取电位器(传感器)的读数,接到3.3V,值范围从0到660左右
int readValue = analogRead(readPin);
//把值的范围映射到0到165左右
int angle = readValue / 4;
//发送50个脉冲
for(int i=0;i<50;i++)
{
//引用脉冲函数
servopulse(angle);
}
}
实验结果:当旋转电位器的时候,舵机的角度随之改变。不过最终转角并没有达到180度,在某些范围内,电位器旋转时,舵机没有转动。网上舵机的说明也提到了这点,识别的角度范围是有限的。具体的有效角度范围,我还没有测量,等将来开始制作的时候再说。
- Arduino舵机控制1
- Arduino 摇杆控制 舵机
- arduino-摇杆控制舵机
- Arduino之舵机控制
- Arduino舵机控制
- Arduino—舵机控制
- arduino-控制舵机
- arduino-舵机控制(示例)
- 利用arduino 控制舵机转动
- Arduino对舵机的控制
- Arduino双舵机串口控制源代码
- Arduino系列教程-017 舵机控制
- Arduino通过串口控制舵机角度实验
- Arduino控制360度旋转舵机
- 【Arduino入门教程之二】控制舵机转动
- arduino学习笔记5 舵机控制
- 舵机arduino
- Arduino控制步进电机和舵机机器臂
- apache commons学习系列之Email组件
- 3个点的action button 不显示问题
- Linux下套接字编程简例
- Ultimaker2 3D打印机源文件在线公布
- android4.2源代码编译环境搭建
- Arduino舵机控制1
- Linux下基于EPOLL 模型,实现用户登录,客户端采用QT
- maven学习总结初步
- rpm,yum和apt使用详解
- 2014 Shenzhen Maker Faire见闻
- ZOJ 1007 Numerical Summation of a Series (数学)
- Js实现动态添加删除Table行
- android控件RatingBar改变大小
- 浅谈Android系统开发中一些概念的理解