1 系统功能介绍
本设计是一套基于 STM32 单片机 的智能温室控制报警系统,主要实现温湿度实时监测、超限报警、远程控制风扇等功能。该系统综合了温湿度采集、液晶显示、蓝牙通信、风扇驱动和蜂鸣器报警等模块,能够对温室的环境状态进行智能化管理,具有实时性高、可远程控制、报警灵敏的特点,适用于农业大棚、植物培养室等需要环境控制的场景。
系统的主要功能包括:
- 温湿度实时检测与显示
系统使用温湿度传感器实时采集温度与湿度数据,通过 1602 液晶 在本地显示,同时将数据通过蓝牙发送至手机 APP 实时查看。 - 湿度超限报警
当湿度超过 75% 时,系统通过蓝牙向 APP 发送报警信息,提示用户注意空气湿度过高。 - 远程风扇控制
用户可通过 APP 发送控制命令:- 发送
"O":风扇启动。 - 发送
"C":风扇关闭。
- 发送
- 温度超限蜂鸣器报警
当温度超过设定阈值(可在程序中预设,例如 30℃),蜂鸣器会自动发出声响报警,提示用户温室温度过高。
2 系统电路设计
本系统硬件部分主要由 STM32 单片机最小系统电路、温湿度传感器电路、1602 液晶显示电路、蓝牙模块电路、风扇驱动电路、蜂鸣器驱动电路、电源电路 组成。
2.1 STM32 单片机最小系统电路
- 核心器件:STM32F103C8T6(Cortex-M3 内核,主频 72MHz,内置丰富的外设接口)。
- 时钟电路:采用外部 8MHz 晶振,经内部 PLL 倍频至 72MHz,提高运算与通信速度。
- 复位电路:上电自动复位,同时配备独立复位按键,方便调试与维护。
- I/O 分配:
2.2 温湿度传感器电路
- 传感器型号:DHT11 或 DHT22(可根据精度要求选择)。
- 工作原理:传感器通过单总线与 STM32 通信,周期性发送温湿度数据。
- 供电电压:3.3V 或 5V,数据端配有上拉电阻以保证信号稳定。
- 作用:为系统提供温室内温湿度的实时数据基础。
2.3 1602 液晶显示电路
- 显示功能:两行字符显示,第一行显示温度,第二行显示湿度。
- 接口方式:4 位并行数据接口,节省 STM32 I/O 口。
- 供电与对比度:使用 5V 供电,通过可调电位器调节对比度,确保不同光照环境下的可读性。
2.4 蓝牙模块电路
- 模块型号:HC-05 或 HC-06(串口蓝牙模块)。
- 通信方式:UART 接口与 STM32 连接,波特率常设为 9600bps。
- 作用:
- 将 STM32 采集的温湿度数据实时传输到手机 APP。
- 接收来自 APP 的控制指令,实现风扇启停控制。
- 湿度超过阈值时发送报警信息。
2.5 风扇驱动电路
- 控制原理:使用 NPN 三极管或 MOSFET 驱动直流风扇,通过 GPIO 控制导通与关断。
- 供电:风扇由独立 12V 或 5V 电源供电,驱动电路与控制端进行隔离。
- 作用:降低温度或调节空气湿度。
2.6 蜂鸣器驱动电路
2.7 电源电路
3 程序设计
系统软件部分主要包括 初始化模块、温湿度采集模块、LCD 显示模块、蓝牙通信模块、风扇控制模块、蜂鸣器报警模块、主循环逻辑模块。
3.1 主程序框架
#include "stm32f10x.h"
#include "lcd1602.h"
#include "dht11.h"
#include "bluetooth.h"
#include "fan.h"
#include "buzzer.h"
float temperature = 0;
float humidity = 0;
float temp_threshold = 30.0;
float hum_threshold = 75.0;
int main(void) {
System_Init();
while(1) {
DHT11_ReadData(&temperature, &humidity);
LCD_Update(temperature, humidity);
Bluetooth_SendData(temperature, humidity);
Check_Alarms();
Bluetooth_ReceiveCommand();
}
}
3.2 系统初始化模块
void System_Init(void) {
LCD_Init();
DHT11_Init();
Bluetooth_Init(9600);
Fan_Off();
Buzzer_Off();
}
- 初始化 LCD、传感器、蓝牙模块、风扇、蜂鸣器等硬件。
- 设定初始状态为风扇关闭、蜂鸣器关闭。
3.3 温湿度采集模块
void DHT11_ReadData(float *temp, float *hum) {
// 从DHT11读取温湿度数据
// 存储到 temp 和 hum 指针指向的变量
}
- 周期性读取传感器数据。
- 通过软件延时或定时器中断实现固定周期采样(例如 1s 一次)。
3.4 LCD 显示模块
void LCD_Update(float temp, float hum) {
char buffer[16];
sprintf(buffer, "T:%.1fC", temp);
LCD_ShowString(0, 0, buffer);
sprintf(buffer, "H:%.1f%%", hum);
LCD_ShowString(0, 1, buffer);
}
- 第一行显示温度,第二行显示湿度。
- 数据实时刷新,便于本地监控。
3.5 蓝牙通信模块
void Bluetooth_SendData(float temp, float hum) {
char msg[32];
sprintf(msg, "T=%.1fC H=%.1f%%n", temp, hum);
UART_SendString(msg);
}
void Bluetooth_ReceiveCommand(void) {
char cmd = UART_ReadByte();
if(cmd == 'O') Fan_On();
else if(cmd == 'C') Fan_Off();
}
- 发送数据:将温湿度信息通过串口发送到 APP。
- 接收指令:根据接收到的命令控制风扇。
3.6 风扇控制模块
void Fan_On(void) {
GPIO_SetBits(GPIOB, GPIO_Pin_0);
}
void Fan_Off(void) {
GPIO_ResetBits(GPIOB, GPIO_Pin_0);
}
- 使用 GPIO 控制 MOSFET 驱动端实现风扇启停。
3.7 蜂鸣器报警模块
void Check_Alarms(void) {
if(temperature > temp_threshold) {
Buzzer_On();
} else {
Buzzer_Off();
}
if(humidity > hum_threshold) {
Bluetooth_SendString("Humidity High!n");
}
}
- 当温度超过设定阈值时蜂鸣器响。
- 湿度超限时发送蓝牙报警信息到 APP。
3.8 软件设计特点
- 模块化设计:各功能独立封装,便于维护与扩展。
- 实时性高:传感器数据采集与显示刷新周期短,满足温室实时监测需求。
- 人机交互方便:既能本地查看数据,也能通过 APP 实时监控和控制设备。
- 报警灵敏:温湿度超限均能快速响应并提示用户。
阅读全文
138