「Arduino Uno R4 WiFi」で観葉植物の水分不足検知システムを作ってみた

農業のIoT化が進む中で、さまざまな場面でエレクトロニクス技術が求められるようになってきました。今回は、「エレクトロニクスを簡単に」をテーマに、観葉植物の水分状態を見える化する簡易システムを作ってみました。

目次
[はじめに:植物の水やり判断の難しさ]
[ローカル表示の基本構成]
[開発環境と実装のポイント]
[配線情報]
[実際のプログラム]
[発展編:MQTTとWebダッシュボードによるリモートモニタリング]
[今後の展望(改善案)]
[関連技術・参考トピック]
[まとめ]
[参考リンク]

はじめに:植物の水やり判断の難しさ

植物の世話をしていると、意外と難しいのが「いつ水をあげるべきか」の判断です。毎日様子を見ているつもりでも、忙しいと水やりのタイミングを逃してしまったり、逆に心配しすぎて水をあげすぎて根腐れを起こしてしまったりします。

そこで今回は、観葉植物の土の水分量をセンサーで取得し、状態を可視化する簡易モニタリングシステムを作ってみました。

ローカル表示の基本構成

まずは基本となる、センサーで値を取得してLCDに表示するシステムを構築しました。

使用した主な部品

- Arduino Uno R4 WiFi

- 土壌水分センサー(Soil moisture module)

- I2C接続のLCDモジュール

- ブレッドボード

- ジャンパーピン

Arduino Uno R4 WiFiの特徴

マイコンには Arduino Uno R4 WiFi を使用しました。メインMCUとして採用されているのは、Renesas製の RA4M1 です。今回参照した情報では、品番として R7FA4M1AB3CFM#AA0 が挙げられており、RA4M1は 48MHz動作のArm Cortex-M4を搭載した32ビットマイクロコントローラ です。

今回の試作では、主にアナログ入力によるセンサー値の取得とLCD表示にフォーカスしましたが、RA4M1ファミリは LCDコントローラHMI向け静電容量式タッチセンサ にも対応しており、単に値を表示するだけでなく、将来的にはしきい値設定や表示モード切り替えなどを本体側で操作できるUIへ発展させやすい点も魅力です。

また、Arduino Uno R4 WiFiは無線機能の拡張性も高く、今回のようなローカル表示のPoCから、MQTTやダッシュボード連携といったネットワーク活用へ段階的に広げていきやすい構成です。ボード選定の時点で「まずは小さく始めて、あとからつなげられる」余地があるのは、試作テーマとして扱いやすいポイントだと感じました。

[RA4M1 - 48MHz Arm Cortex-M4 と LCDコントローラおよびHMI用静電容量式タッチセンサ搭載 32ビットマイクロコントローラ | Renesas]

開発環境と実装のポイント

開発環境には Visual Studio CodePlatformIO IDE を使用しました。Arduino IDEも便利ですが、PlatformIOを使うことでプロジェクト管理やライブラリ管理がしやすくなります。

しきい値の設定と状態表示

土壌水分センサーからアナログ値を取得し、その値に応じて状態を判定します。今回は以下のようなしきい値で設定しました。

- 300未満: Too Wet(水分過多)

- 300以上500未満: Wet(湿っている)

- 500以上700未満: Good(ちょうどよい)

- 700以上: Dry! Water(乾燥・水やりが必要)

しきい値についての注意
このしきい値は環境によって大きく変わります。土の種類、センサーの挿し込む深さ、植物の鉢の状態などによって値は変動するため、実際に使用する環境で「乾燥時の値」と「十分に湿っている時の値」を測定し、調整することが重要です。

配線情報

各センサー、モジュールを以下のように配線します。

配線表

| ①モジュール| ②信号  | ③接続先  | ④補足

| ------------- | ---------- | --------------------- | ------------------------------------------ |

| 土壌水分センサー  | Analog Out | Arduino Uno R4 WiFi の A0   | analogRead(A0) から読み取り先を確認できます。 |

| 土壌水分センサー | VCC | Arduino の電源端子  | 実際のセンサー仕様に応じて 3.3V または 5V を選定します。(今回は5Vに接続) |

| 土壌水分センサー  | GND | Arduino の GND  | LCDを含めてGNDは共通化します |

| I2C LCDモジュール | SDA  | Arduino Uno R4 WiFi の SDA 端子 | Wire.hLiquidCrystal_I2C の利用しI2C接続します。 |

| I2C LCDモジュール | SCL  | Arduino Uno R4 WiFi の SCL 端子 | I2Cアドレスは 0x27 を使用します。  |

| I2C LCDモジュール | VCC / GND  | Arduino の電源端子 / GND        | LCDモジュールの仕様に応じて配線します。(今回はVCCを5Vに接続)|

実際のプログラム

今回のローカル表示版で使用したプログラムを整理すると以下のようになります。
水分センサーの値を A0 から読み取り、LCDの1行目に数値、2行目に状態メッセージを表示するシンプルな構成です。
※本プログラムは、生成AIを用いて作成しております。

