智慧农业大棚温湿度监控系统:STM32+DHT11+PWM控制+PWM人机交互的全链路实现
在精准农业与物联网技术的推动下,智慧农业大棚正逐步取代传统种植模式。其核心在于对环境参数的实时感知与智能调控,其中温湿度作为影响作物生长的关键因子,直接决定灌溉、通风与补光策略。本文基于STM32微控制器,结合DHT11温湿度传感器、PWM执行机构控制与PWM驱动的人机交互界面,构建一套低成本、高可靠性的全链路监控系统,实现从数据采集、处理、控制到交互的闭环管理。
系统架构与程序原理
系统采用分层架构设计,分为感知层、控制层与交互层:
感知层:DHT11传感器通过单总线协议采集环境温湿度,数据经STM32解析后上传。
控制层:STM32根据预设阈值,通过PWM信号控制风机(降温)、加湿器(增湿)等执行机构。
交互层:采用PWM调光的LED阵列与OLED显示屏构成人机界面,实时显示环境状态并支持阈值设置。
DHT11通信原理:DHT11采用单总线(One-Wire)协议,通信过程包括主机启动信号、传感器响应、40位数据传输(湿度整数+小数+温度整数+小数+校验和)。STM32通过精确延时模拟时序,读取数据并校验。
PWM控制原理:STM32的定时器(如TIM3)配置为PWM模式,通过调节占空比控制外设功率。例如,风机转速与PWM占空比成正比,实现无级调速,避免频繁启停造成的能耗与机械损耗。
PWM人机交互原理:利用PWM调节LED亮度,实现状态指示(如绿色常亮为正常,红色闪烁为报警);OLED屏幕通过I²C接口显示温湿度曲线与系统状态,提升可视化体验。
程序实现关键代码
1. DHT11数据采集
uint8_t DHT11_ReadData(uint8_t *temp, uint8_t *humi) {
uint8_t buffer[5] = {0};
DHT11_GPIO_Init(); // 配置GPIO为输出
DHT11_Start(); // 发送启动信号
if (DHT11_CheckResponse() == 0) return 1; // 检测响应
for (int i = 0; i < 5; i++) {
buffer[i] = DHT11_ReadByte(); // 读取40位数据
}
if (buffer[4] == (buffer[0] + buffer[1] + buffer[2] + buffer[3])) {
*humi = buffer[0];
*temp = buffer[2];
return 0; // 校验通过
}
return 1; // 校验失败
}
2. PWM控制风机与加湿器
void PWM_Control_Init(void) {
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
// 配置TIM3为PWM模式,频率1kHz
TIM_TimeBaseStructure.TIM_Period = 999;
TIM_TimeBaseStructure.TIM_Prescaler = 71;
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse = 0;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OC1Init(TIM3, &TIM_OCInitStructure); // CH1控制风机
TIM_OC2Init(TIM3, &TIM_OCInitStructure); // CH2控制加湿器
TIM_Cmd(TIM3, ENABLE);
}
void Set_Fan_Speed(uint16_t duty) {
TIM_SetCompare1(TIM3, duty); // 占空比0-999
}
3. PWM驱动LED状态指示
void LED_Status_Update(uint8_t status) {
switch (status) {
case STATUS_NORMAL:
TIM_SetCompare3(TIM3, 800); // 绿灯高亮
TIM_SetCompare4(TIM3, 0); // 红灯灭
break;
case STATUS_ALARM:
static uint8_t toggle = 0;
toggle = !toggle;
TIM_SetCompare3(TIM3, toggle ? 800 : 0); // 绿灯闪烁
TIM_SetCompare4(TIM3, toggle ? 0 : 800); // 红灯闪烁
break;
}
}
4. 主控制逻辑
int main(void) {
System_Init(); // 初始化时钟、GPIO、定时器
PWM_Control_Init();
OLED_Init();
uint8_t temp, humi;
while (1) {
if (DHT11_ReadData(&temp, &humi) == 0) {
OLED_ShowTempHumi(temp, humi);
if (temp > TEMP_THRESHOLD) {
Set_Fan_Speed(800); // 高温,风机高速
} else if (temp < TEMP_THRESHOLD - 5) {
Set_Fan_Speed(200); // 低温,风机低速或停
}
if (humi < HUMI_THRESHOLD) {
TIM_SetCompare2(TIM3, 700); // 低湿,加湿器开启
} else {
TIM_SetCompare2(TIM3, 0); // 湿度达标,关闭
}
LED_Status_Update(STATUS_NORMAL);
} else {
LED_Status_Update(STATUS_ALARM); // 传感器故障
}
delay_ms(2000); // 2秒采集一次
}
}
应用实现与优化
系统部署于实际农业大棚中,STM32F103C8T6作为主控,DHT11安装于作物冠层高度,风机与加湿器通过继电器模块连接PWM输出。OLED屏幕实时显示温湿度趋势图,支持按键设置阈值。
优化措施:
数据滤波:对连续3次DHT11读数取中值,消除偶然误差。
PWM软启动:风机启动时占空比从0渐变至目标值,避免电流冲击。
低功耗设计:在夜间或无人时段,降低采集频率至5分钟一次,延长系统寿命。
总结
本系统以STM32为核心,融合DHT11传感、PWM控制与人机交互技术,实现了农业大棚温湿度的智能监控。通过硬件协同与软件算法优化,系统具备响应快、控制准、交互友好等优点,为中小型农业设施提供了可落地的智能化解决方案。未来可接入LoRa或NB-IoT模块,实现远程监控与云平台管理,进一步拓展智慧农业的应用边界。





