舵机是小型伺服电机的一种,它能将收到的电信号转换成电机轴上的角位移或角速度输出,其相对于普通直流电机而言,能够精确控制输出轴的速度或位置,且控制简单,但相对应的缺点是速度低,价格贵,适合用于开发机器人。如图4-2-5 所示,舵机具有很多种类,根本区别在于使用电压的不同以及输出扭矩的不同,见表 4-2-1,例如本书使用的MG996R 舵机,工作电压为5 V,输出扭矩为9.4 KG/cm。舵机还分为角度舵机(有 90°舵机、180°舵机)和连续旋转舵机(360°舵机),本书使用的MG996R 舵机包含有180°和360°。角度舵机的特点是,在其形成范围内能准确转动某一角度,其一般用于机械手的关节;而连续旋转舵机的特点是只能连续转动,不能控制转某个角度,可以控制方向与速度,通常用于驱动移动机器人的轮子。这里使用连续舵机来作为智能小车行走的控制电机,如图4-2-6 所示。
图4-2-5 舵机介绍
表4-2-1 常用舵机的种类
图4-2-6 Arduino 机器人的360°舵机位置
接下来,首先探讨360°舵机的使用方法,然后再探讨180°舵机的使用方法。
(1)舵机的3 条线的具体定义如下:
橙色线:SIG(信号线),按照配套的机器人,本书设置与 Arduino的5 号、6 号数字接口连接;
红色线:VCC;
棕色线:GND。
(2)360°舵机驱动测试程序如下:
(www.daowen.com)
(3)程序详解。
① 头文件。
Arduino 程序开发实际是一种C++开发,包含头文件时使用#include<>,在Arduino 程序开发中一般称为加载某个库文件,我们常用的库文件有舵机库<Servo.h>,红外遥控库<IRremote.h>,IIC 通信库<IIC.h>,SPI 通信库<SPI.h>,SD 卡库<SD.h>等。添加或安装库文件的方式详见3.1.3 节。
② Servo myservo1。
利用Servo 声明myservo1 这个变量是贴合头文件<Servo.h>需要做的工作,其含义是创建一个控制舵机1 的对象。
③ myservo1.attach(motor1Pin)。
该函数类似于pinMode(),不过该函数是专用于配置Arduino 的PWM数字接口5 输出到舵机1 的信号脚,实际就是让Arduino 的引脚5 能控制舵机1。
④ myservo1.write(90)。
该函数专用于控制舵机的旋转方向及速度,对于360°舵机(连续旋转舵机),myservo1.write(val)使用时,如果val=90,360°舵机就是不转动,如果val=0,360°舵机就以一个方向全速转动,如果0<val<90,就以非最大速度在该方向上转动,越接近0,速度越小;如果val=180,360°舵机就以另一个方向全速转动,如果90<val<180,就以非最大速度在该方向上转动,越接近180,速度越大。
Setup()函数中,使用delay(1000)延时1 s 是为了让Arduino UNO 开发板接通电源并稳定后,再执行loop()程序启动两个360°舵机。这个细节是编程人员需要注意的!
(4)180°舵机驱动测试程序如下:
① setup()函数中需要设置舵机3 的初始角度为0°。
② 与连续旋转舵机不同的是,角度舵机(180°舵机)使用函数myservo3.write(pos)时,pos 为多少,舵机就转动到该pos 值的角度位置。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。