1. プログラム
多分間違いがちょいちょい入っていると思いますが、これを元に動かしながら一つずつデバッグしていきます。

図1-1:実験風景

/*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.fillByYMD(2017,7,8);//年,月,日 clock.fillByHMS(11,29,30);//時:分,秒" clock.fillDayOfWeek(SAT);//曜日 clock.setTime();//RTCチップへの書き込み時間 */ clock.begin(); Serial.begin(9600); //9600bpsでシリアルポートを開く ※最後に削除する! pinMode(SensorPower, OUTPUT); pinMode(SolenoidPower, OUTPUT); pinMode(SwitchIn, INPUT); } //機能:現在の時間を取得する関数 int printTime() { clock.getTime(); //※24時間表示 return clock.hour; } //機能:土壌湿度センサーの値を読み込む関数 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() { Serial.print("SwitchIn:"); Serial.println(digitalRead(SwitchIn)); Serial.print("hours:"); Serial.println(printTime()); Serial.print("SensorRead:"); Serial.println(SensorRead()); Serial.println(""); /*if(digitalRead(SwitchIn)==HIGH){ //スイッチONで以下実行 digitalWrite(SolenoidPower, HIGH); //水を出す }else{digitalWrite(SolenoidPower, LOW);} //スイッチOFFで水を止める if((printTime()==7)||(SensorRead()<300)){ //AMorPM7でかつ土が乾燥していた場合以下実行 digitalWrite(SolenoidPower, HIGH); delay(300000UL);//5分間水を出す digitalWrite(SolenoidPower, LOW); delay(1140000UL);} //19分間水を止めて待つ */delay(1000); } //1秒間待つ

図1:プログラム例
2. 動作確認
取り敢えず入力値が正しくない事には始まりませんので、センサーとスイッチの入力値からチェックします。
2.1 センサー
図2-1のプログラムをあちゃんでいいのに書込みシリアルモニターを開きます。
そうするとシリアルモニター(図2-2)に「SensorRead:***」と土壌湿度センサーの値が表示されます。
何もしない(乾燥している)場合は「0」、指で触った(湿ってる)場合は「404」、ワニ口クリップで短絡した(水没以上?)場合は「969」でした。
大丈夫そうですね!




図2-1:センサーチェック!

図2-2:シリアルモニター
2.2 スイッチ
手動で水を強制的に出すスイッチの信号がちゃんと来ているかチェックします。
図3-1,2の通りスイッチONでLEDが点灯し「SeitchIN:*」の「*」部分の値が「0」から「1」に変わりました!OKです!
図3-1,2の通りスイッチONでLEDが点灯し「SeitchIN:*」の「*」部分の値が「0」から「1」に変わりました!OKです!

図3-1:スイッチON!でLED点灯!

図3-2:シリアルモニター
3. まとめ
励みになりますのでよければクリック下さい(^o^)/