【Proteus仿真】【Arduino单片机】智能窗户设计

文章目录

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


一、功能简介

本项目使用Proteus8仿真Arduino单片机控制器,使用蜂鸣器模块、LCD1602显示模块、雨滴传感器、风速传感器、人体红外模块、ADC模块、按键模块、28BYJ48步进电机
模块、DS18B20温度传感器等。

主要功能:
系统运行后,LCD1602显示温度、湿度、风速检测值;
可通过按键K3进入阈值设置界面,默认进入温度下限设置模式;再次按下K3键,切换至温度上限设置;再次按下K3键,切换至风速阈值设置,再次按下K3键切换至湿度阈值设置,如此循环;然后K1和K2键用于调节阈值,设置好后按下K4键保存并返回主界面。在主界面,K1键用于系统布防设置,K2键用于系统撤防,布防后,若检测到有人则蜂鸣器报警,并且窗户关闭。若检测没有人,则报警取消,如果检测到下雨或大风时,窗户关闭;正常天气时,如果温度高于上限,开窗;
如果温度低于下限,关窗;温度在阈值范围内,开窗。当系统布防取消时,报警系统关闭,窗户开启。


二、软件设计

/*
作者:嗨小易(技术QQ群:570487280)*///系统数据显示
void sys_data_show(void)
{while(1){//未进入设置模式if(sys_ctrl.mode==0){//温度显示lcd1602_show_nums(3,0,sys_ctrl.temp,2,0);//风速值显示lcd1602_show_nums(10,0,sys_ctrl.wind,2,0);//湿度值显示lcd1602_show_nums(3,1,sys_ctrl.humi,2,0);//窗户状态if(sys_ctrl.window==1)lcd1602_show_string(7,1," Open");else lcd1602_show_string(7,1,"Close");//布防显示		if(sys_ctrl.fortify==1)lcd1602_show_string(14,0,"BF");else lcd1602_show_string(14,0,"CF");//有人显示if(sys_ctrl.man==1)lcd1602_show_string(13,1,"Yes");else lcd1602_show_string(13,1," No");	}//进入设置模式else{//温度下限显示lcd1602_show_nums(3,0,sys_ctrl.templ,2,0);//温度上限显示lcd1602_show_nums(6,0,sys_ctrl.temph,2,0);//风速上限显示lcd1602_show_nums(3,1,sys_ctrl.windh,2,0);//湿度上限显示lcd1602_show_nums(11,1,sys_ctrl.humih,2,0);//设置阈值位置闪烁switch(sys_ctrl.mode){case 1://温度下限 lcd1602_show_string(3,0,"  ");delay_ms(50);//温度下限显示lcd1602_show_nums(3,0,sys_ctrl.templ,2,0);break;case 2://温度上限 lcd1602_show_string(6,0,"  ");delay_ms(50);//温度上限显示lcd1602_show_nums(6,0,sys_ctrl.temph,2,0);break;case 3://风速上限 lcd1602_show_string(3,1,"  ");delay_ms(50);//风速上限显示lcd1602_show_nums(3,1,sys_ctrl.windh,2,0);break;case 4://湿度上限 lcd1602_show_string(11,1,"  ");delay_ms(50);//湿度上限显示lcd1602_show_nums(11,1,sys_ctrl.humih,2,0);break;}		}break;				}
}//系统参数设定
void sys_data_set(void)
{u8 key=0;static u8 one_flag=0;key=key_scan(0);//模式设置if(key==KEY3_PRESS){sys_ctrl.mode++;if(sys_ctrl.mode>4)sys_ctrl.mode=1;//设置界面仅显示1次if(one_flag==0){one_flag=1;_set_parm_show();//阈值参数设置界面显示}}//加&布防else if(key==KEY1_PRESS){//阈值设置模式if(sys_ctrl.mode!=0){switch(sys_ctrl.mode){case 1://温度下限sys_ctrl.templ++;if(sys_ctrl.templ>99)sys_ctrl.templ=0;break;case 2://温度上限sys_ctrl.temph++;if(sys_ctrl.temph>99)sys_ctrl.temph=0;break;case 3://风速上限sys_ctrl.windh++;if(sys_ctrl.windh>99)sys_ctrl.windh=0;break;case 4://湿度上限sys_ctrl.humih++;if(sys_ctrl.humih>99)sys_ctrl.humih=0;break;	}		}//正常模式else{sys_ctrl.fortify=1;//布防}		}//减&撤防else if(key==KEY2_PRESS){//阈值设置模式if(sys_ctrl.mode!=0){switch(sys_ctrl.mode){case 1://温度下限sys_ctrl.templ--;if(sys_ctrl.templ<0)sys_ctrl.templ=0;break;case 2://温度上限sys_ctrl.temph--;if(sys_ctrl.temph<0)sys_ctrl.temph=99;break;case 3://风速上限sys_ctrl.windh--;if(sys_ctrl.windh<0)sys_ctrl.windh=99;break;case 4://湿度上限sys_ctrl.humih--;if(sys_ctrl.humih<0)sys_ctrl.humih=99;break;	}		}//正常模式else{sys_ctrl.fortify=0;//撤防}		}//确定else if(key==KEY4_PRESS){one_flag=0;	sys_ctrl.mode=0;sys_open_show();//系统开机界面显示}
}//系统功能控制
void sys_fun_ctrl(void)
{//正常模式下if(sys_ctrl.mode==0){//已开启布防if(sys_ctrl.fortify==1){//检测到有人,蜂鸣器报警if(sys_ctrl.man==1){beep_alarm(1,20000);//已开启过窗户,关闭if(sys_ctrl.window==1){sys_ctrl.window=0;//关闭窗户step_motor_28BYJ48_send_pulse(8,sys_ctrl.window,STEPMOTOR_MAXSPEED,3,1);	}}//检测到无人,报警取消else{//如果下雨或大风天气if(sys_ctrl.humi>sys_ctrl.humih || sys_ctrl.wind>sys_ctrl.windh){//已开启过窗户,关闭if(sys_ctrl.window==1){sys_ctrl.window=0;//关闭窗户step_motor_28BYJ48_send_pulse(8,sys_ctrl.window,STEPMOTOR_MAXSPEED,3,1);	}	}//正常气候else{//如果温度高于上限,开窗if(sys_ctrl.temp>sys_ctrl.temph){//已关闭过窗户,打开if(sys_ctrl.window==0){sys_ctrl.window=1;//打开窗户step_motor_28BYJ48_send_pulse(8,sys_ctrl.window,STEPMOTOR_MAXSPEED,3,1);	}		}//如果温度低于下限,关窗else if(sys_ctrl.temp<sys_ctrl.templ){//已开启过窗户,关闭if(sys_ctrl.window==1){sys_ctrl.window=0;//关闭窗户step_motor_28BYJ48_send_pulse(8,sys_ctrl.window,STEPMOTOR_MAXSPEED,3,1);	}		}//正常温度,开窗else{//已关闭过窗户,打开if(sys_ctrl.window==0){sys_ctrl.window=1;//打开窗户step_motor_28BYJ48_send_pulse(8,sys_ctrl.window,STEPMOTOR_MAXSPEED,3,1);	}		}}	}	}//布防取消,报警取消else{//已关闭过窗户,打开if(sys_ctrl.window==0){sys_ctrl.window=1;//打开窗户step_motor_28BYJ48_send_pulse(8,sys_ctrl.window,STEPMOTOR_MAXSPEED,3,1);	}	}	}
}

三、实验现象

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/621099.shtml

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

相关文章

2023年北邮渣硕的暑期秋招总结

背景 实验室一般是在研究生二年级的时候会放实习&#xff0c;在以后的日子就是自己完成毕业工作要求&#xff0c;基本上不再涉及实验室的活了&#xff0c;目前是一月份也是开始准备暑期实习的好时间。实验室每年这个时候都会有学长学姐组织暑期实习经验分享&#xff0c;本着不…

外国入境的免签国家以及中外互免(普通护照*、普通公务护照)

2024.1.11起&#xff0c;外籍人员在北京首都、北京大兴、上海浦东、杭州萧山、厦门高崎、广州白云、深圳宝安、成都天府、西安咸阳9个国际机场&#xff0c;推行24小时直接过境旅客免办边检手续。对于持24小时内国际联程机票&#xff0c;经上述任一机场过境前往第三国或地区的出…

C#中对浮点数NaN,PositiveInfinity,NegativeInfinity的特殊处理

NAN NAN 整体意思为Not a Number 不是一个数&#xff0c; NaN&#xff08;Not a Number&#xff0c;非数&#xff09;是计算机科学中数值数据类型的一类值&#xff0c;表示未定义或不可表示的值。常在浮点数运算中使用。首次引入NaN的是1985年的IEEE 754浮点数标准。 EEE 75…

论文阅读 Self-Supervised Burst Super-Resolution

这是一篇 ICCV 2023 的文章&#xff0c;主要介绍的是用自监督的方式进行多帧超分的学习 Abstract 这篇文章介绍了一种基于自监督的学习方式来进行多帧超分的任务&#xff0c;这种方法只需要原始的带噪的低分辨率的图。它不需要利用模拟退化的方法来构造数据&#xff0c;而且模…

API设计:从基础到最佳实践

1*vWvkkgG6uvgmJT8GkId98A.png 在这次深入探讨中&#xff0c;我们将深入了解API设计&#xff0c;从基础知识开始&#xff0c;逐步进阶到定义出色API的最佳实践。 作为开发者&#xff0c;你可能对许多这些概念很熟悉&#xff0c;但我将提供详细的解释&#xff0c;以加深你的理解…

2024--Django平台开发-Django知识点(七)

频率超高的问题 Redis的问题虚拟环境mysqlcient和pymysql短信服务&#xff0c;一期用的是腾讯云短信 虚拟环境 可以用来创建虚拟环境的&#xff1a; virtualenv这个模块&#xff0c;简单易上手&#xff0c;推荐 小白不建议&#xff0c;conda&#xff0c;如果大家用这个&…

React项目实战--------极客园项目PC端

项目介绍&#xff1a;主要将学习到的项目内容进行总结&#xff08;有需要项目源码的可以私信我&#xff09; 关于我的项目的配置如下&#xff0c;请注意下载的每个版本不一样&#xff0c;写的api也不一样 一、项目介绍 1.资料 1&#xff09;短信接收&M端演示&#xff1a…

Vue中v-if与v-show区别详解

✨ 专栏介绍 在当今Web开发领域中&#xff0c;构建交互性强、可复用且易于维护的用户界面是至关重要的。而Vue.js作为一款现代化且流行的JavaScript框架&#xff0c;正是为了满足这些需求而诞生。它采用了MVVM架构模式&#xff0c;并通过数据驱动和组件化的方式&#xff0c;使…

寻找最富裕的小家庭 - 华为OD统一考试

OD统一考试(C卷) 分值: 100分 题解: Java / Python / C++ 题目描述 在一棵树中,每个节点代表一个家庭成员,节点的数字表示其个人的财富值,一个节点及其直接相连的子节点被定义为一个小家庭现给你一棵树,请计算出最富裕的小家庭的财富和。 输入描述 第一行为一个数N,…

关于tex中的表格设置

文章目录 控制表格列宽和行高控制表格列宽的同时实现居中tex中多表格排列单元格的合并与分割对单个单元格进行操作 控制表格列宽和行高 将下面的代码放在table环境内&#xff0c;放在tabular环境外 调整表格宽度和高度&#xff1a; \resizebox{\textwidth}{2cm}{%第一个{}是表…

C语言之从浅入深一步一步全方位理解指针【附笔试题】

文章目录 前言从浅入深理解指针《第一阶段》一、内存和地址1.1 内存1.2 究竟该如何理解编址 二、指针变量和地址2.1 取地址操作符&#xff08;&&#xff09; 三、指针变量和解引用操作符&#xff08;*&#xff09;3.1 指针变量3.2 如何拆解指针类型3.3 解引用操作符 四、指…

设计模式之解释器模式【行为型模式】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档> 学习的最大理由是想摆脱平庸&#xff0c;早一天就多一份人生的精彩&#xff1b;迟一天就多一天平庸的困扰。各位小伙伴&#xff0c;如果您&#xff1a; 想系统/深入学习某…

为了这口醋,包的这饺子。为了Selenium,学有限的CSS,逐步替换XPATH

Learn about CSS rules and pseudo-classes to help you move your XPATH locators to CSS. 1. 最基本IdElement TypeDirect ChildChild or Sub-ChildClass 2. 深入一点Next SiblingAttribute ValuesChoosing a Specific Match Sub-String Matches 3 参考资料 In order for Sel…

transfomer中Multi-Head Attention的源码实现

简介 Multi-Head Attention是一种注意力机制,是transfomer的核心机制. Multi-Head Attention的原理是通过将模型分为多个头&#xff0c;形成多个子空间&#xff0c;让模型关注不同方面的信息。每个头独立进行注意力运算&#xff0c;得到一个注意力权重矩阵。输出的结果再通过…

SVN切换账户

前言&#xff08;svn切换&#xff09; 本文章简单写下SVN账户切换操作 linux 1.删除目录 ~/.subversion/auth/ 下的所有文件。 2.再次操作svn时可重新输入用户名和密码。 windows (1)在工程中单击右键,单击"TortoiseSVN"。 (2)选择"Setting"。 (3)选择&quo…

C语言实现快排核心思想(双指针法)

核心代码&#xff1a; 这就是每一趟快排的实现代码&#xff0c;由上面的动图&#xff0c;我们能知道前后指针法的核心是玩好cur和prev这两个指针&#xff0c;具体的逻辑是cur找比key小的值&#xff0c;找到就prev&#xff0c;然后prev和cur的值就进行交换&#xff0c;但是总不能…

统信UOS操作系统上禁用IPv6

原文链接&#xff1a;统信UOS操作系统上禁用IPv6 hello&#xff0c;大家好啊&#xff01;继之前我们讨论了如何在麒麟KYLINOS上禁用IPv6之后&#xff0c;今天我要给大家带来的是在统信UOS操作系统上禁用IPv6的方法。IPv6是最新的网络通信协议&#xff0c;但在某些特定的网络环境…

PiflowX-DorisWrite组件

DorisWrite组件 组件说明 往Doris存储写入数据。 计算引擎 flink 组件分组 doris 端口 Inport&#xff1a;默认端口 outport&#xff1a;默认端口 组件属性 名称展示名称默认值允许值是否必填描述例子fenodesFenodes“”无是Doris FE http地址&#xff0c; 支持多个…

基于企业级SaaS低代码平台的协同制造产品解决方案

万界星空科技低代码平台提供的MES&#xff0c;WMS&#xff0c;QMS等应用&#xff0c;是助力企业从数字化工厂向数字化企业升级的落地管道及载体&#xff0c;能帮助企业在数字化转型的过程中&#xff0c;实现制造企业与其供应链的协同制造。从订单发出、供应商确认、供应商生产、…

使用setdefault撰写文本索引脚本(出自Fluent Python案例)

背景介绍 由于我们主要介绍撰写脚本的方法&#xff0c;所以用一个简单的文本例子进行分析 a[(19,18),(20,53)] Although[(11,1),(16,1),(18,1)] ambiguity[(14,16)] 以上内容可以保存在一个txt文件中&#xff0c;任务是统计文件中每一个词&#xff08;包括字母&#xff0c;数…