tzlzy 发表于 2014-7-24 18:31:07

ASR Board控制4WD小车 分享

    说来实在惭愧,楼主被ASR Board整整折腾了两周,才解决了这个那个的问题,可以在这儿发个帖子,晒晒这个ASR Board语音控制的4WD小车。好像现在回顾一下,这个小车的制作流程还是比较简单的,当然Simple is the best。感兴趣的筒子们可以跟着楼主这个教程搭建一个简易的ASR 主控板控制的小车,少走点弯路:lol:lol:lol。    好了,言归正传,先列一下材料。
[*]ASR Board      一个
[*]蓝牙模块         两个
[*]4WD小车      一辆
[*]UNO R3板卡    一个
    这里要提一下的是,我们的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()如下:
void setup()
{
Serial.begin(9600);
Serial1.begin(9600);   //添加了这条语句
ASRB.Initialise(SUM,sRecog,fDigit);
attachInterrupt(0,ExtInt0Handler,LOW);
//pinMode(button,INPUT);
pinMode(led,OUTPUT);
digitalWrite(led,HIGH);
}    程序的其他地方不需要作任何改动。(这是因为ASR Board使用的是leonardo的板卡,该板卡有两个串口,我们使用Serial1来与外部通信)下载程序到板卡。【友情提醒,该出厂代码使用了ASRB的库,如果下载出现错误,可以检查一下是否把ASRB库放到库文件libraries里面了哦】
    3.打开Arduino IDE,在串口监视器中输入添加前进、后退、左转、右转等指令,比如:AT+KW=004,qian jin(AT指令的基本使用方法可以参见前面的示例),点击发送。发送成功以后,串口监视器会返回“OK”。如下图:
                  

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


    5.在AWD小车端编写程序。小车的具体使用见4WD教程。在这里要注意的是,小车前进、后退、左转、右转等动作的发生是因为通过蓝牙接受到了ASR Board传来你的数据,比如按照前面的设置,如果对着ASR Board说出“前进”,ASR Board会通过蓝牙向我们AWD小车上的UNO主板发出数据“4”,正是收到了数据“4”,我们的AWD小车才知道需要“前进”,所以在小车端的编程应该是当串口检测到有数据输入时,对读取到的数据进行判断,如果是“4”,就调用小车前进的函数,如果是其他的,就调用其他的函数,这个可以根据自己的设定作相应的调整。
    参考程序如下:
int E1 = 5;   //M1 Speed Control
int E2 = 6;   //M2 Speed Control
int M1 = 4;   //M1 Direction Control
int M2 = 7;   //M1 Direction Control
char a;
void stop(void)                  //Stop
{
digitalWrite(E1,0);
digitalWrite(E2,0);   
}   
void advance(char a,char b)          //Move forward
{
analogWrite (E1,a);      //PWM Speed Control
digitalWrite(M1,HIGH);   
analogWrite (E2,b);   
digitalWrite(M2,HIGH);
}
void back_off (char a,char b)          //Move backward
{
analogWrite (E1,a);
digitalWrite(M1,LOW);   
analogWrite (E2,b);   
digitalWrite(M2,LOW);
}
void turn_L (char a,char b)             //Turn Left
{
analogWrite (E1,a);
digitalWrite(M1,LOW);   
analogWrite (E2,b);   
digitalWrite(M2,HIGH);
}
void turn_R (char a,char b)             //Turn Right
{
analogWrite (E1,a);
digitalWrite(M1,HIGH);   
analogWrite (E2,b);   
digitalWrite(M2,LOW);
}

void setup(void)
{
int i;
for(i=4;i<=7;i++)
    pinMode(i, OUTPUT);
    Serial.begin(9600);      //Set Baud Rate
}

void loop()
{
   if ( Serial.available())
      {
            a = Serial.read();
            {
            switch(a)
               {
               case '4':            //SD卡中,前进指令的编号是0004 (可自行修改)                                                                              
                         advance (255,255);
                         break;            
               case '7':             //SD卡中,后退指令的编号是0007 (可自行修改)
                         back_off (255,255);
                         break;
               case '5':                     
                         turn_L (100,100);
                         break;
               case '6':
                         turn_R (100,100); ;
                         break;
               case '3':
                         stop();   
                         break;
               default:break;      
               }
            }
            
      }
}    6.将配置好的蓝牙插在ASR Board上面。示意图如下:

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


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


      



   

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

发了一堆error是咋回事C:\Users\TTKL\Desktop\草图.png

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


这是咋回事
页: [1]
查看完整版本: ASR Board控制4WD小车 分享