一. 系统概述
本系统由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