酒精浓度测试仪单片机实训报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
XX大学职业技术学院单片机实训报告
酒精浓度测试仪
学院(系):电子信息工程系
专业:电子信息工程技术
学号: XXX
学生姓名: XXX 指导教师: XXX
目录
摘要 (II)
1. 绪论 (1)
2. 课题背景 (1)
2.1. 设计任务与要求 (1)
2.2. 设计目的 (1)
2.2.1. 设计题目的概述 (2)
3. 总体设计方案 (2)
3.1. 设计思想 (2)
3.2. 方案选择与论证 (2)
4. 硬件设计 (2)
4.1. 酒精测试仪的总体硬件结构以及原理 (2)
4.2. 硬件原理框图 (3)
4.3. 芯片及应用 (3)
4.3.1. AT89C52芯片介绍 (3)
4.3.2. ADC0804芯片介绍 (4)
4.3.3. MQ-3酒精传感模块 (6)
5. 硬件设计 (8)
5.1. 软件流程图 (8)
5.2. 核心程序设计 (8)
6. 调试 (12)
7. 结论 (12)
参考文献 (13)
附件 (15)
摘要
本设计实现了对不同浓度酒精的检测和显示,通过适当改进可以用于检测酒后驾车。
本文用AT89S52单片机与MQ-3型气体传感器实现了对酒精浓度的测量,并对测量数据进行显示,同时利用二极管简单显示浓度的高低,在设计允许值时发出报警。
论文主要研究了(1)硬件方面,MQ-3气体传感器技术参数的检测和将它接入到酒精浓度检测模块中;将模拟电压信号放大驱动发光二极管点亮报警;将采集到的模拟电压信号通过单片机控制经A/D转换,得到数字电压信号;用于显示浓度的液晶显示模块。
(2)软件方面,主要研究了电压到浓度的线性转换和最终浓度值的数码管显示。
(3)对设计的传感器进行了标定。
设计的传感器对酒精气体反应灵敏,能在有效范围内测量它的浓度值。
本文的特色在于标准的确定。
对于流动空气,样品的稳定性和水蒸气的影响,提出了解决方案和验证方法。
对不同的区间浓度和电压转换关系做线性化处理,简化了硬件电路的设计。
设计的传感器可以检测不同浓度的酒精气体,改进之后对解决酒后驾车事故和特殊场合酒精检测都可以使用。
关键词:气体传感器,模数转换,单片机
1.绪论
随着经济高速发展,越来越多的人有了自己的私家车,而酒后驾车造成的交通事故也频繁发生。
为此,需要设计一智能仪器能够检测驾驶员体内酒精含量。
本论文研究的是一种以气敏传感器和单片机为主,监测空气酒精浓度,并具有声光报警功能的空气酒精浓度监测仪。
其可监测出空气环境中酒精浓度值,并可根据不同的环境设定不同的阈值,对超过的阈值进行声光报警来提示危害。
2.课题背景
本课题分为两部分:硬件设计部分和软件设计部分。
硬件部分为利用MQ3气敏传感器测量空气中酒精浓度,并转换为电压信号经A/D转换后传给单片机系统,由单片机及其外围电路进行信号的处理,显示浓度值以及超阈值声光报警。
软件部分用C语言进行编程,程序采用模块化设计思想。
各个子程序的功能相对独立,便于调试和修改。
而硬件电路又大体可分为单片机小系统电路、A/D转换电路、声光报警电路、液晶屏幕显示电路,各部分电路的设计及原理将会在硬件电路设计部分详细介绍;程序的设计使用C语言编程。
2.1. 设计任务与要求
本设计主要能够完成对酒精浓度的测试,可以通过液晶屏幕显示酒精浓度。
此信测试仪可以很好的运用于有需要的场合。
2.2. 设计目的
通过这次实训,让我更了解单片机系统,能掌握ADC0804芯片、AT89C52芯片和MQ-3模块的使用,在硬件和软件方面都有所提高,电路板的实际动手能力也得到提高。
2.2.1.设计题目的概述
酒精测试仪是基于单片机,数模转换电路和MQ-3模块组合而成。
利用89S52单片机外接数模转换器,现实酒精测试仪。
3.总体设计方案
3.1. 设计思想
由于要求达到酒精浓度的测试,因此需要A/D转换器芯片来实现这个测试仪,通过传感器的测试改变电压的大小,在经过A/D转换器传给单片机来把这个显示在液晶显示屏上。
3.2. 方案选择与论证
酒精测试仪的方法:
酒精传感器MQ-3→数模转化器ADC0804→单片机AT89C52→液晶显示屏(一个等待按键计时10分钟、一个测试待机、LED报警、蜂鸣器、单片机复位按键)
4.硬件设计
4.1. 酒精测试仪的总体硬件结构以及原理
硬件设计时,考虑酒精浓度是由传感器把非电量转换为电量,传感器输出的是0-5伏的电压值并且电压值稳定,外部干扰小等。
因此,可以直接把传感器输出电压值经过ADC0804采集数据送入单片机进行处理。
酒精浓度监测仪的硬件电路设计主要包括:传感器测量电路、89C52单片机系统、A/D转换电路、声光报警电路、LED显示电路。
4.2. 硬件原理框图
图表 2.2.1-1硬件原理框图4.3. 芯片及应用
4.3.1.AT89C52芯片介绍
图表 4.3.1-1AT89C52芯片管脚
VCC(40引脚):电源电压
VSS(20引脚):接地
P0端口(P0.0~P0.7,39~32引脚):P0口是一个漏极开路的8位双向I/O口。
作为输出端口,每个引脚能驱动8个TTL负载,对端口P0写入“1”时,可以作为高阻抗输入。
在访问外部程序和数据存储器时,P0口也可以提供低8位地址和8位数据的复用总线。
此时,P0口内部上拉电阻有效。
在Flash ROM编程时,P0端口接收指令字节;而在校验程序时,则输出指令字节。
验证时,要求外接上拉电阻。
P1端口(P1.0~P1.7,1~8引脚):P1口是一个带内部上拉电阻的8位双向I/O 口。
P1的输出缓冲器可驱动(吸收或者输出电流方式)4个TTL输入。
对端口写入1时,通过内部的上拉电阻把端口拉到高电位,这是可用作输入口。
P1口作输入口使用时,因为有内部上拉电阻,那些被外部拉低的引脚会输出一个电(I)。
此外,P1.0和P1.1还可以作为定时器/计数器2的外部技术输入(P1.0/T2)和定时器/计数器2的触发输入(P1.1/T2EX)。
4.3.2.ADC0804芯片介绍
1、A/D转换概念:
即模数转换(Analog to Digital Conversion),输入模拟量(比如电压信号),输出一个与模拟量相对应的数字量(常为二进制形式)。
例如参考电压VREF为5V,采用8位的模数转换器时,当输入电压为0V时,输出的数字量为0000 0000,当输入的电压为5V时,输出的数字量为1111 1111。
当输入的电压从从0V到5V 变化时,输出的数字量从0000 0000到1111 1111变化。
这样每个输入电压值对应一个输出数字量,即实现了模数转换。
2、分辨率概念:
分辨率是指使输出数字量变化1时的输入模拟量,也就是使输出数字量变化一个相邻数码所需输入模拟量的变化值。
分辨率与A/D转换器的位数有确定的关系,可以表示成FS / 2 n 。
FS表示满量程输入值,n为A/D转换器的位数。
例如,对于5V的满量程,采用4位的
ADC时,分辨率为5V/16=0.3125V (也就是说当输入的电压值每增加0.3125V,输出的数字量增加1);采用8位的ADC时,分辨率为5V/256=19.5mV(也就是说当输入的电压值每增加19.5mV,则输出的数字量增加1);当采用12位的ADC时,分辨率则为5V/4096=1.22mV(也就是说当输入的电压值每增加1.22mV ,则输出的数字量增加1)。
显然,位数越多,分辨率就越高。
3、ADC0804引脚功能:
图表4.3.2-1ADC0804芯片引脚
芯片片选信号,低电平有效。
即=0时,该芯片才能正常工作,高电平时芯片不工作。
在外接多个ADC0804芯片时,该信号可以作为选择地址使用,通过不同的地址信号使能不同的ADC0804芯片,从而可以实现多个ADC通道的分时复用。
启动ADC0804进行ADC采样,该信号低电平有效,即信号由低电平变成高电平时,触发一次ADC转换。
低电平有效,即=0时,DAC0804把转换完成的数据加载到DB口,可以通过数据端口DB0~DB7读出本次的采样结果。
VIN(+)和VIN(-):模拟电压输入端,单边输入时模拟电压输入接VIN(+)端,VIN(-)端接地。
双边输入时VIN(+)、VIN(-)分别接模拟电压信号的正端和负端。
当输入的模拟电压信号存在“零点漂移电压”时,可在VIN(-)接一等值的零点补偿电压,变换时将自动从VIN(+)中减去这一电压。
VREF/2:参考电压接入引脚,该引脚可外接电压也可悬空,若外接电压,则
与Vcc共用电源电压,ADC的参考电压为该外界电压的两倍,如不外接,则V
REF
此时ADC的参考电压即为电源电压Vcc的值。
CLK IN和CLK R:外接RC振荡电路产生模数转换器所需的时钟信号,时钟频率CLK = 1/1.1RC,一般要求频率范围100KHz~1460KHz。
AGND和DGND:分别接模拟地和数字地。
INTR:转换结束输出信号,低电平有效,当一次A/D转换完成后,将引起INTR=0,实际应用时,该引脚应与微处理器的外部中断输入引脚相连(如51
单片机的0
INT,1
INT脚),当产生INTR信号有效时,还需等待RD=0才能正确读出A/D转换结果,若ADC0804单独使用,则可以将引脚悬空。
DB0~DB7:输出A/D转换后的8位二进制结果。
4.3.3.MQ-3酒精传感模块
图表4.3.3-1MQ-3模块
主要芯片:LM393、ZYMQ-3气体传感器
模块介绍:
一、工作电压:直流5伏
二、特点:
1、具有信号输出指示。
2、双路信号输出(模拟量输出及TTL电平输出)
3、TTL输出有效信号为低电平。
(当输出低电平时信号灯亮,可直接接单片机)
4、模拟量输出0~5V电压,浓度越高电压越高。
5、对乙醇蒸汽具有很高的灵敏度和良好的选择性。
6、具有长期的使用寿命和可靠的稳定性
7、快速的响应恢复特性
三、应用:
用于机动车驾驶人员及其他严禁酒后作业人员的现场检测,也用于其他场所乙醇蒸汽的检测
【标注说明】
【原理图】
5.硬件设计
5.1. 软件流程图
5.2. 核心程序设计
//*****************************AD转换函数**************************// void ad()
{
wr=0;
delay(1);
wr=1;
delay(5);
P3=0xff;
delay(1);
rd=0;
delay(1);
temp=P3;
rd=1;
}
//**************************酒精浓度显示函数************************// void display()
{
uint value;
uchar a,b,c;
value=3.92*temp;
a=value/100;
b=value%100/10;
c=value%10;
write_com(0x80+0x40+4);
write_data(0x30+a);
write_com(0x80+0x40+5);
write_data(0x30+b);
write_com(0x80+0x40+6);
write_data(0x30+c);
}
//*****************************初始化函数***************************// void init()
{
lcdrw=0;
lcden=0;
write_com(0x38);
write_com(0x0c);
write_com(0x06);
cs=0;
flag=1;
b=10;
TMOD=0x01;
EA=1;
ET0=1;
}
//***************************主函数*********************************// void main()
{
init();
while(1)
{
if(k1==0) //按键检测
{
delay(5);//防抖动
if(k1==0)
flag=0;
}
if(k2==0)
{
delay(5);
if(k2==0)
flag=1;
while(!k2);
}
while(flag==0)//执行报警程序{
TR0=0;
d2=1;
write_com(1);
write_com(0x80);
write_str(str);
write_com(0x80+0x40+9); write_str(str0);
while(flag==0)
{
ad(); //AD转换函数display();
if(temp>=20)
{
beep=0; //蜂鸣器
d1=0;
}
else
{
beep=1;
d1=1;
}
if(k1==0)
{
delay(5);
if(k1==0)
flag=0;
while(!k1);
}
if(k2==0)
{
delay(5);
if(k2==0)
flag=1;
}
}
}
while(flag==1) //执行待机程序{
beep=1;
d1=1;
tt=0;
a=0;
b=10;
c=0;
d=0;
write_com(1);
d2=0;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
while(flag==1)
{
write_com(0x80+6);
write_data(table[a]);
write_com(0x80+7);
write_data(table[b]);
write_com(0x80+8);
write_data(table[c]);
write_com(0x80+9);
write_data(table[d]);
if(k1==0)//按键检测
{
delay(5);
if(k1==0)
flag=0;
while(!k1);
}
if(k2==0)
{
delay(5);
if(k2==0)
flag=1;
while(!k2);
}
}
}
}
}
6.调试
在转印、腐蚀和焊接中很顺利没有什么问题出现,在画仿真和现在的电路存在差别,出现的问题在ADC0804的时钟信号4脚和9脚之间没有产生LC震荡,ADC0804无法进行工作,把9脚的电阻接到4脚上就能正常工作。
7.结论
通过本次设计,让我明白了更多的C语言知识,还把C语言与单片机运用到一起,能感受到单片机体积小,实际是一个很强大的系统,对于单片机系统有了更上一层楼的了解,同时也对我的动手能力有很大的提高。
实验的时候遇到了很多的问题,我查过许多关于实验的资料,请教过老师和同学们,把不懂得弄懂,才会使我的实验做得顺利,我明白一些学习的道理踏踏实实日积月累的才能学得更好。
参考文献
【1】《单片机C语言程序设计教程与实训》北京大学出版社张秀国著【2】《C语言程序设计》清华大学出版社谭浩强著
【3】《模拟电子技术》高等教育出版社王连英著
【4】《高频电子技术》人民邮电出版社刘骋
【5】《C语言程序设计项目教程》中国电力出版社刘治安
【6】《电路分析基础》电子工业出版社田丽洁
【7】网上资料
致谢
本设计的完成是在我们的导师叶俊明老师的细心指导下进行的。
在每次设计遇到问题时叶老师不辞辛苦的讲解才使得我的设计顺利的进行。
从设计的选题到资料的搜集直至最后设计的修改的整个过程中,花费了叶老师很多的宝贵时间和精力,在此向导师表示衷心地感谢!导师严谨的治学态度,开拓进取的精神和高度的责任心都将使学生受益终生!
还要感谢和我同一设计小组的同学,是你在我平时设计中和我一起探讨问题,并指出我设计上的误区,使我能及时的发现问题把设计顺利的进行下去,没有你的帮助我不可能这样顺利地结稿,在此表示深深的谢意。
附件
原理图。