查看: 846|回复: 1

[入门] 【舵机初动】基于Mind+ Ardunio入门教程10

[复制链接]
本帖最后由 DFEDU 于 2019-12-13 10:34 编辑


       本项目要接触到舵机。舵机是一种电机,它使用一个反馈系统来控制电机的位置。可以很好掌握电机角度。大多数舵机是可以最大旋转180°的。也有一些能转更大角度,甚至360°。舵机比较多的用于对角度有要求的场合,比如摄像头,智能小车前置探测器,需要在某个范围内进行监测的移动平台。又或者把舵机放到玩具,让玩具动起来。还可以用多个舵机,做个小型机器人,舵机就可以作为机器人的关节部分。所以,舵机的用处很多。

       Ardruino也提供了<Servo.h>库,让我们使用舵机变得更方便了。

       先从简单入手,套件这个9G小舵机是180°的,我们就让它在0~180°之间来回转动。



所需元件

1×  DFduino UNO R3(以及配套USB数据线)

               


1×  Micro Servo 9g           
   



硬件连接

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


10-1 舵机连线图



代码编程

样例程序10-1 :
[C] 纯文本查看 复制代码
//项目十 - 舵机  
#include <DFRobot_Servo.h>                            // 声明调用Servo.h库  
Servo myservo;                                                // 创建一个舵机对象  
int pos = 0;                                                 // 变量pos用来存储舵机位置  
void setup() {   
    myservo.attach(9);                                  // 将引脚9上的舵机与声明的舵机对象连接起来  
}   
   
void loop() {   
        for(pos = 0; pos < 180; pos += 1){         // 舵机从0°转到180°,每次增加1° 
                        myservo.angle(pos);                     // 给舵机写入角度     
                        delay(15);                           // 延时15ms让舵机转到指定位置  
        }  
    for(pos = 180; pos>=1; pos-=1) {        //舵机从180°转回0°,每次减小1°
          myservo.angle(pos);                        // 写角度到舵机       
                        delay(15);                                        // 延时15ms让舵机转到指定位置  
          }  
}  


       代码的第一行是我们在本项目中需要学习关于库的知识。这行指令我们未曾接触过,但是在Mind+中我们能够通过以下步骤来熟悉和舵机有关的代码。


STEP1:进入扩展,点击执行器



STEP2:在界面右上角的搜索中输入“舵机”



STEP3:选择项目中所要求的0-180°舵机



STEP4:回到主界面,将新加载舵机的指令拖入“手动编辑”的输入框中,即可看见它对应的代码




       所有的指令都可以通过拖进手动编辑区,对应的c代码会出现。在之后遇到新指令的代码学习,或是一时忘记指令对应的指令,都可以通过这一方式来查看和温故代码。并且这些代码都可以直接复制到手动编辑区中,但别忘记根据连接图来修改相关参数!

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



图形化指令学习




代码学习

       代码的开始先调用<DFRobot_Servo.h>库
[C] 纯文本查看 复制代码
1. #include <DFRobot_Servo.h>                    // 声明调用Servo.h库  
      这库已经在Mind+中,打开Mind+1.6.1\Arduino\libraries\DFRobot_Servo\DFRobot_Servo.h,这就是Servo库所在位置。


库是什么?

       我们怎么理解库呢?和我们前面讲到的函数意义是差不多的。函数通常按一个个功能来划分的,就像一个个小的储物柜,函数名好比储物柜标签名。我们使用的时候,直接看标签就好了,方便我们使用。那库是什么呢?库则是把多个函数封装打包起来,好比大的储物柜,里面含有一个个小的储物柜。不知道这样说,你是不是能理解库和函数的关系?


对象

       同样,大储物柜也需要一个标签,这标签的学术名叫做对象”。所以这里叫创建一个对象。就是我们接下来的这句语句:

       Servo myservo;        // 创建一个舵机对象


库中函数的调用

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

       myservo.attach(9);

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

       库函数调用格式如下:

       对象名.函数名();

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



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


       进入主函数,有两个for循环,第一段是从0开始,循环到180,每次增加1度。第二个for循环则是从180开始,每次减小1度,一直减到0。在回到上面那个循环中……

       for循环中又调用了一个Servo库中的函数myservo.angle(pos),我们可以不用管函数内部复杂的程序,只要先会使用就可以了。

       myservo.angle(pos);

       和上面那个函数调用一样,先要指明是哪个库。该函数的传递参数就是角度,单位为“°”。


       如果还想了解DFRobot_Servo库中还有哪些好用的函数的话,可以Mind+官网中的教程和论坛查看,里面会有相关介绍的。

       我们这里对舵机的硬件部分就不做详细说明了,先学会简单的使用即可。如果还想了解更多的话,可以借助我们丰富的社区资源。



gada888  版主

发表于 2019-12-25 10:26:00

参考参考
回复

使用道具 举报

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

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2020 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail