Arduino UNO 与 Raspberry Pi 打造智能自动化园艺系统
元件与物料
| Arduino UNO | ×1 |
| Raspberry Pi 2 Model B (任意版本均可) | ×1 |
| Raspberry Pi 摄像头模组 | ×1 |
| Arduino Ethernet Shield 2 | ×1 |
| 继电器模块 (通用) | ×1 |
| 导线 (按米) | ×1 |
| 光敏电阻 | ×1 |
| 水泵 (通用) | ×1 |
| 风扇 (旧电脑拆机) | ×1 |
| 通用 NPN 三极管 | ×1 |
| MicroSD 卡 16GB (延时摄影存储) | ×1 |
软件与在线服务
- Arduino IDE
- Raspberry Pi OS (Raspbian)
- Win32DiskImager (烧录镜像)
- PuTTY (SSH 远程登录)
- myDevices Cayenne (物联网仪表盘)
项目简介
这是作者第二代自动化花园,全面接入 Cayenne 平台,操作更简便;新增 Raspberry Pi 实现植物生长延时摄影。

Arduino 硬件接线
先将 Ethernet Shield 叠加在 Arduino 上。以下为各模块接线:
- 土壤湿度传感器: VCC→5V, GND→GND, 信号→A1
- 风扇 (经三极管驱动): 基极经电阻接 D3,集电极接风扇负极,发射极接地;风扇正极接继电器常开触点中间脚;二极管并联在三极管集电极-发射极 (续流)。
- 水泵: 正极接继电器常开触点中间脚,负极接外部电源地。
- 光敏电阻 (可选): 一端接 A0 并接下拉电阻到地,另一端接 5V。
- 补光灯: 正极接继电器,负极接外部电源地。
- 温湿度传感器 (DHT22): VCC→3.3V, GND→GND, DATA→D8 (需库支持)。
- 水位传感器: VCC→5V, GND→GND, 信号→A2。









最终安装
实物使用 4 路继电器模块 (Fritzing 图中用两个 2 路代替)。单路 12V 电源供继电器负载侧,正负分线后各接三路设备 (灯、水泵、风扇),因不同时工作,一路电源足矣。Arduino 侧:5V 供继电器模块逻辑侧,IN1→D2(灯)、IN2→D5(水泵)、IN4→D4(风扇)。


Cayenne 平台配置
- 注册账号 cayenne.mydevices.com。
- 确保 Ethernet Shield 接网线联网。
- 上传 Arduino 代码 (含 Cayenne 认证 token 与 DHT22 虚拟引脚定义)。
关键代码片段:
#include "DHT.h"
#define CAYENNE_PRINT Serial
#include <CayenneMQTTEthernet.h> // W5100 专用
#define DHTPIN 8
#define DHTTYPE DHT22
#define VIRT_TEMP V1
#define VIRT_HUM V2
char token[] = "your_token";
DHT dht(DHTPIN, DHTTYPE);
unsigned long prev_DHT_refresh = 0, interval_DHT_refresh = 1000;
void setup() {
Serial.begin(9600);
Cayenne.begin(token);
dht.begin();
}
void loop() {
Cayenne.run();
getDhtValues();
}
void getDhtValues() {
unsigned long now = millis();
if (now - prev_DHT_refresh > interval_DHT_refresh) {
float h = dht.readHumidity();
float t = dht.readTemperature();
if (!isnan(h) && !isnan(t)) {
Cayenne.virtualWrite(VIRT_HUM, h);
Cayenne.celsiusWrite(VIRT_TEMP, t);
}
prev_DHT_refresh = now;
}
}
Cayenne 仪表盘添加设备
“Add Device → Custom Widget”:温湿度用虚拟引脚 (V1/V2),其余传感器选对应模拟量引脚;执行器 (灯/风扇/水泵) 在 Actuators 中绑定继电器对应引脚。

事件与触发器 (自动化逻辑)
- 水泵: 土壤过干触发开启,湿度达标触发关闭 (两个触发器)。
- 水位报警: 数值过高 (缺水) 发送邮件告警。
- 定时事件: 早晚定时开关补光灯,两个时段开关风扇。

Raspberry Pi 搭建延时摄影
- 烧录 Raspbian:Win32DiskImager 写入 SD 卡。
- PuTTY SSH 连接:查路由器获取 Pi IP,登录 (pi/raspberry)。
- 系统更新:
sudo apt-get update && sudo apt-get upgrade - 可选 VNC:
sudo apt-get install tightvncserver && vncserver :1,电脑端 VNC Viewer 连IP:1。 - 安装 Cayenne Agent (可选远程管理):
wget ... && sudo bash ... - 启用摄像头:
sudo raspi-config→ Interfaces → Camera Enable。 - 建立存储目录与脚本:
mkdir /home/pi/Desktop/timelapse
nano /home/pi/Desktop/timelapse.sh
# 内容:
SAVEDIR=/home/pi/Desktop/timelapse/
while [ true ]; do
filename=-$(date -u +"%d%m%Y_%H%M-%S").jpg
/opt/vc/bin/raspistill -o $SAVEDIR/$filename
sleep 3600
done
chmod +x timelapse.sh
后台运行脚本即可每小时拍一张照,生成植物生长延时视频素材。
总结与避坑指南
教程虽长但步骤清晰:接线少、平台配置易上手。最终安装照片显示线材过长凌乱,后续会整理。延时摄影成果待植物成熟后发布。
避坑提示: Ethernet Shield 易报 “DHCP fail”,Arduino 论坛建议在板载两处焊接 100Ω 电阻 (原文幽默建议“焊在随机位置烦扰读者”,实为改善阻抗匹配)。



代码片段
Arduino 主程序 (含 Cayenne 与 DHT22)
#include "DHT.h"
#define CAYENNE_PRINT Serial
#include <CayenneMQTTEthernet.h>
#define DHTPIN 8
#define DHTTYPE DHT22
#define VIRT_TEMP V1
#define VIRT_HUM V2
char token[] = "your_token";
DHT dht(DHTPIN, DHTTYPE);
unsigned long prev_DHT_refresh = 0, interval_DHT_refresh = 1000;
void setup() { Serial.begin(9600); Cayenne.begin(token); dht.begin(); }
void loop() { Cayenne.run(); getDhtValues(); }
void getDhtValues() { ... }
Raspberry Pi 延时摄影 Shell 脚本
SAVEDIR=/home/pi/Desktop/timelapse/
while [ true ]; do
filename=-$(date -u +"%d%m%Y_%H%M-%S").jpg
/opt/vc/bin/raspistill -o $SAVEDIR/$filename
sleep 3600
done
制造工艺
- 树莓派 LIRC 通用红外遥控器专业构建指南
- 树莓派射频转直流:包络检波器构建与故障排查
- Cycle Chaser:树莓派让自行车变身夜间光影秀
- 树莓派防窃报警器 DIY:压力触发播放警报声
- 树莓派 + MCP9808 + InfluxDB + Grafana:家庭温度监测系统
- 树莓派打造家庭自动化系统:手机远程控制灯风扇大门
- 树莓派自动浇水系统:土壤湿度监测 + Web 仪表盘远程控制
- MrRobot:Ubuntu移动端控制Rapiro机器人,支持语音、触控与摇晃交互
- DIY仿Wall-E树莓派CD盒机器人
- 蓝牙控制树莓派机器人:语音反馈功能构建指南
- Arduino与树莓派构建互联网控制视频流机器人完整指南
- RasPiRobot Board V2:将树莓派扩展为强大机器人控制器