【Proteus仿真】【Arduino单片机】蔬菜大棚温湿度控制系统设计

文章目录

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


一、功能简介

本项目使用Proteus8仿真Arduino单片机控制器,使用PCF8574、LCD1602液晶、DHT11温湿度传感器、按键、继电器、蜂鸣器、加热、水泵电机等。
主要功能:
系统运行后,LCD1602显示DHT11温湿度采集值,
当按下K3键进入阈值设置,第一次进入温度上限,
第二次进入温度下限,第三次进入湿度上限,
第四次进入湿度下限,如此循环。可通过K1和K2键调节阈值。
设置好阈值后,按下K4键确认并退出,返回主界面。
若采集温度高于上限,开启风扇降温,声光报警。
若采集温度低于下限,开启加热,声光报警。
若采集湿度高于上限,关闭水泵,声光报警。
若采集湿度低于下限,开启水泵,声光报警。
若温湿度正常,关闭风扇、加热、水泵及声光报警。


二、软件设计

/*
作者:嗨小易(QQ:3443792007)*//
//系统数据显示
void sys_data_show(void)
{while(1){//正常模式显示if(sys_ctrl.mode==0){lcd1602_show_nums(5,0,sys_ctrl.temp,2,0);lcd1602_show_nums(5,1,sys_ctrl.humi,2,0);}//设置模式显示else {switch(sys_ctrl.mode){case 1://温度上限lcd1602_show_nums(10,0,sys_ctrl.temph,2,0);break;case 2://温度下限lcd1602_show_nums(10,0,sys_ctrl.templ,2,0);break;case 3://湿度上限lcd1602_show_nums(10,0,sys_ctrl.humih,2,0);break;case 4://湿度下限lcd1602_show_nums(10,0,sys_ctrl.humil,2,0);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>=5)sys_ctrl.mode=1;lcd1602_clear();switch(sys_ctrl.mode){case 1://温度上限设置显示界面 lcd1602_show_string(0,0,"TempH Set:");break;case 2://温度下限设置显示界面 lcd1602_show_string(0,0,"TempL Set:");break;case 3://湿度上限设置显示界面 lcd1602_show_string(0,0,"HumiH Set:");break;case 4://湿度下限设置显示界面 lcd1602_show_string(0,0,"HumiL Set:");break;}			}//确定else if(key==KEY4_PRESS){sys_ctrl.mode=0;sys_open_show();	}//温度上限设置while(sys_ctrl.mode==1){if(key==KEY1_PRESS)//加{sys_ctrl.temph+=1;if(sys_ctrl.temph>=80)sys_ctrl.temph=0;		}else if(key==KEY2_PRESS)//减{sys_ctrl.temph-=1;if(sys_ctrl.temph<=0)sys_ctrl.temph=80;				}break;}//温度下限设置while(sys_ctrl.mode==2){  	if(key==KEY1_PRESS)//加{sys_ctrl.templ+=1;if(sys_ctrl.templ>=40)sys_ctrl.templ=0;			}else if(key==KEY2_PRESS)//减{sys_ctrl.templ-=1;if(sys_ctrl.templ<=0)sys_ctrl.templ=40;				}break;			}//湿度上限设置while(sys_ctrl.mode==3){  	if(key==KEY1_PRESS)//加{sys_ctrl.humih+=1;if(sys_ctrl.humih>=100)sys_ctrl.humih=0;		}else if(key==KEY2_PRESS)//减{sys_ctrl.humih-=1;if(sys_ctrl.humih<=0)sys_ctrl.humih=99;				}break;				}//湿度下限设置while(sys_ctrl.mode==4){  	if(key==KEY1_PRESS)//加{sys_ctrl.humil+=1;if(sys_ctrl.humil>=100)sys_ctrl.humil=0;			}else if(key==KEY2_PRESS)//减{sys_ctrl.humil-=1;if(sys_ctrl.humil<=0)sys_ctrl.humil=99;				}break;			}
}//系统功能控制
void sys_fun_ctrl(void)
{//正常模式下if(sys_ctrl.mode==0){//如果温度高于上限,加热关闭,风扇开启,声光报警if(sys_ctrl.temp>=sys_ctrl.temph){JW_PIN_OUT(0);JR_PIN_OUT(1);beep_alarm(100,1000);}//如果温度低于下限,加热开启,风扇关闭,声光报警else if(sys_ctrl.temp<=sys_ctrl.templ){JW_PIN_OUT(1);JR_PIN_OUT(0);beep_alarm(100,1000);}//如果温度正常,加热关闭,风扇关闭,声光关闭else{JW_PIN_OUT(1);JR_PIN_OUT(1);}//如果湿度高于上限,水泵关闭,声光报警if(sys_ctrl.humi>=sys_ctrl.humih){SB_PIN_OUT(1);beep_alarm(100,1000);}//如果湿度低于下限,水泵打开,声光报警else if(sys_ctrl.humi<=sys_ctrl.humil){SB_PIN_OUT(0);beep_alarm(100,1000);}//如果湿度正常,水泵关闭,声光关闭else {SB_PIN_OUT(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/174972.shtml

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

相关文章

innovus如何在floorplan view显示所有module

我正在「拾陆楼」和朋友们讨论有趣的话题&#xff0c;你⼀起来吧&#xff1f; 拾陆楼知识星球入口 如题&#xff0c;innovus的图形界面在floorplan view下默认只能显示instance数量超过100个的module&#xff0c;如果要显示更小的module&#xff0c;需要在VIEW-Set Perference…

编程开发的 词汇

函数命名相关词汇&#xff1a; Strategy 策略 concrete 具体的 Context 上下文 execute 执行 handler 操作者 target 代理对象 proxy 代理 request 请求 iterator 迭代器 handle 方法处理 Method 方法 Father 父 child 子 Components 组件 notify 通知 updat…

蓝桥杯-动态规划-子数组问题

目录 一、乘积最大数组 二、乘积为正数的最长子数组长度 三、等差数列划分 四、最长湍流子数组 心得&#xff1a; 最重要的还是状态表示&#xff0c;我们需要根据题的意思&#xff0c;来分析出不同的题&#xff0c;不同的情况&#xff0c;来分析需要多少个状态 一、乘积最…

Redis-Redis多级缓存架构(实践)

分布式锁redisson的使用&#xff08;并发场景下) 1.基于缓存&#xff0c;对热点数据进行刷新过期时间&#xff0c;以实现“冷热数据分离”。 2.可以对“热点数据进行缓存重建”&#xff08;双层获取&#xff09; 3.使用分布式读写锁&#xff0c;可解决“数据库与缓存双写不一…

笔记二十、使用路由Params进行传递参数

20.1、在父组件中设置路由参数 <NavLink to{classify/${this.state.name}} className{this.activeStyle}>classify</NavLink> 父组件 Home/index.jsx import React from "react"; import {NavLink, Outlet} from "react-router-dom";class Ap…

2021年全国a级景区数据,shp+csv数据均有

大家好~这周将和大家分享关于文化旅游和城乡建设相关的数据&#xff0c;希望大家喜欢~ 今天分享的是2021年全国a级景区数据&#xff0c;数据格式有shpcsv&#xff0c;几何类型为点&#xff0c;已经经过清洗加工&#xff0c;可直接使用&#xff0c;以下为部分字段列表&#xff…

Linux中fork的进一步加深及信号基础

1.通过题目理解fork 1.打印结果?产生了几个进程? #include <stdio.h> #include <unistd.h> #include <stdlib.h> int main() { int i0; for(;i<2;i) { fork(); printf("A\n"); } exit(0); } 所以打印…

西南科技大学电路分析基础实验A1(元件伏安特性测试 )

目录 一、实验目的 二、实验设备 三、预习内容(如:基本原理、电路图、计算值等) 1、测定线性电阻的伏安特性 2、二极管伏安特性测试 3、测定实际电压源的伏安特性 四、实验数据及结果分析(预习写必要实验步骤和表格) 1、测定线性电阻的伏安特性 2、二极管伏安特性测…

Linux环境配置Seata开机自启脚本(在MySQL和Nacos启动后启动)

之前给seata配置了一个开机启动脚本&#xff0c;但是经常出现启动失败&#xff0c;查询日志要么MySQL没有连接上要么nacos连接不上&#xff0c;原因都是因为服务器重启的时候这两个服务都还没有完全启动&#xff0c;所以正常的做法应该是启动前先等前置服务启动好了再启动seata…

大语言模型:以Amazon Titan等大语言模型为例介绍

大语言模型&#xff08;Large Language Model&#xff09;是一种人工智能技术&#xff0c;通过对海量文本数据进行训练&#xff0c;学习语言的结构、规则和语义&#xff0c;从而可以生成具有自然语言风格的文本或回答自然语言的问题。大语言模型一般基于神经网络技术&#xff0…

【实时渲染】阅读Real-Time-Rendering-4th-CN的笔记整理(慢慢完善)

目录 相关链接图形渲染管线 相关链接 相关链接 B站视频&#xff1a;https://www.bilibili.com/video/BV1UM411Z7g1 PDF文件&#xff1a;https://github.com/Morakito/Real-Time-Rendering-4th-CN/releases/tag/v1.0 源文件仓库&#xff1a;https://github.com/Morakito/Real-T…

华为云CDN刷新与查询余量的Go实现及在Jenkins中的部署

引言 在华为云上&#xff0c;对CDN缓存内容进行刷新是一个常见的需求&#xff0c;以确保最新的内容能尽快被用户访问到。通过使用Go语言&#xff0c;我们可以开发一个自动化的工具来实现这一需求&#xff0c;并将其集成到Jenkins中以实现持续部署。下面我们将分步骤讲解如何实…

Bypass open_basedir的方法

文章目录 open_basedir概念绕过方法命令执行绕过symlink 绕过 &#xff08;软连接&#xff09;利用chdir()与ini_set()组合绕过 例题 [suctf 2019]easyweb open_basedir概念 open_basedir是php.ini的设置 在open_basedir设置路径的话 那么网站访问的时候 无法访问除了设置以外的…

KaiwuDB 亮相中国 5G + 工业互联网大会,助力新型工业化

11月19-21日&#xff0c;由各相关政府部门共同主办的“2023 中国 5G工业互联网大会”在湖北武汉盛大举行。作为我国“5G工业互联网”领域的国家级顶会&#xff0c;本届大会以“数实融合&#xff0c;大力推进新型工业化”为主题&#xff0c;聚焦新型基础设施、产业转型升级、技术…

redis—— 渐进式遍历

目录 为啥不用keys*遍历&#xff1f; 引入渐进式遍历 SCAN进行渐进式遍历 格式及参数说明 使用示例 注意 为啥不用keys*遍历&#xff1f; 之前学过key* 获取所有的key&#xff0c;但是这个操作可能会一次性得到太多的key&#xff0c;阻塞redis服务器&#xff0c;所以不建议…

笔记62:注意力汇聚 --- Nadaraya_Watson 核回归

本地笔记地址&#xff1a;D:\work_file\&#xff08;4&#xff09;DeepLearning_Learning\03_个人笔记\3.循环神经网络\第10章&#xff1a;动手学深度学习~注意力机制 a a a a a a a a a a a a a a a a

【一维数组】交换数组

题目 将数组A中的内容和数组B中的内容进行交换。&#xff08;数组一样大&#xff09; 解题方式通过函数封装可以实现任意类型的数组元素交换 思路来源&#xff1a;qsort函数的模拟实现 void Change_arr2(void* ch1, void* ch2, size_t num, size_t sz) {for (int i 0; i < …

.net core 事务

在 .NET Core 中&#xff0c;可以使用 Entity Framework Core 来实现事务处理。下面是一个简单的示例&#xff0c;展示了如何在 .NET Core 中使用 Entity Framework Core 来创建和执行事务&#xff1a; using System; using Microsoft.EntityFrameworkCore; using System.Tran…

Docker配置Halo搭建个人博客-快速入门

Docker配置Halo搭建个人博客-快速入门 1 官方文档2 安装Halo2.1 创建Halo主目录2.2 远程下载配置文件2.3 编辑配置文件2.4 拉取最新镜像2.6 查看容器2.7 开放服务器的防火墙 3 运行3.1 运行项目3.2 停止项目 4 常见问题4.1 没有权限4.2 ommand netstart not found, did you mea…

寻找两个正序数组的中位数

给定两个大小分别为 m 和 n 的正序&#xff08;从小到大&#xff09;数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。 算法的时间复杂度应该为 O(log (mn)) 。 &#xff1a;本题难点在于时间复杂度的掌握&#xff0c; 思路&#xff1a;把两个数组合为一个数…