一、本文将具体说明基于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百左右,本人则需要一半的价格便可,如果只需要代码则更便宜,可自行上淘宝查看对比,欢迎有兴趣的朋友联系。