语音智能车

摘要:语音识别是一个跨学科的领域。近年来,语音识别技术明显发展,开始从实验室进入市场。语音识别技术包括信号处理、模式识别、概率论和信息论、发声系统和听觉机理、人工智能等。

智能作为现代社会的新产物,是今后的发展方向,根据预设的模式,可以在特定的环境下自动运行,无需人为管理,就能实现想要的目标或更高的目标。

整个汽车平台主要使用STC12C5A60S2单片机作为控制核心,通过无线蓝牙和手机应用程序控制小车。也可以使用语音命令控制汽车。通过触摸屏,可以实现小车的各种参数显示和功能设置,以及车辆控制、红外传感器、超声波传感器、防碰撞传感器等功能,实现小车的自动驾驶、避障等功能。

设计采用比较选择、模块独立、综合处理的研究方法。翻阅大量相关文献资料,分析整理相关信息,在此基础上列出各种解决方案,结合实际情况对比方案的优劣,选择最佳方案进行设计。

关键词:语音识别、智能、单片机、手机遥控器、触摸屏、自动驾驶。

语音智能车

语音智能车

引言

语音识别是一门跨学科的学问。近20年来,语音识别技术有了明显的发展,开始从实验室进入市场。预计未来10年内,语音识别技术将进入产业、家电、通信、汽车、电子、医疗、家庭服务、消费电子产品等多种领域。语音识别技术的应用包括语音拨号、语音导航、室内设备控制、语音文档检索、简单的听写数据输入等。语音识别技术与其他自然语言处理技术(如机器翻译和语音合成技术)相结合,可以创建更复杂的应用程序,如语音到语音翻译。语音识别听写机在某些领域的应用被美国新闻界评为1997年计算机发展十大大师之一。许多专家认为,语音识别技术是2000年至2010年信息技术领域的十大技术发展技术之一。语音识别技术包括信号处理、模式识别、概率论和信息论、发声系统和听觉机理、人工智能等。

语音智能车

智能车是现代的新发明,是今后的发展方向,可以根据预设的模式在一个环境中自动运行,不需要人工管理,可以应用于科学探索等用途。智能汽车可以实时显示时间、速度、里程,具有自动跟踪、找光、避障功能,可以控制行驶速度、准确定位停车、远程传输图像等功能。随着汽车工业的迅速发展,对汽车的研究也越来越受到关注。全国电子大会和省内电子大会几乎每次都有智能车相关的题目,全国大学也非常重视对这一主题的研究。可见其研究意义很大。

纵观国内外智能汽车的技术前沿,智能控制为了适应汽车智能化方向的发展要求,提出了语音智能汽车的构想,即要通过自主设计制作简单的语音智能汽车模型,完全模拟实际道路上的自动驾驶,充分掌握自动驾驶技术,在现有技术的基础上不断进行改良和创新,不断尝试新的解决方案。设计主要以STC12C5A60S2单片机为控制平台,选择典型减速电机作为驱动电机,小车背板模型采用铝板剪裁设计,将设计要求具体化,结合传感器技术、电机控制技术、无线通信技术等相关知识,实现小车的各种功能。设计完成了硬件模块结合软件设计,包括手机蓝牙遥控器、触摸屏显示和控制、旋转LED显示屏、语音识别控制、语音广播、MP3播放、红外对管自动跟踪、红外自动避障。

多功能智能小车,共同实现小车的前进倒退、转向行驶,自动根据地面黑线寻迹导航,检测障碍物后停止和语音信号的控制等功能,实现智能控制,达到设计目标。

语音智能小车

设计任务及方案

设计任务及要求

本次的设计任务为:设计一款基于STC12C5A60S2单片机的语音智能小车,设计要求如下:

具有STC12C5A60S2单片机主控核心模块

具有非特定人语音识别及语音播报模块

具有语音播报模块

具有MP3播放模块

具有音频功放模块

具有可触摸彩色液晶显示屏模块

具有旋转LED显示

具有手机遥控

具有电机驱动模块

具有路况检测

具有速度检测

具有环境温湿度检测

具有电池电量及温度检测

具有左右转向灯及照明大灯

具有大功率稳压电源模块

具有声光报警

设计方案论证

主控芯片的选择:

方案一:采用MSP430单片机芯片

MSP430系列单片机是一个16位的单片机,采用了精简指令集结构,具有丰富的寻址方式、简洁的 27 条内核指令以及大量的模拟指令;大量的寄存器以及片内数据存储器都可参加多种运算;还有高效的查表处理指令。因而可使其在1MHz 的时钟条件下运行时,芯片的电流最低会在165μA左右,RAM保持模式下的最低功耗只有0.1μA。工作电压偏低,1.8V-3.6V,对于很多5V的系统来说接口电路颇为麻烦;I/O无保护,过压过流会立即击穿,但是I/O的阻抗和灵敏度很高;所以在本系统中使用MSP430单片机不利于系统的控制。

方案二:采用STC12C5A60S2单片机芯片

STC12C5A60S2单片机是高速/低功耗/超将抗干扰的新一代8051单片机,指令代码完全兼容传统8051,但速度快8-12倍增强型8051 CPU,1T,单时钟/机器周期,指令代码完全兼容传统8051;工作电压:STC12C5A60S2系列工作电压:5.5V-3.3V(5V单片机)STC12LE5A60S2系列工作电压:3.6V-2.2V(3V单片机); 工作频率范围:0 – 35MHz,相当于普通8051的 0~420MHz; 通用I/O口(36/40/44个),复位后为:准双向口/弱上拉(普通8051传统I/O口),可设置成四种模式:准双向口/弱上拉,推挽/强上拉,仅为输入/高阻,开漏,每个I/O口驱动能力均可达到20mA,但整个芯片最大不要超过120ma。

方案选择:

综上所述:通过以上方案比较,在本系统中主控单片机选用第二个方案,使用STC12C5A60S2单片机,因为该单片机成本低廉,操作方便,因此本设计采用此方案二。

语音识别芯片的选择:

