本设计的硬件构成:
STM32F103C8T6单片机最小系统板,温湿度传感器、土壤湿度传感器、OLED显示屏、光敏检测电路、按键、蜂鸣器、LED灯、wifi模块、风扇驱动电路、水泵驱动电路、继电器组合而成;
功能介绍:
1、STM32作为控制器,基于keil5平台C语言编程。
2、采集环境温湿度、光照强度、土壤湿度。
3、OLED显示器显示当前的温湿度、光强及土壤数据。
4、按键设置各参数阈值,当超过阈值时,蜂鸣器报警,自动风扇换气、LED补光、水泵浇水,按键可以手动控制风扇换气、LED补光、水泵浇水、施肥(继电器);
4、按键1:模式切换(手动或自动)﹔按键2︰设置键;按键3∶加一键(非设置状态为控制风扇开关);按键4∶减一键(非设置状态为控制水泵开关)﹔按键4∶控制补光灯开关;按键5:控制施肥(继电器)开关;
5、WIFI连接APP,显示温湿度、光照强度、土壤湿度数据,远程控制风扇换气、LED补光、水泵浇水、施肥(继电器);APP可对采集到的数据进行保存。
部分程序源码:
int main(void)
{
vu8 key=0;
delay_init(); //延时函数初始化
BEEP_Init(); //初始化蜂鸣器端口
KEY_Init(); //初始化与按键连接的硬件接口
uart_init(9600);
TIM2_Int_Init(999,7199);//10Khz的计数频率,计数到1000为100ms
Adc_Init();
FAN_Init();
LED_Init();
OLED_Init();
OLED_ColorTurn(0);//0正常显示,1 反色显示
OLED_DisplayTurn(0);//0正常显示 1 屏幕翻转显示
display_refresh();
BEEP=1;
Delay_ms(500);
while(1)
{
key=KEY_Scan(1); //得到键值
KEY_Handle(key);
APP_Handle();
if(T_100ms>=10)
{
T_100ms = 0;
APP_refresh();
if(people_flag>0)
people_flag--;
//采集土壤湿度值
ALValue = (u16)(Get_Adc(9)/40);
light = Get_Adc_Average(8,10);
getDHT11Data(); //获取湿度数据
if(set==0) //set为0,说明现在不是设置状态
{
display_refresh(); //显示AD数值和报警值
if(warn_flag==1)
{
if(GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_1)==1)
{
BEEP=0;
}
else
BEEP=1;
}
else
BEEP=1;
if((Temp>setTemp)||(Humi>setHumi)||(ALValue>WARNING)||(light>setLight))
{
warn_flag=1;
}
else
{
warn_flag=0;
}
if(mode==AUTO)
{
if((Temp>setTemp))
{
FAN=0;
}
else
{
FAN=1;
}
if((Humi>setHumi))
{
PUMP=0;
}
else
{
PUMP=1;
}
if(light>setLight)
{
LED=0;
}
else
{
LED=1;
}
if(ALValue>WARNING)
{
RELAY=0;
}
else
{
RELAY=1;
}
}
}
}
}
}