4. 智能温室环境控制系统
任务说明
本案例要求开发一个智能温室环境控制系统,能够根据温室内外的温度、湿度及光照强度,自动控制加热器、加湿器、风扇和补光灯的开关状态。系统采用阈值控制策略:当室内温度低于设定下限且室外温度更低时开启加热器;室内湿度过低时开启加湿器;室内温度过高时开启风扇通风;光照不足时开启补光灯。所有传感器数据通过模拟输入提供,控制逻辑输出为各执行器的开关信号。
系统架构与数据流
核心代码实现
以下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中的传感器数值来测试其他环境组合,观察控制逻辑是否始终符合代码中定义的阈值规则。