您的当前位置:首页正文

基于STM32的自动养花系统

2024-12-01 来源:个人技术集锦

一、本文将具体说明基于STM32的自动养花系统设计开发详情和流程,该系统可实现以下这些功能:

        本系统采用器件核心为STM32F103C8T6最小核心板。搭有Water 水位传感器、土壤湿度传感器、光敏电阻、jw二氧化碳传感器、水泵、存储器模块等

系统可实现的功能:

        可实时检测植物的生长环境,检测土壤的湿度、空气中的二氧化碳、光照强度,并在OLED屏幕上展现。设有湿度、二氧化碳浓度、光照强度等阈值,当检测到的数据异常,则执行相应的操作,如:当土壤湿度过低,则打开水泵进行浇水,二氧化碳浓度过高则打开通风口,进行减低二氧化碳浓度处理;光照强度过低则进行补光。系统对于给植物浇花的水箱设有水位传感器实时检测含水量,过低则进行抽水补充,且设有阈值存储器,可实时的调整阈值范围,适应各种植物的养护。

        系统还搭有联网功能,使用的是机智云app云平台,可通过手机远程实时监测植物的环境参数,并可远程打开养护操作如:补光、抽水等功能。

植物养护系统(阉割版)

设计方向:系统含有两个操作模式,自动模式和手动模式。

自动模式:系统自动检测各种环境参量,参数异常则自动执行对应操作功能。

养花系统自动检测模式

手动模式:可人为在单片机通过按键查看各种环境参数,并执行对应的操作功能,每一功能模块为单独成立。

界面美化:为了美化操作界面,本系统对oled的界面显示进行了优化,每个功能进行单独分类,并通过按键选择对应的功能,减少操作冗杂。

 界面美化显示

 二、代码部分展示

Water 水位传感器

检测水箱是否有水:

#include "water.h"
#include "delay.h"

#define WA GPIO_Pin_11

 /***************  配置LED用到的I/O口 *******************/

void Water_GPIO_Config(void)	
{
  GPIO_InitTypeDef GPIO_InitStructure;
  RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE); // 使能端口时钟  
  GPIO_InitStructure.GPIO_Pin = WA;	
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;       
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOB, &GPIO_InitStructure);  //初始化端口
  //GPIO_SetBits(GPIOB, WA);	 // 关闭所有LED
}
int Water_state(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin_x)
{
	Delay_ms(10);
	if( GPIO_ReadInputDataBit(GPIOx, GPIO_Pin_x)  == 0)
	{
		return 1;
	}
	else
	{
		return 0; 
	}
}
			if( Water_state(GPIOB,  GPIO_Pin_11)== 0)
		 {
			printf("\r\n有水");
		 }
		 else
			printf("\r\n无水");

界面美化:

//选择界面
void Select_Show(void)
{
	u8 key,num=0;
	OLED_Clear(0x00);//清屏
		while(1)
		{
			
			Wifi_date();//机智云接收数据包
		if(num<7)
		{
			Admin_show();//各大功能页面
		}
		if(num>=7)
		{
			num=1;
		}
			key=key_scan();
			if(key==1)
			{
				num++;
				
			}
			if(key==3)
			{
				OLED_Clear(0x00);//清屏
				Smart_Greenhouse();//回到主页面
			}
		
			///空气温湿度单独页面
			if(num==1)
			{
				OLED_Clear(0x00);//清屏
				while(1)
				{
					Wifi_date();//机智云接收数据包
				Oled_ShowPic(0,32,64,64,(u8 *)pic4);//天气
					key=key_scan();
				if(key==1)
				{
					num++;
					break;
				}
				if(key==2)
				{
				 Weather_Show();//天气温湿度
				}
				if(key==3)
				{
					num=0;
					OLED_Clear(0x00);//清屏
					break;
				}
				}
			}
///土壤湿度单独页面
			if(num==2)
			{
				OLED_Clear(0x00);//清屏
				while(1)
				{
					Wifi_date();//机智云接收数据包
				Oled_ShowPic(0,32,64,64,(u8 *)pic10);//土壤湿度
					key=key_scan();
				if(key==1)
				{
					num++;
					break;
				}
				if(key==2)
				{
				 Soil_Show();//土壤湿度展示
				}
				if(key==3)
				{
					num=0;
					OLED_Clear(0x00);//清屏
					break;
				}
				}
			}
			///光照强度单独页面
			if(num==3)
			{
				OLED_Clear(0x00);//清屏
				while(1)
				{
					Wifi_date();//机智云接收数据包
				Oled_ShowPic(0,32,64,64,(u8 *)pic15);//光照强度
					key=key_scan();
				if(key==1)
				{
					num++;
					break;
				}
				if(key==2)
				{
				 Light_Show();//光照强度展示
				}
				if(key==3)
				{
					num=0;
					OLED_Clear(0x00);//清屏
					break;
				}
				}
			}
					///二氧化碳浓度单独页面
			if(num==4)
			{
				OLED_Clear(0x00);//清屏
				while(1)
				{
					Wifi_date();//机智云接收数据包
				Oled_ShowPic(0,32,64,64,(u8 *)pic18);//光照强度
					key=key_scan();
				if(key==1)
				{
					num++;
					break;
				}
				if(key==2)
				{
				 C02_Show();//光照强度展示
				}
				if(key==3)
				{
					num=0;
					OLED_Clear(0x00);//清屏
					break;
				}
				}
			}
					///阈值设置单独页面
			if(num==5)
			{
				OLED_Clear(0x00);//清屏
				while(1)
				{
					Wifi_date();//机智云接收数据包
				Oled_ShowPic(0,32,64,64,(u8 *)pic24);//设置图标
					key=key_scan();
				if(key==1)
				{
					num++;
					break;
				}
				if(key==2)
				{
				 Set_Show();//设置展示
				}
				if(key==3)
				{
					num=0;
					OLED_Clear(0x00);//清屏
					break;
				}
				}
			}
			//wifi单独页面
				if(num==6)
			{
				OLED_Clear(0x00);//清屏
				while(1)
				{
				Wifi_date();//机智云接收数据包
				Oled_ShowPic(0,32,64,64,(u8 *)pic28);//wifi
				key=key_scan();
				if(key==1)
				{
					num++;
					break;
				}
				if(key ==2)//进入窗帘页面
				{
					Wifi_Show();
				
				}
				if(key==3)
				{
					num=0;
					OLED_Clear(0x00);//清屏
					break;
				}
				}

			}

}

}

如想获取整个代码的同学,可添加本人QQ1972218606。

本人可接单片机系统设计,学生价,有兴趣的可联系本人。

如本文章所设计的系统,淘宝上设计做出实物至少要8百左右,本人则需要一半的价格便可,如果只需要代码则更便宜,可自行上淘宝查看对比,欢迎有兴趣的朋友联系。

显示全文