STM32智能苗圃灌溉系统设计与实现
基于STM32的智能苗圃灌溉系统设计与实现1. 项目概述1.1 系统架构本系统采用STM32F103RCT6作为主控制器构建了一套完整的苗圃环境监测与智能灌溉解决方案。系统通过多传感器协同工作实现了对土壤湿度、环境温湿度、光照强度和二氧化碳浓度的实时监测并可根据预设阈值自动控制灌溉设备和补光系统。系统架构分为三个层次感知层由各类环境传感器组成负责数据采集控制层STM32主控处理数据并执行控制逻辑通信层ESP8266模块实现与云平台的MQTT通信1.2 核心功能土壤湿度监测与自动灌溉控制环境温湿度监测与阈值报警光照强度检测与补光灯自动控制二氧化碳浓度监测本地OLED显示与蜂鸣器报警远程监控与控制功能2. 硬件设计2.1 主控电路设计系统采用STM32F103RCT6作为主控制器该芯片具有72MHz主频的Cortex-M3内核256KB Flash和48KB SRAM丰富的外设接口(3xSPI, 2xI2C, 5xUSART)3个12位ADC(1μs转换时间)主控电路设计要点采用8MHz外部晶振提供系统时钟复位电路采用10kΩ上拉电阻和0.1μF电容每个电源引脚配置0.1μF去耦电容SWD接口用于程序下载与调试2.2 传感器模块设计2.2.1 土壤湿度传感器采用模拟量输出的土壤湿度传感器主要特性工作电压3.3V-5V输出信号0-3V模拟电压检测深度约5cm响应时间1s电路连接VCC → 3.3VGND → GNDOUT → PA0(ADC1_IN0)2.2.2 DHT11温湿度传感器数字式温湿度传感器主要参数温度测量范围0-50℃ (±2℃)湿度测量范围20-90%RH (±5%)单总线通信协议采样周期≥1s连接方式VCC → 3.3VGND → GNDDATA → PB6(配置为上拉输入)2.2.3 BH1750光照传感器I2C接口数字光照传感器特性测量范围1-65535 lux16位数字输出内置ADC低功耗模式电流0.2μAI2C配置SCL → PB8SDA → PB9地址0x23(ADDR接GND)2.2.4 SGP30二氧化碳传感器I2C接口空气质量传感器参数CO2测量范围400-60000ppmTVOC测量范围0-60000ppb内置温湿度补偿自动基线校准连接方式SCL → PB8(与BH1750共用)SDA → PB9(与BH1750共用)地址0x582.3 执行机构设计2.3.1 继电器控制电路采用5V继电器模块控制水泵设计要点继电器线圈驱动使用NPN三极管(如S8050)基极串联1kΩ限流电阻线圈并联续流二极管控制信号PC13继电器参数触点容量10A 250VAC线圈电压5V动作时间10ms2.3.2 补光灯控制白色LED补光灯控制电路采用MOSFET(如IRLZ44N)驱动栅极串联100Ω电阻控制信号PA8工作电压12V功率5W2.4 人机交互设计2.4.1 OLED显示模块0.96寸SPI接口OLED主要特性分辨率128x64驱动芯片SSD1306工作电压3.3V对比度可调SPI接口配置CS → PA4DC → PA5RES → PA6SCLK → PA7MOSI → PB52.4.2 蜂鸣器报警电路采用有源蜂鸣器设计要点工作电压3.3V驱动电流30mA控制信号PB12串联100Ω限流电阻2.4.3 按键输入本地控制按键设计采用4.7kΩ上拉电阻按键并联0.1μF电容防抖输入引脚PB02.5 通信模块设计ESP8266 WiFi模块配置工作模式Station模式通信协议MQTT波特率115200连接方式TX → PA10(USART1_RX)RX → PA9(USART1_TX)EN → 3.3VRST → 悬空3. 软件设计3.1 系统软件架构软件采用模块化设计主要包含以下功能模块传感器数据采集模块数据处理与阈值判断模块设备控制模块人机交互模块网络通信模块3.2 主程序流程void main(void) { Hardware_Init(); // 硬件初始化 WiFi_Connect(); // WiFi连接 MQTT_Init(); // MQTT初始化 while(1) { Sensor_Update(); // 传感器数据更新 Data_Process(); // 数据处理 Control_Logic(); // 控制逻辑 Display_Update(); // 显示更新 Network_Handler(); // 网络处理 Delay_ms(100); // 100ms周期 } }3.3 关键算法实现3.3.1 土壤湿度控制算法void SoilMoisture_Control(void) { static uint32_t last_water_time 0; uint32_t current_time Get_SystemTick(); // 读取土壤湿度(0-100%) uint8_t moisture ADC_GetSoilMoisture(); // 自动模式且低于阈值 if(auto_mode moisture moisture_threshold) { // 检查最小灌溉间隔(防止频繁启动) if(current_time - last_water_time MIN_WATER_INTERVAL) { Water_Pump_On(); last_water_time current_time; // 记录灌溉事件 Log_Event(Auto watering started); } } // 手动模式按钮检测 else if(manual_button_pressed) { Water_Pump_On(); // 记录手动灌溉事件 Log_Event(Manual watering by button); } // 远程控制指令 else if(remote_water_cmd) { Water_Pump_On(); remote_water_cmd 0; // 记录远程灌溉事件 Log_Event(Remote watering command); } }3.3.2 光照控制算法void Light_Control(void) { // 读取光照强度(lux) uint16_t light BH1750_GetLux(); // 自动模式且光照不足 if(auto_mode light light_threshold) { Light_On(); } else { Light_Off(); } }3.4 通信协议设计3.4.1 MQTT主题设计主题方向说明/device/[ID]/data上行传感器数据上报/device/[ID]/control下行控制指令接收/device/[ID]/config下行参数配置3.4.2 数据报文格式{ device_id: GREENHOUSE_001, timestamp: 1634567890, soil_moisture: 45, temperature: 25.3, humidity: 60.2, light: 1200, co2: 450, pump_status: 0, light_status: 1, alarm: 0 }4. 系统测试与优化4.1 传感器校准4.1.1 土壤湿度传感器校准将传感器完全置于干燥环境中记录ADC值(AD_dry)将传感器完全浸入水中记录ADC值(AD_wet)计算湿度百分比公式humidity_percent 100 * (AD_wet - AD_value) / (AD_wet - AD_dry)4.1.2 光照传感器校准使用标准照度计作为参考在不同光照条件下(100lx, 1000lx, 10000lx)记录传感器输出建立线性校正公式actual_lux sensor_raw * 1.05 204.2 控制参数优化通过实际测试确定最佳控制参数参数初始值优化值说明土壤湿度阈值30%35%防止过度灌溉光照阈值1000lx800lx适应不同作物需求灌溉持续时间10s8s避免土壤过湿采样间隔1s2s平衡响应速度与功耗4.3 功耗优化措施传感器轮询策略非关键传感器采用间隔采样(如CO2每5分钟采样一次)动态时钟调整在空闲时段降低主频至36MHz外设电源管理不使用的传感器通过MOSFET切断电源WiFi连接策略每5分钟连接一次上传数据其余时间保持断开5. BOM清单与成本分析5.1 关键元器件清单器件型号数量单价(元)主控芯片STM32F103RCT6115.00WiFi模块ESP8266-12F112.00温湿度传感器DHT1118.00光照传感器BH175016.50CO2传感器SGP30145.00土壤湿度传感器-15.00OLED显示屏SSD1306 0.9619.00继电器模块5V 10A13.50水泵5V微型18.00补光灯5W LED16.005.2 系统成本估算硬件成本约120元(小批量)软件开发成本约40人天生产装配成本约20元/套(100套起)6. 应用扩展与改进方向多区域控制扩展为多路传感器输入和控制输出支持大型苗圃分区管理太阳能供电添加太阳能电池板和锂电池实现离网运行数据存储增加SD卡模块实现本地数据记录机器学习引入简单的学习算法根据历史数据优化控制策略LoRa组网在无WiFi环境下采用LoRa实现区域组网