基于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);
		
		}
	}
}

六、资料分享

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

相关推荐
SystickInt4 小时前
32 DMA实现ROM与RAM通信
stm32·单片机·嵌入式硬件
俊昭喜喜里6 小时前
STM32开发板电源设计( DCDC 电路和 LDO 电路 )
stm32·单片机·嵌入式硬件
m0_555762906 小时前
方案再再对比
单片机
路弥行至6 小时前
FreeRTOS任务管理详解中: FreeRTOS任务创建与删除实战教程(动态方法)
c语言·开发语言·笔记·stm32·操作系统·freertos·入门教程
boneStudent7 小时前
Day20:串口基本配置与收发
stm32·单片机·嵌入式硬件
紫阡星影7 小时前
基于Arduino模拟烟雾监测系统
单片机·嵌入式硬件·arduino
HIZYUAN8 小时前
嵌入式开发踩坑记: AG32硬件设计指南(一)
stm32·单片机·嵌入式硬件·fpga开发·硬件设计·最小系统·agm ag32
三佛科技-134163842128 小时前
BP85958D输出12V400MA智能家居电源芯片(典型应用电路、替代型号HN32512)
单片机·嵌入式硬件·物联网·智能家居·pcb工艺
海涛高软9 小时前
axi-gpio
单片机·嵌入式硬件
youcans_9 小时前
【动手学STM32G4】(2)USB 虚拟串口通信
stm32·单片机·嵌入式硬件·串口通信·通信协议