2014-7-24 18:31:07 [显示全部楼层]
10274浏览
查看: 10274|回复: 2

[项目] ASR Board控制4WD小车

[复制链接]
本帖最后由 tzlzy 于 2014-7-25 14:41 编辑

    说来实在惭愧,楼主被ASR Board整整折腾了两周,才解决了这个那个的问题,可以在这儿发个帖子,晒晒这个ASR Board语音控制的4WD小车。好像现在回顾一下,这个小车的制作流程还是比较简单的,当然Simple is the best。感兴趣的筒子们可以跟着楼主这个教程搭建一个简易的ASR 主控板控制的小车,少走点弯路:lol:lol:lol。    好了,言归正传,先列一下材料。    这里要提一下的是,我们的ASR Board控制4WD小车分为手持端和小车端。ASR Board作为手持端,通过对外界的语音识别来控制小车端的运动状态,小车端使用的是4WD小车和UNO R3的主控板。要实现手持端和小车端的通信,就要用到无线通信模块,我们这里选择的是蓝牙。一端一个蓝牙,所以一共需要两个蓝牙。
    同时,因为ASR Board作为手持端,它使用SD卡进行语音播报的功能是多余的,因为正常情况下,小车边走边发出声音是比较好的,所以我们在这里并没有使用SD卡和小喇叭进行语音播报,后面会有一个帖子介绍小车边走边唱的语音控制程序。
    步骤如下:
    1.配置蓝牙,详细资料参见DF-BluetoothV3蓝牙串口模块使用教程
设置两个蓝牙通信的关键是要将一个蓝牙设置成主,一个设置成从。具体AT指令如下:
          AT+ROLE=1    设置该蓝牙是主
          AT+ROLE=0    设置该蓝牙是从
       为了方便蓝牙与ASR Board的使用,楼主把蓝牙的通讯波特率也设置成了9600,具体AT指令如下:
          AT+UART=9600
    2.连接ASR Board与电脑,修改库文件里面的样例程序example——>ASRBled(这个也是板子出厂时候下载的出厂程序),在其中添加一句Serial1.begin(9600),修改后的set up()如下:
  1. void setup()
  2. {
  3.   Serial.begin(9600);  
  4.   Serial1.begin(9600);     //添加了这条语句
  5.   ASRB.Initialise(SUM,sRecog,fDigit);
  6.   attachInterrupt(0,ExtInt0Handler,LOW);
  7.   //pinMode(button,INPUT);
  8.   pinMode(led,OUTPUT);
  9.   digitalWrite(led,HIGH);
  10. }
复制代码
  
程序的其他地方不需要作任何改动。(这是因为ASR Board使用的是leonardo的板卡,该板卡有两个串口,我们使用Serial1来与外部通信)下载程序到板卡。【友情提醒,该出厂代码使用了ASRB的库,如果下载出现错误,可以检查一下是否把ASRB库放到库文件libraries里面了哦】
    3.打开Arduino IDE,在串口监视器中输入添加前进、后退、左转、右转等指令,比如:AT+KW=004,qian jin(AT指令的基本使用方法可以参见前面的示例),点击发送。发送成功以后,串口监视器会返回“OK”。如下图:
ASR Board控制4WD小车图4                    ASR Board控制4WD小车图5


    4.这个做完以后可以做个测试,对着ASR Board说“前进”,串口监视器会返回数值“4”(与上面输入的指令编号相对应)。
ASR Board控制4WD小车图1

    5.在AWD小车端编写程序。小车的具体使用见4WD教程。在这里要注意的是,小车前进、后退、左转、右转等动作的发生是因为通过蓝牙接受到了ASR Board传来你的数据,比如按照前面的设置,如果对着ASR Board说出“前进”,ASR Board会通过蓝牙向我们AWD小车上的UNO主板发出数据“4”,正是收到了数据“4”,我们的AWD小车才知道需要“前进”,所以在小车端的编程应该是当串口检测到有数据输入时,对读取到的数据进行判断,如果是“4”,就调用小车前进的函数,如果是其他的,就调用其他的函数,这个可以根据自己的设定作相应的调整。

    参考程序如下:

  1. int E1 = 5;     //M1 Speed Control
  2. int E2 = 6;     //M2 Speed Control
  3. int M1 = 4;     //M1 Direction Control
  4. int M2 = 7;     //M1 Direction Control
  5. char a;
  6. void stop(void)                    //Stop
  7. {
  8.   digitalWrite(E1,0);  
  9.   digitalWrite(E2,0);   
  10. }   
  11. void advance(char a,char b)          //Move forward
  12. {
  13.   analogWrite (E1,a);      //PWM Speed Control
  14.   digitalWrite(M1,HIGH);   
  15.   analogWrite (E2,b);   
  16.   digitalWrite(M2,HIGH);
  17. }  
  18. void back_off (char a,char b)          //Move backward
  19. {
  20.   analogWrite (E1,a);
  21.   digitalWrite(M1,LOW);   
  22.   analogWrite (E2,b);   
  23.   digitalWrite(M2,LOW);
  24. }
  25. void turn_L (char a,char b)             //Turn Left
  26. {
  27.   analogWrite (E1,a);
  28.   digitalWrite(M1,LOW);   
  29.   analogWrite (E2,b);   
  30.   digitalWrite(M2,HIGH);
  31. }
  32. void turn_R (char a,char b)             //Turn Right
  33. {
  34.   analogWrite (E1,a);
  35.   digitalWrite(M1,HIGH);   
  36.   analogWrite (E2,b);   
  37.   digitalWrite(M2,LOW);
  38. }
  39. void setup(void)
  40. {
  41.   int i;
  42.   for(i=4;i<=7;i++)
  43.     pinMode(i, OUTPUT);  
  44.     Serial.begin(9600);      //Set Baud Rate
  45. }
  46. void loop()
  47. {  
  48.    if ( Serial.available())
  49.         {
  50.             a = Serial.read();
  51.             {
  52.               switch(a)
  53.                {
  54.                  case '4':            //SD卡中,前进指令的编号是0004 (可自行修改)                                                                              
  55.                          advance (255,255);
  56.                          break;            
  57.                  case '7':             //SD卡中,后退指令的编号是0007 (可自行修改)
  58.                          back_off (255,255);
  59.                          break;
  60.                  case '5':                     
  61.                          turn_L (100,100);
  62.                          break;
  63.                  case '6':
  64.                          turn_R (100,100); ;
  65.                          break;
  66.                  case '3':
  67.                          stop();   
  68.                          break;
  69.                  default:break;        
  70.                }
  71.             }
  72.             
  73.         }
  74. }
复制代码
   
6.将配置好的蓝牙插在ASR Board上面。示意图如下:

ASR Board控制4WD小车图2

    7.将另一块配置好的蓝牙插在4WD车XBee插孔处。示意图如下:

ASR Board控制4WD小车图3

    8.插好蓝牙,等待一段时间,两个蓝牙上的LINK指示灯亮起来了,表示两者正在通信。此时,我们对着ASR Board说出前进、后退、左转、右转等指令,小车就会做相应的动作了。

OK,just so easy~~bye bye~~



      



   

sans1  学徒

发表于 2019-3-3 12:01:38

发了一堆error是咋回事ASR Board控制4WD小车图1C:\Users\TTKL\Desktop\草图.png
回复

使用道具 举报

sans1  学徒

发表于 2019-3-17 17:07:48

ASR Board控制4WD小车图1
这是咋回事
截图201903171707282997.png
回复

使用道具 举报

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

本版积分规则

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

硬件清单

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

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

mail