本设计的硬件构成:
STM32F103C8T6单片机最小系统板(包含+3.3V稳压电路+时钟晶振电路+复位电路(上电自复位,手动复位)),温度传感器、PH传感器、OLED显示屏、按键、蜂鸣器、语音播报模块、蓝牙模块等电路构成;
功能介绍:
1、单片机采集土壤的湿度值、温度值、PH值。
2、采用OLED显示器显示土壤信息。
3、按键设置土壤湿度、温度、PH值阈值,当湿度触发阈值时,语音播报:湿度低,自动启动水泵补水。温度、PH触发阈值时,蜂鸣器报警。按键能手动控制水泵。
4、通过蓝牙连接手机APP,实时显示数据,接收报警信息,并能远程控制水泵的开关。
5、按键可调整报警值阈值,可切换手自动模式,控制水泵的开关。
PCB图:
程序源码:
int main(void)
{
vu8 key=0;
delay_init(); //延时函数初始化
BEEP_Init(); //初始化蜂鸣器端口
KEY_Init(); //初始化与按键连接的硬件接口
uart_init(9600);
usart2_Init(9600);
TIM2_Int_Init(999,7199);//10Khz的计数频率,计数到5000为500ms
Adc_Init();
FAN_Init();
OLED_Init();
OLED_ColorTurn(0);//0正常显示,1 反色显示
OLED_DisplayTurn(0);//0正常显示 1 屏幕翻转显示
display_refresh();
BEEP=1;
PUMP=1;
Delay_ms(500);
while(1)
{
key=KEY_Scan(1); //得到键值
KEY_Handle(key);
APP_Handle();
if(T_1s>45)
{
T_1s=0;
if(mode==AUTO)
{
if((warn_flag==2))
{
play_voice(1);
}
}
}
if(T_100ms>=10)
{
T_100ms = 0;
if(refresh==1)
APP_refresh();
if(people_flag>0)
people_flag--;
//采集湿度、PH值
ALValue = (u16)Humi();
PH = Get_PH();
//采集温度值
Temp=((u16)DS18B20_Get_Temp());
if(set==0) //set为0,说明现在不是设置状态
{
display_refresh(); //显示AD数值和报警值
if(warn_flag>0)
{
BEEP=~BEEP;
}
else
BEEP=1;
if((Temp>setTemp))
{
warn_flag=1;
}
else if(ALValue<WARNING)
{
warn_flag=2;
}
else if(PH>setPH)
{
warn_flag=3;
}
else
{
warn_flag=0;
}
if(mode==AUTO)
{
if((warn_flag==2))
{
if(PUMP_state==1)
PUMP=0;
}
else
{
PUMP=1;
}
}
}
}
}
}
资料链接:https://pan.baidu.com/s/1j1N-Vf8JcQFP5ozN0Q6Bdw
提取码:gb4z