大棚环境控制温湿度、光照、CO₂ 的全自动调节灌溉是最基础的大棚环境控制才是真正的多变量系统——温湿度、光照、CO₂ 浓度相互耦合开窗通风降了温也降了湿补光灯升温还费电。这篇讲四套执行器的联动策略和 PID 控制算法。大棚环控的四根操纵杆执行器控制目标功率成本顶通风扇降温、排湿100-200W80 元/台遮阳网电机降光照、降温50W120 元/套LED 补光灯补光阴雨天50-200W150 元/盏CO₂ 气肥阀补 CO₂10W100 元/套冲突与耦合——为什么不能各管各的举个典型场景中午 12 点大棚温度飙到 38℃天窗自动全开遮阳网拉了一半——温度降下来了但 CO₂ 浓度从 500ppm 跌到 300ppm外面大气也就 420大棚靠植物呼吸维持高 CO₂。光合作用效率降了蔬菜不长个。这就是多变量耦合降温← →CO₂ 流失← →湿度下降。不能分别设三个独立的 if-else。策略一优先级 状态机给四种执行器排优先级避免冲突触发条件 → 动作 优先级 ───────────────────────────────────────────── temp 40℃ → 全部天窗 遮阳网全开 P0(紧急) temp 35℃ → 天窗开 70%, 遮阳 50% P1 temp 30℃ → 天窗开 30% P2 humidity 85% → 天窗开 50%(排湿) P1 humidity 40% → 天窗全关 微喷加湿 P2 light 20000Lx(阴天) → 补光灯开 P3 co2 400ppm → CO₂ 气肥开 P3 降雨 → 天窗全关 P0 大风(6级) → 天窗全关 P0实现——状态机publicenumGreenhouseState{NORMAL,// 正常COOLING,// 降温中DEHUMIDIFYING,// 排湿中HEATING,// 加热中CO2_ENRICHMENT,// 补CO₂EMERGENCY// 紧急状态(极端天气)}publicclassGreenhouseController{privateGreenhouseStatecurrentStateGreenhouseState.NORMAL;publicvoidtick(SensorDatadata,WeatherInfoweather){// P0 紧急状态优先if(data.getAirTemp()40||weather.isRaining()||weather.windLevel()6){emergencyProtocol(data,weather);return;}// P1 高温/高湿if(data.getAirTemp()35){transitionTo(GreenhouseState.COOLING);setWindow(70);setShade(50);setCo2(false);// 开了天窗,CO₂ 流失严重,别开气肥}elseif(data.getAirTemp()30){setWindow(30);}if(data.getAirHumidity()85){setWindow(Math.max(currentWindow(),50));// 取天窗开度最大值}// P3 补光(天窗不能全关,否则不透气)if(data.getLight()20000data.getAirTemp()35){setLight(true);}// P3 CO₂ 气肥(天窗开度30%时才有效)if(data.getCo2()400getWindowOpenPercent()30){setCo2(true);}}}策略二PID 控制——精确到度状态机适用于「到阈值就切」的大颗粒控制。如果想让温度稳定在 26℃ ± 2℃上 PIDpublicclassPIDController{privatedoublekp,ki,kd;privatedoublesetpoint;privatedoubleintegral0;privatedoubleprevError0;/** * param pv 当前值 (Process Value) * return 输出 (0-100)表示天窗开度 */publicdoublecompute(doublepv){doubleerrorsetpoint-pv;// 积分项限制防止积分饱和integralMath.max(-100,Math.min(100,integralerror));// 微分项doublederivativeerror-prevError;prevErrorerror;doubleoutputkp*errorki*integralkd*derivative;// 输出限幅 0-100returnMath.max(0,Math.min(100,output));}}// 使用PIDControllertempPIDnewPIDController(3.0,0.05,1.0,26.0);// 目标 26℃doublewindowOpeningtempPID.compute(sensorData.getAirTemp());setWindow((int)windowOpening);PID 参数调试口诀kp 太大来回震荡降不下来就升回去ki 太大调节慢过冲大kd 太大对噪声敏感输出抖动大棚场景的参考值Kp3.0, Ki0.05, Kd1.0以天窗开度 0-100 为输出去调试。策略三双 PID 级联——温度控制专用温度-湿度耦合的终极解法是串级 PID┌──────────────┐ 温度设定(26℃) ──→ [温度PID] ──→ [天窗PID] ──→ 天窗伺服电机 ↑ ↑ 当前温度 天窗位置反馈外层温度 PID 输出的是「期待的天窗开度」内层天窗 PID 把天窗精准开到那个角度。这种结构抗干扰能力远超单 PID。// 外环温度 PIDdoubledesiredWindowPosouterPID.compute(currentTemp);// 内环天窗位置 PIDdoublemotorPwminnerPID.compute(desiredWindowPos-currentWindowPos);setWindowMotorPwm(motorPwm);硬接线把四个执行器连上 ESP32// 引脚分配#defineFAN_PIN12// 通风扇PWM 调速#defineSHADE_UP_PIN13// 遮阳网 升继电器#defineSHADE_DN_PIN14// 遮阳网 降继电器#defineLIGHT_PIN15// 补光灯PWM 调光#defineCO2_VALVE_PIN26// CO₂ 电磁阀// 遮阳网电机控制正反转继电器voidsetShade(intpercent){intcurrentPosreadShadePosition();// 用霍尔传感器或编码器读当前位置inttargetPosmap(percent,0,100,0,1000);// 0-1000 脉冲if(targetPoscurrentPos){digitalWrite(SHADE_UP_PIN,LOW);digitalWrite(SHADE_DN_PIN,HIGH);// 下降 遮阳}else{digitalWrite(SHADE_DN_PIN,LOW);digitalWrite(SHADE_UP_PIN,HIGH);// 上升 收网}}// 通风扇 PWM 调速voidsetFan(intspeed){// speed: 0-100ledcWrite(0,map(speed,0,100,0,255));}效果数据部署前后对比河北某番茄棚面积 400㎡指标人工管理自动控制日均温度波动22-38℃ (16℃振幅)24-30℃ (6℃振幅)日均湿度波动40-95%55-80%CO₂ 日均浓度350ppm550ppm电费/月180 元220 元补光灯多了产量/季约 1500kg约 1950kg (30%)人工巡检3次/天,30分钟0次手机推送多出的 40 元电费换来 450kg 增产ROI 超过 10:1。下一篇《畜牧养殖 AI用摄像头数猪、测重、识别生病》——从大棚到猪舍摄像头能干什么