NOBのArduino日記!

NOBのArduino日記!

趣味は車・バイク・自転車・ラジコン・電子工作です。

プランター自動水やり機!その11(若干手直し)

イメージ 1
 
 いざ「プランター自動水やり機」を設置しようと思いましたが気になる所(致命的な所)が5箇所出てきました
 設置前に直せる所は直して準備完了です!

1. 手直し

1.1 気になる所1(センサーケーブル)
 土壌湿度センサー電線が短過ぎて設置予定の場所からプランターまで届きそうにありません(´;ω;`)
 屋外用のケーブル(VCTF、線心数3、1.25sq)を急遽1.5m買って来て図1、2の通り延長しました。
イメージ 2
図1:土壌湿度センサー用延長ケーブル接続(制御BOX側)
 
イメージ 3
図2:土壌湿度センサー用延長ケーブル接続(センサー側)
 
1.2 気になる所2(水漏れ)
 水圧が掛かるジョイント部から水漏れしそうです。
 図3の通りパイプシールを巻いてからガッツリ締めました。
イメージ 6
図3:ねじ山部水漏れ対策
 
1.3 気になる所3(ボルト緩み)
 ソーラーパネルの角度を調整出来る様に軸をボルトで一点止めにしましたが、どうにも緩みそうです
 緩み対策用の「ノルトロックワッシャー M4」で止め直しました。
イメージ 4イメージ 5
図4:ノルトロックワッシャー M4で固定
 
1.4 気になる所4(制御回路)
 最後に描いた図5の「回路図4」の通り作った制御回路でソレノイドバルブに通電し続けるとMOSFET(2N7000)が触れない程暑くなっておりました
 原因は明らかな設計ミスです
 ソレノイドバルブ に5Vを掛けると実測値で163.6mA流れましたので、2N7000の定格電流200mAで余裕!と電圧を勘違いしておりました。
 実際は12Vを掛けるのでソレノイドバルブには実測値で394.4mA流れ完全に定格容量オーバーです
 と言う事でスイッチ用のMOSFETを5A迄流せる2SK4017に変更した回路図をFritzingを使って図6-1,7-1「回路図5」の通り書き直しました。
 それに合わせて図6-2,7-2の通りはんだ付けし直しです
図5:回路図4(前回描いたもの)
 
イメージ 9
図6-1:回路図5-表(今回描き直したもの)
 
イメージ 8
図6-2:実際の回路5-表(手直し後)
 
イメージ 7
図7-1:回路図5-裏(今回描き直したもの)
 
イメージ 10
図7-2:実際の回路5-裏(手直し後)
 
1.5 気になる所5(プログラム)
 前回土の湿度を測定した結果プログラムに反映しました
 他にもちょこちょこ修正しています
 
/*NOBのArduino日記! プランター自動水やり機制御プログラム(20170806作成)*/
#include <Wire.h>
#include "DS1307.h"
const int SensorPower = 2;//土壌湿度センサー電力供給制御ピン番号
const int SolenoidPower = 8;//水電磁弁開閉制御ピン番号
const int SwitchIn = A1;//水電磁弁の手動ONスイッチ接続ピン番号
const int SensorIn = A3;//土壌湿度センサー値取得ピン番号
DS1307 clock;//DS1307クラスのオブジェクトを定義する

//初期設定
void setup() {
  clock.begin();
  pinMode(SensorPower, OUTPUT);
  pinMode(SolenoidPower, OUTPUT);
  pinMode(SwitchIn, INPUT);
}

//機能:土壌湿度センサーの値を読み込む関数
int SensorRead() {
  int SensorValue = 0;                  //SensorValueをint型の変数として宣言(毎回0にリセット)
  for (byte i = 0; i <= 10; i++) { //A3ポートの電圧を10回読み平均値を出す
    digitalWrite(SensorPower, HIGH);  //センサー電力供給開始
    delay(10);                       //一定時間電流を流して測定値を安定させる
    SensorValue = SensorValue + analogRead(SensorIn);       //センサー電圧を10回読み合計する
    //Serial.print(":");Serial.print(analogRead(SensorIn));
    digitalWrite(SensorPower, LOW);
  }  //センサー電力供給停止
  return SensorValue / 10;
} //センサー電圧平均値を返す

//メインループ
void loop() {
  clock.getTime();//現在の時刻を取得する
  if (digitalRead(SwitchIn) == HIGH) {
    digitalWrite(SolenoidPower, HIGH); //手動スイッチONで水を出す
  } else { //手動スイッチOFFで以下自動水やり制御実行
    if (clock.hour == 7 || clock.hour == 11 || clock.hour == 15 || clock.hour == 19) { //時刻が7,11,15,19時で以下実行
      if (clock.minute == 0 || clock.minute == 30) { //時刻が0,30分で以下実行
        if (SensorRead() < 730) { //土が乾燥していた場合以下実行
          digitalWrite(SolenoidPower, HIGH);//水を出す
          delay(150000UL);//2.5分待つ
          digitalWrite(SolenoidPower, LOW);
        }
      }
    }//水を止める
    digitalWrite(SolenoidPower, LOW);
  }  //スイッチOFFで水を止める
  delay(1000);
}//1秒待つ
イメージ 1
図1:プログラム例
 

3. まとめ

 色々手直ししましたが、困った時はやっぱりホームセンターですね!
 大概なんとかなりました!
 この日だけで息子と散歩がてらホームセンター3往復です
 
イメージ 1 イメージ 3
励みになりますのでよければクリック下さい(^o^)/

↩【プランター自動水やり機!】目次に戻る