吉林大学大学生电子竞赛设计报
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
吉林大学大学生电子竞赛设计报告题目:基于单片机控制的智能玩具
参赛队员:张明辛敏航许小燕
院系:通信工程信息工程系
指导老师:马海涛老师
基于单片机控制的智能玩具
摘要
本设计是利用基于单片机控制语音模块,采用触摸和声控两种方式,实现玩具的语音播报功能。
其中触摸电路主要采用多个三极管串联耦合将微弱的电信号经行放大,而声控电路用的驻极体话筒,将声音信号转化为电信号,再由9014三极管将信号放大。
将这两个模快连在单片机上,它再控制语音模块。
整个设计尽可能利用简单可行方案实现该玩具的功能。
关键字:语音模块触摸声控
目录
摘要 (1)
引言 (2)
一、方案比较与论证 (3)
1 、触摸控制电路部分 (3)
2、声控控制电路部分 (4)
二、系统设计 (4)
1 、总体设计思想 (5)
三、系统硬件设计 (5)
1 、触摸模块 (5)
2 、声控模块 (6)
3、语音模块 (7)
四、系统软件设计 (10)
1 、基本流程图 (10)
五、系统测试 (10)
1 、测试仪器 (10)
2 、测试方法和数据 (10)
3 、测试结果和分析 (11)
六、总结体会 (11)
* 参考文献 (12)
* 附录 (12)
程序清单 (12)
引言
目前市场上出现了不少声控或者触摸方式的各种玩具,针对这一特点,我们设法将这两种方式结合到一起,制作这样的一种智能玩具。
通过声控(如击掌,拍手等急促的声音)或者触摸的方式能够使其对应的模块输出电压产生变化,从而使单片机驱动,则语音模块就产生反应,玩具就会实现语音播报功能。
本设计尽量使用简单稳定的电路,来实现这一生动有趣的玩具这两种功能。
一、系统设计方案比较与论证
1 、触摸控制电路部分
方案一:本方案由光电耦合器组成的触摸开关电路,主要由NE555时基电路、电容、稳压管、二极管、电阻组成等组成。
虽然本方案能够有效地避免因外部长生的干扰,但是电路稍有点复杂,调试困难。
方案二:本方案采用双触片电阻桥触摸电路,主要由LM339一种四电压比较器构成,电路简单,但是稳定性有点差,容易受外界干扰。
(如图)
图-1 双触片电阻桥触摸电路
方案三:本方案采用五个NPN型的9014三极管(其中一个三极管作为开关)构成。
四个三极管将微弱的触摸信号进行放大,输出的电压经过比较器,电路简单稳定,能较好地达到所预期
的目的。
通过做实际的电路不断分析、测试、比较,我们采用方案三。
2、声控控制电路部分
方案一:本方案采用主要由电陶瓷片加一圆形塑料助音腔HTD 构成,急促声音经HTD声电转换后成为电信号,电信号经T1管进行放大,从集电极输出可以推动语音模块。
但是实验中发现HTD不太好用,没有达到理想效果。
图-2 电陶瓷片声控电路
方案二:本方案主要采用驻极体话筒和两个9014型三极管组成,及一些电容电阻组成。
原理和方案一差不多,但是驻极体话筒因内部含有一个场效应管做放大,因此拾音灵敏度高,输出音频信号较大,且其体积小、电声性能好、价格低廉。
整个电路还算稳定,简单,容易制作调试。
通过比较不同的方案及进行实验,我们选择方案二。
二、系统设计
1 、总体设计思想
本设计是通过单片机控制语音模块,在声控和触摸两种方式下
实现电子玩具的语音播报功能。
该设计是信号采集反馈系统,分为声控模块、触摸模块、语音模块、单片机控制模块四大模块。
如下框图所示,这样可以清楚看到模块各个部分组成,方便于检测和调试。
图-3 系统总体方框图
三、系统硬件设计
1 、触摸模块
该电路由一个触摸开关组成, VT3接到单片机基极偏置电流,未触摸时,三极管均处于截止状态,VT3发射级输出低电平,因而接到单片机时其处于不工作状态.当用人手触摸M 时,人体感应的杂波信号注入VT1基极,作为VT1的基极电流,经VT1放大后,由发射级输出,直接送入VT2作为VT2的基极电流,再经过VT2放大,放大后的VT2发射极电流,又直接送入VT3基极,这股电流足以使VT3导通,所以VT3发射极输出的高电平信号输入到单片机P1.1脚,对单片机P3.1脚操作控制语音模块工作,因而单片机处于工作状态。
由图可知,VT1~VT3组成复合管形式。
声控模块
触摸控制模块 单片机模块 语音模块
图-4 触摸模块电路图
2 、声控模块
图-5 声音信号放大设计框图
如图所示,当驻极体BM没有接收到声音信号时,两个三极管均处于截止状态,VT2的集电极输出的电压为电源电压;当有声音作用时,声震导致话筒产生相应的电效应,由于声\电效应较小,故经电容C1的滤波作用,然后经三极管VT1将信号放大,使VT1管处于导通状态,然后因为VT1管的集电极电压升高,故使VT2管基极与射极的电压差大于0.7v,VT2管导通,因此VT2管的集电极电压处于低电平状态。
当然我们可以调节R3的阻值,可以改为一个可调的电阻,可以实现对声音灵敏度的可调,VT2集电极
输出地电压达到单片机所要求的的电压(其中电容C2是电源滤波电容)。
图-6 驻极体话筒声控电路图
3、语音模块
WTW-16P采用WT588D-20SS作为核心控制电路,WTW-16P内部包含了WT588D-20SS外围所需的SPI-FLASH、震荡电路、复位电路。
外部只需要接上电源、控制端以及扬声器(或者功放)就能正常工作。
图-7 WTW-16P模块内部电路WTW-16P的封装形式和封装引脚如下
四、系统软件设计
1 、基本流程图
图-7 基本流程图
五、系统测试
1、测试仪器
数字万用表 双踪示波器 单片机仿真器
2、测试方法和数据
声音控制模块测试数据 不对麦克吹气时输出端电压
3.92v
3.95v 3.8v 对麦克吹气时输出端电压
1.1v
0.5v 0.6v 触摸控制模块测试数据 开始
初始化
等待中断
执行中断
语音放音
结束
5.0v 4.9v 4.8v
触摸前输出电
压
1.2v
2.2v 0.9v
触摸时输出电
压
3 、测试结果和分析
通过声音控制模块和触摸模块数据分析可知当没有外界刺激时电平无变化,只要有外界刺激(声音或者触摸)电路立即有由高电平向低电平的明显变化,单片机能够很好的接收到此变化信号,所以能够做出相应处理。
六、总结体会
本次电子设计大赛,我们组队员努力实现了这个由单片机控制的触摸声控式智能玩具的基本功能。
由于时间、条件及自身知识有限,一些地方还不尽如意,还值得进一步改进与完善。
当然在这个过程中,碰到不少问题,如制作声控电路中,一开始采用电压陶瓷片来采集声音,但是效果不明显。
虽然各种声控电路不少,但一些因为主要元器件的缺失而不得不放弃,最后采用比较简单的电路来实现,但是调试花了不少时间,才达到所要求的目的。
通过本次设计,不仅锻炼了我们实际动手操作能力,将所学的知识和实践结合,学到了各种元器件的原理及其应用,还提高了我们分析问题解决问题的能力。
一开始以为还挺简单,大家兴致蛮高,但真正动手操作问题就接踵而来,就有点泄气,但是通过查阅资料,多请教别人,多思考,慢慢地通过努力,达到了所要求的。
明白了
有些事不是你不会,而是你不敢,你不努力就什么也不可能,只有努力了才会有所收获。
*参考文献
·MCS—51系列单片机及其应用(第二版)
蔡美琴张为民何金儿毛敏陶正苏毛义梅·51单片机C语言教程-----入门,提高,开发,拓展全攻略·电子设计与制作100例张金
·电子线路线性部分(第四版)谢嘉奎
·电子线路非线性部分(第四版)谢嘉奎
*附录
程序清单如下
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit Int0=P3^2;
sbit Int1=P3^3;
sbit KEY=P1^0; /*P1_0为P1口的第1位*/
sbit RST=P1^1; /*P1_1为P3口的第2位*/
sbit SDA=P3^4; /*P3_4为P3口的第5位*/
unsigned char FD=0;
void delay1ms(unsigned char count) //1MS延时子程序
{
unsigned char i,j,k;
for(k=count;k>0;k--)
for(i=2;i>0;i--)
for(j=248;j>0;j--);
}
void delay100us(unsigned char count) //100US延时子程序{ unsigned char i;
unsigned char j;
for(i=count;i>0;i--)
for(j=50;j>0;j--);
}
Send_oneline(unsigned char addr)
{
unsigned char i;
RST=0;
delay1ms(5); /*复位延时5MS*/
RST=1;
delay1ms(20); /* delay 20ms */
SDA=0;
delay1ms(5); /* delay 5ms */
for(i=0;i<8;i++)
{SDA=1;
if(addr & 1)
{delay100us(6); /* 600us */
SDA=0;
delay100us(2); /* 200us */
}
else {
delay100us(2); /* 200us */
SDA=0;
delay100us(6); /* 600us */
}
addr>>=1; }
SDA=1;
}
void exter1() interrupt 0 //中断1 {
EA=0;
KEY=0;
P3=0XFF;
while(1)
{
if(KEY==0)
{
delay1ms(10);
if(KEY==0) //通过按键P1.1来进行发码值的递增
{
Send_oneline(FD);
FD++;
if(FD==2) //一线串口时,语音段暂时最多为220段
{
FD=0;
}
while(KEY==0); //等待按键释放,以免一次按键误判成几次}
}
}
EA=1;
}
void exter2() interrupt 2 //中断2 {
EA=0;
KEY=0;
P3=0XFF;
while(1)
{
if(KEY==0)
{
delay1ms(10);
if(KEY==0) //通过按键P1.1来进行发码值的递增
{
Send_oneline(FD);
FD++;
if(FD==2) //一线串口时,语音段暂时最多为220段
{
FD=0;
}
while(KEY==0); //等待按键释放,以免一次按键误判成几次}
}
}
//执行
EA=1;
}
void init()
{
KEY=1;
EA=1; // 开总中断
EX0=1; // 开外部中断0
EX1=1; // 开外部中断1
TCON=0x00; //外部中断低电平触发}
void main()
{ Int0=1;
Int1=1;
init();
while(1);
}
附:成品图。