Arduinoで作るスマート室内ガーデン – 自動植物育成システム
必要な部品と材料
- Arduino Nano R3 × 1
- mbientLab Bluetooth-USBドングル × 1
- JLCPCB製カスタムPCB × 1
- ESP-01モジュール × 1
- HC-05/HC-06 Bluetoothモジュール × 1
- 照度センサ BH1750 × 1
- 温湿度センサ DHT11 × 1
- 土壌水分センサ × 1
- ウォーターポンプ × 1
- 12V DCファン × 1
- 白色LED × 数個
- ヘッダーコネクタ類 × 1式
プロジェクトの概要

ガーデニングにマイコンを組み合わせるのは人気のアイデアです。植物の要求は「光・水・空気」の3要素(正確には4要素)に集約され、これらを制御すればどこでも通年で栽培可能です。本プロジェクトでは、Arduino開発ボードを使ったシンプルな室内ガーデンシステムの構築手順を、ハードウェア・ソフトウェア両面から詳細に解説します。JLCPCBで発注したカスタムPCBを用いることで見た目も配線もすっきりまとまり、全ドキュメントとコードを提供するので、電子工作初心者でも挑戦しやすくなっています。
製作期間はわずか7日間:ハードウェア組み立て3日、コードとAndroidアプリ開発4日。Bluetooth経由でアプリからシステムを操作できます。
このチュートリアルで学べること
- プロジェクト機能に応じた適切な部品選定
- 全コンポーネントを接続する回路設計
- パーツ組み立てとテスト手順
- AndroidアプリでBluetooth接続し、システムを手動・自動制御
Step 1: 室内ガーデンとは?


植物の基本的ニーズは3つ:
- 光: 1日6時間以上の良質な光。手をかざして影ができないなら不十分。育成ライトで補完可能。自然光が少ない環境なら耐陰性植物を選ぶか、日当たりの良い窓辺に置く。
- 水: 自生環境に近い水分条件が必要。厚くゴム質の葉は乾燥に強く、薄い葉は多湿を好む。水やりが面倒なら乾燥耐性種を選ぶか、貯水機能付き鉢を使う。
- 空気: 光合成で酸素を出し、ホルムアルデヒド等を吸着。葉を清潔に保ち、周囲の空気を湿らせて循環させる必要あり。風通しの良い場所か、小型ファンを設置。
本システムでは以下を自動制御します:
- 照度センサ(BH1750)の信号に基づき、LED照明の明るさを制御
- 土壌水分センサで水やりタイミングを判断し、ウォーターポンプをON/OFF
- 温湿度センサ(DHT11)で12V DCファンを制御し、新鮮な空気を循環
Step 2: センサとアクチュエータ


センサ
- 照度センサ BH1750: I2Cインターフェースのデジタル環境光センサ。1〜65535 lxの広範囲を高分解能で検出。
- 土壌水分センサ: 2極間の抵抗/導電率を測るタイプは推奨しません。土壌pH、溶存固形分、温度の影響を受けやすく、接点が腐食しやすいため1シーズン持たないことが多いです。(本プロジェクトでは別方式を採用)
- 温湿度センサ DHT11: 低コストなデジタル温湿度センサ。静電容量式湿度センサとサーミスタを内蔵。データピンからデジタル出力。2秒ごとにしか新しいデータが取れません。
アクチュエータ
- 白色LED: 順方向電圧で発光するp-n接合ダイオード。植物育成用の補助光源として使用。
- ウォーターポンプ: 機械的動作で液体を移送。往復動・回転動などで駆動。電気駆動の小型ポンプを採用。
- 12V DC冷却ファン: 植物周囲の空気を循環させ、温度上昇を抑制。
Step 3: PCB製作(JLCPCB製)





JLCPCBについて
JLCPCB(深圳嘉立創電子科技発展有限公司)は中国最大のPCB試作企業で、10年以上の実績、20万以上の顧客、日量8,000件以上の受注、年産20万㎡の生産能力を誇ります。品質・価格・納期のバランスに優れ、今回も最適な選択でした。
ガーバーファイルをアップロードし、板厚・色・枚数を指定して注文。わずか2ドルで3日後に到着しました(送料無料キャンペーンも随時実施)。届いたPCBは設計通りのリーフ形状で、全ラベル・ロゴが印刷されており、はんだ付けガイドとして完璧に機能します。回路図(PDF)はこちら。
Step 4: 部品調達

必要な部品と調達先リンク:
- JLCPCB製PCB
- Arduino Nano: Amazon
- ESP-01モジュール: Amazon
- HC-05/HC-06 Bluetoothモジュール: Amazon
- BH1750照度センサ: Amazon
- DHT11温湿度センサ: Amazon
- 土壌水分センサ: Amazon
- ウォーターポンプ: Amazon
- 12V DCファン: Amazon
- 白色LED: Amazon
- ヘッダーコネクタ類: Amazon
Step 5: 組み立て






ラベルに従いはんだ付け。まずArduinoコネクタから電源確認と基本動作テスト。各センサ・LEDも直接ボード接続なので個別にテスト可能。
はんだ付けのコツ: こて先を常に清潔に。スポンジで拭き、光沢を保つ。フラックスや酸化で汚れたら即座に掃除。中断してでも綺麗にする価値あり。熱伝導が格段に良くなります。
JLCPCBのPCBはラベルが充実しており、ミスなく実装できます。両面実装も可能。全部品実装後、CNCレーザーカット用のDXFファイル(こちら)で電子部品と植物を一体化するサポートを製作しました。
Step 6: Androidアプリ