```main.cpp
#include <Arduino.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27, 16, 2);
int value = 0;

void setup() {
  Serial.begin(115200);
  lcd.init();
  lcd.backlight();
}

void loop() {
  value = analogRead(A0);
  lcd.setCursor(0, 0);
  lcd.print("Moisture:");
  lcd.print(value);
  lcd.print(" ");
  lcd.setCursor(0, 1);

  if (value < 300) {
    lcd.print("Too Wet");
  } else if (value < 500) {
    lcd.print("Wet");
  } else if (value < 700) {
    lcd.print("Good");
  } else {
    lcd.print("Dry! Water ");
  }

  delay(2000);
}
```
```platformio.ini
[env:uno_r4_wifi]
platform = renesas-ra
board = uno_r4_wifi
framework = arduino
monitor_speed = 115200
lib_deps =
    marcoschwartz/LiquidCrystal_I2C
```

プログラムのポイント

- Wire.hLiquidCrystal_I2C.h を使い、I2C接続のLCDを制御しています。
- LiquidCrystal_I2C lcd(0x27, 16, 2); から、LCDは I2Cアドレス0x27 / 16×2表示 の構成です。
- analogRead(A0) により、土壌水分センサーのアナログ値を取得しています。
- Serial.begin(115200) が入っているため、シリアルモニタでのデバッグもしやすい構成です。

プログラムをビルド、アップロードしてLCDモジュールに水分センサーの値と状態表示がされれば成功です。

発展編:MQTTとWebダッシュボードによるリモートモニタリング

ローカルでのLCD表示ができたところで、さらに実用性を高めるための発展版に取り組みました。

LCD表示だけでは「その場にいないと状態が分からない」という課題がありました。特に複数人で管理するオフィス環境などでは、属人化しやすい点が問題になります。そこで、Arduino Uno R4 WiFiの強みを活かし、取得したデータをMQTTで送信し、Webダッシュボードで状態を確認できる仕組みを構築しました。

リモート監視のメリット

- どこからでも確認可能:オフィスにいなくても植物の状態を把握できます。
- 複数人での共有が容易:チーム全体でダッシュボードを見ながら管理できます。
- 水やり判断のばらつき低減:「適正」「やや乾燥」などの客観的なデータに基づいて判断できます。

※本プログラム、及びWebUIは生成AIを用いて実装しております。

今後の展望(改善案)

簡易的なシステムからスタートし、リモート監視まで実現できましたが、実際に運用していくためにはさらなる改善が必要です。主に、以下の点を検討する必要があります。

- 防水・耐久性の向上:土に挿しっぱなしにするセンサーの腐食対策として、静電容量式センサーへの変更などを検討。
- 通知機能:乾燥状態になったらSlackやLINEに自動通知する仕組みを追加。
- ロギングと可視化:時間ごとの水分変化を記録し、水やりの最適な頻度を分析。
- 基板化・小型化:ブレッドボードから専用基板へ移行し、常設しやすい形で実装。
- 電源設計の見直し:実運用を見据えると、センサー値の安定性や無線通信の継続性を支える電源設計も重要です。今回の試作はUSB給電を前提としていますが、常設化や外部電源対応を考える際には、Renesasの ISL854102 のようなワイドVIN対応の同期降圧レギュレータも参考になります。入力条件が変わる環境でも安定した給電を考えやすく、PoCから実装へ進める際の視点として押さえておきたいポイントです。

  - [ISL854102 - ワイドVIN 1.2A同期降圧レギュレータ | Renesas]

関連技術・参考トピック

今回の実装そのものは Arduino Uno R4 WiFi を中心とした比較的シンプルな構成ですが、周辺の技術要素にも目を向けると、今後の発展の方向性が見えやすくなります。

まず、RA4M1が持つ LCDコントローラ静電容量式タッチセンサ対応 という特徴は、将来的に「状態を見る」だけでなく、「本体側でしきい値を調整する」「画面を切り替える」といったHMIの強化につながります。植物モニタリングを単なる表示装置ではなく、操作可能な組み込み機器として育てていく余地があるという点で、今回のテーマと相性の良い要素です。

また、無線という観点では、Renesasは近年 Wi-Fi 6 / Bluetooth LE 対応のRA6シリーズも展開しています。今回の作例でそこまで踏み込んでいるわけではありませんが、IoT機器が「つながること」を前提に設計される流れの中で、より低消費電力・高機能な常時接続デバイスへ広げていく方向性を考えるうえで参考になります。植物の見守りも、1鉢のローカル表示から、複数拠点・複数デバイスの運用へと発展していく余地があると感じました。

- [Wi-Fi 6 / Bluetooth LE対応RA6シリーズ発売 ニュースリリース | Renesas]

まとめ

今回は、Arduino Uno R4 WiFiを使って、観葉植物の水分不足検知システムを作り、さらにMQTTとWebダッシュボードを用いたリモートモニタリングへと発展させました。

構成はシンプルですが、

- センサーで値を取得する
- 状態を判定する
- ネットワーク経由でデータを送信・可視化する

というIoTの基本を一通り体験できる題材でした。まずはローカル表示の小さな仕組みから始め、そこから通知や可視化、運用改善へとつなげていける点も、このテーマの面白さだと感じています。

参考リンク

- [Arduino UNO R4 WiFi 公式ドキュメント]
- [PlatformIO: Arduino Uno R4 WiFi ボード情報]
- [RA4M1 - 48MHz Arm Cortex-M4 と LCDコントローラおよびHMI用静電容量式タッチセンサ搭載 32ビットマイクロコントローラ | Renesas]
- [ISL854102 - ワイドVIN 1.2A同期降圧レギュレータ | Renesas]
- [Wi-Fi 6 / Bluetooth LE対応RA6シリーズ発売 ニュースリリース | Renesas]