DIY 智能植物培养箱:ATmega32U4 + ESP8266-12E + 多传感器融合
核心硬件清单
| 组件 | 数量 | 用途 |
|---|---|---|
| ATmega32U4 (16 MHz 晶振) | 1 | 主控,原生 USB,兼容 Leonardo |
| ESP8266-12E (ESP-12E 模组) | 1 | Wi-Fi 通信,GPIO 扩展 |
| DHT11 温湿度传感器 | 1 | 环境监测 |
| DS18B20 防水温度探头 | 1 | 水温/根区温度 |
| 光敏电阻 (LDR) | 1 | 光照强度 |
| 水位传感器 (自制/土壤湿度模块改) | 1 | 水箱液位 |
| pH 传感器 v1.1 (BNC 探头 + 运放板) | 1 | 营养液酸碱度 |
| 4 路 N 沟 MOSFET 驱动 | 4 | 生长灯、雾化器、营养液泵、换水阀 |
| 128×64 图形 LCD (ST7920, 3 线 SPI) | 1 | 本地状态显示 |
| 升压模块 (12 V → 24 V) | 1 | 供超声波雾化器 |
| 降压模块 (12 V → 5 V) | 1 | 全板逻辑供电 |
项目愿景:桌面级「数字农业」
受 MIT OpenAg Caleb Harper TED 演讲启发,目标打造 全气候可控、雾培+LED 光谱配方、数据可视化、App 远程运维 的紧凑型植物培养箱(代号 GIY - Grow It Yourself)。
关键子系统设计
| 子系统 | 实现方案 |
|---|---|
| 光照 | 红 660 nm + 蓝 450 nm LED 条,MOSFET PWM 调光 |
| 灌溉 | 超声波雾化器 (24 V) + 定时/水位联动 |
| 营养液 | 蠕动泵定量加药,pH/TDS 闭环控制 |
| 空气环境 | DHT11 + 风扇 + 加热丝 PID 调节温湿度 |
| 数据与控制 | ATmega32U4 采集传感器 → 串口透传 ESP8266 → MQTT/HTTP 云端 ↔ App |
PCB 设计与制造全流程
原理图设计 (EAGLE)
- 参考 FabLeo (ATmega32U4 + 原生 USB) 为基础板
- 扩展:4×MOSFET、传感器排针、ESP-12E 插座、LCD 接口、双电源模块
- 大面积铺铜 GND,降低阻抗与 EMI
双面板 CNC 铣制要点
- 导出 1500 dpi 单色 PNG,分 内层蚀刻 与 外形铣切
- 底层镜像水平翻转
- 0.2 mm 钻头走内层,1.0 mm 铣刀切外形
- 铣后显微镜检查短路,用万用表蜂鸣档逐网验证

