デバッグと動作確認の結果・・・ちゃんと動きました!
1. プログラム
1.1 動作確認
センサーには何も触れない状態で「clock.hour==19」(PM7時)の値と「clock.minute==20」(20分)の値を現在の時刻+1分に合わせ、「delay(300000UL);」の値を「3000」位に減らした図1プログラムをあちゃんでいいのに書込みます。
書き込み完了後、設定時刻に達するとソレノイドバルブが「ON」されました!
確認の結果、動作はちゃんとする様ですセーフ!
/*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:プログラム例
2. まとめ
残すはソーラーパネルと水やり機の設置です。
設置する為の治具を作りたいのですが、割と装置が重くて大きいのでどうしようかと考え中です
励みになりますのでよければクリック下さい(^o^)/