【Proteus仿真】【Arduino单片机】汽车尾气检测报警系统

文章目录

  • 一、功能简介
  • 二、软件设计
  • 三、实验现象
  • 联系作者


一、功能简介

本项目使用Proteus8仿真Arduino单片机控制器,使用按键、LCD1602液晶、蜂鸣器模块、CO、NOx、HC和PM2.5气体传感器等。

主要功能:
系统运行后,LCD1602显示CO、NOx、HC和PM2.5气体浓度检测值,可通过按键K3进入阈值设置模式,K1和K2调节阈值,K4键确定并返回主界面。
当检测值高于阈值,则蜂鸣器报警,并且相应指示灯点亮。


二、软件设计

/*
作者:嗨小易(QQ技术交流群:570487280)*///系统数据显示
void sys_data_show(void)
{u8 buf[5];while(1){//正常模式显示if(sys_ctrl.mode==0){//co显示buf[0]=sys_ctrl.co/100+0x30;buf[1]='.';buf[2]=sys_ctrl.co%100/10+0x30;buf[3]=sys_ctrl.co%100%10+0x30;buf[4]='\0';lcd1602_show_string(3,0,buf);//nox显示buf[0]=sys_ctrl.nox/100+0x30;buf[1]='.';buf[2]=sys_ctrl.nox%100/10+0x30;buf[3]=sys_ctrl.nox%100%10+0x30;buf[4]='\0';lcd1602_show_string(12,0,buf);//hc显示buf[0]=sys_ctrl.hc/100+0x30;buf[1]='.';buf[2]=sys_ctrl.hc%100/10+0x30;buf[3]=sys_ctrl.hc%100%10+0x30;buf[4]='\0';lcd1602_show_string(3,1,buf);//pm25显示buf[0]=sys_ctrl.pm25/100+0x30;buf[1]='.';buf[2]=sys_ctrl.pm25%100/10+0x30;buf[3]=sys_ctrl.pm25%100%10+0x30;buf[4]='\0';lcd1602_show_string(12,1,buf);}//阈值设置显示else{//co显示buf[0]=sys_ctrl.threshold[0]/100+0x30;buf[1]='.';buf[2]=sys_ctrl.threshold[0]%100/10+0x30;buf[3]=sys_ctrl.threshold[0]%100%10+0x30;buf[4]='\0';lcd1602_show_string(3,0,buf);//nox显示buf[0]=sys_ctrl.threshold[1]/100+0x30;buf[1]='.';buf[2]=sys_ctrl.threshold[1]%100/10+0x30;buf[3]=sys_ctrl.threshold[1]%100%10+0x30;buf[4]='\0';lcd1602_show_string(12,0,buf);//hc显示buf[0]=sys_ctrl.threshold[2]/100+0x30;buf[1]='.';buf[2]=sys_ctrl.threshold[2]%100/10+0x30;buf[3]=sys_ctrl.threshold[2]%100%10+0x30;buf[4]='\0';lcd1602_show_string(3,1,buf);//pm25显示buf[0]=sys_ctrl.threshold[3]/100+0x30;buf[1]='.';buf[2]=sys_ctrl.threshold[3]%100/10+0x30;buf[3]=sys_ctrl.threshold[3]%100%10+0x30;buf[4]='\0';lcd1602_show_string(12,1,buf);switch(sys_ctrl.mode){case 1:lcd1602_show_string(3,0,"    ");delay_ms(100);buf[0]=sys_ctrl.threshold[0]/100+0x30;buf[1]='.';buf[2]=sys_ctrl.threshold[0]%100/10+0x30;buf[3]=sys_ctrl.threshold[0]%100%10+0x30;buf[4]='\0';lcd1602_show_string(3,0,buf);break;case 2:lcd1602_show_string(12,0,"    ");delay_ms(100);buf[0]=sys_ctrl.threshold[1]/100+0x30;buf[1]='.';buf[2]=sys_ctrl.threshold[1]%100/10+0x30;buf[3]=sys_ctrl.threshold[1]%100%10+0x30;buf[4]='\0';lcd1602_show_string(12,0,buf);break;case 3:lcd1602_show_string(3,1,"    ");delay_ms(100);buf[0]=sys_ctrl.threshold[2]/100+0x30;buf[1]='.';buf[2]=sys_ctrl.threshold[2]%100/10+0x30;buf[3]=sys_ctrl.threshold[2]%100%10+0x30;buf[4]='\0';lcd1602_show_string(3,1,buf);break;case 4:lcd1602_show_string(12,1,"    ");delay_ms(100);buf[0]=sys_ctrl.threshold[3]/100+0x30;buf[1]='.';buf[2]=sys_ctrl.threshold[3]%100/10+0x30;buf[3]=sys_ctrl.threshold[3]%100%10+0x30;buf[4]='\0';lcd1602_show_string(12,1,buf);break;}}break;			}
}//系统数据设置
void sys_data_set(void)
{u8 key=0;key=key_scan(0);//模式设置if(key==KEY3_PRESS){sys_ctrl.mode++;if(sys_ctrl.mode>4)sys_ctrl.mode=1;}if(sys_ctrl.mode!=0){//在设置模式下,加if(key==KEY1_PRESS){	switch(sys_ctrl.mode){case 1://co sys_ctrl.threshold[0]++;if(sys_ctrl.threshold[0]>100)sys_ctrl.threshold[0]=0;break;case 2://nox sys_ctrl.threshold[1]++;if(sys_ctrl.threshold[1]>100)sys_ctrl.threshold[1]=0;break;case 3://hc sys_ctrl.threshold[2]++;if(sys_ctrl.threshold[2]>100)sys_ctrl.threshold[2]=0;break;case 4://pm25 sys_ctrl.threshold[3]++;if(sys_ctrl.threshold[3]>100)sys_ctrl.threshold[3]=0;break;}				}//在设置模式下,减else if(key==KEY2_PRESS){switch(sys_ctrl.mode){case 1://co sys_ctrl.threshold[0]--;if(sys_ctrl.threshold[0]<0)sys_ctrl.threshold[0]=100;break;case 2://nox sys_ctrl.threshold[1]--;if(sys_ctrl.threshold[1]<0)sys_ctrl.threshold[1]=100;break;case 3://hc sys_ctrl.threshold[2]--;if(sys_ctrl.threshold[2]<0)sys_ctrl.threshold[2]=100;break;case 4://pm25 sys_ctrl.threshold[3]--;if(sys_ctrl.threshold[3]<0)sys_ctrl.threshold[3]=100;break;}}//确定else if(key==KEY4_PRESS){sys_ctrl.mode=0;		}	}
}//系统功能控制
void sys_fun_ctrl(void)
{//正常工作模式下if(sys_ctrl.mode==0){//如果CO浓度超限,报警,指示灯亮if(sys_ctrl.co>sys_ctrl.threshold[0]){LED_CO=0;beep_alarm(1,1000);}else{LED_CO=1;	}//如果nox浓度超限,报警,指示灯亮if(sys_ctrl.nox>sys_ctrl.threshold[1]){LED_NOX=0;beep_alarm(1,1000);}else{LED_NOX=1;	}//如果hc浓度超限,报警,指示灯亮if(sys_ctrl.hc>sys_ctrl.threshold[2]){LED_HC=0;beep_alarm(1,1000);}else{LED_HC=1;	}//如果pm25浓度超限,报警,指示灯亮if(sys_ctrl.pm25>sys_ctrl.threshold[3]){LED_PM25=0;beep_alarm(1,1000);}else{LED_PM25=1;	}				}		
}//应用控制系统
void appdemo_show(void)
{sys_parm_init();//系统参数初始化lcd1602_init();sys_open_show();//系统开机界面显示while(1){	sys_data_get();//系统数据获取sys_data_show();//系统数据显示sys_data_set();//系统数据设置sys_fun_ctrl();//系统功能控制}
}

三、实验现象

B站演示视频:https://space.bilibili.com/444388619
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

联系作者

视频地址:https://space.bilibili.com/444388619/video
专注于51单片机、STM32、国产32、DSP、Proteus、arduino、ESP32、物联网软件开发,PCB设计,视频分享,技术交流。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/316413.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

wps将姓名处理格式为:姓**

1.打开wps&#xff0c;在要处理数据右侧一个单元格 输入公式&#xff1a;LEFT(A1,1)&"**"&#xff0c;然后回车 2.按住ctrl和处理好的数据的右下角小方框&#xff0c;往下拖动即可生成格式为&#xff1a;姓** 格式的数据 3.复制生成的数据&#xff0c;右键选择 “…

Prototype原型模式(对象创建)

原型模式&#xff1a;Prototype 链接&#xff1a;原型模式实例代码 注解 模式定义 使用原型实例指定创建对象的种类&#xff0c;然后通过拷贝这些原型来创建新的对象。 ——《设计模式》GoF 目的 在软件系统中&#xff0c;经常面临这“某些结构复杂的对象”的创建工作&am…

一类医疗器械需要做EMC和安规吗?

摘要: 在医疗器械领域&#xff0c;EMC&#xff08;电磁兼容性&#xff09;和安规&#xff08;安全规格&#xff09;测试是非常重要的。医疗器械需要符合电磁兼容性标准&#xff0c;以确保其在电磁环境下能够正常运行而不会受到外部电磁干扰的影响&#xff0c;也不会干扰其他设备…

如何用SPSS对数据进行标准化处理?

下述回答节选自《SPSS统计学基础与实证研究应用精解》张甜 杨维忠 清华大学出版社 2023年。 打开相关数据&#xff0c;选择“分析”→“描述统计”→“描述”命令&#xff0c;弹出“描述”对话框。 选择进行描述分析的变量。在“描述”对话框的左侧列表框中选择“市盈率”&…

【算法】和为K的连续子数组

牛客链接&#xff1a;https://www.nowcoder.com/practice/704c8388a82e42e58b7f5751ec943a11?tpId196&&tqId37127&rp1&ru/ta/job-code-total&qru/ta/job-code-total/question-ranking 使用【前缀法】&#xff0c;把所有连续和合索引存进哈希表&#xff0c…

【Java】SpringBoot整合xxl-job学习使用详解

文章目录 介绍作用如何使用下载项目中央仓库地址环境调度中心初始化“调度数据库”配置部署“调度中心”部署项目调度中心集群&#xff08;可选&#xff09;其他&#xff1a;Docker 镜像方式搭建调度中心配置部署“执行器项目” 执行器maven依赖执行器配置执行器组件配置执行器…

【快速全面掌握 WAMPServer】13.PHP调试麻烦?请 xDebug 来帮忙!

网管小贾 / sysadm.cc 对于能否快速高效地编写程序&#xff0c;代码调试水平是多个重要指标之一。 按照这个逻辑&#xff0c;自然而然如何高效地调试代码也就成了一件非常重要而不得不让众多程序员面对的课题了。 其他编程语言的调试可能还好些&#xff0c;可是有过 PHP 程序…

蓝牙物联网漏洞攻击的几种方式?

在物联网日益普及的今天&#xff0c;蓝牙技术的广泛应用为我们的生活带来了诸多便利。然而&#xff0c;正如一枚硬币有两面&#xff0c;蓝牙技术的普及也带来了新的安全挑战。近日&#xff0c;一项关于蓝牙物联网漏洞攻击的研究引起了广泛关注。这项研究揭示了蓝牙物联网所面临…

微服务-理论(CAP,一致性协议)

CAP理论 关于CAP理论的介绍可以直接看这篇文章 CAP分别是什么&#xff1f; 一致性&#xff08;Consistency 一致性包括强一致性&#xff0c;弱一致性&#xff0c;最终一致性。 一致性其实是指数据的一致性&#xff0c;为什么数据会不一致呢&#xff1f; 如上面这张图&…

金色麦芒的2023

2023年即将过去&#xff0c;回首这一年&#xff0c;我深感自己在技术和职业生涯中取得了巨大的进步。这一年里&#xff0c;我不仅在技术层面有了更深入的掌握&#xff0c;也在个人成长和职业规划上有了更明确的方向。 首先&#xff0c;在技术层面&#xff0c;我今年最大的收获是…

Nginx多ip部署多站点

目录 1.修改网卡配置信息 2.修改主要配置文件nginx.conf 1.修改网卡配置信息 1)来到网卡配置文件存放目录下 cd /etc/sysconfig/network-scripts/ 2)对 ifcfg-ens33 文件进行配置修改前先进行备份 cp ifcfg-ens33 ifcfg-ens33.default 3)先修改成最小配置&#xff0c;使用 d…

原生JS做别踩白块游戏

思路 创建初始一个按钮并为他添加点击监听开始创建随机方块&#xff0c;并样式_box.offsetTop speed px结合setInterval使得方块不断下移创建和删除方块的原则&#xff1a;box.offsetTop>0&#xff08;可视区上部没有方块了&#xff09;时候需要创建一行方块&#xff0c;…