32路舵机控制板与乐高蓝牙遥控车
图1 Arduino蓝牙遥控乐高机械手车实验全景图 上一篇文章《乐高8275科技套件B模型的Arduino电控改造》描述的是:我用标准舵机替换掉了乐高Technic电机,并用Arduino系统全电控了乐高8275机械手车,网址: https://www.eefocus.com/zhang700309/blog/12-07/281931_aa45c.html。前几天,花了一些功夫改装了一个乐高SET套件作品,写了一篇文章,如果就此拆掉这些积木,再换个作品继续用这些积木进行搭建,当然可以。但为免过于草率,我在想能否换些另外的电控,测试一下这些玩意的功效,也是蛮有意思的。所以这次我把遥控车接收器从Arduino控制器换成了32路舵机控制板。
其实32路舵机控制板也像Arduino控制板一样是个国际标准,并不是哪家公司所独有的技术,很多国内外的机器人配件公司和Arduino设备商都有类似的产品,下面一张图展示的是国外Lynxmotion公司和国内DFRobot的产品,它们都必备有动作存储器部件,区别是Lynxmotion公司的产品采用老式9针串行接口,而DFRobot公司的产品用的是USB接口,另外可以插装蓝牙和APC220无线模块,这样便于制作遥控作品。Lynxmotion公司网址:https://www.lynxmotion.com/。DFRobot公司网址:https://goo.gl/g4oQB。https://www.eefocus.com/include/picture/500/400/data/12-08/1343874187_396ac0a3.jpg图2 Lynxmotion公司和DFRobot的32路舵机控制板对照图 点击所有图片,都可以放大清晰观看。 由机器人专家Jim Frye领衔的Lynxmotion公司是国际知名的机器人套件生产商,可以在它的网站里看到很多COOL的机器人作品图片、视频以及有关机器人的资讯。下图是该公司在“SERVO” 杂志上的广告页,可以欣赏下,图中红色矩形框标注的是该公司的32路舵机控制板。我看了下图的时候,就想到我肯定不会花那多钱海淘这些套件去感受科技,自己用国内公司的32路舵机控制板,再从网路上很容易买到些舵机关节连接板,加上乐高零件,自己也应该能高仿下Lynxmotion公司的机器人套件。 https://www.eefocus.com/include/picture/500/400/data/12-08/1343874153_e3564e43.jpg图3Lynxmotion公司在“SERVO” 杂志上的广告页 SERVO Magazine 是创办于2003年10月份的美国经典的机器人杂志,是由T&L Publications创办发行的月刊。它是面向最广大机器人爱好者的杂志,是百分之百的机器人实践专门杂志,里面的内容有专题文章、访谈、教程、DIY项目、黑客(创客)、零部件来源,还有更多分类。SERVO Magazine 网址:https://www.servomagazine.com/index.php。还有一本名为“Make”杂志,无线电杂志社已经把它翻译成简体中文,中文名为《爱上制作》,可以在当当网买到,“Make”杂志网址:https://makezine.com/。看到下面图片,感觉美国人玩得很开心,而且还没耽误工作。https://www.eefocus.com/include/picture/500/400/data/12-08/1343874292_59333085.jpg图4 Servo杂志和Maker杂志 闲话不再说了,还是谈谈这篇文章的焦点,DFRobot公司的USB版32位舵机控制板吧。用上这个板子,我的乐高遥控车上的接收器从机,没有编写一行程序,只需遥控器主机发字符串命令,就可以控制小车完成规定动作。实验视频:https://player.youku.com/player.php/sid/XNDMwNzk4MjQ0/v.swf 我这篇文章的实验项目是用Arduino遥控主机来控制32路舵机控制板,然后舵机控制板再驱动遥控车两个轮子的舵机以及机械手舵机工作,所以对于舵机控制板,这次我只讲与这个实验项目有关的内容,更多关于这个板子的用法,我会在今后的文章中逐一介绍,也可以先看看它的说明书网页,https://wiki.dfrobot.com.cn/index.php?title=%E9%A6%96%E9%A1%B5。 我将从三个方面来讲解这个项目,1、32路舵机控制板的电源供给和跳线帽设置;2、舵机零速时PWM信号脉宽值的确定;3、遥控器主机的程序编制。1、32路舵机控制板的电源供给和跳线帽设置32路舵机控制板各端口分布和功能说明图:https://www.eefocus.com/include/picture/500/400/data/12-08/1343874318_6836df38.jpg图5 DF-USBSSC32控制板各端口分布和功能图 上图中标号1、9、10、11端口都可以供电,10号端口提供逻辑电源,我用9V方块电池供电,12号端口提供舵机电源,我用5节2400ma充电电池供电,“11 VL和VS1连通跳线帽”不插上(看上图),断开!,逻辑电源与舵机电源分开供电。由于不用电脑USB供电,所以“2 USB供电选择跳线帽”也不插上,断开!其他跳线帽都插上短接,蓝牙模块插在“16 无限数传接口”上。 实验项目采用Arduino遥控主机来控制这个32路舵机控制板,跳线帽设置和电源供给应如下图所示。注意:下图跳线帽部分如果是白色空白,说明没有插上跳线帽,如果是黑色矩形,说明插上了跳线帽短接。https://www.eefocus.com/include/picture/500/400/data/12-08/1343874346_88909c7.jpg图6Arduino控制器和32路舵机控制板之间串口通讯时的跳线帽和电源设置 由于舵机电源不能超过6.8V,所以只能最多用5节充电电池,但我采用的是乐高Technic套件的电池盒供电,里面是装6节5号电池的,于是我用一个铁钉把一个电池位给短接了。
图 7 乐高电池盒的电池位短接方法
32路舵机控制板的通信波特率,我设置为115200b/s,用通过” 7 拨码开关“来设置,把两个拨码开关都拨到ON端。如下图。
图8舵机控制板上DIP拨码开关与波特率设置
2、舵机零速时PWM信号脉宽值的确定
舵机是一种位置伺服的驱动器,主要是由外壳、电路板、无核心马达、齿轮与位置检测器所构成。其工作原理是由单片机发出PWM信号(脉宽调制信号)来控制舵机运行。PWM信号的周期为20ms,基准脉冲宽度为1500us,实际脉冲宽度范围从500us到2500us。如果是180度舵机,PWM信号脉冲宽度的范围就对应着舵机的转角范围从-90°到+90°,如果是360°旋转舵机,就对应着舵机的转速和转向,脉宽为500us,对应舵机以最高速度反转,脉宽为2500us,对应舵机以最高速度正转,如果脉宽为基准脉宽1500us,那转速为多少?应该为零速。但是即使360°舵机是一个厂家、一个批次的产品,当单片机发出脉宽为1500us的PWM信号时,这种舵机的转速可能也会偏离零速,所以需要PC机舵机控制软件来确定各个舵机应该发出脉宽为多少的PWM信号,才会使某一舵机速度为零。
要用舵机控制软件来确定舵机零速时的PWM信号脉宽值,首先要对32路舵机控制板的跳线帽进行设置,还要安装USB驱动软件。
图9USB调试时的跳线帽和电源设置
如图9所示,连接USB电缆到控制板,将红圈1位置(标注接地符号的那个跳线帽)的跳线帽插到红圈2位置,即采用USB电源给控制板逻辑部分供电,舵机部分则还是采用乐高电池盒供电,并接到“12 VS1电源端子”,使用USB供电后红圈3要断开,“10 VL逻辑电源端子”的9V方块电池的电源也要断开!DIP拨码开关都拨到ON处,波特率选择为115.2Kb/s。乐高机械手车的右轮子和左轮子的舵机分别连在的5号和7号舵机端子上,机械手舵机连在3号舵机端子上。
USB驱动软件和舵机控制软件以及关于DF-USBSSC32控制板的全部资料我从厂家获取来,并打包成RAR文件,可以下载:https://115.com/file/dp42m70j#DF-USBSSC32资料.rar。
安装好驱动程序后,把舵机控制板上的蓝牙模块拿下来,再插到电脑USB接口上,在Windows操作系统的设备管理器里,可以看到自动生成的串口号是什么,我的电脑显示串口号为COM17。不同电脑产生的串口号可能不同,您就用自己操作时生成的串口号。
图10 舵机控制板的USB串口号生成
接着打开舵机控制软件 ,选择为串口号COM17,设置波特率为115200,点击“连接”按钮,然后调整我用红色矩形框标注的对应三个舵机速度的P3、P5、P7值,眼睛看看或者耳朵听听,到底设置为多少,舵机才不转动。这次实验项目连在3、5、7端子的舵机脉宽要分别微调至1510、1505和1500,三个舵机才一点也不转动。确定了零速脉宽值后,把它们记录下来,最后要填写到文章后面的遥控器主机程序相应程序行中,该程序行,我将用红色字体标注出来,最后点击“断开”按钮,释放COM17串口资源。
图11 用舵机控制软件调整舵机零速
另外,我把主从机的两个蓝牙模块的波特率都设置为115200b/s,至于蓝牙模块的参数设置,可见《乐高8275科技套件B模型的Arduino电控改造》,网址: https://www.eefocus.com/zhang700309/blog/12-07/281931_aa45c.html 。由于上篇文章里,蓝牙模块的波特率采用默认值,9600b/s,没必要用AT命令特别设置,但要把波特率改为115200b/s,需在SSCOM3.2串口助手软件的发送行输入AT命令“AT+ UART=115200,0,0 ”来设置,可以再输入“AT+ UART?”查询设置是否正确。如下图所示。
图12 蓝牙模块波特率参数设置
3、遥控器主机的程序编制
只有主机遥控器才需要编写程序,机械手车上的从机接收器由于使用了32路舵机控制板,不需要编写程序,舵机控制板接受到主机遥控命令后,会自动领会,并驱动舵机工作的。主机程序部分由于有详细的注释,就不累述了。注意:向Arduino控制器“写”程序前,先把蓝牙模块从控制器的TTL串行接口上拔下来,否则程序无法“写”入,“写”完程序后,再插上蓝牙模块。
主机遥控器程序任务是:采集遥控器的游戏杆扩展板上的PS摇杆和大拇指按键信息,处理后,通过蓝牙串口,向遥控车上的舵机控制板发送字符串控制命令,这些命令分别控制小车的前后左右行走、机械手抓取或松开物体。
int JoyStick_X = 1; //游戏杆扩展板的PS摇杆X轴连在模拟端口1
int JoyStick_Y = 0; //游戏杆扩展板的PS摇杆Y轴连在模拟端口0
int button_Grab =3; //红色B按键连在数字端口3
int button_Release =4;//蓝色C按键连在数字端口4
//B按键控制遥控车机械手抓取物体
//C按键控制遥控车机械手松开物体
int B,C;//存储游戏杆扩展板的开关量按键的当前读取值
int x,y;//存储游戏杆扩展板的模拟量PS摇杆X,Y轴的当前读取值
//初始化
void setup()
{
//把游戏杆扩展板上B、C按键设置为开关量输入模式
pinMode(button_Grab, INPUT);
pinMode(button_Release, INPUT);
//启动串行通信
Serial.begin(115200);//设置串行通信的波特率
}
//主程序
void loop()
{
x=analogRead(JoyStick_X);//读取PS摇杆X轴的模拟量信息
y=analogRead(JoyStick_Y);//读取PS摇杆Y轴的模拟量信息
//读取游戏杆扩展板上B、C按键“是否按下”的状态
B= digitalRead(button_Grab);
C= digitalRead(button_Release);
//如果PS摇杆Y轴向前摇动
if(y>812)
{
//向遥控车的舵机控制板发送小车前进命令
Serial.println("#5 P2500 #7 P500");
}
//如果PS摇杆Y轴向后摇动
else if(y<212)
{
//向遥控车的舵机控制板发送小车后退命令
Serial.println("#5 P500 #7 P2500");
}
//如果PS摇杆X轴向左摇动
else if(x>812)
{
//向遥控车的舵机控制板发送小车向左命令
Serial.println("#5 P500 #7 P500");
}
//如果PS摇杆X轴向右摇动
else if(x<212)
{
//向遥控车的舵机控制板发送小车向右命令
Serial.println("#5 P2500 #7 P2500");
}
//如果机械手B按键为按下状态,同时C按键为松开状态
else if((B ==LOW)&&(C==HIGH))
{
//向遥控车的舵机控制板发送机械手“抓取”物体命令
Serial.println("#3 P2500");
}
//如果机械手C按键为按下状态,同时B按键为松开状态
else if((C==LOW)&&(B==HIGH))
{
//向遥控车的舵机控制板发送机械手“松开”物体命令
Serial.println("#3 P500");
}
//否则
else
{
//向遥控车的舵机控制板发送所有舵机停转命令
Serial.println("#3 P1510 #5 P1505 #7 P1500");
}
delay(200);//延时,等待数据发送成功
}
主机程序写入后,按照图6所示设置舵机控制板上跳线帽和电源供给,两个设置波特率的DIP拨码开关都拨到ON,主从机都插上蓝牙模块,就可以遥控乐高机械手车了。
:handshake 好博文
页:
[1]