酒と薔薇の日々(その2)

好きなことだけ求めて生きるアスペ気味のINTJ人

[ Arduino ] RTCモジュール実験 [ DS1307 ]

2022年07月05日 22時21分44秒 | マイコン(ESP32・Arduino等)

よみやさんの動画などを参考にやってみた。
そもそもこのRTCモジュールは彼の動画を見て購入してた。(2月)
ゆくゆくは「PlotClock」に使うつもり。

【電池モジュールをCR2032に変更】

ネット記事を読むとこの基盤で使う電池はリチウムイオン充電池「LIR2032」だそうで、買うと結構高価
AliExで買えば1個100円程度だが9月までは待てない。(航空便不可らしい)

ネットで調べるとキャンドゥ辺りで100円で売っているやつが内蔵してるそうな。
早速買いに行ったが、3大100均ショップで未発見
親切なキャンドゥ店員さんが過去の商品まで調べてくれたが、もう何円も前に絶版になったらしい。
超残念

 改造前

手持ち在庫のLR2032を使うことにした。
これでも数年は電池が持つそうです。

【基盤の改造】

ネットで調べると抵抗とダイオードを外しR6をブリッジすれば良いと書いてある。

改造後の写真 「↑」部分をハンダゴテで温めて部品を取り去る。
R6はハンダもりもり

いやーほんま小さいですね~ 一個は何処かへ吹き飛ばされて無くなった。
こんな部品をホットプレートでハンダ付けするなんて私には無理です。

5Pinソケットをハンダ付けして完成
電池をセットしたが結構固くてソケットを壊しそうだった。

【Arduinoと接続】

I2C通信を行うので、
 GND を Arduino GND
 VCC を Arduino 5V
 SDA を Arduino A4
 SCL を Arduino A5
に接続

【ソフトウエア編 I2Cアドレス確認】

I2C通信用の「Wire」ライブラリは導入済みだったので、
サンプル「i2c_scanner」をライブラリから引っぱり出す。

0x50 が メモリ
0x68 が RTC
アドレスだそうです。

ちなみに、0x50は4KbのEEPROMが実装されており記憶領域として使えるそう。(よみやさん)
なので、Arduinoで取得したセンサーデータをここに記憶させておき、一括データ送信などが可能
また電池バックアップされた58byteのRAMも使える。

【ソフトウエア編 I2Cアドレス確認】

RTCモジュールから時刻を取得してみるサンプルを動かす。

基盤メーカーが提供しているので、ここから「RTC.zip」をDLする。



Arduino IDEのツールバーからスケッチ/ライブラリをインクルードを選択

 

「zip形式のライブラリをインストール」を選び保存したzipファイルを指定する。

ライブラリのサンプル「RTC」を開いて、Arduinoに書き込む。

 

速度を合わせてシリアル窓を開けば現在時刻が表示された。

RTClib」なるライブラリもあるそうです。

ちなみに、Arduinoに”プログラム転送した時刻”が自動でモジュールへ書き込まれるそうです。
私は、ほぼほぼ正しい時刻でOK
そうでなければ時分秒設定プログラムを書かなければならない。(これはキーボードもないので超面倒)

RTC.adjust(DateTime(__DATE__, __TIME__)); の行をプログラムのsetup();で動かせばその時間に設定するそうです。

こちらにも説明がありました。

-------
1時間してシリアルコンソールを開いたり、リセットするとRTC内で時間をカウントアップしていないようだ???
Arduinoからの給電を止めると「2001/1/1」になったり
ボード内でちゃんと時間が進んでいない。最後にアクセスした時間で止まってる。
そんな感じなのだ。・・・変

電池を抜いて電圧測ったら1.1V
パッケージに電池有効期限は2023年2月と書いてあったがもはやお前は 死んどる!
電池を抜いたら「2165/165/165 165:165:85」になりました。

電池交換。ダイソーの奴今度は2027年有効電池でした。

電池を入れて再起動
あれれ「2022/7/5 22:22:xx」のままだ
あ、これがコンパイル時の時刻か

void setup () {
    Serial.begin(9600);
    Wire.begin();
    RTC.begin();
  if (! RTC.isrunning()) {
    Serial.println("RTC is NOT running!");
    // following line sets the RTC to the date & time this sketch was compiled
        ここにあった記述を外に出す
  }
  RTC.adjust(DateTime(__DATE__, __TIME__)); ここね
}

これで再書き込み

現在時刻になりました。
再度時間をおいて起動・・・れれれ、時間がさっきの書き込み時刻から再開
ああ、「RTC.adjust(DateTime(__DATE__, __TIME__)); 」の記述を残して書き込んだままではだめなのか??
この1行を削って再コンパイル&送り込み

今度は「2000/1/1 0:0:0」??になる

続いて、2022/7/6 11:7:31~開始
時間が進んどらん!
何回リセットしても、ここからが現在時刻ですとデータを送ってくる!!
そりゃ書き込んだ時刻だろうが。
ネットを探すとこういう粗悪品が結構混じっているらしい。

くそっ OLEDに続いてまたも粗悪品を掴まされたか。

この業者からは二度と買わない。

-----サンプルソース---------
#include
#include "RTClib.h"
RTC_DS1307 RTC;

void setup () {
    Serial.begin(9600);
    Wire.begin();
    RTC.begin();
  if (! RTC.isrunning()) {
    Serial.println("RTC is NOT running!");
    // following line sets the RTC to the date & time this sketch was compiled
    RTC.adjust(DateTime(__DATE__, __TIME__));
  }
}
void loop () {
    DateTime now = RTC.now(); 
    Serial.print(now.year(), DEC);
    Serial.print('/');
    Serial.print(now.month(), DEC);
    Serial.print('/');
    Serial.print(now.day(), DEC);
    Serial.print(' ');
    Serial.print(now.hour(), DEC);
    Serial.print(':');
    Serial.print(now.minute(), DEC);
    Serial.print(':');
    Serial.print(now.second(), DEC);
    Serial.println(); 
    delay(1000);
}

この記事についてブログを書く
« リアルタイムクロック[ DS130... | トップ | ストレッチで「脊椎管狭窄症... »