方案一:采用 科大讯飞的XFS5152CE语音芯片

XFS5152CE是一款高集成度的语音合成芯片,可实现中文、英文语音合成;并集成了语音编码、解码功能,可支持用户进行录音和播放;除此之外,还创新性地集成了轻量级的语音识别功能,支持30个命令词的识别,并且支持用户的命令词定制需求。

1)支持任意中文文本、英文文本的合成,并且支持中英文混读;

2)支持语音编解码功能,用户可以使用芯片直接进行录音和播放;

3)集成语音识别功能,可以支持30个命令词的识别,并且支持用户的命令词定制需求;

4)芯片内部集成80种常用提示音效,适合多种场景使用;
5)支持UART、I2C 、SPI三种通讯方式;

6)UART串口支持4种通讯波特率可设:4800 bps、9600 bps、57600 bps、115200 bps,用户可以依据情况自己设置;

7)支持多种控制命令,如合成文本、停止合成、暂停合成、恢复合成、状态查询、进入省电模式、唤醒等;

8)支持多种方式查询芯片的工作状态,包括:查询状态管脚电平、通过读芯片自动返回的工作状态字、发送查询命令获得芯片工作状态的回传数据;NEO-M8T gps glonass 模块 GY-GPSV3-M8T 高精度授时原始数据。

方案二:采用 语音天下的SYN7318语音芯片

SYN7318中文语音交互模块集成了语音识别、语音合成和语音唤醒功能模块。通过UART接口通讯方式接收命令帧。如控制命令帧、待合成的文本数据,实现文本到语音、语音到文本的转换以及语音唤醒功能。模块支持10000条词条的语音识别。

语音识别:

1) 非特定人命令词识别

2) 支持六种带特定命令词的语音唤醒功能

3) 支持中文、英文、中英文混合识别

4) 支持自然语言处理,可定义10000条语音命令,识别命令词可以动态更新

5) 词条更新支持两种方式

6) 超时检测

语音合成:

1) 文本合成功能

2) 文本智能分析处理

3) 多音字处理和中文姓氏处理能力

4) 支持10级音量调整和10级语速调整和10级语调调整

5) 模块内集成了 77 首声音提示音,模块内集成了 14 首和弦音乐

6) 支持自定义添加提示音能力

7) 提供两男、两女、一个效果器和一个女童声共6个中文发音人

8) 支持多种文本控制标记

语音唤醒:

1) 支持六种带特定命令词的语音唤醒功能

MP3播放:

1) 支持语音命令播放本地MP3音乐

方案选择:

综上所述:通过以上方案比较,宇音天下的SYN7318比科大讯飞的XFS5152CE功能多很多,SYN7318集成有MP3播放器、语音合成、语音播报、语音识别,选此芯片就不用再外接MP3模块,因此选用SYN7318语音芯片。

音频功放的选择

方案一:采用TDA2030A音频功放芯片

TDA2030A音频功放电路,常采用V型5脚单列直插式塑料封装结构。该集成电路广泛应用于汽车立体声收录音机、中功率音响设备,具有体积小、输出功率大、失真小等特点

[1].外接元件少。

[2].输出功率较大,Po=18W(RL=4Ω)。

[3].采用超小型封装(TO-220),可提高组装密度。

[4].开机冲击极小。

[5].内含各种保护有:短路保护、热保护、地线偶然开路、电源极性反接以及负载泄放电压反冲等。

方案二:采用S lm1875音频功放芯片

S lm1875 是一款功率放大集成块! 是美国国半公司研发的一款功放集成块! 它在使用中外围电路少 而且有完善的过载保护功能,形如一只中功率管,体积小巧,外围电路简单,且输出功率较大。该集成电路内部设有过载过热及感性负载反向电势安全工作保护。

方案选择:

综上所述:通过以上方案比较,在本系统中音频功放选用第一个方案,使用TDA2030A音频功放芯片,因为外接元件少,封装小,操作方便,内含保护电路,因此本设计采用此方案一。

无线模块的选择

方案一:采用WIFI无线模块

1 功耗200mw。

2 价格低,基本只赚取很小的利润,希望此举能带动物联网更迅速的发展

3体积最小做到11*10毫米左右,指甲盖大小。方便嵌入到任何产品

4功能强大内部跑LWIP协议

5支持三种模式:AP,STA,AP+STA 共存模式

6完善简洁高效的AT指令,让你开发更简单。

方案二:采用HC-05蓝牙无线模块

1、核心模块使用HC-06从模块,引出接口包括VCC,GND,TXD,RXD,预留LED状态输出脚,单片机可通过该脚状态判断蓝牙是否已经连接,KEY引脚对从机无效

2、led指示蓝牙连接状态,闪烁表示没有蓝牙连接,常亮表示蓝牙已连接并打开了端口

3、底板3.3V LDO,输入电压3.6~6V,未配对时电流约30mA,配对后约10mA,输入电压禁止超过7V!

4、接口电平3.3V,可以直接连接各种单片机(51,AVR,PIC,ARM,MSP430等),5V单片机也可直接连接,无需MAX232也不能经过MAX232!

5、空旷地有效距离10米,超过10米也是可能的,但不对此距离的连接质量做保证

6、配对以后当全双工串口使用,无需了解任何蓝牙协议,但仅支持8位数据位、1位停止位、无奇偶校验的通信格式,这也是最常用的通信格式,不支持其他格式。

7、在未建立蓝牙连接时支持通过AT指令设置波特率、名称、配对密码,设置的参数掉电保存。 蓝牙连接以后自动切换到透传模式

8、体积小巧(3.57cm*1.52cm),工厂贴片生产,保证贴片质量。并套透明热缩管,防尘美观,且有一定的防静电能力。

9、该链接为从机,从机能与各种带蓝牙功能的电脑、蓝牙主机、大部分带蓝牙的手机、PDA、PSP等智能终端配对,从机之间不能配对。

方案选择:

综上所述:通过以上方案比较,在本系统无线模块选用第一个方案,使用蓝牙无线模块,因为其功耗小、传输距离合适、传输速率合适,因此本设计采用此方案一。

