基于单片机的酒精浓度测试.docx
《基于单片机的酒精浓度测试.docx》由会员分享,可在线阅读,更多相关《基于单片机的酒精浓度测试.docx(59页珍藏版)》请在冰豆网上搜索。
基于单片机的酒精浓度测试
1 引言
饮酒驾驶是当今社会在驾驶方面主抓的重点,它不但有害于自身安全,也给社会带来了极大的伤害,国家质量监督检验检疫总局对驾驶员呼吸以及血液中的酒精浓度给予了国家标准规定:
血液中酒精含量<20mg/100mL为正常、>20mg/100mL和<80mg/100mL为饮酒驾车、≥80mg/100mL属于醉酒驾车[1]。
通过实验分析发现测量出的呼吸中的酒精浓度与血液中的酒精浓度成正比。
驾驶员酒后驾驶具有令人不可想象的巨大危害。
酒精的麻醉作用会降低驾驶员的触觉能力,同时使其操作和判断能力下降,从而无法正常控制油门、方向盘、刹车等,做出错误的方向判断,造成严重的后果。
在饮酒之后,人们对声、光刺激的反应能力变差,因为大脑的反应能力要比没有饮酒时的反应能力低的多,大脑不能正确和及时的分辨出交通信号灯、标线和标志,饮酒后视野也会相应的缩小,视线模糊不清,对周围的环境不能做出正确的判断,因此酒后驾车是一件非常危险事情。
因此社会及国家高度重视因酒驾车这一事件,为了自己和他人的安全,为了避免酒后驾驶,不再出现因酒驾而引起的重大交通事故,设计了一种基于单片机的酒精浓度测试,以便交管对驾驶员呼吸及血液中的酒精浓度的测试,从而来减少酒后驾驶这一问题。
1.1 设计方案
本方案设计了一种关于人体血液中的酒精浓度测试,主要由气体传感器MQ-3、ADC0832模数转换器、单片机控制器AT89C52、LCD1602液晶显示器以及报警系统等组成。
系统的工作原理是:
通过MQ-3气体传感器检测驾驶员呼出的酒精气体,通过传感器的输出电压模拟信号经过A/D转换转变成数字信号,然后将数字信号输入到单片机中,最后再通过液晶显示器和报警器来显示和提醒人体血液中的酒精含量。
从而通过这种设计方案来检测出驾驶员血液中的酒精浓度。
1.2 课题研究的背景及意义
随着社会的不断发展,饮酒驾车已经成为社会重点关注的话题,每到逢年过节,因酒后驾驶造成的严重后果屡屡发生,为了防止这种悲剧的发生,设计一种酒精浓度传感器是必不可少的,既对自己负责任又对无辜的人们负责。
2 硬件设计
本章主要介绍设计的系统功能原理及所使用的结构器件。
了解并熟悉单片机AT89C52、酒精浓度传感器MQ-3、转换器ADC0832以及液晶显示器和报警器等器件的引脚功能、工作状态及设计方案。
2.1 系统功能原理及硬件组成
2.1.1 系统功能原理
该设计利用集成酒精浓度传感器MQ-3实现酒精浓度的测量并对输出的模拟信号进行模数转换,然后送到单片机中进行处理变换,再送往LCD液晶显示屏和报警器,最后实现酒精浓度显示和报警的功能。
2.1.2 系统硬件组成框图
本设计是一个关于血液中的酒精浓度的测试,利用酒精浓度传感器MQ-3、声光报警器、ADC0832模数转换器、单片机AT89C52、LCD1602液晶显示器等硬件构成。
系统图如2-1所示:
图2-1 酒精浓度测试系统的框图
该设计将酒精浓度测试电路分为一个复位按键(单片机复位按键)和五个模块(主控制电路、调试电路、测浓度电路、模数转换电路、显示电路)。
酒精浓度传感器MQ-3构成是测酒精浓度电路主要原件。
MQ-3首先通过拉低总线的时间长度控制读时序和写时序,读写时序按照MQ-3的读写协议,在主机将信号线从高电平拉低至低电平起15~60μS的时间内,将酒精浓度转换成指令,所得数据传输到单信号线上,供主机(这里是AT89C52)读取[2]。
2.2 传感器
2.2.1 酒精传感器介绍
酒精浓度的准确检测是决定该设计成功的重要因素,而酒精的检测是依靠酒精气体传感器来实现信号的采集。
基于对测量范围和呼气中的酒精含量的设计,然后转换为血液中的酒精浓度含量。
MQ-3气体传感器具有很快的回复特性、稳定性好而且灵敏度高、响应速度快,非常适用于的检测酒精浓度。
当其表面吸收着被测气体的分子式时,表面导电电子的比例就会发生跳变,从而其表面电阻会随着被测气体的浓度变化而变化。
这种变化是可逆的,所以可以重复使用。
2.2.2 酒精传感器MQ-3的特点
1、具有双路信号输出(模拟量输出及TTL电平输出);
2、具有信号输出指示;
3、模拟量输出0~5V电压,浓度与电压成正比,即浓度高电压高;
4、TTL有效信号的输出为低电平;
5、使用寿命长,稳定性较强;
6、对乙醇蒸汽具有很高的灵敏度和良好的选择性;
7、简单的驱动回路;
8、具有快速的响应恢复特性[3]。
2.2.3 酒精传感器MQ-3的应用
用于车辆驾驶人员及其他饮酒过后严禁工作人员的现场检测;也用于其他场所乙醇蒸汽的检测。
2.2.4 酒精浓度传感器测试原理
图2-2 MQ3标准回路
MQ-3型气敏传感器共有6个针状引脚,其中提供加热电流的有两个引脚,剩下的4个引脚用作信号取出。
在所用的电路图中,传感器A的2个引脚、B的的2个引脚各自将两个引脚并接在一起,相当于A,B只有1个引脚,然后将这两个引脚与外电路相连。
为了更精确的测定酒精浓度,可以采取预热传感器的方法。
传感器的标准回路(如图2-2所示)由加热回路和信号输出回路两部分组成。
其中信号输出回路用于传感器表面电阻值变化的显示。
传感器的表面电阻RS的变化,是由于与其串联的负载电阻RL上的有效电压信号VRL输出的结果。
负载电阻RL可调为0.5-200k。
加热电压Uh为5V[4]。
由于没有酒精传感器MQ3,我根据灵敏度曲线图,推导出如图2-3所示的酒精浓度与电压的关系图。
图2-3 酒精浓度与输出电压的关系
2.3 模数转换
在单片机应用中,经常处理一些连续变化的物理量,例如电流、电压等,这些连续变化的物理量通常称为模拟量。
然而计算机只能对数字量(如二进制数)进行各种运算,因此对于模拟量必须转化为数字量后才能送给CPU处理,通常用到的有模数转化器(A/D),它可以很好的满足单片机应用的要求,得到广泛使用。
有了这种A/D转换,我们可以很好地将各种传感器中的模拟电量转化为数字电量,并且不同型号的A/D转换器都具有不同的特点,可以根据实验要求选取最准确最方便的模数转换器进行实验。
在本设计中选取的模数转换器是ADC0832。
2.3.1 ADC0832芯片介绍
由于本设计传感器输出的为模拟信号,因此需要采用A/D转换器将模拟信号转换成数字信号。
根据设计要求,A/D转换器的精度为2.5%,因此选择8位的串行A/D转换器,它具有体积小,引脚少等特点,并取得广泛应用。
本文将采用的模数转换器为ADC0832转换芯片,它可满足一般的转换需求,并具有8位分辨率,最高分辨能够达256,符合使用要求[5]。
芯片转换时间仅为32μS,据有双数据输出可作为数据校验,以减少数据误差,转换速度快且稳定性能强。
独立的芯片使能输入,使多器件挂接和处理器控制变的更加方便。
通过DI数据输入端,可以轻易的实现通道功能的选择。
ADC0832引脚如图2-4所示。
ADC0832具有以下特点:
●8位分辨率;
●双通道A/D转换;
●输入和输出电平与TTL/CMOS相兼容;
●供电电压为5V,0~5V之间的输入电压;
●工作频率为250KHZ,转换时间为32μs;
●一般功耗仅为15mW;
●8P、14P—DIP(双列直插)、PICC多种封装;
图2-4 ADC0832引脚图
芯片接口说明:
●CS:
具有低电平有效的片选信号输入线;
●CH:
具有低电平有效的片选信号输入线;
●GND:
接地端;
●DI:
数据输入线,TLL电平。
;
●DO:
转换数据输出端;
●CLK:
时钟信号端;
●VCC/REF:
既是电源也是基准输入端。
一般情况下,ADC0832与单片机的接口数据线有CS、CLK、DO、DI四条,并且在设计电路的过程中通常会将DO和DI并联在一根数据线上,这是因为DO端和DI端与单片机接口是双向的且在通信时不同时有效。
2.3.2 A/D转换器接口电路的设计
根据系统要求,所设计的酒精浓度检测仪的检测精度为2.5%,所以该系统选择8位的A/D转换器。
又考虑到系统的接口问题,设计中为了节约数据接口,采用了8位的串行A/D转换器ADC0832。
在本设计中,因为只用一路模拟量输入,同时用单片机的两个端口分别控制DO和DI。
ADC0832与单片机的接口电路如图2-5所示。
图2-5 ADC0832与单片机的接口电路
2.4 单片机工作状态及时钟振荡电路
2.4.1 单片机AT89C52的介绍
AT89C52是一种CMOS8位单片机,具有低电压和高性能的优势,最早由美国ATMEL公司生产,其芯片主要包含两大部分,分别为8K字节可反复擦写的只读存储器(PEROM)和256字节的随机存取数据存储器(RAM)[6]。
AT89C52芯片上有32个引脚为外部双向输入/输出(I/O)端口,其中包含3个16位可编程定时计数器,2个外部中断入口,2个全双工串行通信口,2个读写口线。
AT89C52只可按照常规方法进行编程,而不可在线编程,这致使在应用中产生很多不便之处。
2.4.2 主要性能参数
AT89C52引脚如图2-6所示:
•与MCS-51产品指令和引脚完全兼容;
•1000次擦写周期;
•8k字节可重擦写Flash闪速存储器;
•32个可编程I/O口线;
•全静态操作:
0Hz-24MHz;
•256*8字节内部RAM;
•可编程串行UART通道;
•8个中断源;
•3个16位定时/计数器;
•低功耗空闲和掉电模式。
图2-6 AT89C52引脚图
单片机是整个控制系统的核心部分,它负责键盘处理、数字信号处理以及声光报警。
相比于MCS-51单片机,52单片机具有完全的兼容性、优良的工作性能、灵活性的使用性以及较高的性价比,这使得这种CMOS8位的52单片机成为AT89系列单片机当前的最主流机型。
2.4.3 时钟振荡电路
AT89C52中有一个用于构成内部振荡器的高增益反相放大器,引脚XTAL1和XTAL2分别是该放大器的输入端和输出端。
这个放大器与作为反馈元件的片外石英晶体或陶瓷谐振器一起构成自激振荡器,振荡电路如图2-7所示。
图2-7 时钟振荡电路
由于外部时钟信号是通过一个二分频触发器后作为内部时钟信号的,所以对外部时钟信号的占空比没有特殊要求,但最小高电平持续时间和最大的低电平持续时间应符合产品技术条件的要求。
当用户将该系统作为测酒精浓度模块加入其它电路使用时,如有需要也可改用外部时钟。
2.5 键盘模块的选择
常用的非编码键盘有两种,一种是独立式键盘,另一种是行列式键盘。
独立式键盘电路虽然具有配置灵活性、结构简单性的特点,但因其每个按键都需占用一根I/O口线,因此只适用于按键较少时的应用。
行列式键盘一般采用锁存器和可编程并行I/O接口芯片组成,软/硬件结构复杂。
在本设计中共需要4个功能键,由于按键数量少,因此采用独立式键盘。
按键功能如下:
(1)功能键,用于设定浓度上下限;
(2)确定键,用于当做确定键并且确定后光标自动向右移;
(3)+1键,用于对当前设定位进行加1操作,如果设定位为9,则按+1键后设定位的值为0;
(4)-1键,对当前设定位进行减1操作,如果当前值为0,则按-1键后当前值仍为9。
本设计共有4个功能键,由于按键数量少,因此本系统中采用独立式键盘。
如图2-8为独立键盘与单片机的连接图:
图2-8 与单片机连接的独立式键盘
按键的作用:
在酒精浓度测试中,键盘用于控制酒精浓度的上下线,我们知道国家规定当血液中的酒精浓度小于20时,我们可以视为没有饮酒,属于正常驾驶;当血液中的酒精浓度大于20小于80时,我们可视为饮酒驾驶;当血液中的酒精浓度大于80时,我们可视为醉酒驾驶。
因此我们设置上下线以便我们可以很好的看出酒精浓度是否超标,并将上下线在液晶显示屏第二行显示。
2.6 液晶显示模块的选择
2.6.1 液晶显示的介绍
在单片机的应用系统中,一般都使用LED(发光二极管)和LCD(液晶显示器)来显示和监测单片机的运行情况以及运行中间的结果和状态等信息。
LED显示器具有主动发光、配置简单及使用寿命长等优点,但发光二极管显示器的耗电量大,不适合电池供电的设备,所以改为1602液晶显示器[7]。
LCD1602字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式LCD,目前常用LCD1602有16×1,16×2,20×2和40×2行等的液晶显示模块,模块组件内部主要由LCD显示屏、控制器、列驱动器和偏压产生电路构成。
按照本设计要求我们需要显示两行字符,因此选取的是16×2的LCD1602的型号。
1602液晶显示器一种点阵型的液晶模块,它主要是用来显示所需要的符号和字母以及数字等信息。
LCD1602的引脚图如下图2-9,LCD1602引脚功能表如下表2-1。
图2-9 LCD1602显示器的引脚图
表2-1 LCD1602引脚功能
LCD1602可以显示两行字符和数字,并且每行显示的内容最多为16个字符的液晶模块。
在酒精浓度测试中采用了LCD1602,可以更好地显示所需要的内容,第一排数据设为测试的结果,并显示酒精含量是否超标,第二排数据设为浓度上下限的一个标准[8]。
0x80-0x8F为显示第一行的地址,0xC0-0xCF为显示第二行的地址。
例如想要在第2行,第3个位置显示一个字符,那么地址码就是0xC2。
在编程过程中,通常编写一个函数确定在某行某个位置显示数据。
函数需要行参数(y),和列参数(x)来确定显示位置。
字符码与字符字模之间的转换关系如下表2-2所示:
表2-2 字符码与字符字模之间的转换关系
2.6.2 LCD1602初始化
操作时序:
关于E=H脉冲——开始时初始化E为0,然后置E为1,再清0。
读取状态字时,注意D7位,D7=1,禁止读写操作;D7=0,允许读写操作;所以对控制器每次进行读写操作前,必须进行读写检测。
(即后面的读忙子程序)操作指令如下图2-10
图2-10操作指令图
程序初始化:
LCD1602传输数据和指令用D0~D7口。
显示模式设置:
00111111[0x38]设置16×2显示,5×7点阵,8位数据接口(初始化);
LCD_1602初始化指令:
0x38 用于表示16*2的显示,接口为8位数据,5*7点阵;
0x01 清屏;
0x08 只开显示;
0x0e 开显示,显示光标,光标不闪烁;
0x0c 开显示,不显示光标;
0x06 地址加1指令,写入数据时将光标右移;
0x02 地址计数器AC=0;(此时地址为0x80)光标归原点,但是DDRAM中断内容不变;
0x18 光标和显示一起向左移动。
显示地址:
LCD1602内部RAM显示缓冲区地址的映射图,00~0F、40~4F分别对应LCD1602的上下两行的每一个字符,只要往对应的RAM地址写入要显示字符的ASCII代码,就可以显示出来。
地址显示如下图2-11所示。
图2-11地址显示
2.6.3 液晶显示器的设计
液晶显示引脚设计,如图2-12所示:
图2-12 LCD1602与单片机的连接图
通过这个显示系统的设计,我们可以很好的把我的所需要的数值清晰明了显示出来,并显示出是否酒驾,以便交警更好的、更方便的进行查酒驾工作。
2.7 声光报警
2.7.1 声光报警电路模块的选择
声光报警在日常生活中随处可见,也是在紧急报警中必不可少的一部分,这个系统避免了很多危害。
例如:
在锅炉房内二氧化碳过高时也会出现声光报警,有了这个系统,因为二氧化碳中毒的人们大大减少;还例如飞机、坦克、打印机等等在一定情况下,都具有声光报警的功能。
2.7.2 声光报警电路设计
为了使操作员不至于忽视而加强警觉,及时采取应对措施,本系统设计了声光报警电路。
在设计中选用9013驱动蜂鸣器,并且蜂鸣器选用的是电磁式有源一体/分体蜂鸣器,型号:
12095,操作电压设置为4V,如图2-13所示:
图2-13 声光报警电路
实现的功能:
由国家标准我们可以知道,当人体的酒精浓度小于20时,可视为没有饮酒,声光报警电路不作任何提醒,并在液晶显示器显示normal,当人体酒精浓度大于20小于80时为因酒驾驶,发光二极管灯亮并显示jiujia,当人体酒精浓度大于80时为醉驾,发光二极管发光、报警并显示zuijia。
2.8 复位电路设计
复位电路一般有两种方式:
一种为专用μP监控电路,另一种为RC复位电路。
专用μP监控电路实现简单,成本低,但复位可靠性相对较低;RC复位电路的成本高,但复位可靠性也高。
在复位要求高的电路中,一般都采用RC复位电路。
在本系统中采用的是RC复位电路。
一阶充放电路是RC复位电路最大的特点,如图2-14所示。
图2-14 RC复位电路
2.9 信号调理电路的设计
由于系统仿真设计中没有所需要的MQ-3传感器,考虑到传感器的工作原理是由传感器表面电阻RS的变化引起的,而RS的变化是通过与它串联的负载电阻RL上的有效电压信号VRL输出确定的,因此可以将传感器等效于RS与RL的串联分压得到RS电压的变化。
但是RS上的电压信号变化比较小,必须经过放大才能被检测到。
在选择放大器的同时考虑到有温漂、零点漂移、偏置电压以及共模信号等等的影响,所以本系统选择了如(图2-15)所示的带电桥的差分放大电路。
在图中运放选择的是轨到轨的运放,轨到轨输出放大器一般采用共射极或共源极输出电路[9]。
图2-15 带电桥的差分放大电路
根据酒精浓度的灵敏度曲线图推算出图中各浓度对应的电阻RS的值,在此差分放大电路中改变电阻RS的值。
选取RS,RL,R3,R5的电阻值相等,这样可以测得输出电压基本为0,当RS值选取算出的最小值时,测得输出电压基本等于桥臂两端的电压的2倍,因此选取放大倍数为2倍。
由于知道放大倍数的值根据此放大倍数
,在选取
,可以推算出R8的值。
根据RS对应的灵敏度曲线图中的酒精浓度值可以推算出RS对应的人体血液中的酒精浓度值,又由于改变RS的电阻值可以得到对应的电压值,因此可以得到输出电压与人体血液中的酒精浓度的对应关系。
编写程序时在根据人体血液中的酒精浓度与输出电压的对应关系图拟合为一直线,就可以得到测量的酒精浓度值。
3 控制软件的设计
3.1 主程序的设计
在这个系统中,主程序具有初始化系统和键盘扫描。
由于很多子程序可以直接在键盘扫描程序里面调用,所以主程序流程图设计比较简单。
主程序流程图如图3-1所示。
图3-1 主程序流程图
3.2 数据处理子程序的设计
在系统设计中,由于proteus仿真中没有需要的MQ-3传感器,仿真时根据MQ-3传感器的灵敏度曲线图可以得出传感器的敏感电阻RS与呼气酒精浓度的对应关系,呼出气体酒精浓度与人体血液中的酒精浓度的关系:
人体血液酒精浓度=呼气酒精浓度×210L,可以计算出人体血液中的酒精浓度。
同时根据改变差分放大电路中的电阻RS得到采样电压,这样就得到了采样电压与人体血液中的浓度的对应关系。
最后根据相应的计算公式得到所要的浓度值。
在设计过程中先要根据MQ-3酒精传感器的技术参数规格计算出传感器的表面电阻RS的值。
在计算时取R0=10K,根据MQ-3传感器的灵敏度图知此图为y轴为RS/R0与x轴为浓度的关系图,如图3-2所示[12]。
取图中对应的点如:
(0.1,2.3)、(0.22,1.7)、(0.3,1.4)、(0.4,1)……可以将两点间看成一条直线,对应的可以根据两点式计算出图中任意一点对应的电阻变化率,上面几点可以推算出对应的计算式为第一、第二两点间为。
化简得:
第二、第三两点间为:
化简得:
同理第三、第四两点对应的计算式为:
得到很多传感器电阻RS和酒精浓度的关系,再根据桥式差分放大电路改变电阻得到对应的输出电压。
在编写A/D转换程序的时候,将计算出来的电压与血液中的浓度对应关系如图3-3拟合成为一直线,拟合的直线见程序[10]。
数据处理的流程图如图3-4所示。
图3-2 灵敏度曲线图
图3-3 酒精浓度与电压的对应关系
图3-4 数据处理子程序流程图
3.3 A/D转换子程序的设计
在采样系统设计中,AD转换器的核心工作原理就是将采样所得的模拟信号转换为CPU可控制的数字信号。
本系统采用的是8位AD转换器ADC0832。
在编写软件的时候,只要严格按照ADC0832的芯片时序图编写程序就可以完成模拟信号到数字信号的转换[11]。
其时序图如图3-5所示,流程图如图3-6所示。
图3-5 ADC0832的时序功能图
流程图如图3-6所示:
图3-6 A/D转换子程序流程图
3.4 键盘处理与显示子程序的设计
本系统未采用中断,直接采用键盘扫描方式进行浓度上下限数值的设置,由于所用的按键个数少,确定键即要作为确定用又要作为右移用。
在程序的编写过程中多次用到1602的写命令、写数据则用到的命令[12]图如表3-1所示,时序图如图3-7所示,如图流程图如图3-8所示[13]。
表3-1 LCD1602常用操作指令
图3-7 1602液晶写操作时序图
图3-8 键盘处理子程序流程图
作用:
键盘用于控制酒精浓度的上下线,一共有四个按键分别为:
加键、减键、确定键和功能键,在调试按键同时并在液晶屏上显示。
经过加、减、确定、功能键来实现所需要的数据,并在液晶显示屏中通过表LCD1602常用操作指令来完成所需要的命令。
4 系统调试
4.1软件的调试
在本设计中,用的是keil51软件来编写C语言程序和初步编译调试程序。
在这个过程中主要解决的问题是代码的合法性及调试部分未涉及硬件的程序。
在Keil51下调试没有错误后用Proteus软件进行软硬件结合调试[14]。
英国LabcenterElectronics公司研发了ProteusISIS,该软件用于电路设计与实物仿真的软件。
该软件应用于Windows操作系统,集成了包括原理图编辑、印刷电路板(PCB)设计、电路仿真功能及自动布线在内的一个完整的电路组成与仿真,其具有特色的是电路仿真过程实现了交互化和可视化的优点。
通过ProteusISIS这个软件我们可以将没有实物的电路图进行实际操作,并可以出现想要的结果,用于检查编程是否正确,也可以应用于后续的实物焊接打个基础,ProteusISIS是一个方便、节约能源还能实现功能的软件[16]。
ProteusISIS是一种操作方便而又功能大的原理图编辑工具,用于绘制仿真图。
程序通过Keil51编译如图4-1所示。
图4-1 程序在Keil51环境下通过编译截图
用Proteus软件进行仿真时。
如果编写程序是用C语言编写的,则直接在Proteus仿真中添加.hex文件,单击确定完成添加文件,就可以进行仿真了[15]。
在proteus中把目标文件灌入单片机如图4-2,仿真结果如图4-3。
图4-2 在proteus中把目标文件灌入单片机
图4-3 仿真结果
通过ProteusISIS软件仿真,来模拟酒精浓度的测试。
仿真结果如上图4-3所示。
利用仿真ProteusISIS软件我们可以很好的将自己的设计在没有硬件的条件下准确、无误进行检验。
ProteusISIS的特点:
实现了单片机仿真和SPICE电路仿真的结合。
具有模拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统仿真、RS232动态仿真、I2C调试器、SPI调试器、键盘和LC