基于 Arduino 的智能温室监测与自动灌溉系统
项目概述
本项目构建一套低成本、模块化的**智能温室环境监测与自动灌溉系统**,采用 Arduino UNO 作为主控,集成土壤湿度、空气温湿度、光照强度、CO₂ 浓度四大关键环境参数传感器,配合继电器模块控制水泵、风扇、补光灯、加热带四类执行器,实现“感知—判断—执行”闭环。系统支持阈值本地自动控制与蓝牙/串口人工干预双模式,适合家庭阳台种植、教学演示及小型农业物联网原型验证。
硬件清单
| 类别 | 器件 | 数量 | 关键参数/接口 |
|---|---|---|---|
| 主控 | Arduino UNO R3 | 1 | ATmega328P, 5V, 14 Digital / 6 Analog |
| 扩展板 (可选) | 1 | 引出所有引脚, 供电稳压 | |
| 传感器 | 电容式土壤湿度传感器 v1.2 | 2 | 模拟量输出 0–3.3V, 耐腐蚀 |
| DHT22 (AM2302) | 1 | 温度 -40~80℃ ±0.5℃, 湿度 0–100% ±2% | |
| BH1750FVI 光照强度传感器 | 1 | I²C (0x23), 1–65535 lux | |
| MH-Z19B CO₂ 传感器 | 1 | UART/PWM, 0–5000 ppm, 寿命 >5 年 | |
| 执行器 | 5V 继电器模块 (4 路) | 1 | 低电平触发, 控制 220V/5V 负载 |
| 微型潜水泵 + 管路 | 1 | 5V/12V, 配合滴灌头 | |
| DC 风扇 120mm | 2 | 12V, 排热/循环风 | |
| 植物补光灯带 (全光谱) | 1 | 12V/24V, PWM 调光可选 | |
| 通信 | HC-05 蓝牙模块 | 1 | 波特率 9600, AT 指令配置 |
| 电源 | 12V/3A 开关电源 + DC-DC 降压模块 (5V/3A) | 1 | 统一供电, 共地 |
| 结构 | 亚克力温室箱体、3D 打印固定件、走线槽 | 1 套 | 尺寸 600×400×500mm 可定制 |
软件架构
- Arduino IDE +
DHT、Wire、SoftwareSerial、MHZ19库 - 任务调度:
millis()非阻塞定时器,1s 采样、10s 控制、30s 上报 - 状态机:
IDLE → CHECK_SENSORS → EVALUATE_RULES → ACTUATE → REPORT - 配置存储:阈值、PID 参数、时间计划写入 EEPROM,掉电不丢失
- 蓝牙协议:JSON 格式
{"cmd":"set_thresh","sensor":"soil","low":30,"high":70}
控制策略详解
1. 土壤湿度 → 自动灌溉 (滞回比较器)
if (soil < TH_LOW && !pump_on) { pump_on = true; relay_on(PUMP); }
if (soil > TH_HIGH && pump_on) { pump_on = false; relay_off(PUMP); }
默认阈值:TH_LOW=30%、TH_HIGH=70% (电容式传感器读值映射),防止水泵频繁启停。
2. 空气温度 → 加热/制冷 (双阈值带滞回)
T < 18℃:开启加热带 (继电器 1)T > 28℃:开启风扇排热 (继电器 2)- 中间区间全关
3. 光照强度 → 补光灯 (光控 + 定时叠加)
- 光照 < 5000 lux 且在设定光照时段 (如 6:00–22:00) → 开启补光灯 (继电器 3)
- 支持 PWM 调光 (需 MOSFET 扩展),模拟日照渐变
4. CO₂ 浓度 → 通风换气
CO₂ > 1000 ppm:开启风扇 (继电器 2) 强制通风 5 分钟- 配合光合作用规律,白天优先自然通风,夜间关闭
蓝牙交互协议
| 指令类型 | 示例 | 说明 |
|---|---|---|
| 读取所有传感器 | {"cmd":"read_all"} | 返回 JSON 含所有实时值 |
| 设置阈值 | {"cmd":"set_thresh","sensor":"temp","low":15,"high":30} | sensor: soil/temp/hum/light/co2 |
| 手动控制执行器 | {"cmd":"manual","actuator":"pump","state":1} | state: 0/1, 自动模式下临时覆盖 |
| 查询/修改定时计划 | {"cmd":"schedule","id":1,"on":"06:00","off":"22:00"} | 最多 4 组定时 |
| 恢复出厂默认 | {"cmd":"factory_reset"} | 慎用 |
App 端开发建议 (MIT App Inventor / Flutter)
- 主界面:四大参数实时仪表盘 + 趋势图 (存储最近 24h 数据)
- 设置页:阈值滑块、定时计划表单、手动控制开关
- 报警推送:阈值越界、传感器离线、水泵异常、电源欠压
- 数据导出:CSV 格式,便于后续分析
安装与调试步骤
- 按原理图接线,**上电前核对 220V 部分绝缘**,继电器模块 JD-VCC 与 VCC 跳线帽配置正确
- 烧录固件,串口监视器 9600 波特率观察启动日志
- 单体测试:依次发送
{"cmd":"manual","actuator":"pump","state":1}验证各执行器 - 传感器校准:土壤干/湿极值标定、DHT22 对标温湿度计、BH1750 对标照度计、MH-Z19B 置零校准 (通风环境下发送 0xFF 0x87 0x00 0x00 0x00 0x00 0x00 0x00 0x78)
- 联调运行:切换自动模式,观察 30 分钟完整控制周期
常见问题排查
- 土壤湿度读数漂移:电容式传感器受肥料电导率影响,定期用蒸馏水冲洗探头,或改用 FDR/TDR 专业探头
- DHT22 读取失败:检查上拉电阻 (4.7kΩ)、供电稳定性、线长 <1m、采样间隔 ≥2s
- MH-Z19B 数值固定 400/5000:UART 接线反、波特率不匹配 (默认 9600)、预热不足 (需 3 分钟)
- 继电器动作异常:确认低电平触发逻辑、共地、驱动电流足够 (UNO 直接驱动可能不足, 建议加三极管/光耦)
- 蓝牙频繁断连:HC-05 供电加 100µF 电解电容、天线远离金属、避开 WiFi 2.4G 信道
扩展与进阶
- ESP32 替代 UNO:内置 WiFi/BLE、双核、更多 ADC、支持 FreeRTOS 任务调度
- LoRaWAN 远程部署:配合 The Things Network 实现公里级无网关覆盖
- 边缘 AI:引入 TensorFlow Lite Micro,基于历史数据预测病虫害/生长模型
- 太阳能供电:MPPT 充电控制器 + 18650 电池组,实现离网运行
- Home Assistant 集成:MQTT 发现协议接入 HA,统一智能家居面板
项目资源
完整代码、原理图 (EasyEDA/KiCad)、3D 打印模型 (STL)、App 源码 (AIA/Flutter)、BOM 表格已整理上传 GitHub,欢迎 Star/Fork 贡献改进。
制造工艺
- 仅用 Arduino 构建 DTMF 解码器 – 无需额外 IC
- 基于 Web 控制的 DMX 灯光系统 – Arduino 主控制器
- 基于 Arduino Uno 的人体检测救援机器人:传感器集成分步指南
- DIY Arduino USB 游戏手柄 — 自制高性能游戏手柄
- SERENA:基于 Arduino Mega 2560 与 TFT 触摸屏的多级密码报警系统
- Android 手势遥控车:Raspberry Pi + Arduino 101 + 电机扩展板,I2T 协同控制
- Arduino UNO 自制循迹小车:从零构建自主巡线机器人
- Firmata + Xbox 手柄无线遥控 Arduino 小车:UWP 应用桥接方案
- Arduino UNO + WiFi 盾板:串口实时推送温度到网页绘图
- 用网页图案解锁保护你的 Arduino - 简单设置与远程控制
- Arduino Mega 2560 综合实训平台 - 传感器/电机/显示/PCB 一体化开发板
- Python 3 控制 Arduino UNO - 串口通信点亮内置 LED 入门教程