アプリ機能:
- BluetoothでArduinoに接続
- 手動モード:ファン、照明、ウォーターポンプのON/OFF個別制御
- 「データ取得」ボタンで全センサ値をスマホ画面に表示
- 自動モード:照度センサ値に基づきLED明るさを自動調整
アプリはこちらから無料ダウンロード可能。
Step 7: Arduinoコードとテスト検証





コードはこちらからダウンロード。よくコメントされており理解しやすい構成です。特に照度自動制御モードが実用的:ベース下部の照度センサが環境光を監視し、フロントLEDの明るさを自動調整。温湿度値もスマホ画面でリアルタイム確認できます。
ソースコード
/************************************************************************************************************************************************************************ * - Author : BELKHIR Mohamed * - Profession : (Developer) MEGA DAS owner * - Main purpose : Industrial Application * - Copyright (c) holder : All rights reserved * - License : BSD 2-Clause License * - Date : 20/11/2017 ***********************************************************************************************************************************************************************/ #include "DHT.h" #include#include // 制御ピン定義 const int Pump = 4; // ウォーターポンプ制御 const int Fan = 5; // ファン速度制御(PWM) const int Light = 6; // LED明るさ制御(PWM) const int TempHum = 7; // DHT11データ入力 const int Moisture = 8; // 水分センサ デジタル入力 const int TestLED = 9; // テスト用LED const int Brightness = 12; // 照度センサ信号入力 const int analogMoisture = 0; // 水分センサ アナログ入力 #define DHTTYPE DHT11 DHT dht(TempHum, DHTTYPE); BH1750 lightMeter; char Data = 'x'; String cmd = ""; int flagModeAuto = 0; int sprayCMD = 0; int LightCMD = 0; int lightLevelPlus = 0; float temperature = 0; float humidity = 0; uint16_t lux = 0; void setup() { Wire.begin(); dht.begin(); lightMeter.begin(); Serial.begin(9600); Serial.setTimeout(100); pinMode(Pump, OUTPUT); pinMode(Fan, OUTPUT); pinMode(Light, OUTPUT); pinMode(Moisture, INPUT); pinMode(TestLED, INPUT); delay(1000); digitalWrite(Pump, LOW); digitalWrite(Fan, LOW); digitalWrite(Light, LOW); } void loop() { while (Serial.available()) { delay(10); Data = Serial.read(); cmd += Data; } if (cmd == "dt") { Serial.print(humidity); } if (cmd == "dh") { Serial.print(lux); } if (cmd == "db") { Serial.print(temperature); } if (cmd == "o") { flagModeAuto = 1; } if (cmd == "m") { flagModeAuto = 0; } if (flagModeAuto == 1) { autoPump(); lightBrightness(); autoFan(); } else { if (cmd == "f") { analogWrite(Fan, 255); } if (cmd == "x") { analogWrite(Fan, 0); } if (cmd == "l") { analogWrite(Light, 255); } if (cmd == "k") { analogWrite(Light, 0); } if (cmd == "w") { analogWrite(Pump, 255); } if (cmd == "y") { analogWrite(Pump, 0); } } cmd = ""; lux = lightMeter.readLightLevel(); temperature = dht.readTemperature(); humidity = dht.readHumidity(); } void autoPump() { if (analogRead(analogMoisture) < sprayCMD) { digitalWrite(Pump, HIGH); delay(1000); digitalWrite(Pump, LOW); delay(1000); } } void lightBrightness() { while (lux < LightCMD) { analogWrite(Light, lightLevelPlus); delay(100); lightLevelPlus++; lux = lightMeter.readLightLevel(); } } void autoFan() { if (temperature > 30) { analogWrite(Fan, 255); } else { analogWrite(Fan, 0); } }
カスタムパーツ・エンクロージャ
dxf_mdf_5mm_s0PEHuez4w.rar(CNCレーザーカット用DXFファイル)
回路図
(PCBパターンが回路図を兼ねています)
製造プロセス
- Arduinoで作るモニター用Ambilightシステム:没入感アップの自作ガイド
- Arduino UNOとOLEDディスプレイでクラシックPongゲームを自作:ステップバイステップチュートリアル
- Arduinoオーディオ周波数検出器 – 高感度サウンドモジュールで最大音量ピークの周波数を測定
- Arduinoで作る自作デジタルペット「Tamaguino」─ 3Dプリンター製ケース付き完全ガイド
- スマートワイヤレス照明スイッチコントローラー:Arduinoで物理スイッチを遠隔操作
- Arduino三目並べ:MAX7219 LEDマトリクスと段ボールケースで自作
- Arduino Nanoで作るスマートな動体検知水鉄砲
- SparkFun 7セグメントディスプレイで作る信頼性の高いArduinoカウントダウンタイマー
- Arduino向日葵:太陽を追尾する電子ヒマワリの製作
- Arduinoで自作RCポルシェカー:ステップバイステップガイド
- Arduino向けスマート屋内ナビゲーションロボットキット