基于单片机的温室环境数据监测系统的设计

news2025/5/28 20:54:47

收藏和点赞,您的关注是我创作的动力

文章目录

    • 概要
  • 一、总体方案设计
    • 2.1 总体架构设计
  • 二、整体硬件电路设计
    • 3.1 主控制器电路
  • 三 系统设计概要
    • 4.2 主程序设计
    • 原理图
    • 程序
  • 四、 结论
  • 五、 文章目录

概要

  与农业发达国家相比,我国的农业科技方面还处于刚刚起步的状态,多数自动化农业设备仍然使用在科研方。目前在温室环境数据监测方面,自动化设备比较落后。本文介绍了以STM32F103RCT6微控制器为核心,结合多种外设进行设计的温室环境数据监测系统。主要以温湿度度传感器和土壤湿度湿度传感器作为获得农田环境的传感器测量模块。以继电器为执行模块。以基本的按键输入和OLED显示屏输出信息联合作为人机交互模块。程序则采用更加方便易懂的封装好的C语言库函数进行编写。
关键词:STM32,温室环境,数据监测,传感器

一、总体方案设计

  以农田节水灌溉系统为对象,采用合适的STM32硬件和软件系统,设计实现温室环境数据监测系统设计。

2.1 总体架构设计

温室环境数据监测系统由单片机、空气温湿度检测模块、按键输入模块、电源模块、继电器模块、土壤湿度传感器模块、OLCD液晶显示器等几部分组成 。土壤湿度检测模块检测土壤的湿度并把信息传给单片机,按键模块可以对土壤的湿度范围进行设置,显示模块使用的是液晶显示屏,可以将当前土壤湿度、空气温湿度范围显示出来,继电器模块用于加水。当湿度传感器检测到土壤湿度低于设定值,并且空气温度大于设定值时,单片机引脚输出控制继电器打开。电源模块由DC电源插座、自锁开关和外接USB电源组成,如下图2.1为系统总的原理架构。
在这里插入图片描述

图2.1 系统总体框图

二、整体硬件电路设计

3.1 主控制器电路

本次系统的设计是以STM32F103C8T6作为核心控制器,这是意法半导体公司ST旗下的一款增强型的微控制器。具体的实物如图3.1所示。
在这里插入图片描述

图3.1 STM32_mini开发板实物图
在工作频率上,C8T6所使用的内核具有很优良的性能。使用外设的8MHZ精准晶振,经过倍频后能够达到72MHZ的工作频率,优良的运行速度能购极大的提高系统的运行性能。外部晶振如图3.2。
在这里插入图片描述

图3.2 系统时钟晶振
除此之外,微控制器集成了其他很多外设,有ADC/DAC转换器。在控制系统的设计中,使用传感器,除了少数的直接已经转换完成能够字接读取的数字型传感器,绝大多数传统传感器都是输出模拟量,需要接AD转换模块。有4个通用的定时器,可以用来提供有关计数定时、输出PWM波、捕获输入等功能。有两个IIC和三个SPI接口,可以用来提供通信接口,这是扩展外设例如链接显示屏、读取传感器、读写FLASH存储芯片等都要用到这些通信接口。该芯片引脚具体如图3.3所示。
在这里插入图片描述

图3.3 STM32RCT6引脚图

三 系统设计概要

4.2 主程序设计

在本次设计中我使用了时间片轮转的设计思想,设计了一个多任务并行的控制系统。这一设计思想的具体实现是在一个时间片内设置多个时间点,在每一个时间点执行相应的任务,由于控制器极高的运行频率,一次任务并不会对其他的任务造成影响,也就造成了多任务并行的现相。
以下将介绍main函数中的各个任务:
下图4.3所示的是检测控制任务,顾名思义该任务的作用是检测环境参数和控制继电器。该任务调用Soil_read和Read_DHT11函数检测环境参数后与湿度设定值setnum和温度设定值settem相互比较,满足湿度低且温度符合后打开水泵进行灌溉。我将LED0作为水泵的开关指示灯,水泵打开时LED0亮。
在这里插入图片描述