电机驱动模块的选择

方案一:采用L298N电机驱动模块

L298N是专用驱动集成电路,属于H桥集成电路,与L293D的差别是其输出电流增大,功率增强。其输出电流为2A,最高电流4A,最高工作电压50V,可以驱动感性负载,如大功率直流电机,步进电机,电磁阀等,特别是其输入端可以与单片机直接相连,从而很方便地受单片机控制。当驱动直流电机时,可以直接控制步进电机,并可以实现电机正转与反转,实现此功能只需改变输入端的逻辑电平。为了避免电机对单片机的干扰,本模块加入光耦,进行光电隔离,从而使系统能稳定可靠的工作。

方案二:采用LG9110电机驱动模块

LG9110是为控制和驱动电机设计的两通道推挽式功率放大专用集成电路器件,将分立电路集成在单片IC之中,使外围器件成本降低,整机可靠性提高。该芯片有两个TTL/CMOS兼容电平的输入,具有良好的抗干扰性;两个输出端能直接驱动电机的正反向运动,它具有较大的电流驱动能力,每通道能通过750~800mA的持续电流,峰值电流能力可达1.5~2.0A;同时它具有较低的输出饱和压降;内置的钳位二极管能释放感性负载的反向冲击电流,使它在驱动继电器、直流电机、步进电机或开关功率管的使用上安全可靠。LG9110被广泛应用于玩具汽车电机驱动、步进电机驱动和开关功率管等电路上。

方案选择:

综上所述:通过以上方案比较,在本系统电机驱动模块选用第一个方案,使用L298N电机驱动模块,因为其功率大、驱动能力强、操作简单,因此本设计采用此方案一。

系统硬件电路与实现

本设计采用STC12C5A60S2单片机作为主控芯片来处理各个模块的运营,系统硬件总框图如图。

框图

从机与主控芯片的通信

本系统中主从机的通信采用了8线并口通信,并行接口是指数据的各位同时进行传送,其特点是传输速度快,但当传输距离较远、位数又多时,就导致通信线路复杂且成本提高。原理如图所示:

主从通信

RD为数据/指令选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器;

WR为读写信号线,高电平1时进行读操作,低电平0时进行写操作;

E 为使能端,高电平1时读取信息,负跳变时执行指令;

D0~D7为8位双向数据端。

读写操作时序如下图所示:

读时序图

写时序图

1. 读状态:输入RD=0,RW=1,E=高脉冲。输出:D0—D7为状态字。

2. 读数据:输入RD=1,RW=1,E=高脉冲。输出:D0—D7为数据。

3. 写命令:输入RD=0,RW=0,E=高脉冲。输出:无。

4. 写数据:输入RD=1,RW=0,E=高脉冲。输出:无。

语音识别模块

一般应用中语音合成系统最小系统需要包括:控制器模块、SYN7318模块、功放模块、喇叭。果需要使用语音识别功能,系统中还需要增加麦克风。

语音合成系统中,主控制器和 SYN7318模块之间可以通过UART 接口连接,控制器可通过上述通讯接口向SYN7318模块发送控制命令和文本,SYN7318模块接收到文本后合成为语音信号输出,输出的信号经功率放大器进行放大后连接到喇叭进行播放。

用户在使用语音识别或语音唤醒功能时,上位机发送启动语音识别或语音唤醒功能的命令给语音模块,模块把从麦克风采集到的语音数据,通过内部的识别模块进行转换成相应的识别结果,通过通讯接口回传给控制器。

MP3播放功能的使用,只需要将要播放的MP3的信息根据既定格式编辑成命令,通过UART发送给模块即可实现播放。

语音识别芯片框图

通讯模式

SYN7318模块支持UART通讯方式,允许上位机发送数据的最大长度为4KB。

1) 通信标准:UART

2) 波特率:最高为115200 bps

3) 起始位:1 bit

4) 数据位:8 bits

5)停止位:1 bit

6)校验:无

语音识别模块串行通信示图

语音合成

文本合成功能

清晰、自然、准确的中文语音合成效果。模块支持任意中文文本的合成,可以采用GB2312、GBK、BIG5 和Unicode大头或Unicode小头 四类五种编码方式。模块支持英文字母的合成,遇到英文单词时按字母方式发音。每次合成的文本量可达4K字节。

文本智能分析处理

模块具有文本智能分析处理功能,对常见的数值、电话号码、时间日期、度量衡符号等格式的文本,模块能够根据内置的文本匹配规则进行正确的识别和处理。

例如:“2012-05-01 10:36:28”读作 “二零一二年五月一日十点三十六分二十八秒”,“火车的速度是622km/h” 读作 “火车的速度是六百二十二公里每小时”,“-12℃”读作“零下十二摄氏度”,等等。

多音字处理和中文姓氏

对存在多音字的文本,例如:“银行行长穿过人行道向骑着自行车的银行职员行走过去”,模块可以自动对文本进行分析,判别文本中多音字的读法并合成正确的读音。

有些汉字作为姓氏使用时,会出现一些非常规的读法,模块可以自动进行处理。例如:“他是一位姓朴的朴素的韩国艺人。”,句中两个“朴”字前面一个读作“piao2”,后面一个读作“pu3”。

支持10级音量调整和10级语速调整和10级语调调整

模块可实现10级数字音量控制,音量更大,更广。支持语速语调的调节,满足各种不同的应用需求。

提示音

模块内集成了 77 首声音提示音,可用于不同行业不同场合的信息提醒、报警等功能。 模块内集成了 14 首和弦音乐,可用作和弦短信提示音或者和弦铃声。

模块还支持客户增加自己的提示音,满足客户对特定文本合成或特定提示音的需求。客户可根据需要删除和增加提示音。

支持多个发言人

提供两男、两女、一个效果器和一个女童声共6个中文发音人,可以通过使用特殊标记[m?]来切换模块的发音人。[m3] :女声“晓玲”; [m51]:男声“尹小坚”; [m52]:男声“易小强”; [m53]:女声“田蓓蓓”; [m54]:效果器“唐老鸭”;[m55]:女童声“小燕子”。

