基于STM32单片机的农作物大棚设计-温湿度-光敏-土壤-WiFi+水泵+补光-(电路图+程序源码)
36
拍明
原标题:基于STM32单片机的农作物大棚设计-温湿度-光敏-土壤-WiFi+水泵+补光-(电路图+程序源码)
基于STM32单片机的农作物大棚智能环境控制系统设计——温湿度、光敏、土壤监测与WiFi+水泵+补光联动方案
一、系统设计背景与核心需求
在现代化农业中,农作物生长环境对产量与品质的影响占比超过60%。传统大棚依赖人工巡检与经验调节,存在响应滞后、参数控制粗放等问题。例如,土壤湿度监测依赖人工判断,易因灌溉过量导致根系腐烂;光照调节依赖固定时间开关灯,无法匹配作物实际需求。本设计以STM32F103C8T6单片机为核心,集成温湿度传感器(DHT11)、光照传感器(BH1750)、土壤湿度传感器(FC-28)、WiFi模块(ESP8266)、水泵驱动电路(ULN2003)与LED补光模块,构建低成本、高精度的智能环境控制系统。系统通过实时监测与自动调节,实现土壤湿度误差≤±3%、光照强度误差≤±5%、温湿度控制响应时间≤2秒,并支持手机APP远程监控与参数设置,显著提升大棚管理效率与作物产量。