焊接与调试
- 贴片元件先焊,通孔后焊
- 每焊完一类器件即测导通
- 曾发现 VCC/GND 短路,系刀具残留铜屑,刮刀清理后恢复
- 升压模块背面预留针座,上电调节至 24 V 再焊死
嵌入式软件架构
传感器驱动模块化
DHT11:dht.h,D2,1 Hz 采样DS18B20:OneWire+DallasTemperature,D3,多点总线LDR:A3,模拟量分级 (Dark/Dim/Light/Bright/Very Bright)Water Level:A4,校准阈值 0/800/900 → EMPTY/LOW/HIGHpH:A5,两点标定 (pH 7.0 → 2.5 V, pH 4.01 → 3.05 V),步进 0.18 V/pH
显示驱动:U8glib + 3 线 SPI
仅占用 3 个数字引脚 (D4, D12, D6),首屏显示 FabLab Logo (128×64 BMP → HEX 数组),随后循环刷新 5 行关键参数。
主循环逻辑伪代码
loop():
read_all_sensors()
if water_level == EMPTY: fog_pump = OFF
else: fog_pump = ON
grow_light = ON (可扩展光照配方)
refresh_LCD()
send_to_ESP_via_serial() // JSON 格式
delay(1000)
完整固件 (精简版)
#include "dht.h"
#include "U8glib.h"
#include <OneWire.h>
#include <DallasTemperature.h>
#define DHT11_PIN 2
#define ONE_WIRE_BUS 3
#define WATER_LEVEL A4
#define LDR_PIN A3
#define PH_PIN A5
#define GROW_LIGHT 10
#define FOG_PUMP 13
dht DHT;
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature waterTemp(&oneWire);
U8GLIB_ST7920_128X64 u8g(4, 12, 6, U8G_PIN_NONE);
// ... Logo 数组省略 ...
void setup() {
waterTemp.begin();
pinMode(GROW_LIGHT, OUTPUT); pinMode(FOG_PUMP, OUTPUT);
digitalWrite(GROW_LIGHT, HIGH);
// LCD 初始化并显示 Logo
u8g.firstPage(); do { u8g.drawBitmapP(32,0,16,64,logo); } while(u8g.nextPage());
}
void RefreshDisplay(float *h, double *t, int *wl, int *ll, int *ph) {
u8g.setFont(u8g_font_fub11);
u8g.drawStr(4,0,"Hum%"); u8g.setPrintPos(68,0); u8g.print(*h);
u8g.drawStr(4,15,"Temp"); u8g.setPrintPos(68,15); u8g.print(*t);
u8g.drawStr(4,30,"Wlvl");
if(*wl==0){ u8g.drawStr(68,30,"EMPTY!"); digitalWrite(FOG_PUMP,LOW); }
else if(*wl<800) u8g.drawStr(68,30,"LOW");
else { digitalWrite(FOG_PUMP,HIGH); u8g.drawStr(68,30,"HIGH"); }
// 光照分级
if(*ll<100) u8g.drawStr(68,45,"Dark");
else if(*ll<200) u8g.drawStr(68,45,"Dim");
else if(*ll<500) u8g.drawStr(68,45,"Light");
else if(*ll<800) u8g.drawStr(68,45,"Bright");
else u8g.drawStr(68,45,"V.Bright");
// pH 计算
double v = 5.0/1024.0 * (*ph);
float pHval = 7 + ((2.5 - v) / 0.18);
u8g.drawStr(4,45,"pH"); u8g.setPrintPos(28,45); u8g.print(pHval);
}
void loop() {
waterTemp.requestTemperatures();
double T = waterTemp.getTempCByIndex(0);
int wl = analogRead(WATER_LEVEL);
int ll = analogRead(LDR_PIN);
int ph = analogRead(PH_PIN);
int chk = DHT.read11(DHT11_PIN);
float hum = DHT.humidity;
RefreshDisplay(&hum, &T, &wl, &ll, &ph);
// TODO: 串口发送 JSON 给 ESP8266
delay(1000);
}
机箱与结构件:多工艺融合
| 部件 | 工艺 | 材料/设备 |
|---|---|---|
| 水箱/主体 | FDM 3D 打印 | BigRep (1 m³) / PLA,Simplify3D 切片 |
| 网杯 | FDM 3D 打印 | Ultimaker 2+ / PLA,优化根系通道 |
| 侧板/前后盖 | 激光切割 | 5 mm 亚克力 (绿/白/透明) |
| 底座框架 | CNC 铣削 | 18 mm 胶合板 / eSign Easy Worker |
| 水箱防水内衬 | 真空成型 | Formech 手动成型机 / PETG 片材 |
3D 打印关键参数 (BigRep 水箱)
- 喷嘴 205 °C / 热床 70 °C
- 层高 0.3 mm,填充 20% Gyroid
- 支撑:树枝式,仅接触构建板
- 后处理:打磨 + 硅油喷涂防水
系统集成与实测


- 传感器读数稳定,LCD 实时刷新无闪烁
- 雾化器水位联动可靠,无干烧
- ESP8266 透传云端,手机 App 可查历史曲线、下发光照配方
- 结构件组装无干涉,水箱防水内衬有效解决 3D 打印渗漏
开源资源
- EAGLE 原理图/PCB:
GIY.sch/GIY.brd - Fusion 360 模型:
GIY System Design.f3d,Net Pot.f3d - DXF 激光切割:Front/Back Cover, Plant Holder, LED Holder
- DXF CNC:Structure Walls, Mould
- 固件:
GIY_Final.ino,GIY_LCD_Light_Test.ino
项目地址与许可
完整档案见 Fab Academy 2017 存档:https://archive.fabacademy.org/2017/fablabkamplintfort/students/396/final.html
协议:CC BY-NC-SA 4.0 — 署名-非商业-相同方式共享
制造工艺
- 定制 4×4 井字棋名片 PCB – 设计、制作与代码指南
- 多位置温度传感器系统,助力智能家居集成
- 862D+ 电烙铁 DIY 智能温控器:精准可靠,低成本替代方案
- MotionSense:基于 Arduino 与 ESP8266 的智能入侵检测系统
- 3D 打印机防火卫士:智能传感器安全系统
- 基于 Arduino、Yaler 与 IFTTT 构建 Web 化 IoT 仪表盘
- Arduino 简易排斥式磁悬浮:电路与 DIY 指南
- 进阶遥控夹爪机器人:精密抓取 DIY 指南
- 高性能 Arduino 气象气球数据记录器
- ArduFarmBot 第二部分:构建远程 IoT 控制站
- Arduino 8×8 LED 矩阵翻页时钟 - DIY 实时时钟项目
- CoroFence 热成像检测器:Panasonic GridEye + PIR + IoT 集成