支持多种文本控制标记

模块支持多种文本控制标记。可通过发送“合成命令”发送文本控制标记,调节语速、语调、音量。 还可以使用控制标记提升文本处理的正确率,如:设置句子的韵律、设置数字读法、设置姓氏读音策略、设置号码中“1”的读法等。

语音识别

非特定人命令词识别。

不限定被识别语音范围,男女老幼语音均可使用普通话进行识别。

支持中文、英文、中英文混合识别。

词条无中英文限制,可进行中文、英文、中英混合词条的识别,使用范围广,简单灵活。

支持定义10000条语音命令,识别命令词可以动态更新。

用户可以通过控制命令直接更新内部词条。

词条更新支持两种方式:

1, 基本词条更新方式

词条编辑格式为“开灯|请开灯|把灯打开|关灯|请关灯|把灯关了|亮一点|再亮一点”。

2, 携带命令ID方式

词条编辑格式为“开灯 1|请开灯 1|把灯打开 1|关灯 2|请关灯 2|把灯关了 2|亮一点 3|再亮一点 3”。

超时检测。

模块在规定时间内未检测到有效音频数据会做超时处理。

拒识功能。

语音唤醒

支持六种特定名字的唤醒功能

模块支持六种唤醒名字进行唤醒。分别为“小播”、“Hi 小播”、“云宝”、“Hi 云宝”、“百灵”、“Hi 百灵”。

设置唤醒名字方便快速。

用户可以通过控制命令设置模块的当前唤醒名为六种唤醒名种的任意一个,为设备取一个名字。

交互方式简单有趣。

可以通过控制命令开启唤醒模式,之后进行人机语音唤醒的交互。

MP3音乐播放

支持MP3格式的音频播放功能可以作为简单的音乐播放器使用

模块支持MP3 音频文件播放功能,用户可以通过MP3 播放命令来开启MP3播放,并可以进行暂停、恢复、停止功能。

注意:需外挂TF卡

控制查询

支持多种控制命令

控制命令包括:合成文本、停止合成、暂停合成、恢复合成、开启识别、停止识别、开启唤醒、停止唤醒、状态查询、进入Power Down模式。控制器通过通讯接口发送控制命令实现对模块的控制。

查询模块的工作状态

支持多种方式查询模块的工作状态,包括:查询状态管脚电平、通过读模块自动返回的回传、发送查询命令获得模块工作状态的回传。

引脚定义

语音识别芯片引脚定义图

语音识别模块PCB图

语音识别模块成品图

音频功放模块

功放模块的主要功能是将语音模块的音频信号进行功率放大后驱动扬声器发出声音,本系统使用TDA2030功放芯片,其引脚图如下图3.9所示:

1脚是正向输入端

2脚是反向输入端

3脚是负电源输入端

4脚是功率输出端

5脚是正电源输入端。

TDA2030引脚图

电机驱动模块

本系统电机驱动选用的是L298N驱动芯片,L298N是ST公司生产的一种高电压、大电流电机驱动芯片。该芯片采用15脚封装,如下图4.1为L298N芯片封装引脚图。主要特点是:工作电压高,最高工作电压可达46V;输出电流大,瞬间峰值电流可达3A,持续工作电流为2A;额定功率25W。内含两个H桥的高电压大电流全桥式驱动器,可以用来驱动直流电动机和步进电动机、继电器线圈等感性负载;采用标准逻辑电平信号控制;具有两个使能控制端,在不受输入信号影响的情况下允许或禁止器件工作有一个逻辑电源输入端,使内部逻辑电路部分在低电压下工作;可以外接检测电阻,将变化量反馈给控制电路。使用L298N芯片驱动电机,该芯片可以驱动一台两相步进电机或四相步进电机,也可以驱动两台直流电机。

L298N芯片引脚图

VCC电源电压正极输入

GND电源电压负极输入

VCC5板载5V输出

IN1控制信号输入端1用于控制OUT1输出

IN2控制信号输入端2用于控制OUT2输出

IN3控制信号输入端3用于控制OUT3输出

IN4控制信号输入端4用于控制OUT3输出

EN1第一组输出使能端(OUT1OUT2),高电平使能

EN2第二组输出使能端(OUT3OUT4),高电平使能

OUT1输出信号1输出端,与右边第一个接线端子相连

OUT2输出信号2输出端,与右边第二个接线端子相连

OUT3输出信号3输出端,与右边第三个接线端子相连

OUT4输出信号4输出端,与右边第四个接线端子相连

电机驱动模块电路原理图

L298N参数:

1.驱动芯片:L298N双H桥直流电机驱动芯片

2.驱动部分端子供电范围Vs:+5V~+46V

3.驱动部分峰值电流Io:2A*2

4.逻辑部分端子供电范围Vss:+5V~+7V(可板内取电+5V)

5.逻辑部分工作电流范围:0~36mA

6.控制信号输入电压范围:低电平:-0.3V≤Vin≤1.5V高电平:2.3V≤Vin≤Vss

7.使能信号输入电压范围:

低电平:-0.3≤Vin≤1.5V(控制信号无效)高电平:2.3V≤Vin≤Vss(控制信号有效)

8.最大功率:25W(温度T=75℃时)

9.正常工作温度:-25℃~+130℃

10.驱动板尺寸:60mm×54mm

11.驱动板重量:32g

12.其他扩展:特设电流反馈检测接口、控制方向指示灯、上拉电阻选择接口、逻辑部分板内取电接口。

蓝牙无线模块

HC-05 嵌入式蓝牙串口通讯模块(以下简称模块)具有两种工作模式:命令响应工作

模式和自动连接工作模式,在自动连接工作模式下模块又可分为主(Master)、从(Slave)

和回环(Loopback)三种工作角色。当模块处于自动连接工作模式时,将自动根据事先设定

的方式连接的数据传输;当模块处于命令响应工作模式时能执行下述所有AT 命令,用户可

