Arduino・WiFi・IFTTTで実現するオフィス植物自動水やりシステム
必要な部品と材料
| 部品名 | 数量 |
|---|---|
| Arduino Due / Zero / Anduino WiFiシールド対応ボード | 1 |
| Andium Anduino WiFiシールド(またはWiFi接続可能なArduino) | 1 |
| 静電容量式土壌水分センサー | 1 |
使用ツール・サービス
- Arduino IDE
- IFTTT
- Adafruit IO
プロジェクト概要
動機
Andiumオフィスに観葉植物を置いたものの、水やりを忘れて1週間で枯らせてしまいました。IoT企業としてこれは失格。Anduino WiFiシールドとIFTTTで植物に「声」を与え、水不足を通知するシステムを構築しました。

始める前に
緑の指(園芸上手)の方は読む必要ないかも。私のように植物にデジタルで助けを求めさせたい人向けです。必要なもの: Arduino Due/Zero、Anduino WiFiシールド(またはAdafruit IO対応WiFi Arduino)、静電容量式土壌水分センサー、そして水(完成後に植物へ)。

水分センサーについて
湿った土に浸して使う数少ないセンサーの一つ。白線より下のみ浸水可能。それ以上は防水されていないので注意。
水やり時もセンサーの白線より上を濡らさないよう注意。
静電容量式土壌水分センサーのキャリブレーション
センサーは3線式: 3.3V(赤)、GND(黒)、信号(青)をアナログピンA1に接続。完全乾燥時と水没時(白線まで)の2点でキャリブレーションし、0-100%相対湿度の閾値を決定します。
筆者の環境では乾燥時807、水没時415でした。
キャリブレーション用スケッチ
int inputPin = A1;
void setup() {
Serial.begin(115200);
delay(3000);
}
void loop() {
Serial.print("Raw val: ");
Serial.println(readHumidity());
delay(3000);
}
int readHumidity() {
int sensorVal = analogRead(inputPin);
return sensorVal;
}
メインスケッチ
#include <WiFi101.h>
#include "Adafruit_MQTT.h"
#include "Adafruit_MQTT_Client.h"
#include "AnduinoLCD.h"
// WiFiパラメータ
#define WLAN_SSID "YourSSID"
#define WLAN_PASS "YourPassword"
// Adafruit IO
#define AIO_SERVER "io.adafruit.com"
#define AIO_SERVERPORT 1883
#define AIO_USERNAME "your_username"
#define AIO_KEY "your_aio_key"
WiFiClient client;
Adafruit_MQTT_Client mqtt(&client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
Adafruit_MQTT_Publish humidityVal = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/officePlants");
AnduinoLCD LCD = AnduinoLCD(ST7735_CS_PIN, ST7735_DC_PIN, ST7735_RST_PIN);
int inputPin = A1;
const int dryVal = 807; // ご自身の乾燥時値に変更
const int wetVal = 415; // ご自身の水没時値に変更
int humidity = 0;
int humidityPrev = 0;
int relHumidity = 0;
void setup() {
Serial.begin(115200);
delay(3000);
connectToWiFi();
connectToAdafruit();
LCD.begin();
LCDinit();
}
void loop() {
if (!mqtt.ping(3)) {
if (!mqtt.connected()) connect();
}
humidity = readHumidity();
char b[4];
String str = String(humidity);
for (int i = 0; i < str.length(); i++) b[i] = str.charAt(i);
b[str.length()] = 0;
if (!humidityVal.publish((char*)b)) {
Serial.println("Failed to publish humidity");
} else {
Serial.print("Humidity published: ");
Serial.println(humidity);
displayHumidity(humidity, humidityPrev);
}
Serial.print("Humidity: ");
Serial.print(humidity);
humidityPrev = humidity;
delay(600000); // 10分ごと
}
// 以下、接続・表示・変換関数省略(元コード参照)
// relHumidity = map(sensorVal, dryVal, wetVal, 0, 100); で0-100%変換
必要ライブラリ: WiFi101, Adafruit_MQTT, AnduinoLCD。ご自身のdryVal/wetValに書き換えてください。10分ごとにAdafruit IOへ湿度データを送信。

IFTTTで閾値通知設定
相対湿度が20%未満になったらTwitter(@andiumPlants)で「水をくれ」と通知するようIFTTT設定。

今後の展開
植物に「声」を与えるクリエイティブな方法は他にも。Anduino WiFiと土壌センサーで独自システムを作ってみてください!
ライブラリ
Anduinoライブラリ: GitHub
製造プロセス
- 肥料:科学、生産、持続可能な未来
- Bluetooth操作のArduinoスパイボットを自作する
- FlickMote:ジェスチャー操作のIRリモコンでスマートホームを制御
- 自作Arduino TV-B-Gone:全テレビ対応の万能リモコン
- 12メートル先から見える大型LEDマスタークロック(アラーム機能付き)を自作しよう
- ArduinoとBluetoothで作るスマート紛失防止タグ「Find Me」
- Arduinoプロジェクトのための最適化電源ソリューション
- Arduino三目並べ:MAX7219 LEDマトリクスと段ボールケースで自作
- TinyMLで植物の健康状態を診断:実践ガイド
- スマートArduino四足歩行ロボットの製作:ステップバイステップガイド
- ゲーム用カスタムArduinoジョイスティックハンドルの製作