您现在的位置: 晨光科技 >> 文章 >> 技术 >> 单片机 >> 正文  
  32路舵机控制板与乐高蓝牙遥控车           
32路舵机控制板与乐高蓝牙遥控车
[ 作者:佚名    转贴自:http://www.eefocus.com/zhang700309/blog/12-08/282734_3e3a9.html    点击数:40    更新时间:2018/5/10    文章录入:LA ]
[注:本站登载的某些文章并不代表本站支持或反对其观点或肯定其真实性]

 图1 Arduino蓝牙遥控乐高机械手车实验全景图   

    上一篇文章《乐高8275科技套件B模型的Arduino电控改造》描述的是:我用标准舵机替换掉了乐高Technic电机,并用Arduino系统全电控了乐高8275机械手车,网址: http://www.eefocus.com/zhang700309/blog/12-07/281931_aa45c.html。前几天,花了一些功夫改装了一个乐高SET套件作品,写了一篇文章,如果就此拆掉这些积木,再换个作品继续用这些积木进行搭建,当然可以。但为免过于草率,我在想能否换些另外的电控,测试一下这些玩意的功效,也是蛮有意思的。所以这次我把遥控车接收器从Arduino控制器换成了32路舵机控制板。

    其实32路舵机控制板也像Arduino控制板一样是个国际标准,并不是哪家公司所独有的技术,很多国内外的机器人配件公司和Arduino设备商都有类似的产品,下面一张图展示的是国外Lynxmotion公司和国内DFRobot的产品,它们都必备有动作存储器部件,区别是Lynxmotion公司的产品采用老式9针串行接口,而DFRobot公司的产品用的是USB接口,另外可以插装蓝牙和APC220无线模块,这样便于制作遥控作品。Lynxmotion公司网址:http://www.lynxmotion.com/。DFRobot公司网址:http://goo.gl/g4oQB

图2 Lynxmotion公司和DFRobot的32路舵机控制板对照图 

点击所有图片,都可以放大清晰观看。 

    由机器人专家Jim Frye领衔的Lynxmotion公司是国际知名的机器人套件生产商,可以在它的网站里看到很多COOL的机器人作品图片、视频以及有关机器人的资讯。下图是该公司在“SERVO” 杂志上的广告页,可以欣赏下,图中红色矩形框标注的是该公司的32路舵机控制板。我看了下图的时候,就想到我肯定不会花那多钱海淘这些套件去感受科技,自己用国内公司的32路舵机控制板,再从网路上很容易买到些舵机关节连接板,加上乐高零件,自己也应该能高仿下Lynxmotion公司的机器人套件。    

图3  Lynxmotion公司在“SERVO” 杂志上的广告页

    SERVO Magazine 是创办于2003年10月份的美国经典的机器人杂志,是由T&L Publications创办发行的月刊。它是面向最广大机器人爱好者的杂志,是百分之百的机器人实践专门杂志,里面的内容有专题文章、访谈、教程、DIY项目、黑客(创客)、零部件来源,还有更多分类。SERVO Magazine 网址:http://www.servomagazine.com/index.php。还有一本名为“Make”杂志,无线电杂志社已经把它翻译成简体中文,中文名为《爱上制作》,可以在当当网买到,“Make”杂志网址:http://makezine.com/。看到下面图片,感觉美国人玩得很开心,而且还没耽误工作。

图4 Servo杂志和Maker杂志

    闲话不再说了,还是谈谈这篇文章的焦点,DFRobot公司的USB版32位舵机控制板吧。用上这个板子,我的乐高遥控车上的接收器从机,没有编写一行程序,只需遥控器主机发字符串命令,就可以控制小车完成规定动作。

实验视频:

     我这篇文章的实验项目是用Arduino遥控主机来控制32路舵机控制板,然后舵机控制板再驱动遥控车两个轮子的舵机以及机械手舵机工作,所以对于舵机控制板,这次我只讲与这个实验项目有关的内容,更多关于这个板子的用法,我会在今后的文章中逐一介绍,也可以先看看它的说明书网页,http://wiki.dfrobot.com.cn/index.php?title=USB%E7%89%8832%E8%B7%AF%E8%88%B5%E6%9C%BA%E6%8E%A7%E5%88%B6%E6%9D%BF(SKU:DRI0005)

    我将从三个方面来讲解这个项目,1、32路舵机控制板的电源供给和跳线帽设置;2、舵机零速时PWM信号脉宽值的确定;3、遥控器主机的程序编制。

1、32路舵机控制板的电源供给和跳线帽设置

32路舵机控制板各端口分布和功能说明图:

图5 DF-USBSSC32控制板各端口分布和功能图

     上图中标号1、8、10、12端口都可以供电,10号端口提供逻辑电源,我用9V方块电池供电,12号端口提供舵机电源,我用5节2400ma充电电池供电,“11 VL和VS1连通跳线帽”不插上(看上图),断开!,逻辑电源与舵机电源分开供电。由于不用电脑USB供电,所以“2 USB供电选择跳线帽”也不插上,断开!其他跳线帽都插上短接,蓝牙模块插在“16 无限数传接口”上。

    实验项目采用Arduino遥控主机来控制这个32路舵机控制板,跳线帽设置和电源供给应如下图所示。注意:下图跳线帽部分如果是白色空白,说明没有插上跳线帽,如果是黑色矩形,说明插上了跳线帽短接。

图6  Arduino控制器和32路舵机控制板之间串口通讯时的跳线帽和电源设置

    由于舵机电源不能超过6.8V,所以只能最多用5节充电电池,但我采用的是乐高Technic套件的电池盒供电,里面是装6节5号电池的,于是我用一个铁钉把一个电池位给短接了。至于如何把乐高电池盒的电源线引出来给舵机电源端供电,可参看文章,网址: http://www.eefocus.com/zhang700309/blog/12-01/237459_6b7a6.html 。

图 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驱动软件。

图9  USB调试时的跳线帽和电源设置

    如图9所示,连接USB电缆到控制板,将红圈1位置(标注接地符号的那个跳线帽)的跳线帽插到红圈2位置,即采用USB电源给控制板逻辑部分供电,舵机部分则还是采用乐高电池盒供电,并接到“12 VS1电源端子”,使用USB供电后红圈3要断开,“10 VL逻辑电源端子”的9V方块电池的电源也要断开!DIP拨码开关都拨到ON处,波特率选择为115.2Kb/s。乐高机械手车的右轮子和左轮子的舵机分别连在的5号和7号舵机端子上,机械手舵机连在3号舵机端子上。

    USB驱动软件和舵机控制软件以及关于DF-USBSSC32控制板的全部资料我从厂家获取来,并打包成RAR文件,可以下载:http://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电控改造》,网址: http://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,主从机都插上蓝牙模块,就可以遥控乐高机械手车了。 
  • 上一篇文章: 与会唱歌的Arduino机器猫互动

  • 下一篇文章: 《爱上制作》与国外专家眼中的乐高
  •    
    [注:标题搜索比内容搜索快]
    发表评论】【告诉好友】【打印此文】【关闭窗口
     最新5篇热点文章
  • 轨道钢承重计算公式及应用[109]

  • 【选型】如何为变频器选取阻值…[86]

  • AIS2023参展厂商名录[346]

  • AGV综合选型[170]

  • APIE 2023第4届亚太国际智能装…[138]

  •  
     最新5篇推荐文章
  • 外媒:正在唤醒中国的习近平[305]

  • 中国反伪科学运动背后的CIA黑手…[494]

  • [转载]袁隆平真言:中国最大的…[668]

  • 台专家:当年我们造IDF时 大陆…[572]

  • 旅日华人:中国严重误判日本民…[577]

  •  
     相 关 文 章
  • Arduino和STM32性能对比究竟谁…[26]

  • Labview及Proteus软件环境下单…[38]

  • 基于labview串口通讯的虚拟数字…[41]

  • AVR编程语言Arduino也可以用Pr…[47]

  • Arduino编程 PWM方法调节LED光…[37]


  •   网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
        没有任何评论
    设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 管理登录 | 
    版权所有 Copyright© 2003 晨光科技        站长:璀璨星辰        页面执行时间:261.72毫秒
    Powered by:MyPower Ver3.5