向模块发送各种AT 指令,为模块设定控制参数或发布控制命令。通过控制模块外部引脚

输入电平,可以实现模块工作状态的动态转换。

蓝牙模块BT-HC05模块是一款高性能的蓝牙串口模块。

1、可用于各种带蓝牙功能的电脑、蓝牙主机、手机、PDA、PSP等智能终端配对。

2、宽波特率范围4800~1382400,并且模块兼容单片机系统。

3、当主从模式两个蓝牙模块配对成功后,可以简单的,更改为无线的蓝牙,让您的设备或者产品更高级,更时尚。

4、您可以很容易的使用提供的蓝牙手机软件来等。

模块指示灯说明:

1.将模块上电同时(或者之前),将KEY接高电平,此时指示灯慢闪(1秒亮一次),模块进入AT状态,此时波特率固定38400。

2.将模块上电后,将KEY悬空或者接地,此时指示灯快闪(1秒2次),表示模块进入可配对状态。此时如果将KEY接高电平,模块也会进入AT状态。但是指示灯依然是快闪(1秒2次)。

3.模块配对成功,此时STA双闪(一次闪2下,2秒闪一次)。

HC-05蓝牙模块的特点:

(1) 采用CSR主流蓝牙芯片,蓝牙V2.0协议标准; (2) 输入电压:3.6V–6V,禁止超过7V;

(3) 波特率为1200,2400,4800,9600,19200,38400,57600,115200 用户可设置;

(4) 带连接状态指示灯,LED快闪表示没有蓝牙连接;LED慢闪表示进入 AT命令模式;

(5) 板载3.3V稳压芯片,输入电压直流3.6V-6V;未配对时,电流约 30mA(因LED灯闪烁,电流处于变化状态);配对成功后,电流大约10mA。

(6) 用于GPS导航系统,水电煤气抄表系统,工业现场采控系统; (7) 可以与蓝牙笔记本电脑、电脑及蓝牙适配器等设备进行无缝连接。 (8) HC-05 嵌入式蓝牙串口通讯模块(以下简称模块)具有两种工作模 式:命令响应工作模式和自动连接工作模式,在自动连接工作模式下模块又可分为主(Master) 、从(Slave)和回环(Loopback)三种工作角色。当模块处于自动连接工作模式时,将自动根据事先设定的方式连接的数据传输;当模块处于命令响应工作模式时能执行下述所有 AT 命令,用户可向模块发送各种 AT 指令,为模块设定控制参数或发布控制命令。通过控制模块外部引脚(PIO11)输入电平,可以实现模块工作状态的动态转换。

蓝牙模块

蓝牙模块原理图

红外寻迹模块

红 外探测法,即利用红外线在不同颜色的物体表面具有不同的反射强度的特点,在小车行驶过程中不断地向地面发射红外光,当红外光遇到白色纸质地板时发生漫反 射,反射光被装在小车上的接收管接收;如果遇到黑线则红外光被吸收,小车上的接收管接收不到红外光。单片机就是否收到反射回来的红外光为依据来确定黑线的 位置和小车的行走路线。

常用的红外探测元件有红外发光管,红外接收管,红外接收头,一体化红外发射接收管。 红外线是不可见光线。所有高于绝对零度(-273.15℃)的物质都可以产生红外线。人的眼睛能看到的可见光按波长从长到短排列,依次为红、橙、黄、绿、青、蓝、紫。其中红光的波长范围为0.62~0.76μm;紫光的波长范围为0.38~0.46μm。比紫光波长还短的光叫紫外线,比红光波长还长的光叫红外线。

红外发光二极管:

外形和普通发光二极管LED相似,发出红外光。管压降约1.4v,工作电流一般小于20mA。为了适应不同的工作电压,回路中常常串有限流电阻。红外线发射管有三个常用的波段,850NM、875NM、940NM。根据波长的特性运用的产品也有很大的差异,850NM波长的主要用于红外线监控设备,875NM主要用于医疗设备,940NM波段的主要用于红外线控制设备。

光敏二极管,光敏三极管:

作为红外接收管,无光照时,有很小的饱和反向漏电流(暗电流)。此时光敏管不导通。当光照时,饱和反向漏电流马上增加,形成光电流,在一定的范围内它随入射光强度的变化而增大。光敏二极管和光敏三极管的区别是光敏三极管具有放大作用。

红外对光管实物图

红外寻迹模块电路原理图

检测电路设计:

上面介绍了红外光电管检测黑线的基本原理,但光只有红外发射和接收管不行,必须加外部电路才能实现功能,这里我们用到了LM339。LM339为内部集成了四路比较器的集成电路。因为·内部的四个比较电路完全相同,这里仅以一路比较电路进行举例。如图4.6所示为单路比较器组成的红外检测电路图,比较器有两个输入端和一个输出端,两个输入端一个称为同输入端,用“+”号表示,另一个称为反向输入端,用“-”表示。用作比较两个电路时,任意一个输入端加一个固定电压作参考电压(也叫门限电压),另一端则直接接需要比较的信号电压。当“+”端电压高于“-”端电压时,输出正电源电压,当“-”端电压高于“+”端电压时,输出负电源电压(注意,此处所说的正电源电压和负电源电压是指接比较正负极的电压)。

红外寻迹模块电路PCB图

系统软件设计与实现

软件设计是实现小车智能运转的关键所在,相当于人类大脑思维活动,通过软件设计可将各个变化信号数据有效的结合处理,产生相应的动作反应。在小车运行的控制过程中,我们采用模糊控制算法实现对小车样本训练。

本系统中通过遥控启动后,小车一直处于自动寻迹和寻找障碍信号的状态中,当避障信号和遥控信号任一信号被单片机收集到后都转入相应的状态停止和遥控方向行驶。另外中断控制程序语音控制则是实现当外部有一定强度的信号进入控制核心就对整个小车实现状态停止等待功能,其主程序流程如图5.1所示。

