工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

スマート水耕栽培システム:Arduino Mega 2560とセンサーで自動制御

必要な部品と材料

部品数量備考
Arduino Mega 25601I/Oピン数が多く、複数センサー・アクチュエータ制御に最適
DHT22 温湿度センサー1DHT11より高精度、温度・湿度両方測定可能
リレー(汎用)1ポンプやヒーター等の高電圧負荷制御用
RobotGeek 光センサー(LDR)1光量測定用、フォトダイオードへの置換も可能
温度センサー(LM35等)1周囲温度測定用
DCファン ×22冷却用・加熱用(ヒーター併用)
白熱電球1加熱用ヒーターとして使用
ウォーターポンプ1点滴灌漑用
LEDアレイ(赤8個、青8個、直列4並列4)1セット植物育成用、12V駆動
オプトカプラ 4N354LEDアレイ駆動用アイソレーション
モータードライバー1ファン制御用
抵抗 10kΩ、330Ω等適量プルアップ、LED電流制限等

使用するソフトウェア

プロジェクト概要

土を使わない水耕栽培において、レタス栽培に最適な環境(温度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センサーで周囲温度を監視し、以下のロジックで制御します:

ファンはモータードライバーで、電球はリレーで制御します。

湿度制御

DHT11センサー(湿度測定専用として使用)で培地湿度を監視し、以下のロジックで制御します:

ポンプは穴あきパイプを通じて均一に給水するドリップ式を採用しています。

注意事項

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);
  }
}

改善・拡張のポイント

参考資料

製造プロセス

  1. 肥料:科学、生産、持続可能な未来
  2. Raspberry PiでPIRモーションセンサーとLEDを制御
  3. Raspberry Piで低コスト土壌水分センサーを構築 - スマート灌漑に活用
  4. Raspberry PiでDS18B20温度センサーをテスト
  5. Raspberry Pi、MCP9808、InfluxDB、Grafanaで作る家庭温度モニター
  6. Sensor Telemetry 2.0.1:Azure IoT Hubによる高度な温度監視
  7. エモーションセンサー&EEG:リアルタイム感情検知のための低コストハードウェア
  8. UnifiedWater v1 - 完全なArduino水質センサーキット
  9. ホール効果センサー完全ガイド:原理・用途・設計のすべて
  10. 酸素(O2)センサーを理解する:役割、配置、故障の兆候
  11. 土壌水分センサー:仕組みと実用的なアプリケーション