NOBのArduino日記!

NOBのArduino日記!

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

プランター自動水やり機!その7(プログラムの作成!)

 前回組み立てたプランター自動水やり機の制御プログラムを作り始めました!

1. プログラム

 それっぽい雰囲気に自動水やり機(図1-1)制御プログラムを、図1-2の通り書いてみました。
 多分間違いがちょいちょい入っていると思いますが、これを元に動かしながら一つずつデバッグしていきます。
イメージ 6
図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
図1:プログラム例

2. 動作確認

 取り敢えず入力値が正しくない事には始まりませんので、センサーとスイッチの入力値からチェックします。
 
2.1 センサー
 図2-1のプログラムをあちゃんでいいのに書込みシリアルモニターを開きます
 そうするとシリアルモニター(図2-2)に「SensorRead:***」と土壌湿度センサーの値が表示されます。
 何もしない(乾燥している)場合は「0」、指で触った(湿ってる)場合は「404」、ワニ口クリップで短絡した(水没以上?)場合は「969」でした。
 大丈夫そうですね!
イメージ 2
図2-1:センサーチェック!
 
イメージ 3
図2-2:シリアルモニター
 
2.2 スイッチ
 手動で水を強制的に出すスイッチの信号がちゃんと来ているかチェックします。
 図3-1,2の通りスイッチON
でLEDが点灯し「SeitchIN:*」の「*」部分の値が「0」から「1」に変わりました!OKです!
イメージ 4
図3-1:スイッチON!でLED点灯!
 
イメージ 5
図3-2:シリアルモニター
 
2.3 RTC
 リアルタイムクロック から現在の時刻(時間)を取得してみました。
 夜の10時(22時)に実験しており、図3-2の通り「hours:22」と表示されましたのでこれもOKです!

3. まとめ

 実験の結果、「土壌湿度センサー」「スイッチ」リアルタイムクロック」の入力データは全て正常に取得出来ているようです
 取り敢えず回路設計はんだ付けは大丈夫そうでホッとしました
 
イメージ 1 イメージ 3
励みになりますのでよければクリック下さい(^o^)/

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