NOBのArduino日記!

NOBのArduino日記!

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

リアルタイムクロックの使い方(Grove-RTC v1.2)

イメージ 2
リアルタイムクロック(Grove-RTC v1.2)
 
 リアルタイムクロックで定番のDS1307 ICを使った「Grove-RTC」を使ってみました
 これで朝晩のタイミングでグリーンカーテンに水やりさせようかと思います!

1.リアルタイムクロックとは

 リアルタイムクロック(英:real-time clock、略:RTC)とは、バックアップ電源等と併用する事で「時間」を刻み続けます。
 マイコン等でもタイマー機能を用いて経過時間を知る事は出来ますが、電源が切られてしまうと経過時間は停止もしくはリセットされてしまいます。
 これら不具合を回避する為に、時刻を重要とする装置では必ずと言ってよい程リアルタイムクロックが組み込まれています。
 リアルタイムクロックから出力されるデータとしては「年,月,日,時,分,秒」があり、さらに「曜日」をカウントする機種もあります。

1.1 Grove-RTCとは
 リアルタイムクロック「Grove-RTC」の外観・寸法及び端子を図1に、仕様を表1に示します。
 時間は、AM / PMインジケータを使用して24時間または12時間形式で動作します。
 また、2100年まで有効で「曜日」もカウントしてくれます!
イメージ 3
図1:リアルタイムクロックGrove-RTC」の外観・寸法及び端子
 
表1:「Grove-RTC」の仕様
項目 内容
 PCBサイズ  2.0×4.0cm
 インターフェース  2.0mmピッチのピンヘッダ
 IO構造  SCL,SDA,VCC,GND
 VCC  3.3~5.5V
 ロジックハイレベル入力  2.2~VCC+0.3V
 ロジックローレベル入力  -0.3~+0.8V
 バッテリー電圧  2.0~3.5V
 
 

2. 回路

 コイン電池「CR1225」をGrove-RTCにセット図2の通り接続てみました!
 
Grove-RTCのバックアップ電源には「CR1225」が別途必要です。
○「CR1225」の「C」は、電池系(二酸化マンガンリチウム電池)の事
○「CR1225」の「R」は、円形(Round)の事
「CR1225」の「12」は、外形(φ12mm)の事
「CR1225の「25」は、高さ(2.5mm)の事
 
表2:「Grove-RTC」と「ArduinoUNO」の接続
Grove-RTC Arduino UNO
 GND  GND
 VCC  VCC
 SDA  A4(SDA)
 SCL  A5(SCL)
 
イメージ 4
図2:実際に接続した状態

3. ライブラリの導入

 RTCライブラリを導入してみました
 
3.1 ライブラリの入手
 seeed」さんのWEBサイトで紹介されているGrove-RTCintroductionのページ(図3)に行き、下にスクロールすると「Software」と言う項目が出て来ます。
 その項目の下に「Download the RTC Library.」と書かれたショートカットが有りますのでこれをクリックすれば「RTC_Library」と言うファイル名のZIPファイルがダウンロードされます。
イメージ 1
図3:RTCライブラリのダウンロードページ
3.2 ライブラリのインストール
 ArduinoIDEに図3でダウンロードしたZIPファイルのライブラリをインストールします。
 やり方は簡単で、図4の通り「ArduinoIDE」→「スケッチ」→「ライブラリをインクルード」→「.ZIP形式のライブラリをインストール...」をクリックすると、「インストールするライブラリを含むZIPファイルまたはフォルダを指定してください。」と書かれた画面が出て来ます。
 この画面で先ほどダウンロードした「RTC_Library.ZIP」を開くだけです。
イメージ 5
図4:ライブラリのインストール
 
3.3 スケッチの例を開く
 図4の操作で、RTCを使ったスケッチの例もインストールされていますので試しに開きます。
 やり方は図5の様にArduinoIDE」→「ファイル」→「スケッチの例」→「RTC」→「SetTimeAndDisplay」の順にクリックしてサンプルプログラムを開きます。
イメージ 6
図5:「RTC」スケッチの例
 
3.4 スケッチの例をインストールする
 図5で開いたスケッチの例をインストールします。
 やり方はArduinoUNOとPCを接続(詳細はコチラ)し、ArduinoIDE画面左上に有る「➡」ボタンを押すだけです。
 書き込み完了後にArduinoIDE画面右上に有る「🔎」の形をしたシリアルモニタボタンを押すと「15:28:35 1/19/2013 19*SAT」と言う感じに初期設定の日時が表示されます。
イメージ 7
図6:「RTC」スケッチの例をインストール

4. プログラム

 図6のプログラムの中身は図7の通りです
 「void setup()」関数中で、RTCの日時を初期設定しますが、ここには現在の時刻を入力して書き込みます。
 初期設定は一回やっておき、コイン電池を入れっぱなしにしておけばそれほど頻繁に書き換える必要はありません。
 後はclock.getTime()」関数で現在の時刻を取得し、clock.hour」関数等で必要な「年,月,日,時,分,秒」または「曜日」を取り出します。
 参考に図7プログラムを実行した結果を図8に示します。
 
#include <Wire.h>
#include "DS1307.h"

DS1307 clock;//DS1307クラスのオブジェクトを定義する
void setup() {
   Serial.begin(9600);
   clock.begin();
   clock.fillByYMD(2017, 7, 8); //年,月,日
   clock.fillByHMS(11, 29, 30); //時:分,秒"
   clock.fillDayOfWeek(SAT);//曜日
   clock.setTime();
}//RTCチップへの書き込み時間

void loop() {
   printTime();
   delay(1000);
}

void printTime() { //機能:シリアルモニタに表示する時間
   clock.getTime();
   Serial.print(clock.hour, DEC); Serial.print(":");
   Serial.print(clock.minute, DEC); Serial.print(":");
   Serial.print(clock.second, DEC); Serial.print(" ");
   Serial.print(clock.month, DEC); Serial.print("/");
   Serial.print(clock.dayOfMonth, DEC); Serial.print("/");
   Serial.print(clock.year + 2000, DEC); Serial.print(" ");
   Serial.print(clock.dayOfMonth); Serial.print("*");
   switch (clock.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(" ");
}
イメージ 1
図1:プログラム例

 

イメージ 8
図8:Arduino IDE シリアルモニター

3. まとめ

 リアルタイムクロックの使い方は超簡単でした
 しかしライブラリなしでRTCのI2C通信をまともにやったら「LCDの使い方」の時みたく一週間以上掛かったかもしれません
  何時も思いますがライブラリを作って公開してくれた方に感謝です
 
イメージ 1 イメージ 3
励みになりますのでよければクリック下さい(^o^)/

↩【NOBのArduino日記!】目次に戻る