基于STM32的智能温室控制系统设计
1 系统功能介绍
本设计为 基于 STM32 单片机的智能温室控制系统,旨在利用现代嵌入式控制技术与物联网通信技术,实现对温室内部环境的实时监控与智能调控。温室是植物生长的重要场所,合理的温度与湿度环境对于作物的健康成长至关重要,而人工管理往往效率低、准确性差。通过本系统,用户不仅可以在本地通过液晶屏直观查看温湿度信息,还能够借助蓝牙模块与手机 APP 实现远程监控与控制,达到节能高效、智能便捷的目标。
系统的主要功能包括:
-
环境参数检测与显示:通过温湿度传感器采集环境温湿度数据,实时显示在 1602 液晶屏 上,同时通过蓝牙模块传输至手机 APP。
-
报警功能:当湿度超过 75%RH 时,系统会自动向手机 APP 发送报警信息,提醒用户采取措施。
-
风扇智能控制:用户可以通过手机 APP 发送指令实现风扇远程控制:
- 发送字符 “O”:风扇启动;
- 发送字符 “C”:风扇关闭。
-
自动化与交互结合:系统既具备自动监测与报警功能,又能通过 APP 交互进行手动调控,保证了灵活性与可靠性。
该系统在实际应用中可广泛应用于智能农业、温室种植、仓储环境调节等场合,为绿色农业与物联网结合提供了良好的实践样例。
2 系统电路设计
2.1 单片机最小系统电路
核心控制器选用 STM32F103C8T6 单片机,其具有 32 位 ARM Cortex-M3 内核,主频可达 72MHz,拥有丰富的外设接口与强大的运算能力。
- 时钟电路:采用 8MHz 晶振,通过倍频获得系统主频;
- 复位电路:采用上电复位与按键复位双重方式,保证系统稳定启动;
- 电源电路:单片机工作电压为 3.3V,通过 AMS1117-3.3 稳压芯片由 5V 电源转换而来。
2.2 温湿度传感器电路
系统采用 DHT11 或 DHT22 温湿度传感器:
- 传感器通过单总线与 STM32 通信,周期性输出当前温湿度数据;
- 湿度检测范围在 20%RH~90%RH,精度满足温室应用需求;
- 数据读取通过定时器与 IO 捕捉实现可靠通信。
2.3 1602 液晶显示电路
- 1602 液晶用于实时显示温湿度数据;
- 数据接口模式选择 4 位总线方式,节省 IO 口;
- 第一行显示温度,第二行显示湿度,界面简洁直观。
2.4 风扇控制电路
- 采用 NPN 三极管+继电器驱动电路;
- STM32 输出高低电平控制三极管,继电器吸合与断开控制风扇电源;
- 驱动电路中加入反向二极管保护,防止继电器产生的感应电压损坏电路。
2.5 蓝牙通信电路
- 系统采用 HC-05 蓝牙串口模块,与 STM32 的 USART 串口通信;
- 波特率设置为 9600bps,满足数据传输需求;
- 手机 APP 通过蓝牙连接至系统,实现数据接收与命令发送。
2.6 电源电路
- 整个系统供电电压为 5V;
- 1602 液晶、蓝牙模块均可直接使用 5V;
- STM32 与 DHT11 工作电压为 3.3V,由 AMS1117-3.3 稳压模块提供;
- 电路中增加电源滤波电容,保证电源稳定,减少干扰。
3 程序设计
3.1 主程序设计
主程序负责系统的整体调度,包括初始化、数据采集、数据显示、蓝牙通信与风扇控制。
#include "stm32f10x.h"
#include "lcd1602.h"
#include "dht11.h"
#include "usart.h"
#include "fan.h"uint8_t humidity, temperature;
uint8_t rxData;int main(void)
{LCD1602_Init();DHT11_Init();USART1_Init(9600);Fan_Init();while(1){if(DHT11_Read_Data(&temperature, &humidity) == SUCCESS){LCD1602_ShowString(0,0,"Temp: ");LCD1602_ShowNum(6,0,temperature,2);LCD1602_ShowString(0,1,"Humi: ");LCD1602_ShowNum(6,1,humidity,2);USART1_SendString("T:");USART1_SendNum(temperature);USART1_SendString(" H:");USART1_SendNum(humidity);USART1_SendString("\r\n");if(humidity > 75){USART1_SendString("ALARM: HUMI HIGH!\r\n");}}if(USART1_Receive(&rxData) == SUCCESS){if(rxData == 'O') Fan_On();else if(rxData == 'C') Fan_Off();}Delay_ms(1000);}
}
3.2 DHT11 温湿度采集程序
uint8_t DHT11_Read_Data(uint8_t *temp, uint8_t *humi)
{uint8_t buf[5];// 按照时序读取40位数据if(DHT11_Read(buf) == SUCCESS){*humi = buf[0];*temp = buf[2];return SUCCESS;}return ERROR;
}
3.3 液晶显示程序
void LCD1602_ShowNum(uint8_t x, uint8_t y, uint16_t num, uint8_t len)
{char str[5];sprintf(str,"%d",num);LCD1602_ShowString(x,y,str);
}
3.4 蓝牙串口通信程序
void USART1_Init(uint32_t baudrate)
{// 配置USART1:波特率9600, 8N1格式// 开启接收中断,处理蓝牙指令
}void USART1_SendString(char *str)
{while(*str){USART_SendData(USART1, *str++);while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);}
}
3.5 风扇控制程序
void Fan_Init(void)
{GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB, &GPIO_InitStructure);GPIO_ResetBits(GPIOB, GPIO_Pin_0);
}void Fan_On(void)
{GPIO_SetBits(GPIOB, GPIO_Pin_0);
}void Fan_Off(void)
{GPIO_ResetBits(GPIOB, GPIO_Pin_0);
}
4 总结
本设计的 基于 STM32 的智能温室控制系统,实现了对温湿度的实时监测与风扇的智能控制,能够在本地与远程(手机 APP)两种方式下使用。系统不仅可以直观显示温湿度信息,还能够在湿度过高时及时报警,避免作物因环境不适而生长受阻。
其优点主要体现在:
- 实时性强:传感器检测频率高,信息即时更新。
- 交互性好:液晶显示与 APP 通信结合,用户体验友好。
- 控制灵活:支持自动报警与手动远程控制相结合。
- 扩展性强:未来可接入 Wi-Fi 模块,实现互联网远程控制。
该系统在现代智能农业和温室管理中具有广泛的应用前景,为实现智慧农业与节能管理提供了可靠的技术支撑。