本系统中的软件设计是采用模块化编程的方法来实现的,模块化程序设计即模块化设计,属于计算机编程,简单地说就是程序的编写不是开始就逐条录入计算机语句和指令,而是首先用主程序、子程序、子过程等框架把软件的主要结构和流程描述出来,并定义和调试好各个框架之间的输入、输出链接关系。模块化设计是绿色设计方法之一,它已经从理念转变为较成熟的设计方法。将绿色设计思想与模块化设计方法结合起来,可以同时满足产品的功能属性和环境属性,一方面可以缩短产品研发与制造周期,增加产品系列,提高产品质量,快速应对市场变化;另一方面,可以减少或消除对环境的不利影响,方便重用、升级、维修和产品废弃后的拆卸、回收和处理。逐步求精的结果是得到一系列以功能块为单位的算法描述。以功能块为单位进行程序设计,实现其求解算法的方法称为模块化。模块化的目的是为了降低程序复杂度,使程序设计、调试和维护等操作简单化。

模块化设计模块连接图

程序流程图

在本系统软件设计时,我们将所有的模块程序嵌入到遥控程序中,这种嵌入式是为了便于控制,且不占CPU,因为蓝牙遥控模块、液晶屏触摸模块、语音识别模块、寻迹模块、以及超声波模块都同时用到了实时检测扫描,这样不仅占用CPU,而且多个程序一块运行还会产生冲突。

串口接收数据流程图

void USART1 (void)
{
u8 res,sum;
res=SBUF;
if(RX_num1>0)
{
USART1_RX_BUF[RX_num1]=res;
RX_num1++;
}
else if (res==0x88) // 寻找包头
{
USART1_RX_BUF[0]=res;
RX_num1=1;
}
if(RX_num1>=8)
{
RX_num1=0;
if(USART1_RX_BUF[7]==0xEE) // 判断包尾
{
//主指令与三位副指令左求和校验;注意:在求和溢出时应该对和做256取余。
sum=(USART1_RX_BUF[2]+USART1_RX_BUF[3]+USART1_RX_BUF[4]+USART1_RX_BUF[5])%256;
if(sum==USART1_RX_BUF[6])
{
USART_RX_STA|=0x80;
flag1=1; // 指令验证正确,标志位置1
LED2=0; //关闭蜂鸣器
}
else {LED2=1; flag1=0;}
}
else {LED2=1; flag1=0;} //接收错误指令,打开蜂鸣器
}

}

语音识别软件的实现

SYN7318智能语言交互模块集成了语音识别、语音合成和语音唤醒功能。其中语言识别方面,支持10000条词条的语音识别,可实现语义理解,并支持识别词条的分类反馈能力。如对于“请开灯 1”“开灯 1”“打开灯 1”均可以反馈为用户指定的命令ID =1。语音合成方面,清晰、自然、准确的中文语音合成效果。模块支持任意中文文本的合成,可以采用GB2312、GBK、BIG5和Unicode大头或Unicode小头四类五种编码方式。支持多种有趣的唤醒名字,并且为了适应用户的个性化需求支持自定义唤醒名功能。所有的命令帧都是通过UART接口通讯方式,可以很好的满足大多数场景。

SYN7318模块支持UART通讯方式,允许上位机发送数据的最大长度为4KB。通讯传输字节格式如下:

1)通信标准:UART

2)波特率:最高为115200 bps

3)起始位:1bit

4)数据位:8bit

5)停止位:1bit

6)校验位:无

SYN7318模块的UART通讯接口支持4种通讯波特率:4800bps、9600bps、57600bps、115200bps。硬件配置方法:通过配置BAUD0(11脚)和BAUD1(12脚)上的电平改变波特率。(00—4800bps、01—9600bps、00—57600bps、11—115200bps)。我们的任务板采用115200bps。

在语音合成系统中,主控制器和SYN7318模块之间通过UART接口连接,控制器可通过上述接口向智能语音交互模块SYN7318发送控制命令和文本,模块在接收到文本后合成语音信号输出,输出的信号经功率放大器进行放大后连接喇叭进行播放。

在使用语音识别或者语音唤醒功能时,上位机发送启动语音识别或语音唤醒功能的命令给语音模块,模块把从麦克风采集到的语音数据,通过内部的识别模块进行转换成相应的识别结果,通过通讯接口回传给控制器。

