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~~
发了一堆error是咋回事C:\Users\TTKL\Desktop\草图.png
这是咋回事
页:
[1]