NOBのArduino日記!

NOBのArduino日記!

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

プランター自動水やり機!その8(デバッグ完了!)

 前回 大まかに作ったプランター自動水やり機の制御プログラムのデバッグをしました。
 デバッグと動作確認の結果・・・ちゃんと動きました!

1. プログラム

 いきなりですが図1の通りデバッグ完了です!致命的なバグは3つ位有りましたまだあるか?
 
1.1 動作確認
センサーには何も触れない状態で「clock.hour==19」(PM7時)の値と「clock.minute==20」(20分)の値を現在の時刻+1分に合わせ、「delay(300000UL);」の値を「3000」位に減らした図1プログラムをあちゃんでいいのに書込みます。
 書き込み完了後、設定時刻に達するとソレノイドバルブが「ON」されました!
 因みに3秒以内に土壌湿度センサーに触れるとセンサーの閾値「<350」を超え「400」位になるのでソレノイドバルブは閉じました。
 勿論スイッチONでソレノイドバルブは開き、スイッチOFFでソレノイドバルブは閉まります。
 確認の結果、動作はちゃんとする様ですセーフ!
 
/*NOBのArduino日記! プランター自動水やり機制御プログラム(20170802作成)*/
#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 == 19) { //時刻がAM7orPM7時で以下実行
      if (clock.minute == 0 || clock.minute == 10 || clock.minute == 20) { //時刻が0or10or20分で以下実行
        if (SensorRead() < 350) { //土が乾燥していた場合以下実行
          digitalWrite(SolenoidPower, HIGH);//水を出す
          delay(300000UL);//5分待つ
          digitalWrite(SolenoidPower, LOW);
        }
      }
    }//水を止める
    digitalWrite(SolenoidPower, LOW);
  }  //スイッチOFFで水を止める
  delay(1000);
}//1秒待つ
イメージ 1
図1:プログラム例
 

2. まとめ

 残すはソーラーパネルと水やり機の設置です。
 設置する為の治具を作りたいのですが、割と装置が重くて大きいのでどうしようかと考え中です
 
イメージ 1 イメージ 3
励みになりますのでよければクリック下さい(^o^)/

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