void Yu_Yin_Asr( void) // 语音识别处理函数
{
switch(ASR[0])
{
case 0x01:
{
switch(ASR[3])
{
case 0x00: // 第一个词一般不用于识别
{
SYN7318_Put_String(Stop_ASR_Buf,4); //停止语音识别
reak;
}
case 0x01: // 前进
{
Go_Test( 50,50);
SYN_TTS("小车前进已完成");
SYN7318_Put_String(Stop_ASR_Buf,4); //停止语音识别
break;
}
case 0x02:
{
Back_Test(50,50);
SYN_TTS("小车后退已完成,等待下一步指令");
SYN7318_Put_String(Stop_ASR_Buf,4); //停止语音识别
break;
}
case 0x03:
{
Left_Test( 80);
SYN_TTS("小车左转完成,等待下一步指令");
SYN7318_Put_String(Stop_ASR_Buf,4); //停止语音识别;
break;
}
case 0x04:
{
Right_Test( 80);
SYN_TTS("小车右转完成,等待下一步指令");
SYN7318_Put_String(Stop_ASR_Buf,4); //停止语音识别
break;
}
case 0x05:
{
Stop_Test();
SYN_TTS("已停车,等待下一步指令");
SYN7318_Put_String(Stop_ASR_Buf,4); //停止语音识别
break;
}
case 0x06:
{
rack_Test( 50);
SYN_TTS("寻迹已完成,等待下一步指令");
SYN7318_Put_String(Stop_ASR_Buf,4); //停止语音识别
break;
}
default:
{
YN_TTS("错误");
SYN7318_Put_String(Stop_ASR_Buf,4); //停止语音识别
break;
}
}
}

电机驱动软件的实现

从宏观上讲,电机驱动在小车运行中占据主导地位,也是小车接收到命令之后的最终输出,任何一个模块所执行命令的外在表现。

电机驱动包括驱动电机前进、后退、左转、右转、暂停及电机速度的调整功能,这些功能不仅仅只是遥控器按下前、后、左、右后才执行,而是每一个模块都会执行电机驱动模块的操作,所以在设计程序时,最优设计应该是将这些前进、后退、左转、右转单独编译成一个函数块,每个子模块的运行只需要调用这个函数块即可完成操作。这样就省了很大的程序存储空间。

/***************************************************************
** 功能: 电机控制函数
** 参数: L_Spend:电机左轮速度
** R_Spend:电机右轮速度
** 返回值: 无
****************************************************************/
void qudong(int L_Spend,int R_Spend)
{
if(L_Spend>=0)
{
if(L_Spend>250)L_Spend=250;if(L_Spend<5)L_Spend=5; //限制速度参数
SJIN0=0;
SJIN1=1;
SJIN2=0;
SJIN3=1;
PCAPWM1=L_Spend;
}
else
{
if(L_Spend<-250)L_Spend= -250;if(L_Spend>-5)L_Spend= -5; //限制速度参数
SJIN0=1;
SJIN1=0;
SJIN2=1;
SJIN3=0;
PCAPWM1=-L_Spend;
}
if(R_Spend>=0)
{
if(R_Spend>250)R_Spend=250;if(R_Spend<5)R_Spend=5; //限制速度参数
SJIN0=0;
SJIN1=1;
SJIN2=1;
SJIN3=0;
PCAPWM1=R_Spend;
}
else
{
if(R_Spend<-250)R_Spend= -250;if(R_Spend>-5)R_Spend= -5; //限制速度参数
SJIN0=1;
SJIN1=0;
SJIN2=0;
SJIN3=1;
PCAPWM1=-R_Spend;
}
}

寻迹软件的实现

小车前面的8个光点对管起循迹作用,当光电对管照到黑白的跑道上面,会输出不同的电平,一般就是高低电平,本循迹电路照到黑线输出低电平,照到白线输出高电平,从而可以识别路线。循迹传感器模块上还设有8 个指示灯,分别对应8个光电对管,当光电对管在黑线上时,对应的指示灯亮。

注意,由于光电传感器的灵敏度和高度不一样,环境光照强度也不一样,所

以我们在实验中要适当调节传感器模块上相应的电位器,和传感器模块高度。使

传感器能够在黑线上输出低电平,白线上输出高电平。

小车电机的驱动芯片是L298N,该芯片内部是H 桥电路,可以控制小车电机

的正反转。小车的PWM 驱动是实验小车转向的必要条件,通过PWM 控制小车

的速度实验小车的转向、拐弯。

/***************************************************************
** 功能: 循迹函数
** 参数: 无参数
** 返回值: 无
****************************************************************/
void Track(void)
{
gd=GPIOA->IDR&0Xff;
if(gd==0) //循迹灯全亮 停止
{
STOP();
Track_Flag=0;
Stop_Flag=1;
}
else
{
Stop_Flag=0;
if(gd==0XE7||gd==0XF7||gd==0XEF)//1、中间3/4传感器检测到黑线,全速运行
{
LSpeed=Car_Spend;
RSpeed=Car_Spend;
}
if(Line_Flag!=2)
{
if(gd==0XF3||gd==0XFB) //2、中间4、3传感器检测到黑线,微右拐
{
LSpeed=Car_Spend+10;
RSpeed=Car_Spend-40;
Line_Flag=0;
}
if(gd==0XF9||gd==0XFD)//3、中间3、2传感器检测到黑线,再微右拐
{
LSpeed=Car_Spend+20;
RSpeed=Car_Spend-60;
Line_Flag=0;
}
if(gd==0XFC)//4、中间2、1传感器检测到黑线,强右拐
{
LSpeed=Car_Spend+40;
RSpeed=Car_Spend-100;
Line_Flag=0;
}
if(gd==0XFE)//5、最右边1传感器检测到黑线,再强右拐
{
LSpeed=Car_Spend+50;
RSpeed=Car_Spend-120;
Line_Flag=1;
}
}
if(Line_Flag!=1)
{
if(gd==0XCF)//6、中间6、5传感器检测到黑线,微左拐
{
RSpeed=Car_Spend+10;
LSpeed=Car_Spend-40;
Line_Flag=0;
}
if(gd==0X9F||gd==0XDF)//7、中间7、6传感器检测到黑线,再微左拐
{
RSpeed=Car_Spend+20;
LSpeed=Car_Spend-60;
Line_Flag=0;
}
if(gd==0X3F||gd==0XBF)//8、中间8、7传感器检测到黑线,强左拐
{
RSpeed=Car_Spend+40;
LSpeed=Car_Spend-100;
Line_Flag=0;
}
if(gd==0X7F)//9、最左8传感器检测到黑线,再强左拐
{
RSpeed=Car_Spend+50;
LSpeed=Car_Spend-120;
Line_Flag=2;
}
}
if(gd==0xFF) //循迹灯全亮
{
if(Line_Flag==0)
{
if(count++>1000)
{
count=0;
STOP();
Track_Flag=0;
Stop_Flag=4;
}
}
}
else count=0;
if(!Track_Flag==0)
{
Control(LSpeed,RSpeed);
}
}
}

使用的仪器仪表及软件

数字万用表 DT9203

单片机仿真器 WAVE6000

烧写器 GF2100

直流稳压稳流电源 DH1718E-5

示波器 DF1641D

画图制板软件 PROTEL DXP

编译软件 ISP

在线编译 电烙铁 TLW-30

系统制作

根据系统设计方案,本系统的制作主要是硬件制作,包括三个部分:面包板上的调试,PCB电路板的制作,各元器件的焊接和模块的连接。面包板上的调试是保证系统功能稳定实现的基础,在各个模块都能产生相应的信号后可以根据电路图制作集成PCB电路板,使系统电路美观而且更能保证稳定性,最后通过焊接元器件,实现有效功能后连接到小车平台上,形成完美整体。

其中制作集成PCB电路板过程最为复杂,在面包板上的调试过程完成后根据已有的电路,将其通过电路画图软件得到原理图并进一步转化生成PCB图。在得到PCB电路图后,通过1:1比例打印到热转印纸,热转印纸转印到已经截好的铜板上,放进三氯化铁溶液中腐蚀得到成型电路板,最后根据板上的焊盘进行钻孔,完成PCB电路板制作。

系统调试

本系统的调试共分为三大部分:硬件调试,软件调试和软硬件联调。由于在系统设计中采用模块设计法,所以方便对各电路模块功能进行逐级测试:单片机控制模块的调试、蓝牙遥控模块的调试、红外对管寻迹模块的调试、红外线避障模块的调试以及电机控制模块和语音控制模块的调试,最后将各模块组合后结合软件进行整体测试。

硬件调试

测试方法与仪器:

1、测试仪器 测试仪器包括秒表、数字万用表、信号发生器、示波器、MCS51仿真机、直流稳压电源等。

2、测试方法 数字万用表主要用来测试分立元件的电阻、压降、漏电流、截止/导通状态等参数; 信号发生器与示波器用于测试各光电传感器信号的接收与传输; MCS51仿真机用于测试软件; 直流稳压电源在测试期间为各待测系统供电; 秒表用于产品测试,按照任务书的基本要求对制成的电动车进行产品测试。

测试数据及测试结果分析:

(1)、 计时精度分析 计时系统采用了新型显示芯片。理论上的误差不到1秒/秒。

(2)、 测距精度分析 测速系统采用了电机轴光电码盘检测技术。电机轴与车轮轴之间采用了齿轮箱二级减速,变比1/16。车轮周长135mm,光电码盘与电机轴安装在一起,电机轴每一转产生2个脉冲,车轮每转产生32个脉冲,理论测量精度可达135mm/32=4.22mm<4.5mm

(3)、 定位精度分析 本设计采用实际测量与软件补偿技术,理论上可使定位精度提高到误差<10mm。

软件程序调试

调试的主要方法和技巧 在使用WAVE软件时,调试的方法和技巧最为重要,不同的情况采用不同的调试方法,有助于程序的实现。在设计过程中显示运行结果一般用全速调试,调试时主要使用了跟踪调试、断点调试。

( 1 )、跟踪调试 跟踪应用程序用户能够在运行应用程序时,看到PC指针在应用源代码程序中的确切位置,WAVE提供了跟踪型单步和通过型单步。 跟踪型单步仅执行一条源语句程序,有利于观察变量。但是,如果调用函数,则进入函数中,在执行函数的第一条源泉语句行前停止。有利于用在延时子程序中。 通过跟踪型单步仅执行一条源语句程序,然后又停止。

( 2 )、断点调试 如果已知程序中某块代码实际运行正常的情况下,仍用跟踪调试,将大大浪费时间,而且很枯燥,因此调试中第二个重要工具是在源代码中预定处设置断点,大多数调试程序通过使用断点中止程序执行。如果用断点调试,由比较容易观察出程序变量的改变及程序运行的结果。

( 3 )、查看变量 WAVE软件提供了以下几种方法以变量进行查看:观察窗口、数据窗口(程序空间窗口、内部数据窗口、外部数据窗口。)通过添加窗口菜单可以将用户希望观察的变量添加到观察窗口及数据窗口观察。在设计过程中常用观察窗口观察程序中的变量,修改程序中的错误。

( 4 )、更改数值 如果用户在调试过程中了解到变量的内容(超值、未定义等)会对程序性能产生影响或引起异常时,立即更改变量的内容是很有交往的方法以确保该值在正确范围内不会产生错误。WAVE软件提供一系列更改变量数值的方法,以便用户能检查程序对整个变量值范围的反应,而无需为设置每个值而重新加载调试。在更改对话框中用户输入要更改的取值,点击确定按钮。用户可以在输入框中输入十六进制或十进制数据。

联合调试

各模块都调试通过之后,将各个模块连接起来与硬件结合进行联合调试。在进行联合调试时,经过反复的实验,不断的来修改参数来完善结果。使程序按照要求设计的要求进行。

测试经验总结

1.在调试程序之前,先检查各模块间的连接是否连接无误,有无断路现象。

2.调试程序时,首先用全速运行的方法进行总体调试,以便快速发现程序中存在问题的部分。然后设置断点调试。主要针对有问题的程序调试,更快地确定出现问题的位置。最后,利用单步调试方法,分析程序中出现的问题,解决问题,使程序正常运行。

3.在多次调试不成功的基础上,考虑思路是否正确,如果确定思路无误,考虑两个问题:一是程序中是否有笔误的地方;二是运行软件是否正常。

结论与展望

本设计方案按照任务书的要求,以51单片机为控制核心,结合蓝牙无线遥控模块、红外对管寻迹模块、红外线避障模块、电机控制模块和语音控制模块实现小车的自动寻迹功能(按路面的黑色轨道行驶),自动避障功能,无线遥控和语音控制功能。基本完成各项指标,实现小车的智能化行驶。

系统是通过软硬结合的方式,得到硬件检测信号后输入单片机各个对应的I/O接口,通过汇编程序控制过程,小车由遥控启动后,自动寻迹,并不断检测遥控、避障和语音信号,只要得到其中任何一种信号都将转入它们对应的功能模块,实现有效控制。

由于时间不足以及客观多方面的困难,整个小车相比任务书中的要求已经简化的比较多,伴随着也出现多个地方的不足:遥控只能达到前进后退左右转向,不能控制停止;电机转速过快使寻迹灵敏度不高;语音控制的麦克风接收的击掌声需非常响才有效果等等。不过,这些一定的不足有利于激发我的兴趣,不断改进完善小车:遥控达到以上功能外还将加入速度控制,停启等;语音则应用语音芯片实现人类语音智能控制;同时也可以加入里程计算显示或则其他温度、湿度、气压的控制检测等多方面的功能,达到智能机器人的效果。这些也需从工作中学习实现,让自己更上一个台阶。

相关推荐