智能小车环保公交车系统
目 录
一、
方案
气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载
论证........................................................ 1
(一)方案的选择与比较 .................................................... 1
(二)系统组成框图 ....................................................... 3 二、
设计
领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计
实现 ................................................................ 4
(一)硬件电路图 ......................................................... 4
(二)软件设计 ........................................................... 5 三、 调试与应用 ............................................................ 7
(一)测试仪器清单 ......................................................... 7
(二)功能测试 ............................................................. 7 四、结束语 .................................................................. 7
参考文献 .................................................................... 8 附录:程序代码 ............................................................. 8
智能小车环保公交车系统
摘 要:本系统采用STC89C52单片机为控制核心,设计了具有自动寻迹、到站检测、自动靠站、语音播报、液晶显示等功能的智能公交车系统,为充分体现当前的环保需求,本系统采用了非电池电源进行供电。在系统设计中运用了红外检测、大容量电容电池、ISD4004语音播报系统、LCD12864液晶显示等技术,具有一定的先进性。
关键词:智能公交车;STC89C52;自动寻迹;语音播报
一、方案论证
(一)方案的选择与比较
1、 控制模块
方案一:采用凌阳61板,它是16位的控制器,体积小,驱动能力高、结果简单、中断处理能力强,尤其适用于语音处理和识别部分,但价格比较贵。
方案二:STC89C52是一种低电压、高性能的COMS 8为单片机,片内8K程序存储器是FLASH
工艺
钢结构制作工艺流程车尿素生产工艺流程自动玻璃钢生产工艺2工艺纪律检查制度q345焊接工艺规程
的,这种工艺的存储器用户可以用电的方式瞬间擦除、改写,对开发设备的要求很低,开发时间也大大缩短。且价格比较低廉,市场供应充足。
从价格方面考虑,我们选择方案二。
2、 电机选择
方案一:直流电机。直流电机的控制方法比较简单,只需给电机的两根控制线加上适当的电压即可使电机转动起来,电压越高则电机转速越高。对于直流电机的速度调节,可以采用改变电压的方法,也可采用PWM调速方法。PWM调速就是使加在直流电机两端的电压为方波形式,通过改变方波的占空比实现对电机转速的调节。
方案二:步进电机。由于其转过的角度可以精确的定位,可以实现小车前进路程和位置的精确定位。虽然采用步进电机有诸多优点,步进电机的输出力矩较低,随转速的升高而下降,且在较高转速时会急剧下降,其转速较低,不适用于小车等有一定速度要求的系统。所以我们放弃了本方案。
1
综上所述,我们选择方案一。
3、 电机驱动模块
方案一:采用专用芯片L298N作为电机驱动芯片。L298N是一个具有高电压大电流的全桥驱动芯片,它相应频率比较高,一片L298N可以分别控制两个直流电机,而且还带有控制使能端。且可用PWM进行调速,用该芯片作为电机驱动,操作方便,稳定性好,性能优良。
方案二:采用H型全桥式驱动电路,由分立元件构成电机驱动电路,很方便的实现直流电机的四象限运行,分别对应正转、正转制动、反转、反转制动。其结构简单,价格低廉,但是性能不稳定,所以我们放弃用分立元件H桥作为驱动电路。
综上所述,我们选择方案一。
4、 寻迹模块
方案一:采用反射式红外发射—接收对管,检测路面的黑色引导线。当发出的红外线照到白线上时,光线被反射,接收管接收到光线的照射,输出为低电平;当发出的红外线照到黑线上时,光线被吸收,接收管接收不到光线,输出高电平。且红外对管对黑线的识别率较高,且不易受外界光线的影响,能可靠的实现线路检测。
方案二:采用光敏电阻实现对黑线引导线的识别。此方案电路结构简单,成本较低,但光敏电阻极易受外界光线的影响,容易造成误判,使小车失去控制。所以我们放弃本方案。
综上所述,我们选择方案一。
5、 站台检测模块
方案一:采用超声波传感器,反应速度灵敏,距离远,受外界干扰小,但外界电路复杂。所以我们放弃了选择超声波传感器。
方案二:采用成品红外发射接收探头,其使用方便,实现简单。
综上所述,我们选择方案二。
6、 语音模块
方案一:选择专门的语音存储芯片ISD1420,通过单片机进行录放音的控制。用这种方法比较简单方便,但地址模式占用的IO端口比较多,存储空间较小,智能存储总计20S的语音,无法进行语音识别。为了更好的识别语音功能,所以我们放弃了本方案。
方案二:选用ISD4004芯片实现语音播报,特点是
记录
混凝土 养护记录下载土方回填监理旁站记录免费下载集备记录下载集备记录下载集备记录下载
声音没有段长度限制,并且声音记录不要A/D转换和压缩的,其采用FLASH作为存储介质,不要电源可保持数据长,可重复使用多次。
2
综上所述,我们选择方案二。
7、 显示模块
方案一:使用传统的数码管作为显示部分,数码管具有低能耗,低损耗等特点,但本设计要求显示汉字和符号,所以我们放弃了选择数码管作为显示部分。
方案二:采用12864液晶显示屏。液晶屏具有轻薄短小,耗电量低,无辐射危险可视面积大,能够显示汉字和符号,画面效果好,分辨率高,并且能够满足本设计的要求。所以我们选择了液晶显示屏。
综上所述,我们选择方案二。
、 电源模块 8
由于本设计要求非电池供电,所以我们选择运用电容作为电源。通过电容的充放电来给小车提供电压。
9、 电子公交站
由于本设计要求我们设计两个电子公交站,我们选择用发光二极管制作公交站,制作方便,电路简单。
(二)系统组成框图
根据本设计的要求,我们最终确定用STC89C52单片机作为控制核心,采用直流电机,并且L298作为电机的驱动电路,利用C语言编程来实现电机的调速;寻迹模块采用红外对管,运用ISD4004来进行语音报站,用液晶显示屏显示站名。总体组成框图如图1所示。
STC89C52 显示模块
站台检测模块
语音播报模块
寻迹模块
电机驱动模块
电源电路
图1 系统组成框图
3
二、设计实现
(一)硬件电路图
1、电机驱动电路
把L298的5、7、10、12引脚接到单片机上,2、3、13、14分别接左右两电机,电路中的二极管起保护电路的作用,通过对单片机的编程来实现对电机的正反转的控制,还可以实现两个直流电机的PWM的调速。电路图如图2所示。
图2 电机驱动电路
2、 语音播报电路
ISD4004 系列工作电压3V,单片录放时间8 至16 分钟,音质好,适用于移动电话及其他便携式电子产品中。芯片采用CMOS 技术,内含振荡器、防混淆滤波器、平滑滤波器、音频放大器、自动静噪及高密度多电平闪烁存贮陈列。芯片采用多电平直接模拟量存储技术, 每个采样值直接存贮在片内闪烁存贮器中,因此能够非常真实、自然地再现语音、音乐、音调和效果声,避免了一般固体录音电路因量化和压缩造成的量化噪声和"金属声"。采样频率可为 4.0,5.3,6.4,8.0kHz,频率越低,录放时间越长,而音质则有所下降,片内信息存于闪烁存贮器中,可在断电情况下保存100 年(典型值),反复录音10 万次。
4
图3 语音播报电路图
3.寻迹电路
图4 寻迹电路图 (二)软件设计
1.程序流程图
5
开始
初始化
开始寻迹
否
判断是否遇到
障碍
是
显示
减速 语音播报
判断小车底部寻迹传
感器的状态
停止寻迹
显示
否
判断是否是第二加到全速 个站台停止30S
是
结束
图5 程序流程图
2.寻迹算法
用单片机T1中断检测寻迹状态,当中间探头在线时直走,当中间和左边或者左边探头
在线时左转,当中间和右边或者右边探头在线时右转。
6
3.站台检测算法
当红外探头检测到站台时,返回给单片机0信号。T0中断执行PWM减速,同时执行放音程序并显示。
三、调试与应用
(一)测试仪器清单
仪器名称 用途
台式PC 下载程序
数字万用
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
测量相关端点的电压、电流
秒表 计时
(二)功能测试
测试项
到B站 小车中心目 语音播靠站停止到C站
时间与站台标识偏
报时间(s) 时间(s) 时间(s)
(s) 移距离(cm)
次数
1 24 5 30 110 0.3cm
2 23 5 30 115 0.2cm
3 22 5 30 112 0.1cm
四、结束语
通过各种方案的讨论与测试,经过多次的软硬件的调试,不断地对系统的优化,我们最终能够实现小车能够按照规定的路线寻迹,并且能够实现在到站前检测到站台,同时语音播报,在播报后停止30S后再走。在方案实施过程中我主要负责软件编写,同时与本组其他配合进行软硬件联调,了解掌握的相关芯片的使用,受益匪浅~
7
参考文献
[1]郭天祥:新概念51单片机C语言教程-入门、提高、开发、拓展全攻略[M],电子工业出版社,2009.1;
[2]胡永庆,田日才:闪速存储器硬件接口和程序设计中的关键技术[J],电子技术应用2001(11);
[3]何立民:MCS-51系列单片机应用系统设计[M],北京,北京航空航天大学出版社; [4]孙育才:MCS- 51 系列单片微型计算机及其应用[M],东南大学出版社1999出版。
附录:程序代码
#include
#include
#include
#include
#define uint unsigned int
#define uchar unsigned char
#define data P0
sbit P10=P1^0;//小车最左循迹传感器
sbit P11=P1^1;//小车中间循迹传感器
sbit P12=P1^2;//小车最右循迹传感器
sbit P13=P1^3;//小车底部左边传感器
sbit E_A=P1^5;
sbit E_B=P1^6;
sbit P17=P1^7;
sbit P20=P2^0;//电机右正
sbit P21=P2^1;//电机右负
sbit P22=P2^2;//电机左正
sbit P23=P2^3;//电机左负
sbit cs_4004=P3^0;
sbit mosi_4004=P3^1;
sbit sclk=P3^2;
sbit P27=P3^3;
sbit e=P2^4;
sbit rs=P2^5;
sbit psb=P2^6;
uchar dis1[]={"前方到达B!"};
uchar dis2[]={"前方到达C!"};
uchar dis3[]={"车辆行驶中!"};
uchar dis4[]={"停靠站台!!"};
uchar dis5[]={" "};
uchar t=0,tmp1,m2=0,tmp2,m1=0,a=0,b;
void delay_1s()
{uint i,j;
8
for(i=0;i<255;i++) for(j=0;j<257;j++); }
void delay(uint j) {
for(j;j>0;j--); }
void write_com(uchar com)
{
rs=0;
e=0;
P0=com;
delay(5);
e=1;
delay(5);
e=0;
}
void write_data(uchar dat)
{
rs=1;
e=0;
P0=dat;
delay(5);
e=1;
delay(5);
e=0;
}
void pos(uchar X,uchar Y)
{
uchar pos;
if(X==0)
{X=0X80;}
else if(X==1)
{X=0X90;}
else if(X==2)
{X=0X88;}
else if(X==3)
{X=0x98;}
pos=X+Y;
write_com(pos); }
void write_com_4004(uchar com)
{
9
uchar m,i,j;
sclk=0;
m=com;
for(i=0;i<8;i++)
{
m=_cror_(m,1);
j=m<<1;
mosi_4004=CY;
sclk=1;
sclk=0;
}
}
void write_add_4004(uint add)
{
uchar i;
uint m,j;
sclk=0;
m=add;
for(i=0;i<16;i++)
{
m=_iror_(m,1);
j=m<<1;
mosi_4004=CY;
sclk=1;
sclk=0;
}
}
void stopmode() {
cs_4004=1;
sclk=0;
cs_4004=0;
write_com_4004(0x30);
cs_4004=1;
}
void powerup() {
cs_4004=1;
sclk=0;
cs_4004=0;
write_com_4004(0x20);
cs_4004=1;
}
10
void set_play(uint add)
{
uint m;
cs_4004=1;
sclk=0;
m=add;
cs_4004=0;
write_add_4004(m);
write_com_4004(0xe0);
cs_4004=1; }
void play() {
cs_4004=1;
sclk=0;
cs_4004=0;
write_com_4004(0xf0);
cs_4004=1; }
void play_4004(uint add)
{
uint m;
m=add;
powerup();
delay(5118);
set_play(m);
play();
}
void zuo() {
P20=1;
P21=0;
P22=0;
P23=1;
}
void you() {
P20=0;
P21=1;
P22=1;
P23=0;
}
void zhi()
11
{
P20=1;
P21=0;
P22=1;
P23=0;
}
void ting()
{
P20=0;
P21=0;
P22=0;
P23=0;
}
void motor(uchar index, char speed)
{
if(speed>=-100 && speed<=100)
{
if(index==1)
{
m1=abs(speed);
if(speed<0)
{
P20=0;
P21=1;
}
else
{
P20=1;
P21=0;
}
}
if(index==2)
{
m2=abs(speed);
if(speed<0)
{
P22=0;
P23=1;
}
else
{
P22=1;
P23=0;
12
}
}
}
}
void init()
{
psb=1;
write_com(0x30);
delay(5);
write_com(0x0c);
delay(5);
write_com(0x01);
delay(5);
TMOD=0x12;
TH0=0x9B;
TL0=0x9B;
TH1=(65536-1000)/256;
TL1=(65536-1000)%256;
EA=1;
ET0=1;
ET1=1;
TR1=1;
}
void timer0() interrupt 1 {
if(t==0)
{
tmp1=m1;
tmp2=m2;
}
if(t=100) t=0; }
void timer1() interrupt 3 {
TH1=(65536-1000)/256;
TL1=(65536-1000)%256;
if(P10==1&&P11==0&&P12==1) zhi();
if(P10==1&&P11==1&&P12==0) zuo();
if(P10==0&&P11==1&&P12==1) you();
if(P10==1&&P11==1&&P12==0) zuo();
13
if(P10==1&&P11==1&&P12==1) zhi();
if(P10==0&&P11==0&&P12==1) you();
if(P10==1&&P11==0&&P12==0) zuo();
if(P10==0&&P11==0&&P12==0) zhi();
}
void main()
{
uchar i,k;
init();
E_A=0;
delay_1s();
delay_1s();
E_A=1;
while(1)
{ pos(0,0);
k=0;
while(dis5[k]!='\0')
{
write_data(dis5[k]);
k++;
}
pos(1,1);
k=0;
while(dis3[k]!='\0')
{
write_data(dis3[k]);
k++;
}
if(P17==0)
{ a++;
if(a==1)
{
TR0=1;
pos(1,1);
k=0;
while(dis1[k]!='\0')
{
write_data(dis1[k]);
k++;
}
P27=0;
play_4004(0x00);
for(i=100;i>50;i--)
14
{
motor(1,i);
motor(2,i);
delay(1800);
}
stopmode();
}
if(a==2)
{
TR0=1;
pos(1,1);
k=0;
while(dis2[k]!='\0')
{
write_data(dis2[k]);
k++;
}
P27=0;
play_4004(0x0a);
) for(i=100;i>50;i--
{
motor(1,i);
motor(2,i);
delay(1800);
}
a=0;
stopmode();
}
}
if(P13==0)
{
TR1=0;
ting();
pos(1,1);
k=0;
while(dis4[k]!='\0')
{
write_data(dis4[k]);
k++;
}
for(b=0;b<55;b++)
{
delay_1s();
15
}
TR1=1;
zhi();
delay(1000);
for(i=50;i<100;i++)
{
motor(1,i);
motor(2,i);
delay(1800);
}
}
}
}
16