基于STM32的智能植物生长监控系统设计

"我们不做一锤子买卖,只做技术成长的长期伙伴!"STM32项目分享:

目录

一、视频展示

二、项目简介

三、原理图设计

四、PCB硬件设计

五、程序设计

六、资料分享


一、视频展示

基于 STM32 的智能植物生长监控系统设计 -视频分享

二、项目简介

题目:基于 STM32 的智能植物生长监控系统设计

主控:STM32

显示:OLED显示屏

DHT11温湿度传感器

光照传感器

土壤湿度传感器

PH监测

usb小灯

通信:蓝牙

控制模块:灌溉继电器➕卷帘门、继电器

声光报警:LED+蜂鸣器

功能:

1、实时监测当前温湿度,光照,土壤湿度,和PH值并显示在屏幕上,可按键查看阈值。

2、可通过按键设置阈值,包括土壤湿度阈值,光照阈值,最大ph阈值。

3、蓝牙接收当前数据信息,也可控制单片机。

4、可切换为手动模式和自动模式

5、手动模式下可自己打开和关闭灌溉继电器。

7、当光照低于阈值后则关闭卷帘门(夜晚);当光照高于阈值时,打开卷帘门(白天),

当土壤湿度低于阈值或PH高于阈值时,打开灌溉,当高于时关闭。

三、原理图设计

四、PCB硬件设计

五、程序设计

复制代码
#include "stm32f10x.h"                  // Device header
#include "delay.h"
#include "lcd.h"
#include "dht11.h"
#include "IOput.h"
#include "usart.h"
#include "timer.h"
#include "adc.h"
#include "pwm.h"

extern u8 res;

u8 light,water,ph,count,open_flag=0;
u8 show_flag,show1_flag,max_wd=30,max_LIGHT=40,dec_TS=10,max_PH=9,mode_flag=0;
int main (void)
{
	delay_init();
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
	
	DHT11_Init();
	OLED_Init();
	delay_ms(1);
	OLED_Clear();
	output_init();
	input_init();
	Usart1_Init(9600);
	TIM_PWM_Init(71,9999);
	Adc_Init();
	while(1)
	{
		count++;
		if(res=='a')
		{
			OLED_Clear();
			set_flag=1;
			res=0;
		}
		else if(res=='b')
		{
			OLED_Clear();
			add_flag=1;
			res=0;
		}
		else if(res=='c')
		{
			OLED_Clear();
			dec_flag=1;
			res=0;
		}
		light=100-Get_Adc_Average(0,10)*100/4096;
		water=100-Get_Adc_Average(4,10)*100/4096;

		ph = (Get_Adc_Average(5, 10) * 3.3 / 4096) * (-5.7541) + 16.654; // 计算pH值
		DHT11_Read_Data(&temp,&humi);
		
		key_scan(1,0,0);
		if(set_flag==1 && show_flag!=1)
		{
			show1_flag=0;
			set_flag=0;
			show_flag++;
			if(show_flag>=2)
			{
			show_flag=0;
			}
		}
		if(show_flag==0)
		{
			OLED_ShowCH(0,0,"植物生长监控系统");
			OLED_ShowCH(0,2,"温度:");
			OLED_ShowNum(40,2,temp,2,16);
			OLED_ShowCH(0,4,"湿度:");
			OLED_ShowNum(40,4,humi,2,16);
			
			OLED_ShowCH(64,2,"光照:");
			OLED_ShowNum(104,2,light,2,16);
			OLED_ShowCH(64,4,"土湿:");
			OLED_ShowNum(104,4,water,2,16);
			OLED_ShowCH(0,6,"P  H:");
			OLED_Showdecimal(40,6,ph,2,2,16);
			
			if(add_flag==1)
			{
				mode_flag++;
				add_flag=0;
				if(mode_flag>=2)
					mode_flag=0;
			}
			
			if(mode_flag==0)
			{
				OLED_ShowCH(96,6,"手动");
				if(dec_flag==1)
				{
					open_flag++;
					dec_flag=0;
					if(open_flag>=8)
						open_flag=0;
				}
				if(open_flag==0)
				{
					TIM_SetCompare2(TIM2,0);
					JDQ1=1;
					JDQ2=1;
				}
				else if(open_flag==1)
				{
					TIM_SetCompare2(TIM2,0);
					JDQ1=1;
					JDQ2=0;
				}
				else if(open_flag==2)
				{
					TIM_SetCompare2(TIM2,0);
					JDQ1=0;
					JDQ2=1;
				}
				else if(open_flag==3)
				{
					TIM_SetCompare2(TIM2,0);
					JDQ1=0;
					JDQ2=0;
				}
				else if(open_flag==4)
				{
					TIM_SetCompare2(TIM2,70);
					JDQ1=1;
					JDQ2=1;
				}
				else if(open_flag==5)
				{
					TIM_SetCompare2(TIM2,70);
					JDQ1=1;
					JDQ2=0;
				}
				else if(open_flag==6)
				{
					TIM_SetCompare2(TIM2,70);
					JDQ1=0;
					JDQ2=1;
				}
				else if(open_flag==7)
				{
					TIM_SetCompare2(TIM2,70);
					JDQ1=0;
					JDQ2=0;
				}
			}
			else
			{
				OLED_ShowCH(96,6,"自动");
				
					if(light>=max_LIGHT)
					{
						JDQ1=0;
						TIM_SetCompare2(TIM2,0);
					}
					else
					{
						JDQ1=1;
						TIM_SetCompare2(TIM2,100-light);

					}
					
					if(ph>=max_PH || water<=dec_TS || temp>=max_wd)
					{
						BEEP=0;
						if(ph>=max_PH || water<=dec_TS)
							JDQ2=0;
					}
					else
					{
						BEEP=1;
						JDQ2=1;
					}
			}
		}
		if(show_flag==1)
		{
			OLED_ShowCH(0,0,"最高温度:");
			OLED_ShowCH(0,2,"最低土湿:");
			OLED_ShowCH(0,4,"最高光照:");
			OLED_ShowCH(0,6,"最大P H:");
			OLED_ShowNum(72,0,max_wd,2,16);
			OLED_ShowNum(72,2,dec_TS,2,16);
			OLED_ShowNum(72,4,max_LIGHT,2,16);
			OLED_ShowNum(72,6,max_PH,2,16);
			if(set_flag==1&&show_flag==1)
			{
				set_flag=0;
				show1_flag++;
				if(show1_flag>=4)
				{
					show_flag=0;	
					OLED_Clear();
				}
			}
			if(show1_flag==0)
			{
				OLED_ShowCH(112,0,"←");
				if(add_flag==1)
				{
					add_flag=0;
					max_wd++;
				}
				if(dec_flag==1)
				{
					dec_flag=0;
					max_wd--;
				}
				if(max_wd>=100 || max_wd<=0){max_wd=0;}
			}
			if(show1_flag==1)
			{
				OLED_ShowCH(112,2,"←");
				if(add_flag==1)
				{
					add_flag=0;
					dec_TS++;
				}
				if(dec_flag==1)
				{
					dec_flag=0;
					dec_TS--;
				}
				if(dec_TS>=100 || dec_TS<=0){dec_TS=0;}
			}
			if(show1_flag==2)
			{
				OLED_ShowCH(112,4,"←");
				if(add_flag==1)
				{
					add_flag=0;
					max_LIGHT++;
				}
				if(dec_flag==1)
				{
					dec_flag=0;
					max_LIGHT--;
				}
				if(max_LIGHT>=100 || max_LIGHT<=0){max_LIGHT=0;}
			}
			if(show1_flag==3)
			{
				OLED_ShowCH(112,6,"←");
				if(add_flag==1)
				{
					add_flag=0;
					max_PH++;
				}
				if(dec_flag==1)
				{
					dec_flag=0;
					max_PH--;
				}
				if(max_PH>=15 || max_PH<=0){max_PH=0;}
			}
		
		}
		
		
		if(count>=100)
		{
			count=0;
			UsartPrintf(USART1,"温度:%d\r\n",temp);
			UsartPrintf(USART1,"湿度:%d\r\n",humi);
			UsartPrintf(USART1,"土壤湿度:%d\r\n",water);
			UsartPrintf(USART1,"PH:%d\r\n",ph);
			UsartPrintf(USART1,"光照:%d\r\n",light);
		
		}
	}
}

