DIYスマートIoTデバイス:ATmega32U4、ESP8266、各種センサーで構築する植物栽培システム「GIY」
部品と材料
| 部品 | 数量 | 備考 |
|---|---|---|
| Microchip ATmega32U4 | 1 | メインMCU(Arduino Leonardo互換) |
| Espressif ESP8266 ESP-12E | 1 | Wi-Fiモジュール |
| 16MHz 水晶発振子 | 1 | |
| パワーMOSFET Nチャネル | 4 | 高電力負荷駆動用 |
| 電圧レギュレーターモジュール | 1 | Digilent製、12V→5V変換 |
| DHT11 温湿度センサー(4ピン) | 1 | |
| DS18B20 防水温度センサー(1-Wire) | 1 | Maxim Integrated |
| 水位センサー(MikroE Water Detect click) | 1 | |
| Arduino LCDスクリーン(128×64グラフィック) | 1 | ST7920コントローラー |
| フォトレジスタ(CdSセル) | 1 | 光量検知用 |
必要な工具と機器
- 3Dプリンター
- レーザーカッター
使用アプリとオンラインサービス
- Autodesk Fusion 360(3D設計)
- Arduino IDE
プロジェクト概要
導入
MITオープンアグリ文化イニシアチブのディレクター、ケイレブ・ハーパー氏のTEDトーク「デジタルファーミング:このコンピューターが未来の食料を育てる」に強く感銘を受け、このプロジェクトが始まりました。「世界中のどこでも、美味しく栄養価の高い食料を屋内で育てられたらどうなるか?」という問いかけが、私の原動力です。
目標は、植物の成長に最適な気候条件を自動で作り出す「箱/インキュベーター」を作ることです。必要な光量と栄養を正確に供給し、サンライトエミュレーター、灌漑システム、気候制御を一つのエレガントなデザインに統合します。

実装予定技術
- グロウLEDライト:クロロフィルが主に反応する450nm(青)と650nm(赤)の波長を組み合わせ、栄養成長と開花の両方をサポート
- 超音波アトマイザー(フォグメーカー):エアロポニクス(フォグポニックス)方式で、肥料を含んだミストで植物に給水
- 自動栄養液ドージング:植物が必要な時に必要な量の栄養液を自動投与
- 水質センシングシステム:pHとTDS(総溶解固形分)センサーで貯水タンクの水質を監視・アラート
- 水交換システム:ボタン一つで自動給排水を制御
- 空気制御システム:DHT22/11センサーで温湿度を取得、ファンとコイルで1度単位で制御
- モバイルアプリ:リアルタイムデータ表示、履歴グラフ、SNS共有、インテリジェントアラート、遠隔環境設定を実現
類似プロジェクトは既に存在しますが、「既存のアイデアを改良するのが最高の創造的アイデアを生む方法」です。市販品の長所短所を分析し(スペース効率、コスト、同時栽培数など)、欠点を克服しベストな機能だけを実装した新しいオープンソースシステムを目指します。野心的ですが、やってみる価値はあります!
実験:栽培環境の比較検証
植物の成長には数週間〜数ヶ月かかるため、早期から実験を開始しました。以下の4グループで比較:
- 土 + 自然光:完全自然環境(窓際)
- フォグ + 自然光:養液ミスト環境、窓際
- 土 + グロウLED:土栽培だが人工光
- フォグ + グロウLED:ヒーローグループ(本システムの最終形態)
ドイツのスーパー「Kaufland」で購入したミックスハーブの種子で実験開始。発芽にはほぼ100%の湿度が必要なため、ペーパータオルで覆いビニール袋で密閉。1.5週間でほぼ全て発芽しました。

丈夫な苗を選別し、ココナッツコイアペレット(水で6倍に膨らむ有機培地)に植え替え。1週間で根が見え始め、ロックウール(岩綿)培地と粘土ボール、土に移植してフォグ栽培を開始。しかしフォグの水分が培地に行き渡らず、生存率は低かったです。
イースターブレイク後の再挑戦
休暇中にシステム停止で全滅。心機一転、ロックウール培地で再挑戦。IKEAで購入したロックウールと種子で発芽させ、フォグシステムの稼働時間を延ばして「フォグのみで発芽できるか」を検証中です。
電子回路設計・製作
最終基板に必要な機能とピン数を整理し、マイクロコントローラーを選定。候補はsatshakit(Daniele Ingrassia作、ATmega328Pベース)とFABLEO(Jonathan Grinham作、ATmega32U4ベース、ハードウェアUSB内蔵)。ATmega328Pは経験済みなので、新しい挑戦としてFABLEO(ATmega32U4)をベースに採用しました。
設計にはEAGLEを使用。回路図(.sch)で論理接続を定義し、基板レイアウト(.brd)でパターン設計。fab.lbrライブラリを活用し、ラベル機能で配線を簡素化しました。

