nille 发表于 2014-8-8 17:41:23

现实版铁甲钢拳 2

本帖最后由 nille 于 2014-8-26 17:50 编辑

        我们在上次的铁甲钢拳制作的基础上做了一些改进。在详细介绍改进过程之前,大家先来看段视频吧!http://v.youku.com/v_show/id_XNDEyNTcxNTc2.html

       OK,接下来我们介绍一下之后的完善过程。如果大家没有看过之前的内容也可以点击这里回顾一下。改进的地方首先看外观,如果大家留意会发现机器人多了图1中的几个部分——胸甲、背甲和手。手的小结构件可以替代之前用PVC材料制作的手,胸甲和背甲可以将控制板包裹起来,保护控制板的同时也让人形机器人更加的好看。

图1 胸甲、背甲和手
  除了把机器人的外观做的更加好看之外,我们还想让它在动作的时候发出声音,就像游戏拳皇或者街霸一样。这就需要对之前的制作进行一些修改,上一篇完成后的机器人结构示意图如图2所示。

图2 控制示意图
  为了实现上面提到的功能,我们就不能让手柄的控制信号通过无线模块直接发给舵机控制板了,而是需要一个模块在收到手柄的信号之后,一方面可以发送指令给舵机控制板,另一方面可以实现语音播放。改造后的机器人端连接示意图如下。

图3 改造后的机器人端连接示意图
  因为机器人背甲和胸甲内的空间有限,所以我们选用了小巧的Flyduino来作为中间的信号处理板,如图4所示。Flyduino是一款基于Arduino的微型控制器,大小只有40mmX24mm,集成了12个数字口,8个模拟口,1个XBee无线数传接口可直接连接我们的无线模块。

图4 Flyduino
  另外,让机器人发声的语音模块我们选择的是DFRduino Player V2.0语音播放模块,如图5所示。该模块支持TTL电平串口,只需要将语音文件放置在SD卡中,就可以通过串口发送文件名信息播放相应的语音文件。同时模块还提供一个播放完毕提示端口,当播放完一首歌曲后,会输出一个高电平。

图5 DFRduino Player V2.0语音播放模块
  器件选定以后,就可以开始我们的改造工作了。
  第一步,安装语音播放模块。
  安装模块之前我们首先要将声音文件保存在存储卡中,根据机器人的动作我们找了以下几种动作的声音,并按照下表给各个文件命名。大家也可以根据自己的喜好选择拳皇、街霸之类游戏里的声音,但文件名一定要对上。


  声音文件拷贝完成后,我们将模块和扬声器都放在胸甲内(图1右上角),固定语音模块的螺丝刚好将扬声器卡住,然后用排线将模块的控制引脚和电源引出,如图6所示。这里要说明一点,本身套件中的胸甲是没有发声孔和模块安装孔的,这些需要用电钻自己钻。

图6 安装语音模块
      连接语音模块的线缆需要从机器人的胸腔中穿过,以连接后面的Flyduino。

图7 控制线缆穿过胸腔

  最后将胸甲固定在机器人身上,如图8所示


图8 固定机器人的胸甲  第二步,安装Flyduino。由于Flyduino没有安装孔,所以我们利用它背面的XBee无线数传接口将其固定在背甲上。我们先在背甲上开两个槽,其大小与无线数传接口一致。如图9所示。


图9 背甲上的安装槽
      然后将Flyduino固定在背甲上,最后插上之前用到的无线模块。如图10、图11所示。



图10 固定好Flyduino


图11 插上无线模块

  第三步,将Flyduino、语音播放模块和舵机控制板3部分连接起来。


       由于模块之间都是通过TTL串口通信,而Flyduino只有一个硬件的TTL串口,且用在了与无线模块的通信上,所以需要用软件在Flyduino端模拟两个串口。在Arduino的库中有一个SoftwareSerial库,定义了一个SoftwareSerial 的类,可以实现模拟串口,我们在代码中定义两个SoftwareSerial 的对象mySerial1和mySerial2,mySerial1占用引脚2、3,用来给语音播放模块发送指令;mySerial2占用引脚4、5,用来给舵机控制板发送指令。定义对象的代码如下。SoftwareSerial mySerial1(2, 3);      //模拟串口1,用来发送音频指令
SoftwareSerial mySerial2(4, 5);      //模拟串口2,用来发送动作指令  对照上一期中的动作表以及这次的声音表,我们能够得到一张声音动作对照表。

  根据这张表能够很方便的完成Flyduino中的程序,源代码如下:  #define MusicEnd 6                //用引脚6来检测声音文件是否播放完毕
  
  SoftwareSerial mySerial1(2, 3);      //模拟串口1,用来发送音频指令
  SoftwareSerial mySerial2(4, 5);      //模拟串口2,用来发送动作指令
  
  char w;                                                //接收字符
  int flag=1;                                        //音频结束标志,初始为1
  
  void setup()
  {
  Serial.begin(57600);                        //串口波特率,57600
  mySerial1.begin(19200);                //模拟串口1波特率19200
  mySerial2.begin(9600);                //模拟串口2波特率9600
  pinMode(MusicEnd, INPUT);      //第6脚接收音频结束标志
  }
  
  void loop()
  {
  if(Serial.available()>0)                        //判断串口是否收到数据
  {
      w = Serial.read();                        //读取串口数据
      if(flag==1)                              //当音频结束标志位为1的时候,播放音频
      {
              if(w==1||w==2||w==7||w==8||w==12||w==13||w==14||w==15)
  {
                        //播放“yidong”这个音频文件,\r\n表示换行回车
  mySerial1.print("\\yidong\r\n");      
  }
              else if(w==3||w==4)
              mySerial1.print("\\bai\r\n");                //摆臂
              else if(w==5||w==6)
              mySerial1.print("\\quan\r\n");      //出拳
        else if(w==9||w==16)
              mySerial1.print("\\dao\r\n");                //跌倒起身
      }
      if(w!=0)
      {
                    mySerial2.write(w);                        //动作指令通过TTL电平串口直接发给机器人
              flag=0;                                        //音频结束标志置0
            }
            if(digitalRead(MusicEnd) == LOW)
  flag=1;                                                //检测到语音播放完毕后将标志位至1
  }

图12 连接各个部分

  代码完成并下载到Flyduino中以后,按照图12完成这几部分的连接,Flyduino和语音播放模块的电源均取自舵机控制板,语音播放模块的排线连接到Flyduino的引脚2、3、6,舵机控制板的TTL串口连接到Flyduino的4、5。    最后一步,将背甲安装在机器人身上,换上套件中手的小结构件。如图13所示。


图13 安装上背甲
  至此,我们的格斗机器人就算完成了。开始战斗吧!!
      
       To be continued...

static/image/hrline/5.gif
      
   相关链接:Flyduino,Player module





Jane 发表于 2014-8-14 10:02:06

楼主视频看不了~

nille 发表于 2014-8-22 12:47:50

续:
现实版铁甲钢拳 3

nille 发表于 2014-8-22 12:52:44

Jane 发表于 2014-8-14 10:02
楼主视频看不了~

视频地址:
http://v.youku.com/v_show/id_XNDEyNTcxNTc2.html?qq-pf-to=pcqq.c2c
页: [1]
查看完整版本: 现实版铁甲钢拳 2