摘要
本文提出一种基于 STM32 微控制器的智慧农业温室控制系统设计方案,通过集成多类型环境传感器、执行机构及无线通信模块,实现对温室内温湿度、光照、土壤湿度等参数的实时监测与自动调控。文中详细阐述硬件选型、电路连接及软件实现流程,并附关键代码示例,为智慧农业领域提供低成本、高可靠性的温室控制解决方案。
一、硬件系统设计
1. 核心芯片选型
芯片型号:STM32F103C8T6(Cortex-M3 内核,64KB Flash,20KB SRAM,37 个 GPIO 引脚,支持 USART/I2C/SPI 通信)
优势:低功耗、性价比高,适合物联网终端设备开发,支持 DMA 和硬件 I2C 提升数据传输效率。
2. 功能模块选型与功能
模块名称 | 型号 | 功能描述 | 通信方式 |
---|---|---|---|
温湿度传感器 | DHT11 | 采集温室内温度(0-50℃)、湿度(20%-90% RH) | 单总线 |
光照强度传感器 | BH1750 | 测量光照强度(1-65535 lx) | I2C |
土壤湿度传感器 | YL-69 | 检测土壤湿度(0-100% 相对湿度) | 模拟量 |
继电器模块 | SRD-05VDC-SL | 控制风扇、灌溉泵、补光灯等执行设备 | 数字量 |
无线通信模块 | ESP8266-01S | 支持 WiFi 联网,实现数据上传云端 | USART |
电源模块 | LM2596+LM1117 | 提供 5V/3.3V 稳定电源 | – |
3. 硬件接线图
STM32F103C8T6 传感器/执行器 接线说明
--------------------------------------------------
PA0 DHT11 DATA 单总线连接(上拉10K电阻)
PB6/PB7 BH1750 SCL/SDA I2C总线(4.7K上拉电阻)
PA1 YL-69 AO 模拟量输入(接ADC通道1)
PA2 ESP8266 TX USART2_TX(波特率115200)
PA3 ESP8266 RX USART2_RX
PA4-PA7 继电器模块IN1-IN4 数字输出(控制风扇、加热、灌溉、补光)
3.3V/GND 模块电源 共地连接
二、软件系统设计
1. 软件流程图
2. 软件架构说明
初始化模块:配置 GPIO、ADC、I2C、USART、定时器等外设。
数据采集模块:定时读取 DHT11、BH1750、YL-69 数据,进行数字滤波。
控制逻辑模块:基于阈值法实现环境调控(如温度 > 30℃开风扇,土壤湿度 < 30% 启动灌溉)。
通信模块:通过 ESP8266 将数据上传至云端平台(如阿里云 IoT),支持远程监控。
3. 关键代码示例
(1)传感器驱动:DHT11 读取(单总线协议)
uint8_t DHT11_ReadData(uint8_t *temp, uint8_t *humi) {
uint8_t buf[5] = {0};
uint8_t i, j, retry = 0;
// 主机发起起始信号
DHT11_GPIO_Port->BSRR = DHT11_Pin; // 拉高
HAL_Delay(1);
DHT11_GPIO_Port->BRR = DHT11_Pin; // 拉低
HAL_Delay(20);
DHT11_GPIO_Port->BSRR = DHT11_Pin; // 拉高
HAL_Delay(30);
// 等待从机响应
if (HAL_GPIO_ReadPin(DHT11_GPIO_Port, DHT11_Pin) == GPIO_PIN_SET) return 1;
while (HAL_GPIO_ReadPin(DHT11_GPIO_Port, DHT11_Pin) == GPIO_PIN_RESET && retry < 100) { retry++; HAL_Delay(1); }
retry = 0;
while (HAL_GPIO_ReadPin(DHT11_GPIO_Port, DHT11_Pin) == GPIO_PIN_SET && retry < 100) { retry++; HAL_Delay(1); }
// 读取40位数据(湿度整数+湿度小数+温度整数+温度小数+校验和)
for (i = 0; i < 5; i++) {
for (j = 0; j < 8; j++) {
while (HAL_GPIO_ReadPin(DHT11_GPIO_Port, DHT11_Pin) == GPIO_PIN_RESET);
HAL_Delay(4);
buf[i] <<= 1;
if (HAL_GPIO_ReadPin(DHT11_GPIO_Port, DHT11_Pin) == GPIO_PIN_SET) buf[i] |= 1;
while (HAL_GPIO_ReadPin(DHT11_GPIO_Port, DHT11_Pin) == GPIO_PIN_SET);
}
}
// 校验和验证
if (buf[0] + buf[1] + buf[2] + buf[3] == buf[4]) {
*humi = buf[0];
*temp = buf[2];
return 0; // 成功
} else {
return 2; // 校验失败
}
}
(2)控制逻辑:环境调节函数
void Environment_Control(void) {
// 温度控制:>30℃开风扇,<15℃开加热
if (current_temp > 30) HAL_GPIO_WritePin(RELAY_FAN_GPIO_Port, RELAY_FAN_Pin, GPIO_PIN_RESET); // 风扇启动
else if (current_temp < 15) HAL_GPIO_WritePin(RELAY_HEATER_GPIO_Port, RELAY_HEATER_Pin, GPIO_PIN_RESET); // 加热启动
else {
HAL_GPIO_WritePin(RELAY_FAN_GPIO_Port, RELAY_FAN_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(RELAY_HEATER_GPIO_Port, RELAY_HEATER_Pin, GPIO_PIN_SET);
}
// 光照控制:<500 lx开补光灯
if (current_light < 500) HAL_GPIO_WritePin(RELAY_LIGHT_GPIO_Port, RELAY_LIGHT_Pin, GPIO_PIN_RESET);
else HAL_GPIO_WritePin(RELAY_LIGHT_GPIO_Port, RELAY_LIGHT_Pin, GPIO_PIN_SET);
// 土壤湿度控制:<30%启动灌溉
if (soil_humi < 30) HAL_GPIO_WritePin(RELAY_WATER_GPIO_Port, RELAY_WATER_Pin, GPIO_PIN_RESET); // 灌溉
else HAL_GPIO_WritePin(RELAY_WATER_GPIO_Port, RELAY_WATER_Pin, GPIO_PIN_SET);
}
(3)主函数流程
int main(void) {
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_USART2_UART_Init();
MX_I2C1_Init();
MX_ADC1_Init();
while (1) {
// 采集数据
DHT11_ReadData(&humi, &temp);
current_light = BH1750_Read(); // I2C读取光照强度
soil_humi = HAL_ADC_GetValue(&hadc1); // ADC读取土壤湿度(需转换为百分比)
// 控制执行器
Environment_Control();
// 数据上传(示例:通过ESP8266发送JSON数据)
char data_buf[128];
sprintf(data_buf, "{"temp":%d,"humi":%d,"light":%d,"soil":%d}", temp, humi, current_light, soil_humi);
HAL_UART_Transmit(&huart2, (uint8_t*)data_buf, strlen(data_buf), 100);
HAL_Delay(5000); // 5秒采集一次
}
}
三、系统测试与扩展
1. 功能验证
手动测试:通过模拟传感器数据(如加热 / 冷却模块),验证风扇、加热、补光等设备是否按预设阈值启动。
远程监控:通过云端平台查看实时数据曲线,测试 WiFi 通信稳定性。
2. 扩展方向
增加 PID 算法优化温湿度控制精度;
集成摄像头实现作物生长图像监测;
接入语音控制或手机 APP 远程操控功能。
结论
本文设计的智慧农业温室控制系统基于 STM32 平台,实现了环境参数的精准采集与自动化调控,具备成本低、扩展性强的特点。通过硬件模块化设计与软件分层架构,可灵活适配不同规模的温室场景,为智慧农业的数字化升级提供了可行方案。
暂无评论内容