【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.mzph.cn/news/592520.shtml

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

相关文章

手机录屏没有声音?让你的录屏有声有色

“有人知道手机录屏怎么录声音吗&#xff1f;今天录制了一个小时的直播视频&#xff0c;后面查看的时候发现没有声音&#xff0c;真的非常崩溃&#xff0c;想问问大家有没有办法&#xff0c;解决这个问题。” 在手机录屏的过程中&#xff0c;有时候我们可能会面临录制视频没有…

Spring技术内幕笔记之IOC的实现

IOC容器的实现 依赖反转&#xff1a; 依赖对象的获得被反转了&#xff0c;于是依赖反转更名为&#xff1a;依赖注入。许多应用都是由两个或者多个类通过彼此的合作来实现业务逻辑的&#xff0c;这使得每个对象都需要与其合作的对象的引用&#xff0c;如果这个获取过程需要自身…

从0开始搭建清华ChatGLM3 6b大模型(Windows RTX4090版)

目录 1、硬件及软件说明 2、安装Anaconda 3、安装Git版本控制 ​4、安装pytorch驱动 5、安装ChatGLM3 1、硬件及软件说明 硬件&#xff1a;主要是GPU卡内存要足够&#xff0c;本次搭建使用的RTX4090卡一张&#xff0c;单卡内存24G&#xff0c;为什么选择4090&#xff1f;…

如何在ArcGIS Pro中指定坐标系

在进行制图的时候&#xff0c;为了实现某些特定的效果&#xff0c;需要指定特定的坐标系&#xff0c;但是现有的数据可能不是所需要的坐标系&#xff0c;这时候就需要对现有的数据坐标系进行处理&#xff0c;这里为大家介绍一下ArcGIS Pro中指定坐标系的方法&#xff0c;希望能…

STM32存储左右互搏 SPI总线读写FRAM MB85RS2M

STM32存储左右互搏 SPI总线读写FRAM MB85RS2M 在中低容量存储领域&#xff0c;除了FLASH的使用&#xff0c;&#xff0c;还有铁电存储器FRAM的使用&#xff0c;相对于FLASH&#xff0c;FRAM写操作时不需要预擦除&#xff0c;所以执行写操作时可以达到更高的速度&#xff0c;其…

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

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

机器视觉在食品安全检测领域的应用与展望

​随着人们生活水平的提高&#xff0c;对食品安全的要求也越来越高。在这种背景下&#xff0c;机器视觉技术作为一种高效、准确的自动化检测手段&#xff0c;在食品安全检测领域扮演着越来越重要的角色。机器视觉系统通过模拟人眼的视觉功能&#xff0c;借助相机和计算机视觉算…

魅族手机怎么录屏?高清视频,轻松录制!

“有人知道魅族手机怎么录屏吗&#xff0c;新买的魅族手机&#xff0c;用了几天感觉挺流畅的&#xff0c;功能也很齐全&#xff0c;最近因为工作原因&#xff0c;需要用到录屏功能&#xff0c;但是我不知道怎么打开&#xff0c;就想问问大家&#xff0c;魅族手机怎么录屏呀。”…

2024 年 8 款值得收藏的免费 Android 数据恢复软件

如果你发现手机数据全部被删除&#xff0c;先别慌&#xff0c;今天这个视频就来教你如何恢复。 随着市场上数据恢复软件的可用性不断增加&#xff0c;很难选择哪一款是最好的。今天&#xff0c;我们精心挑选了8个最佳免费Android数据恢复软件。他们肯定会帮助你决定最适合你需…

JAVA对象、List、Map和JSON之间的相互转换

JAVA对象、List、Map和JSON之间的相互转换 1.Java中对象和json互转2.Java中list和json互转3.Java中map和json互转 1.Java中对象和json互转 Object obj new Object(); String objJson JSONObject.toJSONString(obj);//java对象转json Object newObj JSONObject.parseObject(…

引导过程的解析以及教程za