图4.3 主程序设计流程图

原理图

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

程序

附录(源程序):


#include "delay.h"
#include "key.h"
#include "sys.h"
#include "usart.h"	 
#include "dht11.h" 	
#include "oled.h"
#include "timer.h" 
u8 key=0;
u8 T_Alarm_L=20;
u8 T_Alarm_H=30;
u8 RH_Alarm_L=20;
u8 RH_Alarm_H=60;
u8 Light_Alarm=50;
u8 Light=0;
u8 MENU_NUM=0;
//0;主界面 1;温度低 2;温度高 3:湿度低  4:湿度高  5;光照 
int main(void)
{	 	    
u8 temperature;  	    
u8 humidity;    
delay_init();	  //延时函数初始化	 
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); 	 //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
OLED_Init();
DHT11_Init();
KEY_Init();
	Gpio_Init();
	delay_ms(1000);
	while(1)
	{	 
	delay_ms(200);
	key=KEY_Scan(1);		
	switch(key)
	{				 
	case WKUP_PRES:	
	if(MENU_NUM>0)
	{
	MENU_NUM++;	
	OLED_Clear();
	if(MENU_NUM==2)
	{
OLED_ShowNum(40,2, T_Alarm_H,2,16);  
	OLED_ShowString(0,0,"T_H Alarm:"); 
}else if(MENU_NUM==3)
	{	OLED_ShowNum(40,2, RH_Alarm_L,2,16);  
	OLED_ShowString(0,0,"RH_L Alarm:"); 
	}else if(MENU_NUM==4)
	{	OLED_ShowNum(40,2, RH_Alarm_H,2,16);  			OLED_ShowString(0,0,"RH_H Alarm:"); 
				}else if(MENU_NUM==5){
		OLED_ShowNum(40,2, Light_Alarm,2,16);  			OLED_ShowString(0,0,"Light Alarm:"); 
				}else if(MENU_NUM==6){		MENU_NUM=0;
		}
		}
		break;
		case KEY2_PRES:	
		if(MENU_NUM==1)
	{
	T_Alarm_L++;
	OLED_ShowNum(40,2, T_Alarm_L,2,16);  
			}else if(MENU_NUM==2)
			{
	T_Alarm_H++;
	OLED_ShowNum(40,2, T_Alarm_H,2,16);  
			}else if(MENU_NUM==3)
			{
	RH_Alarm_L++;
	OLED_ShowNum(40,2, RH_Alarm_L,2,16); 
			}else if(MENU_NUM==4){
	RH_Alarm_H++;
					OLED_ShowNum(40,2, RH_Alarm_H,2,16); 
			}else if(MENU_NUM==5){
	Light_Alarm++;
		OLED_ShowNum(40,2, Light_Alarm,2,16); 
			}
			break;
			case KEY1_PRES:	 				 if(MENU_NUM==1)
			{
					T_Alarm_L--;
		OLED_ShowNum(40,2, T_Alarm_L,2,16);  
			}else if(MENU_NUM==2)
			{
		T_Alarm_H--;
	OLED_ShowNum(40,2, T_Alarm_H,2,16);  
			}else if(MENU_NUM==3)
			{
		RH_Alarm_L--;
		OLED_ShowNum(40,2, RH_Alarm_L,2,16); 
			}else if(MENU_NUM==4){
	RH_Alarm_H--;
	OLED_ShowNum(40,2, RH_Alarm_H,2,16); 
			}else if(MENU_NUM==5){
	Light_Alarm--;
	OLED_ShowNum(40,2, Light_Alarm,2,16); 
			}
		break;
	case KEY0_PRES:	
	if(MENU_NUM==0)
				{
	MENU_NUM=1; 
	OLED_Clear();
OLED_ShowNum(40,2, T_Alarm_L,2,16);  
	OLED_ShowString(0,0,"T_L Alarm:"); 
			}
		break;
	}
 	if(MENU_NUM==0)			//每200ms读取一次
		{							DHT11_Read_Data(&temperature,&humidity);	//读取温湿度值				OLED_ShowString(0,0,"T:");  
	OLED_ShowString(0,2, "RH:");  
				OLED_ShowNum(40,0,temperature,2,16);  
OLED_ShowNum(40,2, humidity,2,16);  
			}	
		//判断温度
if(humidity!=0||temperature!=0)
	{
	if(temperature<T_Alarm_L)
		{
			L_T_Led_1;
			M_T_Led_0;
			H_T_Led_0;
			}else if(temperature>T_Alarm_H)
			{
			L_T_Led_0;
			M_T_Led_1;
			H_T_Led_1;		  
			}else{
			L_T_Led_0;
			M_T_Led_1;
			H_T_Led_0;		  
			}
			//判断湿度
	if(humidity<RH_Alarm_L)
			{
			L_RH_Led_0;
			H_RH_Led_1;
			}else if(humidity>RH_Alarm_H)
			{
			L_RH_Led_1;
			H_RH_Led_0;	
			}else{
			L_RH_Led_1;
			H_RH_Led_1;
			}
			//判断光照
			if(Light<Light_Alarm)
			{
				Light_Led_1;	
			}else{
				Light_Led_0;
			}
		}
	}
}