主な回路ブロック:
- AVRISPプログラミング用ピンヘッダー
- USB回路+16MHz水晶
- 12V→5V電圧レギュレーター
- MOSFET回路×4(3つは12V直結、1つは昇圧レギュレーター経由で24Vフォグメーカー駆動)
基板レイアウトではグリッド解像度を0.01に設定し、GNDをポリゴンでベタ塗りして配線効率化。表裏2層基板として、裏面は水平反転して加工。

CNCフライス盤(Roland)で加工。FabModulesでPNGからG-code生成。0.2mmエンドミルで内側彫刻、1mmで外形切断。両面加工後、重ね合わせて接着。


はんだ付け後、マルチメーターで導通確認。VCC-GNDショートが見つかり(顕微鏡で1時間かけて発見)、ナイフでパターンを削って絶縁修正。昇圧レギュレーター(12V→24V)を裏面に実装し、24V出力に調整済み。ネットワーキング週に作ったWi-Fi基板も裏面に搭載。

配線と組み込みプログラミング(I/Oデバイス)
Arduino IDEで「Arduino Leonardo」として認識。「Arduino as ISP」スケッチを書き込んだArduino Unoをプログラマーとして使用し、ブートローダー書き込み後、Blinkスケッチで動作確認。
センサー実装詳細
DHT11 温湿度センサー:安価、3-5V動作、湿度5%精度、温度±2℃精度、1Hzサンプリング。VCC/GND/データピンの3線接続。DHT.hライブラリで簡単読み取り。
DS18B20 1-Wire防水温度センサー:-55〜125℃、±0.5℃精度、ユニークな64ビットシリアル番号で複数並列接続可能。4.7kΩプルアップ抵抗が必要(基板に未実装のため手配線で追加)。OneWire.h、DallasTemperature.hライブラリ使用。
LDR(光依存抵抗):暗闇で〜1MΩ、明るさで数kΩまで低下。アナログ電圧出力をArduino ADC(0-1023)で読み取り、閾値で「暗い/薄暗い/明るい/非常に明るい」を判定。
水位センサー(自作):土壌水分センサーを流用。電気伝導度測定の原理は同じ。アナログ値0〜1023を「EMPTY(0)」「LOW(〜800)」「FULL(900〜)」の3段階にキャリブレーション。
グラフィックLCD(128×64、ST7920):通常多ピン必要だが、シリアル接続モードでデジタル3ピンのみで制御可能。U8glibライブラリ使用。起動時にFabLabロゴ(ビットマップ表示)を表示する機能も実装。画像はPNG→縮小→BMP変換→LCD AssistantでHEX配列化。
pHセンサー(ロゴ pHセンサー v1.1):最も扱いが難しいセンサー。プローブが微小電圧(数mV)を出力し、オペアンプ基板で0-5Vに増幅。校正にはpH 4.01/6.86/9.18標準液(粉末タイプ推奨)を使用。オフセット(pH7を2.5Vに合わせる)とステップ(pH単位あたりの電圧変化)を決定し、ソフトウェアでpH値を算出。
MOSFET出力制御:RGB LEDストリップ(常時点灯)と超音波アトマイザー(水位センサー連動:水ありでON、空でOFF)を制御。
統合コード:GIY Board - CODE
#include "dht.h"
#include "U8glib.h"
#include <OneWire.h>
#include <DallasTemperature.h>
#define DHT11_PIN 2
#define ONE_WIRE_BUS 3
#define WATER_LEVEL A4
#define LDR_PIN A3
#define PH_PIN A5
#define GROW_LIGHT 10
#define FOG_PUMP 13
int waterLevel, LightLevel, pH;
dht DHT;
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature waterTemp(&oneWire);
U8GLIB_ST7920_128X64 u8g(4, 12, 6, U8G_PIN_NONE);
// FabLabロゴ ビットマップデータ(省略)
const unsigned char logo[] PROGMEM = { ... };
bool first = true;
float hum = 0.0;
double T = 0.0;
void dht_test(float *humPerc);
void setup(void) {
waterTemp.begin();
pinMode(GROW_LIGHT, OUTPUT);
pinMode(FOG_PUMP, OUTPUT);
digitalWrite(GROW_LIGHT, HIGH);
// ディスプレイ初期化
if (u8g.getMode() == U8G_MODE_R3G3B2) u8g.setColorIndex(255);
else if (u8g.getMode() == U8G_MODE_GRAY2BIT) u8g.setColorIndex(3);
else if (u8g.getMode() == U8G_MODE_BW) u8g.setColorIndex(1);
else if (u8g.getMode() == U8G_MODE_HICOLOR) u8g.setHiColorByRGB(255,255,255);
// 起動ロゴ表示
u8g.firstPage();
do { u8g.drawBitmapP(32, 0, 16, 64, logo); } while(u8g.nextPage());
dht_test(&hum);
}
void RefreshDisplay(float *humPerc, double *T, int *WL, int *LL, int *pH_value) {
u8g.setFont(u8g_font_fub11);
u8g.setFontRefHeightExtendedText();
u8g.setDefaultForegroundColor();
u8g.setFontPosTop();
u8g.drawStr(4, 0, "Hum%");
u8g.setPrintPos(68, 0); u8g.print(*humPerc);
u8g.drawStr(4, 15, "Temp");
u8g.setPrintPos(68, 15); u8g.print(*T);
u8g.drawStr(4, 30, "Wlvl");
if (*WL == 0) {
u8g.drawStr(68, 30, "EMPTY!");
digitalWrite(FOG_PUMP, LOW);
} else {
if (*WL < 800) u8g.drawStr(68, 30, "LOW");
else { digitalWrite(FOG_PUMP, HIGH); u8g.drawStr(68, 30, "HIGH"); }
}
if (*LL < 100) u8g.drawStr(68, 45, "Dark");
else if (*LL < 200) u8g.drawStr(68, 45, "Dim");
else if (*LL < 500) u8g.drawStr(68, 45, "Light");
else if (*LL < 800) u8g.drawStr(68, 45, "Bright");
else u8g.drawStr(68, 45, "2Bright");
double voltage = 5.0 / 1024.0 * (*pH_value);
float Po = 7 + ((2.5 - voltage) / 0.18);
u8g.drawStr(4, 45, "pH");
u8g.setPrintPos(28, 45); u8g.print(Po);
}
void loop(void) {
waterTemp.requestTemperatures();
T = waterTemp.getTempCByIndex(0);
waterLevel = analogRead(WATER_LEVEL);
LightLevel = analogRead(LDR_PIN);
pH = analogRead(PH_PIN);
int chk = DHT.read11(DHT11_PIN);
hum = DHT.humidity;
dht_test(&hum);
if (first) { first = false; }
else {
u8g.firstPage();
do { RefreshDisplay(&hum, &T, &waterLevel, &LightLevel, &pH); }
while(u8g.nextPage());
}
}
void dht_test(float *humPerc) { delay(1000); }
3D設計・3Dプリント
最終システムの外観設計にFusion 360を使用。「セクシーで機能的、組み立て可能」を目標に、3Dプリント、CNC、レーザーカットの技術を統合。BigRep(1m³造形可能)とUltimaker 2+の2台を使い分け。
水容器:中央にフォグメーカー設置穴、センサーケーブル用貫通穴、フロントにLCDスロット、取っ手、底面にスライドレールを設計。Simplify3Dでスライス、PLAフィラメントで出力。サポート除去が大変で穴が空いたため、後でモールディングで防水処理。