bios加电自检------mbr--------grub-------加载内核文件------启动第一个进程 bios的主要作用&#xff1a;检测硬件是否正常&#xff0c;然后根据bios中的启动项设置&#xff0c;去找内核文件 boot开机启动项顺序&#xff0c;你可以把内核文件放在何处&#xff1f; 1.硬盘 …

ChatGPT 进行 SEO的使用技巧

搜索引擎优化 (SEO) 是使网站对搜索引擎友好的一种不断发展的实践。 自搜索引擎和新兴技术的发展以来&#xff0c;它从未保持不变。 最近发布的 ChatGPT 是一种人工智能对话工具&#xff0c;似乎在搜索引擎优化方面有很好的应用。 从创建吸引人的标题到只需一个简短的提示就可…

QML 中自定义虚拟键盘

作者&#xff1a;billy 版权声明&#xff1a;著作权归作者所有&#xff0c;商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处 前言 我们知道 Qt 中虚拟键盘模块遵循的是 GPL 协议&#xff0c;是不可用于商业发布的。如果项目中使用了 Qt 自带的虚拟键盘&#xff…

解决java接口使用spring-validation验证入参类型为List校验不生效的问题

由于 List 是接口,无法直接用于参数验证,但可以通过实现类重写 List 接口,把此实现类作为校验dto即可 dto标记: 一、直接使用 List 入参类型,不生效示例: @ApiOperation(value = "公共测试接口")@PostMapping("/testPublicApi")public CommonResult&…

vue +elementui 项目登录通过不同账号切换侧边栏菜单的颜色

前景提要&#xff1a;要求不同权限账号登录侧边栏颜色不一样。分为 theme&#xff1a;1代表默认样式&#xff0c;theme:2代表深色主题样式。 1.首先定义一个主题文件 theme.js&#xff0c;定义两个主题样式 // 主要是切换菜单栏和菜单头部主题的设计&#xff0c;整体主题样式切…

【7z压缩包】7z压缩包没密码怎么办

7z压缩包设置了密码&#xff0c;解压的时候就需要输入正确对密码才能顺利解压出文件&#xff0c;正常当我们解压文件或者删除密码的时候&#xff0c;虽然方法多&#xff0c;但是都需要输入正确的密码才能完成。忘记密码就无法进行操作。 那么&#xff0c;忘记了7z压缩包的密码…

rime中州韵 输入字符透传 lua Translator

在 rime中州韵 help lua Translator 中我们分享了如何使用 lua 脚本定义一个 translator&#xff0c;并以 五笔・拼音 为例引用了该 translator&#xff0c;并且达到了预期的效果。 今天&#xff0c;我们继续通过 lua 脚本为 rime中州韵/小狼毫 输入法打造一个 translator&…

使用Spring Retry优雅的实现业务异常重试

在系统中经常遇到业务重试的逻辑&#xff0c;比如三方接口调用&#xff0c;timeout重试三遍&#xff0c;异常处理重试的兜底逻辑等。那你是不是还在用下面这种方式呢&#xff1a; 我想大家可能很多时候也会这么写&#xff0c;这是能想到的第一个方法&#xff0c;但是我们这段代…

Ant Design Vue 编译后的网页特点是什么,怎么确认他是用的前端 Ant Design Vue 技术栈的呢?

Ant Design Vue 是一个前端 UI 框架&#xff0c;使用 Vue.js 构建。它包含了大量的预设样式和组件&#xff0c;如按钮、表单、表格等&#xff0c;可以帮助开发者快速构建出优雅且功能丰富的网页。但是&#xff0c;要确定一个编译后的网页是否使用了 Ant Design Vue&#xff0c;…

【算法】利用分治思想解算法题:快排、归并、快速选择实战(C++)

1. 分治思想 介绍 分治法将问题划分成多个相互独立且相同或类似的子问题&#xff0c;然后递归地解决每个子问题&#xff0c;并将结果合并以得到原始问题的解。 分治思想通常包含以下三个步骤&#xff1a; 分解&#xff1a;将原始问题划分成多个规模较小、相互独立且类似的子…