RTCとセンサー部の動作確認してみたら
ツイート3月29日(日)
「芝生×IoT」
2月24日から運用開始したIoTですが、
その後、改善や不具合解消のため、日々Verアップさせてます。
その内容は以下に纏めてますので、ご興味のある方はご覧くださいね。
芝生×IoT 修正記録
さて、
今回は散水部にて起こった不具合、
「スプリンクラーによる散水が指定時間以上に動作してしまう」の問題と、
「センサー部が動作しない」の2件を検証してみます。
RTCの不具合確認
今回は、センサー部から通知される不正値によって判明した不具合だった。
しかし、問題は時間でRTCの問題であると断定できる。
まず、使用しているRTCはこちら。
Grove リアルタイムクロック(RTC)
このGroveシリーズはコネクタの規格が決まっていて、Grove製品は同じコネクタで接続できるのだ。
既に基板に半田付けしてしまているので、動作確認用のコネクタを手に入れた。
Grove 4ピンケーブル ロックなし 20cm 110円(税込)
このケーブルの片方を切断し、ブレッドボードにさせるようにし、動作確認を実施した、
動作確認だが、
RTCの保持情報を表示させるのが手っ取り早い。
動作不具合の原因は、RTCに保持されている情報(日付、時間)がリセットされていたから。
再度情報を設定したら、正しい情報を出力するようになったし、
散水部の処理を実行したら、問題無くして時間で散水が停止する事が確認できた。
ではなぜ、保持情報がリセットされてしまったのか。
これが・・・、わからないい(涙)
ボタン電池(CR1225)にて情報が保持される仕様だが・・・。
電池残量を測定すると2.6Vは残っていた。
数時間放置したあと、再度情報表示してみたが、問題無く正しい時間を出力している。
ん~、わからん。
「45:165」と出力されている所は、電池を外した状態の出力値。
「0:0」と出力されている所は、上記状態から電池を付けた状態の出力値。
リセットされると「0:0」と初期値になるようで、今回の不具合もこの情報が出力されていたせいで、正しい終了時間を設定する事が出来なった。
電池が外れない、少しでも離れないようにしっかり接地させるようにすることが対象法かもね。
まぁ、大した問題ではなくてホッとした。
ESP8266にRTCが付いていた
今回の問題を受けて、RTCについて色々調べていたら、
なんと、ESP8266にRTCというか、時間を返す機能が付いていることがわかった。
今更だが、外付けRTCを使用する必要が無かったのだ・・・(涙)
日時、時間、曜日を設定すると、ちゃんと情報を返してくれる。
サンプルプログラムを参考に試してみたら、ちゃんと動いたよ。
しかも、NICTの時刻サーバから現在時刻を取得設定するスケッチになってる。
間違いのない確実な時刻だよね・・・。
しかし・・・、
せっかく外付けRTCを使ってしるので、これはこのまま使い続けたい。
電池が切れたり、動作不安定の度に毎回RTCに時刻を設定するのも面倒だ。
そこでひらめいた!
散水部が立ち上がる時の初期処理に、NICTの時刻サーバから現在時刻を取得し、
Grove RTCに設定してしまえば・・・。
動作検証したら、見事にできたよ!!
※改めて見ると、曜日表示がおかしいね・・・。
各サンプルスケッチを組み合わせただけだが、
検証したスケッチは以下です。
#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(土壌湿度センサ)のいづれかだと思われる。
なので、各センサーを基板から外し、動作確認を行うことにした。
半田付けして基板につけてたから、泣く泣く外したよ・・・(号泣)
へっ?!
問題無く動作している・・・(汗)
どういう事だ??
まぁ、各センサーは故障していないってことはわかった。
今後のために、LEDの光る回数にて、どこまで処理が出来たかを分かるようにしてみた。
最初の3回点滅で処理開始。
1回目点灯:BME280処理
2回目点灯:SEN0114処理
3回目点灯:LINE処理
4回目点灯:BME280処理
最後の2回点滅で処理終了。
これにより、故障個所がすぐわかるよね・・・、たぶん。
今後のため、動作確認や故障によるパーツ交換等メンテしやすくするために改良しようと、基板から一旦外しました。
人間ドックならぬ、センサードック・・・(汗)
改良のため、センサ―部は暫く休業致します。
修正作業が完了したら、「芝生×IoT 修正記録」ページに追記しますね。
闘え、ボンビーリーマン!
負けるな、ボンビーリーマン!
常緑のために!
#芝生#常緑#ボンビーリーマン
#IoT
「頑張れ、ボンビーリーマン!」っと思った方は
↓ポチっとお願いますb>
ツイート
↓初めてコメントを入力される際は、「コメント欄使用時のご留意事項」をご覧ください
関連ページ
- 芝生×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
- ボンビーリーマンの芝生手入れ奮闘の記録