Arduino UNO R4のRTCが使い物にならん 

 

 Arduino UNO R4に搭載されているRenesas製のRA4M1マイコンには、RTC(Real Time Clock)が搭載されているのは今更わざわざ言うほどのことではない。
専用のライブラリも用意されているし、公式サイトには使い方も書かれている。
なので使ってみることは簡単だ。
使うだけならな。

 使ってみて気づくことは、意外と時間は正確ではないということ。
これはどこかのブログでも読んだことがあって、使い物にならないレベルみたいなことが書いてあった。
まさかそこまでとは思ったが、本当だった。
セイコー社が世界で初めて水晶発振器を使った腕時計を開発したのだが、その精度が月差±5秒だったとか。
今は電波やインターネットを使って1日に1回以上時間の補正をするような時代だ。
我々は時計の時間のズレに対して寛容さが無くなっているのかもしれない。

 だが、Arduino UNO R4のRTCはちょっとひどい。 個体差はあるとは思うが、感覚的に10分に1秒ほどズレていく。
どこがリアルタイムやねん。 と言いたくもなる。
私キャッスルはArduino UNO R4をMINIMAが二つとWiFiを一つ所有している。
それぞれでRTCを使ってみた所、MINIMAの一つは10分に約1秒遅れるし、もう一つは逆に10分に約1秒進む。
WiFiに至っては10分で6秒もズレる。

 確かにこれは使い物にならないレベルだ。
もし自分のArduino UNO R4マイコンボードのRTCの制度を調べてみたい人は、以下のようにしてみるとよい。
・まずは携帯電話でもパソコンでも腕時計でもいいので、正確な時間を表示できるものを用意する。
私は日本の標準時を表示するサイト(https://www.nict.go.jp/JST/JST6/)を使った。
・下記のRTCを使用したプログラムに任意の日時を指定してボードに書き込む。
・任意に設定した時間の1秒前にリセットボタンを押すと、だいたい同じ時間に設定される。
・シリアルモニターで何でもいいので文字をマイコンボードに送信すると、現在のRTCの時間がシリアルモニターに表示されるので誤差を記録。
・そのまま放置して、10分後なり30分後なり1時間後なりに時間を表示させて誤差を計測する。
だいぶアナログなやり方だが、これが一番手っ取り早い。

 さて、あなたのArduino UNO R4のRTCはどれくらい正確かな?

 

#include "RTC.h"

void setup() {
  Serial.begin(9600);

  RTC.begin();
  //ここで任意の時間を指定する
  RTCTime startTime(2, Month::AUGUST, 2024, 12, 00, 00, DayOfWeek::FRIDAY, SaveLight::SAVING_TIME_INACTIVE);
  RTC.setTime(startTime);
}

void loop(){
  if (Serial.available() > 0) {
    char incomingByte = Serial.read();

    RTCTime currentTime;
    RTC.getTime(currentTime);
    Serial.print(currentTime.getYear());
    Serial.print("/");
    Serial.print(Month2int(currentTime.getMonth()));
    Serial.print("/");
    Serial.print(currentTime.getDayOfMonth());
    Serial.print(" - ");
    Serial.print(currentTime.getHour());
    Serial.print(":");
    Serial.print(currentTime.getMinutes());
    Serial.print(":");
    Serial.println(currentTime.getSeconds());
  }
}