一. 系统概述
该系统由STM32单片机主控,通过温度传感器进行环境温度监测,同时还能检测土壤湿度和水箱水位。系统提供手动和自动两种模式。在手动模式下,用户可以通过按键直接控制浇水和加水;在自动模式下,系统会根据预设的阈值自动执行相应操作,例如温度超标会触发报警,湿度过低会自动浇水,水箱水位不足会自动加水。
二. 仿真功能描述
- LCD1602显示屏实时展示土壤湿度、水箱水位、温度以及对应的阈值设定情况,方便用户进行监控。
- 在默认的手动模式下,按下水泵控制按钮可以启动水泵进行浇水。
- 按下水箱控制按钮时,系统会启动加水装置向水箱补充水分。
- 通过按下自动/手动模式切换按钮,可以在两种控制模式之间进行切换。
- 在自动模式下,系统会监控水箱水位,当水位低于设定阈值时,自动启动加水装置。
- 自动模式下,通过调整土壤湿度值,当湿度低于设定阈值时,系统会自动控制水泵进行浇水。
- 在自动模式下,系统会监测温度。当温度超出设定的阈值时,系统会发出警报。
- 在自动模式下,按下设置按钮可以调整温度、土壤湿度和水箱水位的阈值。
三.程序设计
#include <stm32f10x.h>
#include <Lcd1602.h>
#include <Led.h>
#include <Ds18b20.h>
#include <Beep.h>
#include <Relay.h>
#include <key.h>
#include "PCF8591.h"
#include "myiic.h"
int main(void)
{
u8 Humi,Hmax=30,Hmin=25;
u8 Water;
u8 temp,Tmax=25,Tmin=20;//温度报警阈值
u8 mode =0;
Key_Init();//PB12 13 14 15
Lcd1602_Init();//PA0-7 PB7-9
LedA_Init();//PA13 14 15
Ds18b20_Init();//PA12
PCF8591_Init();//PB10 11
Lcd1602_Write_String(0x80,2,(u8*)"T:");
Lcd1602_Write_String(0x88,2,(u8*)"-");
Lcd1602_Write_String(0xc8,2,(u8*)"-");
Lcd1602_Write_String(0xc0,2,(u8*)"H:");
Lcd1602_Write_String(0x80+4,1,(u8*)"C");
Lcd1602_Write_String(0xc0+4,1,(u8*)"%");
Lcd1602_Write_String(0x8f-3,2,(u8*)"W");
Lcd1602_Write_String(0x8f,1,(u8*)"%");
LedA0_0;
LedA1_0;
LedA2_0;
while(1)
{
u8 key=0;
static u8 set=0;
//显示
temp =Ds18b20_Temp() ;
Lcd1602_Write_Num8(0x82,temp);
Humi=PCF8591_ADC_Input(0x90,1);
Water=PCF8591_ADC_Input(0x90,4);
if(Water<=100 && Humi<=100) { Lcd1602_Write_Num8(0xc2,Humi);Lcd1602_Write_Num8(0x8f-2,Water); }
//温度阈值显示
Lcd1602_Write_Num8(0x86,Tmin);
Lcd1602_Write_Num8(0x89,Tmax);
//湿度阈值显示
Lcd1602_Write_Num8(0xc6,Hmin);
Lcd1602_Write_Num8(0xc9,Hmax);
Key_detect();//按键扫描
key=Key_detect();
Lcd1602_Write_Num8(0xce,set);
//模式切换
if(key==4)
{
delay_ms(100);
mode =~mode;
key=0;
KeyFlag=0;
}
}
}
24-32f-22