スマート水耕栽培システム:Arduino Mega 2560とセンサーで自動制御
必要な部品と材料
| 部品 | 数量 | 備考 |
|---|---|---|
| Arduino Mega 2560 | 1 | I/Oピン数が多く、複数センサー・アクチュエータ制御に最適 |
| DHT22 温湿度センサー | 1 | DHT11より高精度、温度・湿度両方測定可能 |
| リレー(汎用) | 1 | ポンプやヒーター等の高電圧負荷制御用 |
| RobotGeek 光センサー(LDR) | 1 | 光量測定用、フォトダイオードへの置換も可能 |
| 温度センサー(LM35等) | 1 | 周囲温度測定用 |
| DCファン ×2 | 2 | 冷却用・加熱用(ヒーター併用) |
| 白熱電球 | 1 | 加熱用ヒーターとして使用 |
| ウォーターポンプ | 1 | 点滴灌漑用 |
| LEDアレイ(赤8個、青8個、直列4並列4) | 1セット | 植物育成用、12V駆動 |
| オプトカプラ 4N35 | 4 | LEDアレイ駆動用アイソレーション |
| モータードライバー | 1 | ファン制御用 |
| 抵抗 10kΩ、330Ω等 | 適量 | プルアップ、LED電流制限等 |
使用するソフトウェア
- Arduino IDE - スケッチ開発・書き込み
プロジェクト概要
土を使わない水耕栽培において、レタス栽培に最適な環境(温度25〜30℃、湿度50〜80%、光量250μmol/m²/s)を自動で維持するシステムを構築します。培地としてココアパウダーを用い、Arduino Mega 2560が温度・湿度・光量を監視し、ヒーター/ファン/LED/ポンプを制御します。本プロジェクトは実機のモデル版ですが、スケールアップにより実用システムへ展開可能です。
光制御
赤色LED 8個、青色LED 8個を直列4並列4のアレイ構成とし、12V外部電源で駆動します。Arduinoからはオプトカプラ4N35を介して各列を独立制御し、LDRセンサーで光量を測定・フィードバック制御します。フォトダイオードセンサーを用いるとより高精度な測定が可能です。スケッチ内でLDRの抵抗値からルクス、さらに光子束(photons/sec)へ変換しています。
温度制御
LM35センサーで周囲温度を監視し、以下のロジックで制御します:
- 設定温度未満(<25℃):加熱ファン+白熱電球ON
- 設定温度超過(>30℃):冷却ファンON
- 白熱電球は別箱に配置し、光が光センサーに影響しないよう遮光
ファンはモータードライバーで、電球はリレーで制御します。
湿度制御
DHT11センサー(湿度測定専用として使用)で培地湿度を監視し、以下のロジックで制御します:
- 湿度85%未満:ウォーターポンプON(点滴灌漑で給水)
- 湿度94%超過:冷却ファンON(除湿)、ポンプOFF
ポンプは穴あきパイプを通じて均一に給水するドリップ式を採用しています。
注意事項
- DHT11の応答時間は1Hzのため、読み取り間隔は最低1秒以上空けること
- 直列4個のLED列には12V電源が必要
- 230V商用電源を扱う際は感電・火災防止のため絶縁処理を徹底すること
- オプトカプラ入力側には必ず電流制限抵抗を挿入すること
- ブラシレスDCファンは単方向のため、取り付け向きに注意すること
Arduinoスケッチ
以下のコードをArduino IDEでコンパイル・書き込みしてください。各制御機能を関数化し、loop()内で順次実行しています。
#include <SimpleDHT.h>
int pinDHT11 = 41;
int coolingFan = 50;
int heatingFan = 48;
int heater = 3;
int LEDrow1 = 25;
int LEDrow2 = 27;
int LEDrow3 = 29;
int LEDrow4 = 31;
int pump = 31; // 注意: LEDrow4と同ピン。実装時は別ピン割当推奨
SimpleDHT11 dht11;
void setup() {
Serial.begin(115200);
pinMode(coolingFan, OUTPUT);
pinMode(heatingFan, OUTPUT);
pinMode(heater, OUTPUT);
pinMode(LEDrow1, OUTPUT);
pinMode(LEDrow2, OUTPUT);
pinMode(LEDrow3, OUTPUT);
pinMode(LEDrow4, OUTPUT);
pinMode(pump, OUTPUT);
}
void loop() {
temperature();
light();
humidity();
}
void temperature() {
int value = analogRead(A10);
float volts = (value / 1024.0) * 5.0;
float temp = volts * 100.0; // LM35: 10mV/℃
Serial.print("temp=");
Serial.println(temp);
delay(1000);
if (temp < 25) {
digitalWrite(heater, LOW); // リレー: LOWでONの想定
digitalWrite(heatingFan, HIGH);
} else {
digitalWrite(heater, HIGH);
digitalWrite(heatingFan, LOW);
}
if (temp > 30) {
digitalWrite(coolingFan, HIGH);
} else {
digitalWrite(coolingFan, LOW);
}
}
void light() {
float ldrdata = analogRead(A8);
float resistorVolt = (1024 - ldrdata) / 1024.0 * 5.0;
float ldrVolt = 5.0 - resistorVolt;
float ldrResistance = ldrVolt / resistorVolt * 5000.0;
float lux = (12518931) * pow(ldrResistance, -1.405);
float photons = lux * 0.019; // ルクス→光子束換算係数
// Serial.println(photons);
delay(1000);
if (photons < 50) {
digitalWrite(LEDrow1, HIGH);
digitalWrite(LEDrow2, HIGH);
digitalWrite(LEDrow3, HIGH);
digitalWrite(LEDrow4, HIGH); // 元コードはrow1が重複、修正済み
}
if (photons > 100) {
digitalWrite(LEDrow1, LOW);
digitalWrite(LEDrow2, LOW);
digitalWrite(LEDrow3, LOW);
digitalWrite(LEDrow4, LOW);
}
}
void humidity() {
byte temperature = 0;
byte humidity = 0;
int err = SimpleDHTErrSuccess;
if ((err = dht11.read(pinDHT11, &temperature, &humidity, NULL)) != SimpleDHTErrSuccess) {
Serial.println(err);
delay(1000);
return;
}
int humid = (int)humidity;
Serial.println(" H");
delay(2000); // DHT11サンプリングレート対応
if (humid < 85) {
digitalWrite(pump, HIGH);
digitalWrite(coolingFan, LOW);
}
if (humid > 94) {
digitalWrite(coolingFan, HIGH);
digitalWrite(pump, LOW);
}
}
改善・拡張のポイント
- ピン競合(pumpとLEDrow4が同一ピン31)を解消し、別ピンに割り当て
- PID制御導入による温度・湿度のオーバーシュート抑制
- EC/pHセンサー追加による養液濃度管理
- データロギング(SDカードやIoTプラットフォーム連携)
- ソーラーパネル+バッテリーによるオフグリッド運用
- 栽培レシピ(作物別パラメータ)のプリセット機能
参考資料
製造プロセス
- 肥料:科学、生産、持続可能な未来
- Raspberry PiでPIRモーションセンサーとLEDを制御
- Raspberry Piで低コスト土壌水分センサーを構築 - スマート灌漑に活用
- Raspberry PiでDS18B20温度センサーをテスト
- Raspberry Pi、MCP9808、InfluxDB、Grafanaで作る家庭温度モニター
- Sensor Telemetry 2.0.1:Azure IoT Hubによる高度な温度監視
- エモーションセンサー&EEG:リアルタイム感情検知のための低コストハードウェア
- UnifiedWater v1 - 完全なArduino水質センサーキット
- ホール効果センサー完全ガイド:原理・用途・設計のすべて
- 酸素(O2)センサーを理解する:役割、配置、故障の兆候
- 土壌水分センサー:仕組みと実用的なアプリケーション