今回はRTC(リアルタイムクロック)を使っていこうと思います。
これを使えば、パソコンにつながなくても現在日時を取得することができます⏰
RTCモジュール_DS3231
画像のような見た目のパーツです。
ボタン電池をつけることで、モジュール単体で時を刻んでくれます。
ボタン電池は「CR2032」の型が入ります。ただし、このモジュール充電池を入れることを前提に回路が組まれているらしく充電池ではない「CR2032」を使うと危なくなる可能性があります。そのため、画像赤丸部分を断線させて、充電機能が働かないようにしました。
ちなみに充電池を入れる場合は、「LIR2032」の型を使うようです。
今回の回路図
今回の回路図です。このRTCモジュールもI2C通信で使用できるため、4本つなげばよい回路になります。
No. | 部品 | 数量 |
1 | RTCモジュール | 1 |
2 | Arduino Nano | 1 |
3 | ブレッドボード | 1 |
4 | ジャンプワイヤー | 4 |
5 | USBケーブル(A-miniB) | 1 |
今回のスケッチ
今回のスケッチを描くにあたり今回使ったRTCのライブラリをインストールします。
ライブラリマネージャで「DS3231」と検索すると出てくる「DS3232RTC by Jack Christensen」をインストールします。必要なライブラリを一緒にインストールするか聞かれるので、「Install all」で一緒にインストールします。
ちなみにこの「DS3232RTC」ライブラリは1.系と2.系で微妙に使い方が違うようです。
1.系は beginコマンドが不要でしたが、2.系は必要になったようです。
//parts_3_RTC_DS3231
//RTC(リアルタイムクロック)で時刻をシリアルモニターに表示
//https://jcomet.com/
//ライブラリをインクルード
//https://github.com/JChristensen/DS3232RTC
#include <DS3232RTC.h>
DS3232RTC RTC;
void setup() {
RTC.begin(); //RTCの初期化_Library2.系から必要らしいです…
setTime(13, 15, 00, 13, 03, 2022); //システム時刻の設定_時分秒日月年の順
RTC.set(now()); //システム時刻をRTCに書き込み
//ボタン電池をRTCに入れていれば、電源を離しても書き込んだ時刻から時を刻む
Serial.begin(115200); //シリアル通信の転送レート指定
}
void loop() {
//以下、シリアルモニターに時刻を表示
tmElements_t tm;
RTC.read(tm);
Serial.print(tm.Year+1970, DEC); //年は1970年からの年数で記録されるので1970を足して表示
Serial.print("/");
Serial.print(tm.Month, DEC);//月を表示
Serial.print("/");
Serial.print(tm.Day, DEC);//日を表示
Serial.print(" ");
Serial.print(tm.Hour, DEC);//時を表示
Serial.print(":");
Serial.print(tm.Minute, DEC);//分を表示
Serial.print(":");
Serial.println(tm.Second, DEC);//秒を表示して改行
delay(1000);//1間隔で表示させるため1秒待機
}
今回のスケッチでは、void setup()部でRTCに任意のシステム時刻を書き込みます。これを行なえば、書き込んだシステム時刻から時を刻んでくれます。そして、void loop()部でシリアルモニターに現在日時を表示するようにしています。
実践結果
ちゃんと時を刻んでくれました‼
感想
今回はRTCモジュールを使って時刻の表示を行いました。
ディスプレイに表示して時計のような使い方をしてもいいし、センサーから取得できるデータに日時を組み合わせることで時系列的な分析を行うこともできるなと思っています!
コメント