4. 智能温室环境控制系统

任务说明

本案例要求开发一个智能温室环境控制系统,能够根据温室内外的温度、湿度及光照强度,自动控制加热器、加湿器、风扇和补光灯的开关状态。系统采用阈值控制策略:当室内温度低于设定下限且室外温度更低时开启加热器;室内湿度过低时开启加湿器;室内温度过高时开启风扇通风;光照不足时开启补光灯。所有传感器数据通过模拟输入提供,控制逻辑输出为各执行器的开关信号。

系统架构与数据流

传感器组 室内温度 T_in 室内湿度 H_in 室内光照 L_in 室外温度 T_out 控制决策模块 阈值比较逻辑 输出开关信号 执行器组 加热器 (Heater) 加湿器 (Humidifier) 风扇 (Fan) 补光灯 (LED) 设定阈值 T_min=18°C, T_max=28°C 模拟输入 控制信号

核心代码实现

以下Python代码实现了温室环境控制系统的完整逻辑。代码定义了传感器数据结构、控制决策函数以及一个包含多组测试场景的主程序,用于验证不同环境组合下的控制输出。

# greenhouse_control.py
# 智能温室环境控制系统
# 依赖:无(仅使用Python标准库)

from dataclasses import dataclass

@dataclass
class SensorData:
    """温室内外环境参数(单位:温度°C,湿度%RH,光照lux)"""
    temp_in: float      # 室内温度
    hum_in: float       # 室内湿度
    light_in: float     # 室内光照强度
    temp_out: float     # 室外温度

@dataclass
class ControlOutput:
    """执行器控制输出"""
    heater: bool        # 加热器
    humidifier: bool    # 加湿器
    fan: bool           # 风扇
    led: bool           # 补光灯

def control_decision(s: SensorData,
                     t_min: float = 18.0,
                     t_max: float = 28.0,
                     hum_min: float = 50.0,
                     light_min: float = 3000.0) -> ControlOutput:
    """
    根据环境参数与阈值决定执行器开关状态。
    控制策略:
    - 加热器:室内温度低于t_min 且 室外温度低于室内温度时开启
    - 加湿器:室内湿度低于hum_min时开启
    - 风扇:室内温度高于t_max时开启
    - 补光灯:室内光照低于light_min时开启
    """
    heater = (s.temp_in < t_min) and (s.temp_out < s.temp_in)
    humidifier = s.hum_in < hum_min
    fan = s.temp_in > t_max
    led = s.light_in < light_min
    return ControlOutput(heater, humidifier, fan, led)

def format_output(s: SensorData, out: ControlOutput) -> str:
    """将控制结果格式化为可读字符串"""
    return (f"室内温度={s.temp_in}°C | 室内湿度={s.hum_in}% | "
            f"室内光照={s.light_in}lux | 室外温度={s.temp_out}°C\n"
            f"→ 加热器={'ON' if out.heater else 'OFF'} | "
            f"加湿器={'ON' if out.humidifier else 'OFF'} | "
            f"风扇={'ON' if out.fan else 'OFF'} | "
            f"补光灯={'ON' if out.led else 'OFF'}")

# 测试场景(模拟传感器采样数据)
test_cases = [
    # 场景1:寒冷夜晚 - 室内低温低湿无光照,室外更冷
    SensorData(temp_in=15.0, hum_in=35.0, light_in=200, temp_out=5.0),
    # 场景2:炎热午后 - 室内高温高湿强光照,室外炎热
    SensorData(temp_in=33.0, hum_in=70.0, light_in=12000, temp_out=35.0),
    # 场景3:阴天早晨 - 温度适宜但湿度和光照不足
    SensorData(temp_in=22.0, hum_in=45.0, light_in=1500, temp_out=20.0),
    # 场景4:理想条件 - 所有参数均在阈值范围内
    SensorData(temp_in=24.0, hum_in=60.0, light_in=5000, temp_out=22.0),
]

if __name__ == "__main__":
    print("=" * 60)
    print("智能温室环境控制系统 - 模拟测试")
    print("=" * 60)
    for i, case in enumerate(test_cases, 1):
        result = control_decision(case)
        print(f"\n场景{i}:")
        print(format_output(case, result))
    print("\n" + "=" * 60)
    print("测试完成")

运行与验证

运行方式:将上述代码保存为 greenhouse_control.py,在命令行执行 python greenhouse_control.py。程序无需额外依赖库,使用Python 3.7+即可运行。

验证方法:程序内置了4个典型测试场景,覆盖寒冷、炎热、阴天和理想条件。运行后观察每个场景输出的执行器状态是否符合以下判定标准:

  • 场景1(15°C/35%/200lux/5°C):加热器应ON(室内低温且室外更冷),加湿器ON(湿度不足),风扇OFF(未超温),补光灯ON(光照不足)。
  • 场景2(33°C/70%/12000lux/35°C):加热器OFF,加湿器OFF(湿度充足),风扇ON(超温),补光灯OFF(光照充足)。
  • 场景3(22°C/45%/1500lux/20°C):加热器OFF(温度正常),加湿器ON,风扇OFF,补光灯ON。
  • 场景4(24°C/60%/5000lux/22°C):所有执行器均为OFF。

判定标准:若程序输出的4个场景执行器状态与上述预期完全一致,则控制系统逻辑正确,案例验证通过。可通过修改test_cases中的传感器数值来测试其他环境组合,观察控制逻辑是否始终符合代码中定义的阈值规则。