本文将具体说明植物试验基地温室大棚监控系统设计开发详情和流程,该系统可实现以下这些功能:
本系统设计主要有两大方向,一为自动操控界面,系统自动监测环境并根据监测到的参数执行相应的操作;二为人为手动控制,人为的监测环境并操控功能的打开。
本系统设计带有OLED页面操作,操作方式为按键操作。系统搭建有记忆模块AT24C02,存储参数阈值(如温湿度、土壤湿度等),人为改变阈值,可实现监控不同植物的生长环境,并因为是将环境参数阈值存储在记忆模块,所以可实现掉电,参数改变仍保留的功能。
下面将简单介绍系统实现的某个功能,就不一一列举了。
一、系统自动控制
- OLED显示屏上显示系统监测到的土壤含水量、日光强度、CO₂浓度、空气温度、空气湿度等重要信息;
- 该系统设置有温湿度阀值、二氧化碳浓度阀值、土壤湿度阈值,阀值超标蜂鸣器报警提示;
- 温湿度度阀值和二氧化碳阀值超标开启风扇降温通风,土壤湿度过低开启水泵浇水,光照强度低于阀值开启补光灯;
- 系统通过WIFI连接网络,手机远程查看系统数据,并且可通过机智云APP控制开关风扇、灯光、水泵。
系统自动监测页面
二、人为监控页面
人为监控操作页面
第一个图标是监控空气温湿度、第二个为监控土壤湿度、第三个为光照强度、第四个为二氧化碳浓度、第五个为阈值设计、第六个为WiFi联网
人为查看光照强度
使用按键选择查看光照强度,并且通过按键2进入补光模式
补光模式(二档)
联网模块---通过esp8266与机智云服务段建立连接
机智云操控页面
功能的部分代码
获取光照强度、土壤湿度:
#include "adc.h"
/***********************
函数名:ADC1_Init
函数功能:模数转换初始化
形参:void
返回值:void
函数说明:
光敏电阻 ---PA5--ADC12_IN5
土壤湿度传感器--PA4---ADC12_IN4
************************/
void ADC1_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
ADC_InitTypeDef ADC_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//使能GPIOA时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);//使能ADC1
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN;
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4|GPIO_Pin_5;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);
ADC_DeInit(ADC1);
ADC_InitStructure.ADC_ContinuousConvMode=DISABLE;//连续转化模式设置
ADC_InitStructure.ADC_DataAlign=ADC_DataAlign_Right;//数据左对齐
ADC_InitStructure.ADC_ExternalTrigConv=ADC_ExternalTrigConv_None;//软件触发
ADC_InitStructure.ADC_Mode=ADC_Mode_Independent;//独立模式
ADC_InitStructure.ADC_NbrOfChannel=1;//通道数
ADC_InitStructure.ADC_ScanConvMode=DISABLE;//扫描模式禁止设置
ADC_Init(ADC1,&ADC_InitStructure);
//ADC_TempSensorVrefintCmd(ENABLE); //开启内部温度传感器
ADC_Cmd(ADC1,ENABLE);//使能指定ADC外设
ADC_ResetCalibration(ADC1);//使能复位校准
while(ADC_GetResetCalibrationStatus(ADC1));//等待复位校准结束
ADC_StartCalibration(ADC1);//开启AD校准
ADC_GetCalibrationStatus(ADC1);//等待AD校准结束
}
/***********************
函数名:get_Adc_Value
函数功能:换取采样值
形参:u8 ch
返回值:u16
函数说明:
ch 转换通道 ADC_SampleTime_239Cycles5采样时间值 采样时间选择最长
1 采样通道数量
光敏电阻 ---PA5--ADC12_IN5
土壤湿度传感器--PA4---ADC12_IN4
************************/
u16 get_Adc_Value(u8 ch)//通道一采样值
{
ADC_RegularChannelConfig(ADC1,ch,1,ADC_SampleTime_239Cycles5);//ADC匹配通道
ADC_SoftwareStartConvCmd(ADC1,ENABLE);//ADC软件转换启动
while(!ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC));//等待采样结束
return ADC_GetConversionValue(ADC1);//放回采样值
}
/***********************
函数名:Get_light_Value
函数功能:光照强度
形参:void
返回值:void
函数说明:
光敏电阻 ---PA5--ADC12_IN5---0x05
土壤湿度传感器--PA4---ADC12_IN4--0x04
************************/
u8 light_value,soil_value;
u8 buf3[20];
u8 buf4[20];
u8 light_flag=0;
u8 soil_flag=0;
void Get_light_Value(void)
{
light_value=0;
u16 Rec=0;
Rec=get_Adc_Value(0x05);//获取采样数值
light_value = 100 - ((100 * Rec)/4096);//光照强度百分比
sprintf((char *)buf3,"光照强度:%d%%LX",light_value);
if(light_flag ==0)
{
Oled_ShowAll(4,0,buf3);//显示中英字符串
}
if(light_flag==1)
{
Oled_ShowAll(6,0,buf3);//显示中英字符串
}
}
/***********************
函数名:Get_soil_Value
函数功能:土壤湿度
形参:void
返回值:void
函数说明:
光敏电阻 ---PA5--ADC12_IN5---0x05
土壤湿度传感器--PA4---ADC12_IN4--0x04
************************/
void Get_soil_Value(void)
{
soil_value=0;
u16 Rec=0;
Rec=get_Adc_Value(0x04);//获取土壤采样数值
soil_value = 100 - ((100 * Rec)/4096);//土壤强度百分比
if(soil_flag==0)
{
sprintf((char *)buf4,"土壤湿度:%d%%",soil_value);
Oled_ShowAll(4,0,buf4);//显示中英字符串
}
if(soil_flag == 1)
{
sprintf((char *)buf4,"soil:%d%%",soil_value);
Oled_ShowAll(4,64,buf4);//显示中英字符串
}
}
如想获取整个代码的同学,可添加本人QQ1972218606。
本人可接单片机系统设计,学生价,有兴趣的可联系本人。
如本文章所设计的系统,淘宝上设计做出实物至少要8百左右,本人则需要一半的价格便可,如果只需要代码则更便宜,可自行上淘宝查看,欢迎有兴趣的朋友联系。