网页
资讯
视频
图片
知道
文库
贴吧
地图
采购
进入贴吧
全吧搜索
吧内搜索
搜贴
搜人
进吧
搜标签
日
一
二
三
四
五
六
签到排名:今日本吧第
个签到,
本吧因你更精彩,明天继续来努力!
本吧签到人数:0
一键签到
成为超级会员,使用一键签到
一键签到
本月漏签
0
次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行
补签
。
连续签到:
天 累计签到:
天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
01月30日
漏签
0
天
arduino吧
关注:
75,126
贴子:
229,663
看贴
图片
吧主推荐
视频
游戏
1
2
3
下一页
尾页
83
回复贴,共
3
页
,跳到
页
确定
<<返回arduino吧
>0< 加载中...
【经验分享】避障加语音控制小车
只看楼主
收藏
回复
尔特热599的
颇具盛名
7
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
小弟学生一枚 接触arduino也没多久 这两天利用暑假时间做了一个红外加超声波避障车,同时也支持语音控制 (附图)
可能做这方面的人很多 还是决定跟大家分享下
材料:2驱小车 2个夏普数字红外传感器 2块uno板 SR04超声波模块 9g舵机 中文语音识别模块 mp3模块 一对APC220 L298N双桥直流电机驱动
尔特热599的
颇具盛名
7
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
尔特热599的
颇具盛名
7
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
车的功能分为两块 一块是自动避障 还有一块是语音控制(由DFrobot卖的那块板控制)
自动避障的代码如下
int pos=0;
float standard=15;
const int in1=3;
const int in2=4;
const int in3=7;
const int in4=8;
const int e1=5;
const int e2=6;
const int trigpin=9,echopin=10;
int g=0;
float a[6],temp1,cf,c1,c3;
int s,i,j;
const int redleft=11;
const int redright=12;
#include <Servo.h>
#include"SR04.h"
SR04 sr04=SR04(trigpin,echopin);
Servo myservo; // 定义舵机变量
void duoji(int pos)
{
myservo.write(pos);
delay(150); //舵机动作时间
}
void go(int x){
digitalWrite(in1,0);
digitalWrite(in2,1);
digitalWrite(in3,0);
digitalWrite(in4,1);
analogWrite(e1,x);
analogWrite(e2,x);
} //前进
void back(){
digitalWrite(in1,1);
digitalWrite(in2,0);
digitalWrite(in3,1);
digitalWrite(in4,0);
analogWrite(e1,210);
analogWrite(e2,210);
delay(1000);
stop1();
} //后退
void left(){
digitalWrite(in1,1);
digitalWrite(in2,0);
digitalWrite(in3,0);
digitalWrite(in4,1);
analogWrite(e1,180);
analogWrite(e2,180);
delay(900);
stop1();
} //左转
void right(int x){
digitalWrite(in1,0);
digitalWrite(in2,1);
digitalWrite(in3,1);
digitalWrite(in4,0);
analogWrite(e1,180);
analogWrite(e2,180);
delay(x);
stop1();
} //右转
void stop1(){
analogWrite(e1,0);
analogWrite(e2,0);
} //停止
//...............................................................
float distance(){float a; //................超声波测距
a=sr04.Get();
return a;}
//...........................................
float calculate()
{
float right=0;
for(s=0;s<6;s++)
{ a[s]=distance();
}delay(10);
for( j=0;j<6;j++)
{for( i=0;i<5-j;i++)
{if (a[i]>a[i+1])
{
temp1=a[i];
a[i]=a[i+1];
a[i+1]=temp1;
}
}
} //排序完毕
for(s=1;s<=4;s++)
{right+=a[s];
}
right=right/4;
return right;
}
//......................................一般测距
float ordinary(){
float cv=distance();
return cv;
}
//........................................精确测距
float distanceleft()
{float z;
duoji(167);
z=calculate();delay(100);
return z;
}
/*float distancemiddle()
{float y;
duoji(90);
y=calculate();delay(100);
return y;}*/
float distanceright()
{float x;
duoji(78);
x=calculate();delay(10);
return x;
}
//.........................................左边红外
int rl(){
int r1;
r1=digitalRead(redleft);
return r1;
}
//....................................................右红外
int rr(){
int r2;
r2=digitalRead(redright);
return r2;}
//................................................setup
void setup(){
Serial.begin(9600);
pinMode(in1,1);
pinMode(in2,1);
pinMode(in4,1);
pinMode(in3,1);
pinMode(e1,1);
pinMode(e2,1);
pinMode(redleft,0);
pinMode(redright,0);
myservo.attach(2);
myservo.write(124);
}
void loop(){cf=ordinary();
if ((rl()==1)&&(rr()==1)&&((cf<0.5)||(cf>standard)))
{Serial.println("straight");go(210);g=0;}
//...............................................
if ((rl()==0)&&(rr()==1)&&((cf<0.5)||(cf>standard)))
{right(900);Serial.println("turn right");g++;}
//...................................................
if((rl()==1)&&(rr()==0)&&((cf<0.5)||(cf>standard)))
{ left();Serial.println("turn left");g++;
}
if((cf>0.5)&&(cf<standard))
{stop1();Serial.println("stop");
c1=distanceleft();
c3=distanceright();
myservo.write(124);
delay(150);
if ((c1>c3)&&(c1>standard))
{left();Serial.println("stop turn left");}
if ((c1<=c3)&&(c3>standard))
{right(900);Serial.println("stop turn right");}
if((c1<=standard)&&(c3<=standard))
{back();
right(1800);Serial.println("back turn");}
g=0;
}
//........................................
if(g>=3)
{back();
right(1800);
g=0;}
}
尔特热599的
颇具盛名
7
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
语音控制有两部分程序 车上的比较简单 就是前进后退的 跟前面自动避障有重合之处 我发一下语音识别控制板的程序 (两块板通过APC220无线连接)
#include"Voice.h"
#include"SoftwareSerial.h"
SoftwareSerial che(3,5);
SoftwareSerial mp3(6,8);
#define SUM 14
uint8 nAsrStatus=0;
int state=7,c=2,d=0;
char ad;
char sRecog[SUM][80]={"qian jin","hou tui","zuo zhuan","you zhuan","ting zhi","diao tou","shou ji","bu tong","fang xia","pian ai","fu qin","pao mo","zan ting","ji xu"};
void setup(){
Serial.begin(9600);
mp3.begin(19200);
che.begin(9600);delay(10);
Voice.Initialise(MIC,VoiceRecognitionV1);
attachInterrupt(0,ExtInt0Handler,LOW);
mp3.listen();
mp3.println("\\:v 250");
pinMode(state,1);
digitalWrite(state,1);
}
void loop(){
uint8 nAsrRes;
nAsrStatus = LD_ASR_NONE;
while(1)
{
switch(nAsrStatus)
{
case LD_ASR_RUNING:
case LD_ASR_ERROR:
break;
case LD_ASR_NONE:
{
if (Voice.RunASR(SUM,80,sRecog)==0)
{
nAsrStatus= LD_ASR_ERROR;
Serial.println( "ASR_ERROR");
}
/* if(d==0)
{ mp3.listen();
mp3.println("\\kj");delay(7000);}
if((c>=1)&&(e==0))
{mp3.listen();
mp3.println("\\zq");delay(3000);e++;}*/
nAsrStatus=LD_ASR_RUNING;
Serial.println("LD_ASR_RUNING");
digitalWrite(state,LOW);
break;
}
case LD_ASR_FOUNDOK:
{
digitalWrite(state,HIGH);
nAsrRes =Voice. LD_GetResult();
finally(nAsrRes);
nAsrStatus = LD_ASR_NONE;
break;
}
case LD_ASR_FOUNDZERO: {
nAsrStatus = LD_ASR_NONE;
break;}
default:
{
nAsrStatus = LD_ASR_NONE;
break;
}
}
delay(500);d=1;
}
}
void ExtInt0Handler ()
{
Voice.ProcessInt0();
}
void finally(unsigned char a)
{ if(a>=7){che.listen();che.print("f");}
switch(a)
{case 0:if(c>=1) {che.listen();
che.print("w");}
break;
case 1:
if(c>=1){che.listen();
che.print("s");}
break;
case 2:
if(c>=1){che.listen();
che.print("a");}
break;
case 3:
if(c>=1){che.listen();
che.print("d");}
break;
case 4:
if(c>=1){che.listen();
che.print("f");}
break;
case 5:
if(c>=1){che.listen();
che.print("x");}
break;
case 6:
c=2;
break;
case 7:
if(c>=1) {mp3.listen();
mp3.println("\\butong");}
break;
case 8:if(c>=1){mp3.listen();
mp3.println("\\fangxia");}
break;
case 9:if(c>=1){mp3.listen();
mp3.println("\\pianai");}
break;
case 10:if(c>=1){mp3.listen();
mp3.println("\\fuqin");}
break;
case 11:if(c>=1){mp3.listen();
mp3.println("\\paomo");}
break;
case 12:if(c>=1){mp3.listen();
mp3.println("\\:p");}
break;
case 13:if(c>=1){mp3.listen();
mp3.println("\\:s");}
break;
default:
break;
}
delay(40);
if(che.available()>0)
{delay(15);
ad=che.read();
switch(ad)
{case 'q':mp3.listen();mp3.println("\\slb");delay(2000);break;
case 'h':mp3.listen();mp3.println("\\zm");delay(2000);break;
case 'z':mp3.listen();mp3.println("\\sd");delay(2000);break;
case 'y':mp3.listen();mp3.println("\\zm");delay(2000);break;
case 't':mp3.listen();mp3.println("\\slb");delay(2000);break;
case 'd':mp3.listen();mp3.println("\\sd");delay(2000);;break;
default:break;
}
}
}
尔特热599的
颇具盛名
7
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
自动避障部分的算法可能不怎么好 实测时有可能还是要撞上去 希望某位大神能不吝赐教,教我些避障方面的程序算法设计
MadPro
富有美誉
9
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
避障和语音控制要用两块Uno版么?能不能一块?另外,用语音芯片行不行LD3320……最近想做语音控制和避障小车
MadPro
富有美誉
9
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
你能把你的作品资料发给我一份么?我加了SYN6288和LD3320 有点乱乱的 目前好的就是1个超声波+2个红外
我邮箱649195105@qq.com
色色的scyeh
富有名气
8
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
sr04只是拿来做自动避障小车吗,能不能利用它来测距并显示距离
固融强化
富有名气
8
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
太棒了
anaesthesia_vp
声名远扬
12
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
nice!!话说语音板块很贵吧。。
hicaoc
颇具名气
6
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
不错,学习
少年泡飞
赫赫有名
13
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
学生,利用暑假时间,这两天做了....... 这是要逆天的高人
皇谛19991115
小有名气
4
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
那么如果换成Arduino Leonardo、Parallax ping,行不?
MadPro
富有美誉
9
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
大哥……都放我鸽子好久了……
登录百度账号
扫二维码下载贴吧客户端
下载贴吧APP
看高清直播、视频!
贴吧页面意见反馈
违规贴吧举报反馈通道
贴吧违规信息处理公示