四、 结论

首先STM32微控芯片的基本功能完全可以满足系统设计的需要。作为一个工业级的控制芯片能够有足够的的I/O口用于外接各种外设。在此之外,微控芯片高达72MHZ的处理速度能够相当迅速的对信息判断进行处理,这对于系统性能的优化提供了先决条件。再利用DHI11、土壤湿度传感器的过程中,高集成的微控制器提供了便利的开发环境。其次是本系统采用OLED屏幕以及蜂鸣器作为报警装置,相比较于传统的人工监测更加智能化。在软件方面,使用将系统工作过程具象化的状态机思想可以及为具体的分析,完善程序逻辑。除此之外,使用模块化编程,将每一个模块当成一个任务描写,将模块的信息详尽的编写,在以后改进修改时能更简单,毕竟读程序无论是自己的还是被人的都是一件困难的事。

五、 文章目录

目 录
摘 要: I
ABSTRACT:. II
1 绪论 1
1.1 国内外的研究现状 1
1.2 设计的目的与意义 2
1.3 设计说明书的结构安排 2
2 总体方案设计 4
2.1 总体架构设计 4
2.1 核心控制器选择 4
2.2 电源电路 5
2.3 显示模块 5
3 整体硬件电路设计 6
3.1 主控制器电路 6
3.2 测量模块 8
3.2.1 测量温湿度原因 8
3.2.1 DHT11温湿度传感器 9
3.2.2 土壤湿度传感器 10
3.3 人机交互模块 11
3.3.1 显示模块 11
3.3.2 按键输入模块 13
3.4 执行模块 14
4 软件设计 15
4.1 软件设计支持 15
4.2 主程序设计 17
4.3 显示程序的设计 18
4.4 按键程序设计 19
4.5 检测模块设计 21
5 系统调试与结果 23
5.1 各个模块的调试结果显示 23
5.1.1 OLED屏幕的调试结果显示 23
5.1.2 温湿度模块调试 23
5.1.3 土壤湿度模块调试 24
5.1.4 光敏强度模块调试 24
5.1.4 报警值设置 24
5.2 总体调试结果 25
6 总结 27
7 致谢 28
参 考 文 献 29
附录(源程序): 31

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

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

相关文章

腾讯云双11云服务器活动:88元一年的云服务器值得买吗?

作为一名程序员&#xff0c;在选择云服务器时&#xff0c;最关注的是网络稳定性、价格以及云服务商的规模。腾讯云在2023年10月23日的​双11活动​中推出了一款性价比极高的云服务器&#xff0c;为我们提供了一个非常有吸引力的选择。 1. 关注网络稳定性、价格和云服务商规模 …

