Arduino教程10 舵机初动「DFR0100 」

2014-06-0510.5万
AI 快速预览详细 收起
本篇Arduino教程介绍了如何使用9G小舵机,通过Arduino控制其在0~180°之间来回转动。项目所需的元件包括9G小舵机、Arduino板等。硬件连接非常简单,只需按图所示连接三根线。代码示例中,通过调用Servo库中的attach()和write()函数,实现舵机的精确控制。适合零基础新手入门,无需复杂编程知识即可完成。
【本篇课程内容于 2024年11月14日更新】

>本系教程配套硬件套件:【新版】Arduino入门套件 DFR0100

本项目要接触到舵机。舵机是一种电机,通过反馈系统来控制其位置,从而能够精确地掌握电机的角度。大多数舵机最大旋转角度是180°。也有一些能转到270°,甚至360°。舵机常被用于对角度有精确要求的场合,如摄像头、智能小车的前置探测器,以及需要在特定范围内进行监测的移动平台。又或者把舵机放到玩具,让玩具动起来。还可以用多个舵机,做个小型机器人,舵机就可以作为机器人的关节部分。所以,舵机的用处很多。
Arduino也提供了<Servo.h>库,让我们使用舵机变得更方便了。
先从简单程序入手,套件这个9G小舵机是180°的,我们就让它在0~180°之间来回转动。

元件清单

Arduino教程10 舵机初动「DFR0100 」图1

硬件连接

这个项目的连线很简单,只需按图1所示连接舵机三根线就可以了,连的时候注意线序,舵机引出三根线。一根是红色,连到+5V上。一根棕色(有些是黑的),连到GND。还有一根是黄色或者橘色,连到数字引脚9。

Arduino教程10 舵机初动「DFR0100 」图2

图 1 舵机初动连线图


代码示例

样例代码:
  1. //项目 - 舵机初动
  2. #include <Servo.h>      // 声明调用Servo.h库
  3. Servo myservo;          // 创建一个舵机对象
  4. int pos = 0;            // 变量pos用来存储舵机位置
  5. void setup() {
  6.     myservo.attach(9);  // 将引脚9上的舵机与声明的舵机对象连接起来
  7. }
  8. void loop() {
  9. for(pos = 0; pos < 180; pos += 1){   
  10. // 舵机从0°转到180°,每次增加1°         
  11.         myservo.write(pos);           // 给舵机写入角度   
  12.         delay(15);                    // 延时15ms让舵机转到指定位置
  13.     }
  14.    
  15. for(pos = 180; pos>=1; pos-=1) {
  16. // 舵机从180°回到0°,每次减小1°                              
  17.         myservo.write(pos);           // 写角度到舵机     
  18.         delay(15);                    // 延时15ms让舵机转到指定位置
  19.     }
  20. }
复制代码


下载代码,下载成功后我们可以看到舵机0~180°来回转动。

代码回顾

代码的开头首先调用了<Servo.h>库

  #include <Servo.h>

这个库已经在Arduino IDE中了,可以打开Arduino-1.0.5/ libraries/Servo/ Servo.h,这就是Servo库所在位置。
我们怎么理解库呢?和我们前面讲到的函数意义是差不多的。函数通常按一个个功能来划分的,就像一个个小的储物柜,函数名好比储物柜标签名。我们使用的时候,直接看标签就好了,方便我们使用。那库是什么呢?库则是把多个函数封装打包起来,好比大的储物柜,里面含有一个个小的储物柜。不知道这样说,你是不是能理解库和函数的关系?
同样,大储物柜也需要一个标签,这标签的学术名叫做“对象”。所以这里叫创建一个对象。就是我们接下来的这句语句:

Servo myservo;

setup()函数中有一条语句:

myservo.attach(9);

这里就开始调用Servo库中的函数了,和我们以前函数调用有点区别。这里,我们需要先指明这是哪个库中的函数。所以,先指出对象名,再指出函数名。每次要用到储物柜的东西就要先指明这个标签。这样程序才知道要去哪里找东西。库函数调用格式如下:

对象名.函数名();