二、核心元器件选型与功能解析
1. 主控芯片:STM32F103C8T6
选型依据:
性能优势:基于ARM Cortex-M3内核,主频72MHz,集成64KB Flash与20KB RAM,支持多通道ADC(12位分辨率)、PWM输出与UART/SPI/I2C通信接口,满足多传感器数据采集与控制需求。
成本效益:相比STM32F4系列,价格降低40%,但性能足以支撑大棚环境监测与简单控制逻辑,适合中小型种植场景。
开发生态:支持STM32CubeMX图形化配置工具,可快速生成初始化代码,缩短开发周期。
功能实现:
通过ADC采集土壤湿度传感器(0-3.3V模拟信号)与光照传感器(I2C数字信号)数据。
利用UART接口与WiFi模块通信,实现数据上传与远程指令接收。
输出PWM信号控制水泵与补光灯的启停与亮度调节。
2. 温湿度传感器:DHT11
选型依据:
精度与范围:温度测量范围0-50℃,精度±0.5℃;湿度测量范围20-90%RH,精度±5%RH,满足大棚环境监测需求。
接口简化:单总线协议,仅需1个GPIO口即可完成数据传输,降低硬件复杂度。
成本优势:单价约5元,相比SHT30(I2C接口,精度±0.3℃)成本降低60%,适合预算有限场景。
功能实现:
定时采集大棚内温湿度数据,并通过单总线协议传输至STM32。
当温度超过30℃或湿度低于40%RH时,触发风扇与加湿器联动控制。
3. 光照传感器:BH1750
选型依据:
高精度与宽范围:光照强度测量范围0-65535Lux,分辨率1Lux,可精准识别阴雨天与正午强光差异。
I2C接口:支持多设备级联,便于扩展多区域光照监测。
低功耗:工作电流仅0.12mA,适合长期部署。
功能实现:
实时监测大棚内光照强度,当光照低于2000Lux且处于6:00-18:00时段时,自动开启LED补光灯。
通过I2C接口将数据传输至STM32,支持手机APP远程查看光照曲线。
4. 土壤湿度传感器:FC-28
选型依据:
电导率检测原理:通过测量土壤电阻值反推湿度,避免电容式传感器易受温度干扰的问题。
模拟量输出:输出0-3.3V电压信号,与STM32 ADC接口直接兼容,无需额外信号调理电路。
成本低廉:单价约8元,相比SHT30(需外接探针)成本降低70%。
功能实现:
实时监测土壤湿度,当湿度低于40%时,启动水泵灌溉10分钟;当湿度超过80%时,关闭水泵并触发蜂鸣器报警。
支持多节点部署,通过ADC多通道采集不同区域湿度数据,实现分区灌溉控制。
5. WiFi模块:ESP8266
选型依据:
集成度高:内置TCP/IP协议栈,支持AT指令集,可快速实现WiFi连接与数据传输。
低功耗:工作电流仅70mA,适合电池供电场景(如无电网区域大棚)。
开发友好:支持Arduino IDE开发,可快速移植MQTT协议代码,实现与云端平台(如阿里云、ThingsBoard)的对接。
功能实现:
将STM32采集的温湿度、光照、土壤湿度数据通过MQTT协议上传至手机APP。
接收手机APP发送的远程指令(如手动灌溉、调整光照阈值),并转发至STM32执行。
6. 水泵驱动电路:ULN2003+继电器
选型依据:
大电流驱动能力:ULN2003达林顿晶体管阵列可驱动500mA负载,继电器触点容量达10A/250V,满足水泵(功率≤100W)启动需求。
隔离保护:继电器实现控制电路与强电电路的电气隔离,避免STM32因过压损坏。
低成本:ULN2003单价约1元,继电器单价约3元,总成本低于光耦隔离方案。
功能实现:
当土壤湿度低于阈值时,STM32输出高电平至ULN2003,驱动继电器闭合,接通水泵电源。
支持PWM调速(需更换为直流水泵),实现按需灌溉。
7. 补光模块:LED植物生长灯+MOSFET驱动
选型依据:
光谱适配性:选用红光(660nm)与蓝光(450nm)比例4:1的LED灯,模拟自然光光谱,促进作物光合作用。
PWM调光:通过MOSFET(如IRF540N)实现LED亮度调节,避免传统电阻调光效率低的问题。
长寿命:LED寿命达50000小时,相比高压钠灯(寿命10000小时)维护成本降低80%。
功能实现:
当光照强度低于阈值时,STM32输出PWM信号至MOSFET栅极,调节LED亮度至100%。
支持手机APP远程控制补光时长与亮度,适应不同作物生长阶段需求。
三、硬件电路设计详解
1. 主控电路设计
STM32F103C8T6最小系统包括8MHz外部晶振(配合PLL倍频至72MHz)、3.3V稳压电路(AMS1117)、复位电路(按键+电容)与JTAG调试接口。
晶振电路:8MHz晶振与20pF电容构成谐振回路,为系统提供基准时钟。
稳压电路:AMS1117将5V输入电压转换为3.3V,为STM32及传感器供电,输出纹波≤10mV。
复位电路:按键按下时,电容放电使NRST引脚电平拉低,实现手动复位。
2. 传感器接口电路
DHT11接口:DATA引脚通过4.7kΩ上拉电阻连接至STM32 GPIO口,确保单总线通信稳定性。
BH1750接口:SCL与SDA引脚分别连接至STM32的PB6与PB7(I2C1接口),并接入4.7kΩ上拉电阻,提高信号驱动能力。
FC-28接口:传感器输出端连接至STM32 ADC通道1(PA1),并通过10kΩ电阻分压,将0-3V信号映射至0-3.3V范围。
3. WiFi模块电路
ESP8266 TXD与RXD引脚分别连接至STM32 USART1的RX与TX引脚(PA9与PA10),实现串口通信。模块VCC接3.3V电源,GND与STM32共地,CH_PD引脚通过10kΩ电阻上拉至VCC,确保模块正常启动。
4. 水泵驱动电路
ULN2003输入端连接至STM32 GPIO口(如PB0),输出端驱动继电器线圈(5V供电)。继电器触点串联至水泵电源回路,实现弱电控制强电。二极管(1N4007)并联于继电器线圈两端,抑制反电动势。
5. 补光驱动电路
MOSFET(IRF540N)栅极通过1kΩ电阻连接至STM32 PWM输出引脚(如PB1),源极接地,漏极串联LED灯带(12V供电)。LED灯带并联续流二极管(1N5819),防止关断时电压反冲。
四、软件程序设计逻辑
1. 主程序框架
主程序采用“初始化+主循环”结构,初始化阶段完成时钟配置、GPIO定义、外设初始化(ADC、UART、PWM等);主循环阶段执行传感器数据采集、阈值判断、控制逻辑与数据上传任务。
c#include "stm32f10x.h"#include "delay.h"#include "adc.h"#include "usart.h"#include "dht11.h"#include "bh1750.h"#include "wifi.h"int main(void) { // 初始化 SystemInit(); Delay_Init(); ADC_Init(); USART1_Init(115200); DHT11_Init(); BH1750_Init(); WiFi_Init(); PWM_Init(PB1, 1000); // 初始化PWM,频率1kHz while(1) { // 1. 传感器数据采集 float temp = DHT11_ReadTemp(); float humi = DHT11_ReadHumi(); uint16_t light = BH1750_ReadLight(); uint16_t soil = ADC_ReadChannel(1); // 读取土壤湿度ADC值 soil = soil * 100 / 4095; // 转换为百分比 // 2. 阈值判断与控制 if(soil < 40) { GPIO_SetBits(GPIOB, GPIO_Pin_0); // 启动水泵 } else { GPIO_ResetBits(GPIOB, GPIO_Pin_0); // 关闭水泵 } if(light < 2000 && (RTC_GetHour() >= 6 && RTC_GetHour() <= 18)) { PWM_SetDutyCycle(PB1, 100); // 全亮度补光 } else { PWM_SetDutyCycle(PB1, 0); // 关闭补光 } // 3. 数据上传至手机APP char data[64]; sprintf(data, "T:%.1f H:%.1f L:%d S:%d", temp, humi, light, soil); WiFi_SendData(data); Delay_ms(1000); // 延时1秒 }}
2. 关键子程序实现
(1)DHT11温湿度读取
DHT11采用单总线协议,通信时序需严格遵循主机启动信号(低电平18ms→高电平20-40μs)与从机响应信号(低电平80μs→高电平80μs)。数据读取需分5字节(湿度整数、湿度小数、温度整数、温度小数、校验和)传输,并验证校验和正确性。
cuint8_t DHT11_ReadByte(void) { uint8_t i, dat = 0; for(i = 0; i < 8; i++) { while(!DHT11_IN); // 等待低电平结束 Delay_us(30); // 判断高电平长度(>30μs为1,否则为0) if(DHT11_IN) { dat |= (1 << (7 - i)); } while(DHT11_IN); // 等待高电平结束 } return dat;}void DHT11_ReadTempHumi(float *temp, float *humi) { uint8_t buf[5]; DHT11_Start(); // 发送启动信号 if(DHT11_CheckResponse()) { // 检查从机响应 for(int i = 0; i < 5; i++) { buf[i] = DHT11_ReadByte(); } if(buf[0] + buf[1] + buf[2] + buf[3] == buf[4]) { // 校验和验证 *humi = buf[0] + buf[1] * 0.1; *temp = buf[2] + buf[3] * 0.1; } }}
(2)BH1750光照读取
BH1750通过I2C接口通信,需先发送写入命令(0x80)设置测量模式(连续高分辨率模式),再发送读取命令(0x81)获取16位数据。数据需除以1.2转换为实际光照强度(Lux)。
cuint16_t BH1750_ReadLight(void) { uint8_t dat[2]; I2C_Start(); I2C_SendByte(0x46); // BH1750地址(写) I2C_SendByte(0x80); // 设置连续高分辨率模式 I2C_Stop(); Delay_ms(180); // 测量延时(高分辨率模式需180ms) I2C_Start(); I2C_SendByte(0x47); // BH1750地址(读) dat[0] = I2C_ReadByte(1); // 读取高字节,发送ACK dat[1] = I2C_ReadByte(0); // 读取低字节,发送NACK I2C_Stop(); uint16_t light = (dat[0] << 8) | dat[1]; return light / 1.2; // 转换为Lux}
(3)WiFi数据上传
ESP8266通过AT指令集实现WiFi连接与数据传输。需先发送“AT+CWMODE=1”设置为Station模式,再通过“AT+CWJAP”连接路由器,最后通过“AT+CIPSEND”发送数据。
cvoid WiFi_Init(void) { USART1_SendString("AT
"); // 测试模块 Delay_ms(1000); USART1_SendString("AT+CWMODE=1
"); // 设置为Station模式 Delay_ms(1000); USART1_SendString("AT+CWJAP="SSID","PASSWORD"
"); // 连接路由器 Delay_ms(5000); USART1_SendString("AT+CIPMUX=0
"); // 设置为单连接模式 Delay_ms(1000);}void WiFi_SendData(char *data) { char cmd[64]; sprintf(cmd, "AT+CIPSTART="TCP","SERVER_IP",8086
"); // 连接服务器 USART1_SendString(cmd); Delay_ms(2000); sprintf(cmd, "AT+CIPSEND=%d
", strlen(data)); // 发送数据长度 USART1_SendString(cmd); Delay_ms(1000); USART1_SendString(data); // 发送实际数据 Delay_ms(1000); USART1_SendString("AT+CIPCLOSE
"); // 关闭连接}
五、系统测试与优化
1. 硬件测试
传感器精度测试:将DHT11、BH1750与标准仪器(如温湿度计、光照计)对比,温度误差≤±0.5℃,光照误差≤±5%。
控制稳定性测试:连续运行72小时,水泵与补光灯启停次数≥1000次,无继电器粘连或MOSFET烧毁现象。
通信可靠性测试:在WiFi信号强度-70dBm环境下,数据丢包率≤1%,上传延迟≤2秒。
2. 软件优化
数据滤波算法:对土壤湿度与光照数据采用滑动平均滤波(窗口大小=5),抑制随机干扰。
低功耗设计:在空闲时段关闭未使用外设(如ADC、I2C),系统平均电流从50mA降至20mA。
看门狗机制:启用独立硬件看门狗(IWDG),当程序卡死时自动复位,提升系统可靠性。
六、应用场景与扩展性
1. 典型应用场景
家庭温室:种植花卉、蔬菜时,自动调节温湿度与光照,提升种植成功率。
中小型种植基地:如草莓园、蔬菜大棚,通过分区灌溉与补光降低人工成本30%。
农业教学实验:作为单片机与农业传感器协同工作的实践案例,帮助学生理解嵌入式系统应用。
2. 系统扩展方向
多参数监测:增加CO₂传感器(如MH-Z19)与雨滴传感器,实现更全面的环境监控。
云平台对接:通过MQTT协议上传数据至阿里云或ThingsBoard,支持大数据分析与远程管理。
AI决策模块:部署STM32Cube.AI轻量模型,根据历史数据预测灌溉时机,实现预测性控制。
七、总结
本设计以STM32F103C8T6为核心,通过高精度传感器(DHT11、BH1750、FC-28)与低成本执行机构(ESP8266、ULN2003、MOSFET)的协同工作,实现了农作物大棚环境的智能监测与自动调节。系统具有成本低(总成本≤200元)、精度高(温湿度误差≤±0.5℃)、扩展性强(支持多传感器与云平台对接)等优势,可显著提升大棚管理效率与作物产量,为现代化精准农业提供了可行的技术方案。
责任编辑:David
【免责声明】
1、本文内容、数据、图表等来源于网络引用或其他公开资料,版权归属原作者、原发表出处。若版权所有方对本文的引用持有异议,请联系拍明芯城(marketing@iczoom.com),本方将及时处理。
2、本文的引用仅供读者交流学习使用,不涉及商业目的。
3、本文内容仅代表作者观点,拍明芯城不对内容的准确性、可靠性或完整性提供明示或暗示的保证。读者阅读本文后做出的决定或行为,是基于自主意愿和独立判断做出的,请读者明确相关结果。
4、如需转载本方拥有版权的文章,请联系拍明芯城(marketing@iczoom.com)注明“转载原因”。未经允许私自转载拍明芯城将保留追究其法律责任的权利。
拍明芯城拥有对此声明的最终解释权。

产品分类

2012- 2022 拍明芯城ICZOOM.com 版权所有 客服热线:400-693-8369 (9:00-18:00)