ネットポット:フォグと根の通気性を高めるため空洞を拡大、底部にボール形状のフィレットを追加して根誘導性向上。

底部構造・丸みコーナー:BigRepとUltimakerで出力、表面滑らかさを追求。
2D設計・レーザーカット
内部カバー用アクリルパーツ(緑:植物と調和、白:フロント/バック、透明:トップ)を5mmアクリルでレーザーカット(Epilog Fusion 60W)。Fusion 360からDXFエクスポートし、Rhinoで整理。
CNCフライス加工
構造フレーム用に18mm合板をCNC(e-sign Easy Worker MasterPro 2513、作業領域2600×1400mm)で加工。DXFからCAMでG-code生成、ゼロ点合わせ、彫刻→外形切断の順で実行。モールディング用型枠(10mm木材、7枚重ね)も同機で加工。
モールディング・キャスティング(水容器防水化)
CNCで削った型枠に真空成形(Formech手動真空成形機)で薄いシートを成形。型離れが悪いため、まず薄い層を1枚成形し、シリコンスプレーを吹いてから本体層を重ね成形する2段階法で成功。

最終組み立て
構造フレーム組み立て → RGB LEDストリップ4分割はんだ付け → センサー配線・基板固定 → 完成!


最終プレゼンテーション動画
© 2017 Albot Dima. All rights reserved | Creative Commons BY-NC-SA 4.0
詳細: Fab Academyアーカイブ
回路図


製造プロセス
- 名刺サイズPCBで作る4×4三目並べゲーム - 設計・製作・プログラミングガイド
- スマートホーム連携向けマルチポジション温度センサーシステム
- 862D+はんだごて用DIY温度コントローラー:精度と信頼性を両立
- MotionSense: ArduinoとESP8266で作るスマート侵入検知システム
- 3Dプリンター火災予防:スマートセンサーセーフティシステム
- Arduino、Yaler、IFTTTでWeb対応IoTゲージを構築する
- Arduinoで作る斥力式磁気浮上装置: シンプル回路とDIYガイド
- 高度なリモートコントロールグリッパーロボット: 精密ハンドリング向け
- 高性能 Arduino 気象観測気球データロガーの製作ガイド
- ArduFarmBot Part 2:リモートIoT制御ステーションの構築
- CoroFenceサーマルディテクター:Grid-EYE & PIRセンサー搭載IoT体温監視