设计要求
(1)设计一款基于51单片机的酒精检测仪;
(2)MQ-3传感器检测被测气体中酒精含量,单片机进行数据分析处理;
(3)LCD1602显示酒精浓度测量值和报警阈值;
(4)当测量值高于设定阈值后,能够发出声光报警;
(5)用户可通过按键自定义报警阈值大小;
(6)完成仿真搭建、原理图绘制以及C程序编写。
系统概述
酒精检测仪硬件部分主要由单片机控制系统、MQ-3酒精传感器、ADC0832模数转换器、LCD1602液晶显示器、声光报警电路、按键电路和5V供电电路组成,结构如下图所示。
软件部分则由C语言编程实现。
工作原理为:MQ-3传感器实时检测被测气体中的酒精浓度,并输出模拟信号到ADC0832模数转换器,数据经A/D转换后,传递到单片机完成分析处理,最后通过LCD1602液晶进行显示。
当测量的酒精浓度高于阈值时,蜂鸣器和LED指示灯发出声光报警。阈值可以通过按键进行设置。
Proteus仿真电路
原理图
仿真结果分析
MQ-3传感器是将被测气体中酒精浓度转换为0~5V的模拟电压信号输出,且浓度越高输出电压值越大。
由于Proteus软件没有MQ-3传感器模型,因此使用滑动变阻器RV3来替代,通过改变滑动变阻器的阻值,来改变输出电压值的大小,进而模拟酒精浓度的变化。
在原理图绘制和实物制作中,采用的是真实的MQ-3酒精传感器接线。
仿真验证过程如下:打开“酒精检测仪.DSN”仿真文件,双击单片机,在弹出的Edit Component对话框中点击黄色小文件夹图标,加载Alcohol.hex文件,然后运行仿真。
仿真运行效果如下图所示,LCD1602显示器第一行显示被测气体中酒精浓度为18mg/100mL,ALC为Alcohol的缩写;
显示器第二行显示设定的报警阈值为25mg/100mL,测量值低于阈值,绿色正常LED灯闪烁。
调节滑动变阻器RV3上下两个红色小箭头,模拟被测气体酒精浓度的改变。
比如,调节RV3,模拟测量值为34mg/100mL,大于设定阈值25mg/100mL,此时蜂鸣器发声,红色酒驾LED灯闪烁,以作提醒。
用户可以通过按键自定义报警阈值大小,操作步骤为:
点击“设置”键,LCD阈值光标闪烁,进入阈值设定模式,然后点击“加”/“减”键改变阈值大小,完成设定后,再次点击“设置”键,即可退出阈值设定模式。
例如,设定报警阈值为56mg/100mL,结果如下所示。
综上所述,酒精检测仪仿真运行效果满足设计要求。
部分C代码
void main() //主函数
{
Init1602(); //初始化液晶函数
init(); //初始化定时器
init_eeprom(); //开始初始化保存的数据
while(1) //进入循环
{
for(m=0;m<50;m++) //读50次AD值
sum = adc0832(0)+sum; //读到的AD值,将读到的数据累加到sum
temp=sum/50; //跳出上面的for循环后,将累加的总数除以50得到平均值temp
if (temp > K_ZERO)
temp = temp - K_ZERO; //首先减去零点漂移,一般是130mV
else
temp= 0;
sum=0; //平均值计算完成后,将总数清零
if(set==0) //set为0,说明现在不是设置状态
Display_1602(temp,WARNING); //显示AD数值和报警值
if(temp<WARNING&&set==0) //AD数值小于报警值
{
flag=0; //关闭报警
}
else if(temp>WARNING&&set==0)//AD值大于报警值
{
flag=1; //打开报警
}
Key(); //调用按键函数
}
}
void Key() //按键函数
{
if(Key1==0) //设置键按下
资源内容
(1)基于51单片机和MQ-3传感器的酒精检测仪毕业论文;
(2)Proteus仿真文件;
(3)Keil C程序;
(4)原理图文件;
(5)Visio流程图;
(6)硬件资料;
(7)元器件清单;
资源截图
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。