jar包的精细化运营,Java模块化简介 | 京东云技术团队

图&#xff1a;模块化手机概念 一、什么是Java模块化 Java模块化&#xff08;module&#xff09;是Java9及以后版本引入的新特性。 官方对模块的定义为&#xff1a;一个被命名的&#xff0c;代码和数据的自描述集合。&#xff08; the module, which is a named, self-descri…

【C语法学习】15 - fopen()函数

文章目录 1 函数原型2 返回值3 参数3.1 文件名3.2 模式3.2.1 以"r"模式打开3.2.2 以"w"模式打开3.2.3 以"a"模式打开3.2.4 以"r"模式打开3.2.5 以"w"模式打开3.2.6 以"a"模式打开 1 函数原型 fopen()&#xff1a…

AI大模型架构师专家,你会问什么来测试我的水平,如何解答上述问题,学习路径是什么

0. 沈剑老师的大模型产品应用经验&#xff1a; 提示词三步骤&#xff1a; 假如我是xxx专家&#xff0c;你会问什么来测试我的水平&#xff1b;假如你是xxx专家&#xff0c;你会如何解答上述问题&#xff1b;假如你是xxx专家&#xff0c;上述问题的学习路径是什么&#xff1b;…

面试算法54:所有大于或等于节点的值之和

题目 给定一棵二叉搜索树&#xff0c;请将它的每个节点的值替换成树中大于或等于该节点值的所有节点值之和。假设二叉搜索树中节点的值唯一。例如&#xff0c;输入如图8.10&#xff08;a&#xff09;所示的二叉搜索树&#xff0c;由于有两个节点的值大于或等于6&#xff08;即…

GCN火车票识别项目 P3 PaddleOCR识别火车票信息

从这节开始&#xff0c;就正式进入GCN项目的代码环节&#xff0c;我们先使用PaddleOCR&#xff0c;识别出火车票上的文字信息&#xff0c;并提取文字所位置&#xff0c;整理后另存为一个csv文件。 项目的目的是要做信息抽取&#xff0c;所以对训练和测试数据&#xff0c;需要手…

存储器(详解)

概念 存储器&#xff08;Memory&#xff09;是计算机系统中用于存储和检索数据的硬件设备或组件。它在计算机中扮演着重要的角色&#xff0c;允许计算机暂时或永久地存储程序、数据和中间结果。 存储器是许多存储单元的集合&#xff0c;按单元号顺序排列。每个单元由若干二进制…

专为个人打造专注工作的便签APP工具推荐哪个

工作中很多人都比较懒散&#xff0c;工作起来动力不足&#xff0c;常常拖延消极怠工&#xff0c;等到一天结束后进行工作盘点时才发现很多项任务都没有处理完&#xff1b;这和日常工作不能专注于工作有很大的关系。 专注工作&#xff0c;在日常办公时可以选择一些好用的手机便…

【Android】android studio 怎么下载NDK

序言 新版的android studio在【Project Structure】里面的NDK路径是灰色的&#xff0c;无法点击&#xff0c;导致找不到ndk路径&#xff0c;也无法添加ndk。 下载方法 去这里找&#xff0c;一定要点这个按钮才能出现ndk。 下载之后&#xff0c;要在这个文件里面添加ndk路径

【不良人7】源源死后,谁将接替成为新的BOSS?全季反派分析

Hello,小伙伴们&#xff0c;我是小郑继续为大家深度解析国漫资讯。 深度解析&#xff0c;国漫精品《不良人》在历经6季的精彩演绎后&#xff0c;终于迎来了李嗣源的下线。这一消息对于广大《不良人》粉丝来说无疑是一个巨大的惊喜。而在即将到来的第7季中&#xff0c;剧情将由…

RPC 原理详解

