- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
酒精自动报警系统
单片机课程设计报告
——酒精自动报警系统
纪鹏飞 沈葭 刘孝彬
摘要:
该项目以ATmega16为核心微处理器,实时监测动态扫描显示周围环境中的酒精浓度,一旦超过阈值即蜂鸣器报警。预计可用于车载监控及仓库等有防火要求的地方。
关键字:
酒精,报警,实时显示。
前言:
随着我国经济的腾飞和社会的变革,汽车成为当代社会主要的交通工具,随之带来的酒后驾驶问题已成为造成交通事故最主要的原因。为了避免交通悲剧的发生,一种有效地提醒民众防止酒后驾驶的系统的出现就成了现实中的迫切要求。而本课题正是要利用单片机知识制作造福社会大众的“酒后驾驶自动报警系统”,这种系统可谓应运而生。
系统设计目的、用途以及功能:
正如前言所述,酒后驾驶问题日益成为当今社会的巨大问题,其所引起的交通事故比比皆是,正是基于对这种社会状况的担忧,我们选择了“酒后驾驶自动报警系统”这一课题。该系统安装在驾驶室内,对其周围的气体进行检测,一旦发现酒精浓度超过标准,就启动报警装置,提醒民众防止酒后驾驶,以最大限度地避免酒后驾驶可能给社会和个人造成的巨大损失。该系统的开发与应用不仅有利于培养我们大学生积极思考、勤于动手的能力,培养我们善于与他人合作的精神,而且造福于我们广大人民群众,对我国经济与社会的稳定起着不可忽略的作用。
三、系统设计所需资源:
MQ303A酒精传感器1个,AVR单片机芯片,ATmega16单片机实验板1个,印刷电路板一块,七段数码管4个,五号干电池一节,以及若干电感一个,104电容一个,蜂鸣器一个,5k欧电阻一个,360欧电阻8个。
成本:计约30元。
四、 系统设计原理与内容:
1、硬件设计思想和原理图
采用MQ303将酒精信号转换成敏感体电阻的变化,外接电源和负载电阻,把电阻变化转换成电压信号,利用Mega16单片机的模数转换功能采样电压变化,转换成酒精浓度用七段数码管显示出来,当达到预定报警浓度时,蜂鸣器报警。
2如何使用硬件单元
将MQ303预留引脚接电池,预热3秒以上。
接通单片机电源,七段数码管闪烁显示周围酒精浓度。
一旦酒精浓度超过阈值,蜂鸣器报警。
硬件原理图
2、软件设计思想、流程与功能
1端口初始化部分
PORTA用于传感器信号输入和蜂鸣器输出;
PORTB用于控制LED显示;
PORTC用于LED位选。
2传感器采集部分:
采用ADC差分输入,因为传感器输出电压可以达到0-5v,单片机可以直接处理,故使用1倍增益。
3 ADC转换部分:
使用7.3728M晶振,32分频,T0比较匹配中断,定时2ms,转换结果右对齐。
4 七段数码管显示部分
动态扫描显示,间隔2ms。
全部程序
编译环境Icc avr
//ICC-AVR application builder : 2008-5-29 21:45:59
// Target : M16
// Crystal: 7.3728Mhz
#include iom16v.h
#include macros.h
flash unsigned char led_7[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
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;
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;
}
//ADC initialize
// Conversion time: 112uS
void adc_init(void)
{
ADCSR = 0x00; //disable adc
ADMUX = 0x50; //select adc avcc
ACSR = 0x80;
SFIOR=0x1F;
SFIOR|=0x60;
ADCSR = 0xAD;
}
void density_dis_buff()
{
unsigned char i;
for(i=0;i=3;i++)
{
d
文档评论(0)