六、资料分享

点击即可查看当前资料分享。

相关推荐
代码游侠10 小时前
学习笔记——设备树基础
linux·运维·开发语言·单片机·算法
xuxg200512 小时前
4G 模组 AT 命令解析框架课程正式发布
stm32·嵌入式·at命令解析框架
CODECOLLECT13 小时前
京元 I62D Windows PDA 技术拆解:Windows 10 IoT 兼容 + 硬解码模块,如何降低工业软件迁移成本?
stm32·单片机·嵌入式硬件
BackCatK Chen14 小时前
STM32+FreeRTOS:嵌入式开发的黄金搭档,未来十年就靠它了!
stm32·单片机·嵌入式硬件·freertos·低功耗·rtdbs·工业控制
全栈游侠16 小时前
STM32F103XX 02-电源与备份寄存器
stm32·单片机·嵌入式硬件
Lsir10110_16 小时前
【Linux】中断 —— 操作系统的运行基石
linux·运维·嵌入式硬件
深圳市九鼎创展科技19 小时前
瑞芯微 RK3399 开发板 X3399 评测:高性能 ARM 平台的多面手
linux·arm开发·人工智能·单片机·嵌入式硬件·边缘计算
辰哥单片机设计19 小时前
STM32项目分享:车辆防盗报警系统
stm32·单片机·嵌入式硬件
風清掦20 小时前
【江科大STM32学习笔记-05】EXTI外部中断11
笔记·stm32·学习
小龙报20 小时前
【51单片机】从 0 到 1 玩转 51 蜂鸣器:分清有源无源,轻松驱动它奏响新年旋律
c语言·数据结构·c++·stm32·单片机·嵌入式硬件·51单片机