不要忘了中间的“.”!myservo是我们前面设的标签(对象),然后调用的函数是:

Arduino教程10 舵机初动「DFR0100 」图3

attach(pin)函数有一个传递参数——pin,任意一个数字引脚(不建议使用数字0,1)。我们这里选择数字引脚9。

进入主函数,有两个for循环,第一段是从0开始,循环到180,每次增加1度。第二个for循环则是从180开始,每次减小1度,一直减到0。再回到上面那个循环中……
for循环中又调用了一个Servo库中的函数write(pos),变量pos用来存放角度值。我们可以不用管函数内部复杂的程序,只要先会使用就可以了。

myservo.write(pos);

和上面那个函数调用一样,先要指明是哪个库。该函数的功能是将舵机转动到对应的角度,传递参数就是角度,单位为°。
如果还想了解Servo库中还有哪些好用的函数的话,可以参看下面的网址,里面会有相关介绍的。

Servo库:
http://arduino.cc/en/reference/servo
我们无需深入了解函数内部的复杂逻辑,只需学会如何正确使用即可。如果还想了解更多的话,可以借助我们的网络资源。
DF创客社区:
www.dfrobot.com.cn

示例代码 下载附件Moving_a_Servo_Chinese.rar

下一篇教程:Arduino教程 11 -- 可控舵机


DFRobot版权所有,欢迎转载。
转载请务必标注来源: DF创客社区+作者姓名+原文网址。

创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(23)
DFHk-0ykaN8
DFHk-0ykaN8
在之后的Arduino学习之旅中,不管你遇到奇奇怪怪的问题,都希望你与我们交流,欢迎登陆我们的DFRobot创客社区!
jzzgb
jzzgb
很详细
绝地智者
绝地智者
厉害了,新手来顶一顶帖子,加油学习~
LeSoleil
LeSoleil
太好了!
古娜拉黑暗佩奇
古娜拉黑暗佩奇
这些库都是要怎么下载的
talos
talos
欢迎使用深圳市天乐思智能总线伺服及其学习套件, 其特点如下:1、自带ros开发包,无缝对接ROS。2、提供6自由度机械臂套件,AGV套件。3、完整兼容ROBOTIS的dynamixel protocol 2.0 协议的伺服,而且我们对该协议进行了扩充,我们的功能其实比ROBOTIS还要多。
公司网址 WWW.SZTALOS.COM
淘宝店铺:https://shop217839337.taobao.com
联系QQ:2858136840
伺服性能展示视频地址: http://v.youku.com/v_show/id_XMzM2ODcwODE3Mg==.html?spm=a2h3j.8428770.3416059.1
http://v.youku.com/v_show/id_XMzM2ODk1MDQ4NA==.html?spm=a2h3j.8428770.3416059.1
http://v.youku.com/v_show/id_XMzM2ODk2MzA3Mg==.html?spm=a2h3j.8428770.3416059.1
http://v.youku.com/v_show/id_XMzM2ODk2NTIyNA==.html?spm=a2h3j.8428770.3416059.1
106614649
106614649
上电之后会动是怎么会事呢?有没办法解决?每次一上电它就会动一下。
QRGsRHOk
QRGsRHOk回复106614649
同学我也遇到相同问题了,请问你是怎么解决的啊?
hastwww
hastwww

感谢分享 已收藏
gray6666
gray6666
感谢分享
zuoyan
zuoyan
学习了
zuoyan
zuoyan
学习了
Jane
Jane
作者
回复zuoyan
期待你的分享哈~
zuoyan
zuoyan
学习了
zuoyan
zuoyan
学习了
zuoyan
zuoyan
学习了
zuoyan
zuoyan
学习了
zuoyan
zuoyan
学习了
zuoyan
zuoyan
学习了
zuoyan
zuoyan
学习了
qq721001561564
qq721001561564
其实按照我的理解,“对象”应该是指舵机吧。如果对象是指“库”,那么函数名的调用前面就不应该再写上“对象”的名称啊
peco
peco
很明显转动的角度是小于180度的呀,这时怎么回事?@Jane