Arduinoにリアルタイムクロックを追加する方法と理由

Arduinoにリアルタイムクロックを追加する方法と理由

Arduinoプロジェクトの時間を維持することは、思ったほど簡単ではありません。コンピューター接続が確立されなくなると、電源が入っていないArduinoは、内部ティッカーを含めて実行を停止します。





ゲーミングPCを構築するのに最適なサイト

Arduinoを周囲の世界と同期させるには、「リアルタイムクロックモジュール」と呼ばれるものが必要になります。使い方は次のとおりです。





リアルタイムクロック(RTC)のポイントは何ですか?

お使いのコンピューターはインターネットと時刻を同期している可能性がありますが、インターネットに接続していなくても、または電源がオフになっていても、内部時計は動き続けます。コンピュータに接続されたArduinoを使用すると、システムクロックによって提供される正確な時刻にアクセスできます。これは非常に便利ですが、ほとんどのArduinoプロジェクトは、コンピューターから離れた場所で使用するように設計されています。その時点で、電源を抜いたり、Arduinoを再起動したりすると、何時かまったくわかりません。内部クロックはリセットされ、次に電源を入れたときに再びゼロからカウントを開始します。





あなたのプロジェクトが時間の必要性と関係がある場合(私の夜明けや日の出の目覚まし時計など)、これは明らかに問題になるでしょう。そのプロジェクトでは、かなり大雑把な方法で毎晩時間を手動で設定することで問題を回避しました。ユーザーは就寝直前にリセットボタンを押して、手動で時刻を同期しました。明らかに、それは理想的な長期的な解決策ではありません。

RTCモジュールは回路の追加ビットであり、小さなコイン電池が必要です。これは、Arduinoの電源がオフになっていても時間をカウントし続けます。一度設定した後-それはバッテリーの寿命の間、通常は良い年かそこらの時間を保ちます。



TinyRTC

Arduinoで最も人気のあるRTCはTinyRTCと呼ばれ、eBayで約5ドルから10ドルで購入できます。ほとんどの場合、独自のバッテリー(これらを海外に多くの場所に出荷することは違法です)といくつかのヘッダー(穴に差し込むピンで、自分ではんだ付けする必要があります)を用意する必要があります。

これは私が持っているモジュールです:





温度センサーも内蔵されていますが、使用しない場合はバッテリーが長持ちします。

その穴の数はかなり怖いように見えますが、必要なのは4つだけです。 GND、VCC、SCL、およびSDA-RTCモジュールのいずれかの側で関連するピンを使用できます。あなたはを使用して時計に話します I2Cプロトコル 、つまり、2つのピンのみが使用されます。1つは「クロック」(シリアル通信データクロック、時間とは関係ありません)用で、もう1つはデータ用です。実際、同じ2つのピンで最大121のI2Cデバイスをチェーンすることもできます-チェックアウト このAdafruitページ たくさんあるので、追加できる他のI2Cデバイスの選択のために!





入門

下の図に従ってTinyRTCモジュールを接続します。ピンクのDSラインは、温度センサー用であるため、必要ありません。

次に、ダウンロードします 時間DS1307RTC ライブラリを作成し、結果のフォルダを /ライブラリ フォルダ。

Arduino環境を終了して再起動し、ライブラリと例をロードします。

DS1307RTCメニューには2つの例があります。アップロードして実行します。 SetTime 最初の例-これにより、RTCが正しい時刻に設定されます。実際のコードについて詳しく説明する価値はありません。最初の時刻同期を実行するには、コードを1回実行する必要があることを知っておいてください。

次に、使用例を見てください ReadTest

ブラウザがクラッシュし続けるのはなぜですか

#include
#include
#include
void setup() {
Serial.begin(9600);
while (!Serial) ; // wait for serial
delay(200);
Serial.println('DS1307RTC Read Test');
Serial.println('-------------------');
}
void loop() {
tmElements_t tm;
if (RTC.read(tm)) {
Serial.print('Ok, Time = ');
print2digits(tm.Hour);
Serial.write(':');
print2digits(tm.Minute);
Serial.write(':');
print2digits(tm.Second);
Serial.print(', Date (D/M/Y) = ');
Serial.print(tm.Day);
Serial.write('/');
Serial.print(tm.Month);
Serial.write('/');
Serial.print(tmYearToCalendar(tm.Year));
Serial.println();
} else {
if (RTC.chipPresent()) {
Serial.println('The DS1307 is stopped. Please run the SetTime');
Serial.println('example to initialize the time and begin running.');
Serial.println();
} else {
Serial.println('DS1307 read error! Please check the circuitry.');
Serial.println();
}
delay(9000);
}
delay(1000);
}
void print2digits(int number) {
if (number >= 0 && number <10) {
Serial.write('0');
}
Serial.print(number);
}

コアも含まれていることに注意してください Wire.h ライブラリ-これはArduinoに付属しており、I2Cを介した通信に使用されます。コードをアップロードし、9600ボーでシリアルコンソールを開き、Arduinoが毎秒現在の時刻を出力するのを確認します。素晴らしい!

この例で最も重要なコードは、 tmElements_t tm -これは 構造 現在の時刻を入力します。そしてその RTC.read(tm) RTCモジュールから現在の時刻を取得する関数は、それを tm 構造体であり、すべてがうまくいった場合はtrueを返します。時間を出力したり、それに反応したりするなど、その 'if'ステートメント内にデバッグコードまたはロジックコードを追加します。

マイク感度を下げる方法

Arduinoで適切な時間を取得する方法がわかったので、日の出アラームプロジェクトを書き直したり、LEDワードクロックを作成したりできます。可能性は無限大です。何を作りますか?

画像クレジット: Snootlab Flickr経由

共有 共有 つぶやき Eメール Windows10デスクトップのルックアンドフィールを変更する方法

Windows 10の見栄えを良くする方法を知りたいですか?これらの簡単なカスタマイズを使用して、Windows10を独自のものにします。

次を読む
関連トピック
  • DIY
  • Arduino
著者について ジェームズブルース(707件の記事が公開されました)

ジェームズは人工知能の理学士号を取得しており、CompTIA A +およびNetwork +の認定を受けています。ハードウェアレビューエディターとして忙しくないときは、LEGO、VR、ボードゲームを楽しんでいます。 MakeUseOfに参加する前は、照明技術者、英語教師、データセンターエンジニアでした。

ジェームズブルースのその他の作品

ニュースレターを購読する

ニュースレターに参加して、技術的なヒント、レビュー、無料の電子書籍、限定セールを入手してください。

購読するにはここをクリックしてください
カテゴリ Diy