文章目录 什么是 RPCRPC 基本原理RPC核心功能服务寻址数据编解码网络传输一次RPC的调用过程 实践基于HTTP协议的RPC基于TCP协议的RPC 什么是 RPC RPC&#xff08;Remote Procedure Call&#xff09;&#xff0c;即远程过程调用&#xff0c;它允许像调用本地服务一样调用远程服…

思路视野杂志思路视野杂志社思路视野编辑部2023年第24期目录

公共文化 公共图书馆文旅融合实践与模式思考 白雪1-3 公共图书馆管理与服务创新路径分析 陈静4-6 提升办公室文书档案管理工作的实践探讨 黄强7-9 《思路视野》投稿邮箱&#xff1a;cn7kantougao163.com(注明投稿“《思路视野》”) 崔编辑Q Q &#xff1a;296078736 微信号&am…

STL-set和map

目录 一、pair和make_pair 1. pair 2. make_pair 二、set &#xff08;一&#xff09;set的模板参数列表 &#xff08;二&#xff09;set的构造 &#xff08;三&#xff09;set的插入 1. 测试1 2. 测试2 &#xff08;四&#xff09;low_bound和upper_bound&#xff…

mediapipe流水线分析 一

object detection Graph 以目标检测为例分析mediapip流水线处理机制 一 流水线上游输入处理 1 Calculator 算子 它是在MediaPipe框架中用于创建插件/算子 机制的基础 在MediaPipe中&#xff0c;插件是一种可扩展的计算模块&#xff0c;可以用于实现各种不同的计算功能。calc…

路由器基础(九):防火墙基础

防火墙 (Fire Wall) 是网络关联的重要设备&#xff0c;用于控制网络之间的通信。外部网络用户的访问必须先经过安全策略过滤&#xff0c;而内部网络用户对外部网络的访问则无须过滤。现在的防火墙还具有隔离网络、提供代理服务、流量控制等功能。 一、三种防火墙技术 常见的…

努努之歌:英雄联盟外传 SongOfNunu(单人冒险游戏) 免安装中文版下载

《努努之歌&#xff1a;英雄联盟外传》是一款由Tequila Works开发的单人冒险游戏。置身于弗雷尔卓德的未知之地&#xff0c;探索扣人心弦的故事&#xff0c;一步步揭开努努和威朗普的过去&#xff0c;了解背后的真相。 游戏介绍 建立深厚友谊 扮演小男孩努努&#xff0c;在好朋…

WebGL:基础练习 / 简单学习 / demo / canvas3D

一、前置内容 canvas&#xff1a;理解canvas / 基础使用 / 实用demo-CSDN博客 WebGL&#xff1a;开始学习 / 理解 WebGL / WebGL 需要掌握哪些知识 / 应用领域 / 前端值得学WebGL吗_webgl培训-CSDN博客 二、在线运行HTML 用来运行WebGL代码&#xff0c;粘贴--运行&#xff…

Flutter 06 动画

一、动画基本原理以及Flutter动画简介 1、动画原理&#xff1a; 在任何系统的Ul框架中&#xff0c;动画实现的原理都是相同的&#xff0c;即&#xff1a;在一段时间内&#xff0c;快速地多次改变Ul外观&#xff1b;由于人眼会产生视觉暂留&#xff0c;所以最终看到的就是一个…

算法:弗洛里德算法Floyd

弗洛里德算法 简介 英文名Floyd 作用&#xff1a;寻找图中任意两点之间的最短路径 数据结构&#xff1a;邻接矩阵&#xff08;二维数组&#xff09; 思想 如果说从start到end之间转个弯能使得路径变短,那么就记录更短的路径&#xff0c; 对所有弯都试一下没到最后取最短的&am…

Zabbix监控联想服务器的配置方法

简介 图片 随着科技的发展&#xff0c;对于数据的敏感和安全大部分取决于对硬件性能、故障预判的监测&#xff0c;由此可见实时监测保障硬件的安全很重要&#xff0c;从而衍生了很多对硬件的监测软件&#xff0c;Zabbix就一个不错的选择。开源 开源 开源&#xff01; zabbix是…