芝生×IoT

RTCとセンサー部の動作確認してみたら

 このエントリーをはてなブックマークに追加 

3月29日(

 

芝生×IoT

 

2月24日から運用開始したIoTですが、
その後、改善や不具合解消のため、日々Verアップさせてます。

 

その内容は以下に纏めてますので、ご興味のある方はご覧くださいね。
芝生×IoT 修正記録

 

 

さて、
今回は散水部にて起こった不具合、
「スプリンクラーによる散水が指定時間以上に動作してしまう」の問題と、
「センサー部が動作しない」の2件を検証してみます。

 

 

RTCの不具合確認

今回は、センサー部から通知される不正値によって判明した不具合だった。

 

しかし、問題は時間でRTCの問題であると断定できる。

 

まず、使用しているRTCはこちら。
Grove リアルタイムクロック(RTC)
芝生 西洋芝 IoT Grove RTC 土壌湿度 センサ 芝刈り 尿素 有機酸酵素EX ミミズ駆除

 

このGroveシリーズはコネクタの規格が決まっていて、Grove製品は同じコネクタで接続できるのだ。

 

既に基板に半田付けしてしまているので、動作確認用のコネクタを手に入れた。
芝生 西洋芝 IoT Grove RTC 土壌湿度 センサ 芝刈り 尿素 有機酸酵素EX ミミズ駆除
Grove 4ピンケーブル ロックなし 20cm 110円(税込)

 

 

このケーブルの片方を切断し、ブレッドボードにさせるようにし、動作確認を実施した、
芝生 西洋芝 IoT Grove RTC 土壌湿度 センサ 芝刈り 尿素 有機酸酵素EX ミミズ駆除

 

動作確認だが、
RTCの保持情報を表示させるのが手っ取り早い。

 

動作不具合の原因は、RTCに保持されている情報(日付、時間)がリセットされていたから。

 

再度情報を設定したら、正しい情報を出力するようになったし、
散水部の処理を実行したら、問題無くして時間で散水が停止する事が確認できた。

 

ではなぜ、保持情報がリセットされてしまったのか。

 

これが・・・、わからないい(涙)

 

ボタン電池(CR1225)にて情報が保持される仕様だが・・・。
電池残量を測定すると2.6Vは残っていた。

 

数時間放置したあと、再度情報表示してみたが、問題無く正しい時間を出力している。

 

 

ん~、わからん。

 

 

電池を外すと情報が即リセットされるようだね。
芝生 西洋芝 IoT Grove RTC 土壌湿度 センサ 芝刈り 尿素 有機酸酵素EX ミミズ駆除

 

「45:165」と出力されている所は、電池を外した状態の出力値。
「0:0」と出力されている所は、上記状態から電池を付けた状態の出力値。

 

リセットされると「0:0」と初期値になるようで、今回の不具合もこの情報が出力されていたせいで、正しい終了時間を設定する事が出来なった。

 

電池が外れない、少しでも離れないようにしっかり接地させるようにすることが対象法かもね。

 

まぁ、大した問題ではなくてホッとした。

 

ESP8266にRTCが付いていた

今回の問題を受けて、RTCについて色々調べていたら、
なんと、ESP8266RTCというか、時間を返す機能が付いていることがわかった。

 

今更だが、外付けRTCを使用する必要が無かったのだ・・・(涙)

 

日時、時間、曜日を設定すると、ちゃんと情報を返してくれる。
サンプルプログラムを参考に試してみたら、ちゃんと動いたよ。
しかも、NICTの時刻サーバから現在時刻を取得設定するスケッチになってる。

 

間違いのない確実な時刻だよね・・・。

 

しかし・・・、
せっかく外付けRTCを使ってしるので、これはこのまま使い続けたい。
電池が切れたり、動作不安定の度に毎回RTCに時刻を設定するのも面倒だ。

 

そこでひらめいた!
散水部が立ち上がる時の初期処理に、NICTの時刻サーバから現在時刻を取得し、
Grove RTCに設定してしまえば・・・。

 

動作検証したら、見事にできたよ!!
芝生 西洋芝 IoT Grove RTC 土壌湿度 センサ 芝刈り 尿素 有機酸酵素EX ミミズ駆除
※改めて見ると、曜日表示がおかしいね・・・。

 

各サンプルスケッチを組み合わせただけだが、
検証したスケッチは以下です。

#include <Wire.h>
#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <time.h>
#include "DS1307.h"

 

#define WIFI_SSID "your ssid"
#define WIFI_PASSWORD "your ssid pass"
#define JST 3600*9

 

DS1307 RTC;

 

void SetTime() {
time_t t;
struct tm *tm;
static const char *wd[7] = {"Sun","Mon","Tue","Wed","Thr","Fri","Sat"};

 

t = time(NULL);
tm = localtime(&t);
Serial.printf(" %04d/%02d/%02d(%s) %02d:%02d:%02d\n",
tm->tm_year+1900, tm->tm_mon+1, tm->tm_mday,
wd[tm->tm_wday],
tm->tm_hour, tm->tm_min, tm->tm_sec);

 

delay(500);

 

t = time(NULL);
tm = localtime(&t);
Serial.printf(" %04d/%02d/%02d(%s) %02d:%02d:%02d\n",
tm->tm_year+1900, tm->tm_mon+1, tm->tm_mday,
wd[tm->tm_wday],
tm->tm_hour, tm->tm_min, tm->tm_sec);

 

RTC.fillByYMD(tm->tm_year+1900,tm->tm_mon+1,tm->tm_mday);//Jan 19,2013
RTC.fillByHMS(tm->tm_hour,tm->tm_min,tm->tm_sec);//15:28 30"
RTC.fillDayOfWeek(*wd[tm->tm_wday]);//Saturday
RTC.setTime();//write time to the RTC chip
}

 

void setup() {
Serial.begin(115200);
delay(100);
Serial.print("\n\nReset:\n");

 

WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
while(WiFi.status() != WL_CONNECTED) {
Serial.print('.');
delay(500);
}
Serial.println();
Serial.printf("Connected, IP address: ");
Serial.println(WiFi.localIP());

 

configTime( JST, 0, "ntp.nict.jp", "ntp.jst.mfeed.ad.jp");

 

RTC.begin();
SetTime();
}

 

void loop() {

 

printTime();
delay(1000);

 

}

 

void printTime()
{
RTC.getTime();
Serial.print(RTC.hour, DEC);
Serial.print(":");
Serial.print(RTC.minute, DEC);
Serial.print(":");
Serial.print(RTC.second, DEC);
Serial.print(" ");
Serial.print(RTC.month, DEC);
Serial.print("/");
Serial.print(RTC.dayOfMonth, DEC);
Serial.print("/");
Serial.print(RTC.year+2000, DEC);
Serial.print(" ");
Serial.print(RTC.dayOfMonth);
Serial.print("*");
switch (RTC.dayOfWeek)// Friendly printout the weekday
{
case MON:
Serial.print("MON");
break;
case TUE:
Serial.print("TUE");
break;
case WED:
Serial.print("WED");
break;
case THU:
Serial.print("THU");
break;
case FRI:
Serial.print("FRI");
break;
case SAT:
Serial.print("SAT");
break;
case SUN:
Serial.print("SUN");
break;
}
Serial.println(" ");
}

 

tm = localtime(&t);を2回処理してるが、
最初の1回目はどうしても正しい情報が取得できないみたい・・・。
なので、同じ処理を2回行っている。

 

本番スケッチにこの処理を追加する予定。
とにかく、電池が外れないようにすることが肝心と分かった。

 

 

 

 

センサー部の不具合確認

LED点灯する所までは確認しているが、
直ぐに消灯していることから、BME280(温湿度気圧センサ)かSEN0114(土壌湿度センサ)のいづれかだと思われる。

 

なので、各センサーを基板から外し、動作確認を行うことにした。
半田付けして基板につけてたから、泣く泣く外したよ・・・(号泣)
芝生 西洋芝 IoT BME280 SEN0114 土壌湿度 センサ 芝刈り 尿素 有機酸酵素EX ミミズ駆除

 

動作確認してみると・・・。
芝生 西洋芝 IoT BME280 SEN0114  土壌湿度 センサ 芝刈り 尿素 有機酸酵素EX ミミズ駆除

 

 

へっ?!
問題無く動作している・・・(汗)

 

どういう事だ??

 

まぁ、各センサーは故障していないってことはわかった。

 

今後のために、LEDの光る回数にて、どこまで処理が出来たかを分かるようにしてみた。

 

最初の3回点滅で処理開始。

 

1回目点灯:BME280処理
2回目点灯:SEN0114処理
3回目点灯:LINE処理
4回目点灯:BME280処理

 

最後の2回点滅で処理終了。

 

これにより、故障個所がすぐわかるよね・・・、たぶん。

 

 

今後のため、動作確認や故障によるパーツ交換等メンテしやすくするために改良しようと、基板から一旦外しました。
人間ドックならぬ、センサードック・・・(汗)
芝生 西洋芝 IoT Ambient 土壌湿度 センサ 芝刈り 尿素 有機酸酵素EX ミミズ駆除

 

改良のため、センサ―部は暫く休業致します。

 

 

修正作業が完了したら、「芝生×IoT 修正記録」ページに追記しますね。

 

 

 

 

闘え、ボンビーリーマン!
負けるな、ボンビーリーマン!
常緑のために!

 

 

#芝生#常緑#ボンビーリーマン
#IoT


「頑張れ、ボンビーリーマン!」っと思った方は
↓ポチっとお願います
にほんブログ村 花・園芸ブログ 芝生・芝生管理へ 常緑芝庭へのチャレンジ - にほんブログ村

 このエントリーをはてなブックマークに追加 




↓初めてコメントを入力される際は、「コメント欄使用時のご留意事項」をご覧ください

関連ページ

芝生×IoT 修正記録
ボンビーリーマンの芝生手入れ奮闘の記録
芝生×IoT 暑さ対策
ボンビーリーマンの芝生手入れ奮闘の記録
芝生×IoT 新センサーテスト
ボンビーリーマンの芝生手入れ奮闘の記録
芝生×IoT プロジェクト23
ボンビーリーマンの芝生手入れ奮闘の記録
芝生×IoT プロジェクト22
ボンビーリーマンの芝生手入れ奮闘の記録
芝生×IoT プロジェクト21
ボンビーリーマンの芝生手入れ奮闘の記録
芝生×IoT プロジェクト20
ボンビーリーマンの芝生手入れ奮闘の記録
芝生×IoT プロジェクト19
ボンビーリーマンの芝生手入れ奮闘の記録
芝生×IoT プロジェクト18
ボンビーリーマンの芝生手入れ奮闘の記録
芝生×IoT プロジェクト17
ボンビーリーマンの芝生手入れ奮闘の記録
芝生×IoT プロジェクト16
ボンビーリーマンの芝生手入れ奮闘の記録
芝生×IoT プロジェクト15
ボンビーリーマンの芝生手入れ奮闘の記録
芝生×IoT プロジェクト14
ボンビーリーマンの芝生手入れ奮闘の記録
芝生×IoT プロジェクト13
ボンビーリーマンの芝生手入れ奮闘の記録
芝生×IoT プロジェクト12
ボンビーリーマンの芝生手入れ奮闘の記録
芝生×IoT プロジェクト11
ボンビーリーマンの芝生手入れ奮闘の記録
芝生×IoT プロジェクト10
ボンビーリーマンの芝生手入れ奮闘の記録
芝生×IoT プロジェクト9
ボンビーリーマンの芝生手入れ奮闘の記録
芝生×IoT プロジェクト8(センサ部 再改良)
ボンビーリーマンの芝生手入れ奮闘の記録
芝生×IoT プロジェクト7(センサ部改良)
ボンビーリーマンの芝生手入れ奮闘の記録
芝生×IoT プロジェクト6(センサー稼働開始)
ボンビーリーマンの芝生手入れ奮闘の記録
芝生×IoT プロジェクト5
ボンビーリーマンの芝生手入れ奮闘の記録
芝生×IoT プロジェクト4
ボンビーリーマンの芝生手入れ奮闘の記録
芝生×IoT プロジェクト3
ボンビーリーマンの芝生手入れ奮闘の記録
芝生×IoT プロジェクト2
ボンビーリーマンの芝生手入れ奮闘の記録
芝生×IoT プロジェクト1
ボンビーリーマンの芝生手入れ奮闘の記録