为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

基于AVR单片机的便携式醉酒驾驶仪器设计——包含原理图和完整代码

2020-03-08 26页 doc 88KB 1阅读

用户头像

is_682974

暂无简介

举报
基于AVR单片机的便携式醉酒驾驶仪器设计——包含原理图和完整代码基于AVR单片机的酒精传感器的设计 ——包含原理图和完整代码 摘要 该设计作品基于ATmega16单片机,利用酒精传感器,实现空气周围环境中的酒精浓度实时测量,通过LED数码管实时显示,一旦超过阈值即蜂鸣器报警,可用于车载监控及仓库等有防火要求的地方。 关键字 ATmega16单片机  酒精传感器  自动报警 Abstract The design works based on single-chip microcomputer, using alcohol ATmega16 sensor, realize the alco...
基于AVR单片机的便携式醉酒驾驶仪器设计——包含原理图和完整代码
基于AVR单片机的酒精传感器的 ——包含原理图和完整代码 摘要 该设计作品基于ATmega16单片机,利用酒精传感器,实现空气周围环境中的酒精浓度实时测量,通过LED数码管实时显示,一旦超过阈值即蜂鸣器报警,可用于车载监控及仓库等有防火要求的地方。 关键字 ATmega16单片机  酒精传感器  自动报警 Abstract The design works based on single-chip microcomputer, using alcohol ATmega16 sensor, realize the alcohol concentration of air environment through real-time measuring, LED digital display, once more real-time tube threshold, which can be used for car buzzer alarm monitor and warehouse fire. 目录 1 项目要求     4 2.项目的硬件原理和内容     4 2.1 硬件设计思想和原理图    4 2.2 如何使用硬件单元    4 2.3 硬件电路图    6 3.软件设计思想和内容     8 3.1端口初始化     8 3.2数据采集及处理流程    8 3.3 LED显示    9 3.4蜂鸣器报警    10 4.测试过程处理    11 4.1硬件调试    11 4.2仿真调试    11 4.3综合调试    12 4.4测试过程问题    13 4.5测试结论    14 5. 系统设计所需资源    14 6. 项目分工    14 7. 系统设计总结    14 7.1团队总结    14 7.2个人心得    15 参考文献      18 附录A 酒精传感器参数     18 附录B 系统总程序代码     20 附录C 实物图     23 一、 项目要求: 便携式酒后驾车测试仪 酒后驾车易出事故,但判定驾驶员是否喝酒过量带有较大的主观因素。请你利用学过的知识,设计一台便携式、交通警使用的酒后驾车测试仪。 总体思路是: 让被怀疑酒后驾车的驾驶员对准探头(内部装有多种传感器)呼三口气,用一排发光二极管指示呼气量的大小(呼气量越大,点亮的LED越多)。当呼气量达到允许值之后,“呼气气确认”LED亮,精酒蒸气含量数码管指示出三次呼气的酒精蒸气含量的平均百分比。如果呼气量不够,则提示重新呼气,当酒精含量超标时,LED闪亮,蜂鸣器发出“嘀??嘀??”声。 二、 项目的硬件设计原理与内容 1、 硬件设计思想和原理图: 采用MQ303将酒精信号转换成敏感体电阻的变化,外接电源和负载电阻,把电阻变化转换成电压信号,利用Mega16单片机的模数转换功能采样电压变化,转换成酒精浓度用七段数码管显示出来,当达到预定报警浓度时,蜂鸣器报警,并接通开关时,Led灯不再显示。 硬件设计时,考虑酒精浓度是由传感器把非电量转换为电量,传感器输出的是0-5伏的电压值且电压值稳定,外部干扰小等。因此,可以直接把传感器输出电压值送入单片机进行处理。此外,还需接入LED数码管显示,声光报警电路等。其总体框图右图所示: 2、 如何使用硬件单元: 将MQ303预留引脚接电源,预热3秒以上。接通单片机电源,七段数码管闪烁显示周围酒精浓度。一旦酒精浓度超过阈值,蜂鸣器报警。与门和非门以及开关组成打火系统,蜂鸣器信号和开关决定是否导通。开关模拟打火系统电源开关,接通开关时,Led灯亮表示打火成功,反之则表示打火系统被强行制止。 单片机选择:ATmega16单片机是一款功能十分强大,集成度非常高的数字处理系统。它集成了ADC与DAC的模块,因而此作品设计中可以直接将MQ3型酒精气敏传感器的探测信号输入单片机中,然后在单片机内进行A/D模数转换,数据处理。其引脚图如下图: 下图1为选择4位一体共阳极数码管,型号为SR410561k。该数码管具有工作稳定,亮度高,反应灵敏,质量可靠等特点。 图表 1 图二为蜂鸣器报警部分: 图表 2 图三为传感器回路图: 图表 3 3、 硬件原理图: PCB图: 三、 软件设计思想和内容 软件主要包括数据采集、数据处理、显示、声光报警等子程序。仪器开机后经初预热阶段后测量结果。测量时数据采集程序把数据送入到AVRmega16单片机中的A/D转换器,进行A/D转换。由数据处理程序完成数据间的转换和数制间转换。当测量数据超过阈值时报警子程序启动,发出声光报警。软件主程序流程图如右图所示: 1、端口初始化 1、 PORTA用于传感器信号输入和蜂鸣器输出; PORTB用于控制LED显示; PORTC用于LED位选。 2传感器采集部分: 采用ADC差分输入,因为传感器输出电压可以达到0-5v,单片机可以直接处理,故使用1倍增益。 3 ADC转换部分: 使用7.3728M晶振,32分频,T0比较匹配中断,定时2ms,转换结果右对齐。 4 七段数码管显示部分 动态扫描显示,间隔2ms。     2、数据采集及处理子程序流程: 图表 4 数据采集及处理函数关系图如下: 图表 5 4、 LED显示子程序: 本作品显示为LED显示。显示子程序分为预热阶段显示程序,测量结果显示程序。流程如图6: 图表 6 5、蜂鸣器报警子程序:传感器输入值经A/D转换后,调用比较程序,再经过数据处理后显示的测量值与程序中设定的报警阈值比较,小于等于阈值则继续执行显示程序,大于阈值则将单片机PA5端口输出高电平进行报警。 大于阈值 图表 7 四、 测试过程处理 调试分析包括硬件调试分析和软件调试分析及软、硬件联调。由于硬件调试分析和软件调试分析是独立进行的,所以可以先调硬件再调软件。在调试中找出错误、缺陷,判断各种故障,并做出软硬件的修改,直至设计作品能够正确体现其功能。 1、硬件调试 硬件调试包括传感器电路、显示电路、单片机外围电路、报警电路等。下面主要介绍传感器电路、报警电路的调试。 首先把MQ303A酒精传感器,接1.5v左右电压上由于电压预热3秒以上,酒精传感器里已经集成了放大电路,而用万用表测量可证实传感器输入电路中输出是一稳定的0-5V的电压信号,符合单片机的输入条件,因此此信号可以直接接人单片机进行A/D转换而不需要放大、滤波等。 其次对于声光报警电路的调试分为蜂鸣器和LED的调试。经试验可知蜂鸣器在高电平时正常工作,LED为共阳极。 2、仿真调试 软件调试为利用ICCAVR,CVAVR,AVR Studio软件进行模块化调试。调试过程中观察各个变量的变化,查找所写程序的错误,并改正。 ADC 转换结果 转换结束后(ADIF 为高),转换结果被存入ADC 结果寄存器(ADCL, ADCH)。 单次转换的结果如下: 1024是2的10次方,因为转换结果是10位的 仿真电路图: 报警时: 不报警时: 3、综合调试 利用AVR Studio软件和硬件电路板进行软硬件联合仿真,首先将软件程序下载到AVR Studio中,然后运行一下,确认无误后,再把程序写入硬件之中。对调试过程中出现的错误要仔细分析,然后不断修正,直至达到理想效果为止。在软硬件联调时,根据在程序中设定的阈值,用酒精渐渐接近传感器来模仿酒精浓度的增大,显示结果良好,报警结果十分精确,在到达阈值时能够准确发出报警声。 4、测试过程问题分析: 1、 PCB板多处电路不通,只能在开发板上调试 2、 MQ-3传感器的输入和输出非线性,因此计算它的浓度和输出电压的值的关系非常困难,我们只能测出数据,然后折合为几条曲线,通过编程控制输出,由于硬件参数存在的误差,开始我们的输出数据不理想,通过多次调试,逐渐把它的输入和输出值接近真实值。 3、 该开发只能在100-1000这个值内进行工作,由于受加热温度的影响,加热时间对输出有比较大影响,所以超出这个范围,我们都强制它等于0,这个范围已经可以够我们进行酒后驾车的测试了,避免了超出输出范围,很难进行数据的处理这个方面的设计。 4、 酒精传感器的电阻值随时间,温度和酒精浓度变化较大,这是我们不能进行定量计算的难点。 5、 用酒靠近传感器进行测量,有相应的数据输出,但撤去酒精的时候,数值只能缓慢地下降至低值,可能是因为酒精残留的缘故。所以酒精传感器不能进行快速的多次测量。这是我们设计的问题。 5  测试结论: 1、在距离一定距离内对着传感器吹浓度56%的白酒,成功报警。 2、指标参数的分析 MQ303说明上说在0.9-1.0v下预热时间大于48小时,在2.2±0.2V下预热5~10秒钟, 实测不需这么长的时间,也不需2v以上的电压,5号干电池提供1.5v左右电压预热3秒以上即可。 五、 系统设计所需资源: MQ303A酒精传感器1个,AVR单片机芯片,ATmega16单片机实验板1个,印刷电路板一块,七段数码管4个,Led灯一个,15mh电感一个,104电容一个,蜂鸣器一个,10k欧电阻两个,360欧电阻8个,插线若干,与门和非门各一个等等。 参考资料: 【1】 康华光. 《电子技术基础》. 高等教育出版社,2006 第五版 【2】马潮《avr单片机嵌入式系统原理与应用实践》清华出版社 2005 第一版 附录A、 1、酒精传感器参数: 符号 参数 技术条件 备注 V H 加热电压 0.9V ± 0.1V AC or DC V C 回路电压 ≤ 6 V DC R L 负载电阻 可调 P S < 10 mW R H 加热电阻 4.5Ω?±?0.5 Ω 室温 IH 加热电流 120±20mA   PH 加热功率 ≤ 140 mW   PS 元件功率 ≤10 mW           B.环境条件 符号 参数 技术条件 备注 Tao 使用温度 -20 o C —+50 o C 推荐使用范围20ppm-1000ppm乙醇 Tas 储存温度 -20 o C —+70 o C RH 相对湿度 ≤ 95% RH (O2) 氧气浓度 21%±1%(条件) 不得小于 16% 氧气浓度会影响灵敏度         C. 灵敏度特性 型号 MQ303A 符号 参数名称 技术条件 备注 Rs 元件电阻 (4kΩ??to 400 kΩ) 在 洁净空气中 电阻比 (0.50 ±?0.15) Rs (300 ppm酒精) / Rs (100 ppm酒精) 标准测试条件: 温度: 20 o C ±?2 o C V C : 3.0 V ±?0.1 V DC 湿度: 65% ±?5% V H : 0.9 V ±0.?1 V DC R L : 可调 预热时间:大于48小时         3、酒精含量的判断标准: 呼气测试最简便。而血液中的酒精浓度与肺部呼出的气体酒精浓度有一定的比例:大约2200毫升呼气中酒精含量相当于1毫升血液中酒精含量,测出后者就可知道前者。 大量的统计研究结果表明,如果被测者深吸气后以中等力度呼气达三秒钟以上,这时呼出的气就是从肺部深处出来的气体。呼气中的酒精含量与血液中的酒精含量有如下关系: BAC(in mg/L) = BrAC(in mg/L) x 2200 上式中,BAC是血液酒精浓度的英文缩写,BrAC则是呼气酒精浓度的缩写,括号中的in mg/L表示以每升中多少毫克为单位。也就是说,以毫克/升为单位的血液酒精浓度在数值上相当于以毫克/升为单位的呼气酒精浓度乘上系数2200(由于各国的情况不同,在美国此系数采用2000,而欧洲很多国家采用2100)。基于此,目前全世界绝大多数国家都采用呼气酒精测试仪对驾驶人员进行现场检测,以确定被测量者体内酒精含量的多少。 关于吹管   酒精测试仪用的吹管是一个容易被忽视的问题。GA307-2001标准对吹管也作了规定。吹管虽小,但对保证检测精度非常重要。被测者口含吹管呼气,进入吹管的气体几乎全部是被测者呼出的气体。如果从一个喇叭口送入气体,被测者不接触喇叭口而对喇叭口吹气,根据流体力学的原理,气体流动时压力减小,这就把周围的空气一起带进仪器内(喷雾器就是根据这个原理制成的),相当于把呼气中的酒精浓度稀释了,检测到的酒精浓度就会比被测者实际的呼气酒精浓度低,这显然是不能容许的。另一个必须注意的是吹管一定要是单向性的,在吹气的时候才能进行检测,吸气时不能进行检测,因为吸气时吹管中的气体不来自人体,检测的结果自然不能反映人体内的酒精含量。在选择警用酒精测试仪时必须注意这个问题。 饮酒驾车和醉酒驾车,是按血液中不同酒精浓度区分。依标准,血液酒精浓度在0.2—0.8mg/ml(不含0.8)之间,属于酒后驾车,处暂扣一个月以上三个月以下驾驶证,并处200元以上500元以下罚款。血液酒精浓度在0.8mg/ml(含)以上时,属醉酒驾车。按照《道路交通安全法》,处十五日以下拘留和暂扣三个月以上六个月以下驾驶证,并处500元以上2000元以下罚款。 附录B、 系统总程序代码: //酒精传感器C代码,ICCAVR编译环境 //ICC-AVR application builder : 2010-4-16 // Target : M16 // Crystal: 7.3728Mhz #include #include flash unsigned char led7[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};//数码管字型0~9 flash unsigned char position[4]={0x01,0x02,0x04,0x08};//用于选通四个数码管显示用 unsigned char dis_buff[4]={0,0,0,0},posit;//对应个位,十位,百位,千位的相应的数值 int time_2ms_ok;//中断相应用到的变量 unsigned long int value;//AD转换的寄存器ADCH存放的结果,转换为10进制的值。 unsigned long int middle_1,middle_2,middle_3; unsigned long density;//转换的最终结果值,此值需要显示出来 void port_init(void)//端口初始化 { PORTA = 0x00; DDRA  = 0xF0; PORTB = 0x00; DDRB  = 0xFF; PORTC = 0x00; DDRC  = 0xFF; PORTD = 0x00; DDRD  = 0xFF; } void adc_init(void)//dac初始化 { ADCSR = 0x00; //disable adc ADMUX = 0x61; //select adc avcc  外部电源参考,数据左对齐; ACSR  = 0x80; SFIOR&=0x1F; SFIOR|=0x60; ADCSR = 0xAD; } void density_dis_buff()//此函数用于将density的个位,十位,百位,千位分开存放进数组dis_buff[i] { unsigned char i; for(i=0;i<=3;i++) { dis_buff[i]=density%10; density/=10; } } #pragma interrupt_handler adc_isr:iv_ADC  void adc_isr(void)//ADC转换 { float a,b;  value=ADCH; a=(float)value; b=a/256; if (b<0.1) density=((-0.12)*b+0.561)*2000; else if (b<0.15) density=((-0.16)*b+0.461)*2000; else if (b<0.2)  density=((-0.28)*b+0.321)*2000;//分段直线计算,计算值在200~1000ml/L内误差相对减少(已经转换为血液中的值),已经能实现检测酒后驾驶和醉酒驾驶。 else if (b<0.25) density=((-0.3)*b+0.2)*2000; else if (b<0.3) density=((-0.3)*b+0.18)*2000; else if (b<0.35) density=((-0.3)*b+0.15)*2000; else if (b<1.8) density=((-0.3)*b+0.15)*2000; else density=((-0.3)*b+0.2)*2000; //density=((-0.16)*b+0.125)*2000; density_dis_buff(density); } #pragma interrupt_handler time0_comp_isr:iv_TIM0_COMP void time0_comp_isr(void) { time_2ms_ok=1; } void init_devices(void) //系统的初始化 { //stop errant interrupts until set up CLI(); //关中断 port_init(); adc_init(); MCUCR = 0x00; GICR  = 0x00; TIMSK = 0x02; //timer interrupt sources SEI(); //开中断 //all peripherals are now initialized } void process()//数据的显示和处理 { unsigned char i,a,b,c; posit=0; for(i=0;i<4;i++){              PORTD = position[3-posit]; PORTB = led7[dis_buff[posit]];//循环在数码管实现动态显示 posit++; if (dis_buff[2]>=8||dis_buff[3]>=1)//当酒精浓度大于800ml/L的时候,蜂鸣器报警,led发光报警。 PORTA=0x20; else PORTA=0x00; for(a=0;a<2;a++) for(b=0;b<4;b++) for(c=0;c<220;c++);//实现延时功能,延时为1-10ms即可以让数码管动态显示 }        } void main(void) { init_devices(); TCCR0=0x0B; TCNT0=0x00; OCR0=0xE6; SREG|=0X80; while(1) { //if(time_2ms_ok){ process(); // time_2ms_ok=0; //} } } 附录C 实物图片:
/
本文档为【基于AVR单片机的便携式醉酒驾驶仪器设计——包含原理图和完整代码】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索