亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

Arduino + WiFi + IFTTT 自动办公室植物浇水系统:从土壤湿度到推送通知的完整物联网闭环

项目动机

办公室绿植因疏于浇水枯萎,作为 IoT 团队决定用技术解决:Arduino Due/Zero + Anduino WiFi 扩展板 + 电容式土壤湿度传感器 → Adafruit IO (MQTT) → IFTTT 阈值触发 → 推送/邮件/短信提醒浇水。实现“植物会说话”的数字化养护。

硬件架构

模块选型关键参数
主控Arduino Due / Zero3.3V 逻辑, SAM3X8E / SAMD21, 多串口
WiFiAndium Anduino WiFi ShieldATWINC1500, 802.11 b/g/n, SPI 接口
传感器电容式土壤湿度传感器3.3V 供电, 模拟输出, 耐腐蚀, 白线以上不可浸水
供电USB 5V 或 7-12V DC由于 Due/Zero 为 3.3V,传感器直供 3.3V
Arduino + WiFi + IFTTT 自动办公室植物浇水系统:从土壤湿度到推送通知的完整物联网闭环
Arduino + WiFi + IFTTT 自动办公室植物浇水系统:从土壤湿度到推送通知的完整物联网闭环

传感器原理与安装

电容式传感器以 PCB 走线形成电容极板,土壤介电常数随含水率变化(干土 ~2-5,水 ~80),测量电容变化输出电压。关键安装规范:

Arduino + WiFi + IFTTT 自动办公室植物浇水系统:从土壤湿度到推送通知的完整物联网闭环

校准流程(关键步骤)

  1. 传感器悬空自然干燥 30 分钟 → 记录 dryVal(如 807)
  2. 传感器垂直插入水杯至白线处 → 记录 wetVal(如 415)
  3. 代码中映射:relHumidity = map(sensorVal, dryVal, wetVal, 0, 100)

// 校准草稿代码
int inputPin = A1;
void setup() { Serial.begin(115200); delay(3000); }
void loop() {
  int val = analogRead(inputPin);
  Serial.print("Raw: "); Serial.println(val);
  delay(3000);
}

云端数据链路

[Arduino] --WiFi/MQTT--> [Adafruit IO Feed: officePlants] --IFTTT Webhook--> [推送/邮件/短信]

核心固件(关键片段)


#include <WiFi101.h>
#include "Adafruit_MQTT.h"
#include "Adafruit_MQTT_Client.h"
#include "AnduinoLCD.h"  // 可选:板载 LCD 显示

#define WLAN_SSID   "YourSSID"
#define WLAN_PASS   "YourPassword"
#define AIO_SERVER  "io.adafruit.com"
#define AIO_PORT    1883
#define AIO_USER    "your_username"
#define AIO_KEY     "your_aio_key"

WiFiClient client;
Adafruit_MQTT_Client mqtt(&client, AIO_SERVER, AIO_PORT, AIO_USER, AIO_KEY);
Adafruit_MQTT_Publish humidityPub = Adafruit_MQTT_Publish(&mqtt, AIO_USER "/feeds/officePlants");

const int DRY_VAL = 807;   // 你的校准值
const int WET_VAL = 415;
int humidityPrev = 0;

void setup() {
  Serial.begin(115200);
  connectWiFi();
  connectAdafruit();
  // LCD 初始化...
}

void loop() {
  // 保持 MQTT 连接
  if (!mqtt.ping(3)) { if (!mqtt.connected()) connectAdafruit(); }
  
  int raw = analogRead(A1);
  int humidity = map(raw, DRY_VAL, WET_VAL, 0, 100);
  humidity = constrain(humidity, 0, 100);
  
  // 发布
  char buf[4]; sprintf(buf, "%d", humidity);
  if (humidityPub.publish(buf)) {
    Serial.print("Published: "); Serial.println(humidity);
    updateLCD(humidity, humidityPrev);
  }
  humidityPrev = humidity;
  delay(600000); // 10分钟
}

void connectWiFi() {
  WiFi.begin(WLAN_SSID, WLAN_PASS);
  while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print('.'); }
  Serial.println(" WiFi OK");
}

void connectAdafruit() {
  int8_t ret;
  while ((ret = mqtt.connect()) != 0) {
    Serial.print("MQTT retry: "); Serial.println(ret);
    delay(1000);
  }
  Serial.println("Adafruit IO Connected!");
}

IFTTT 告警配置

  1. IFTTT 新建 Applet:If This → Adafruit IO → “Monitor a feed” → 选择 officePlants → “Value below” → 设定 20(%)
  2. Then That 可选多动作:
    • Notifications(手机推送)
    • Email(发送详细湿度值)
    • SMS(Twilio,紧急提醒)
    • Google Sheets(自动记录日志)
    • Webhooks(触发自动浇水电磁阀/蠕动泵)
Arduino + WiFi + IFTTT 自动办公室植物浇水系统:从土壤湿度到推送通知的完整物联网闭环
Arduino + WiFi + IFTTT 自动办公室植物浇水系统:从土壤湿度到推送通知的完整物联网闭环
Arduino + WiFi + IFTTT 自动办公室植物浇水系统:从土壤湿度到推送通知的完整物联网闭环

实测数据样例

Arduino + WiFi + IFTTT 自动办公室植物浇水系统:从土壤湿度到推送通知的完整物联网闭环

曲线显示:浇水后湿度跃升至 90%+,随后指数衰减;阈值 20% 触发告警准确对应需浇水时刻。

常见问题与优化

问题原因对策
读数漂移/异常传感器腐蚀、施肥盐分、温度漂移定期重新校准、改用陶瓷电容/电阻式传感器、加温度补偿
MQTT 频繁断连WiFi 信号弱、路由器踢闲连接增大 ping 间隔、加心跳、固定 IP、外置天线
IFTTT 不触发Feed 名称错、阈值逻辑反、Applet 关闭检查 Feed 完整路径、测试手动发布、查看 IFTTT 活动日志
LCD 显示乱码字符数组未终止、刷新过快闪屏补 '\0'、脏矩形更新、降低刷新率

进阶演进

资源链接

制造工艺

  1. 化肥:科学、生产与可持续未来
  2. DIY 蓝牙控制 Arduino 间谍小车
  3. FlickMote:基于手势的智能家居红外遥控器
  4. DIY Arduino TV-B-Gone:万能关机遥控器
  5. 自制大尺寸LED主时钟带闹钟功能 — 12米外清晰可见
  6. Find Me:基于 Arduino 与蓝牙的智能寻物器制作指南
  7. Arduino 项目优化供电方案:从按键开关到电池监测与数据记录
  8. Arduino 井字棋游戏:MAX7219 点阵屏 + 纸板外壳 DIY
  9. TinyML 植物健康评估:Arduino Nano 33 BLE Sense + 步进电机扫描建模
  10. 从零构建智能 Arduino 四足机器人:完整指南
  11. DIY Arduino 手柄方向盘 - 游戏竞速模拟器自制指南
  12. 利用 Arduino Nano R3 自制全功能 CNC 雕刻机