Arduinoシンプルな時計。 RTCモジュールを使用せずにArduinoの時計

良い一日。 今日の記事では、Arduinoに基づいて珍しいバイナリ腕時計を作成します いたずらさの hands。 同様のものを作成するプロセスで理解されていました 伎工将来的には、任意のデザインのバイナリウォッチを繰り返すことができます。

ステップ1:バイナリクロックとは何ですか?

まずで、そのようなバイナリ(バイナリ)番号がバイナリ計算システムに表示されている番号であることを忘れないでください。 数値2つのシンボルのみが使用されていることが、0(ゼロ)と1(1)。

バイナリクロックは、バイナリ形式の時間を表示するクロックです。 プロジェクトは6列のLEDを使用してゼロとユニットを表示します。 各列には1桁/放電が表示され、そのような形式は次のように知られています バイナリ10進数 (DDH)。 各行は、2 ^ 0(または1)から2 ^ 3(または8)までの程度を表示します。 したがって、時計から情報を読み取るときに行われる必要があるすべてのものは、スピーカーの値をオン - LEDでまとめることです。 例えば、第1の列は4番目のLEDと第1のLEDを含む。 8から1を追加し、9を取得します(秒数は9です)。 10秒の次の列で、3番目のLEDのみが輝いているため、一般的な値は数分と時間だけ49秒になります。 クロックには24時間形式の時間が表示されます。

ステップ2:コンポジット部品

  • アルドイーノ。 プロ。 ミニ。 328 5 v そのような料金を使用しましたが、実際には他のものを使うことができます。 あなたが使ったことがないならば Pro Mini。それからおそらくあなたは必要になるでしょう cp。2102(プログラマー) ボードをコンピュータに接続する。

  • DS。1302 - リアルタイムクロックモジュール;

  • 20 mm拡散「暖かい」LED(私はあなたに予約して取ることをお勧めします)。

  • 抵抗10Ωの評価を持つ20の抵抗。

  • 2時計ボタン

  • 2kΩの抵抗値を持つ2抵抗(負荷抵抗として使用)。

ステップ3:プロトタイプを作成します

未来のプロトタイプを作り始めましょう 伎工。 原則として、これは前提条件ではありませんが、LEDマトリックス、ArduinoとClockモジュールがどのように機能するかを調べる必要があります。 プロトタイピングでは、Arduino Megaと単純な赤色LEDを使用しました。 すべてが予想通りうまく機能します。

ステップ4:ケース

ハウジング selfieckers(2つの半分で構成されています ) それは木で作られます。 それはバイナリ時計の背景と対比して与えるでしょう クラフト レトロなスタイル。

ステップ5:スキーム

LEDはマトリックスに分類されて、Arduino Convened結論の数を減らすことができます。 私たちの場合、9つの結論が行列に割り当てられています。 LEDマトリックスを作成した後、我々はArduino、次にクロックモジュール、時間を設定するためのボタン、電源の終わりに出力する。

ステップ6コード

コードの基礎として、DS1302クロックモジュールのARDUINO PlayGroud POSTを使用した例で撮影されます。 その後、LED行列の時間を表示させるように変更した。

それはどういうわけか大きなものを作るためにかかった 壁時計 自動明るさで。

そのような時計は、オフィスのホールや大きなアパートなど、大部屋に最適です。

このような大きな壁掛け時計はこの指示を使って深刻な困難を提出しません。


クロックのサイズを推定するには、1クロックセグメントがA4フォーマットの用紙のサイズになることがわかります。これにより、適切なサイズの写真のためのフレームワークを簡単に使用できます。

ステップ1.大きな壁時計の合成部品。

ワイヤー、はんだ、はんだごて、LEDリボン Arduino Nano。 DC-DCコンバータLM2596
4メートルLEDテープWS2811 光センサー リアルタイムクロックDS3231
マイクロスイッチ

私がこのプロジェクトに使用したもの:

ステップ8.クロックをプログラムします。

ビットをベアリングする、私は私のニーズを完全に満足させる時計を得ることができました。 私はあなたが私の最善を尽くすことができると確信しています。

コードはよく発言されており、あなたはそれが理解するのが難しくないでしょう、デバッグメッセージも非常によくコメントされています。

壁時計の色を変更する必要がある場合は、22行目の変数を変更する必要があります( int ledColor \u003d 0x0000FF; //使用されている色(16進数))。 あなたはページ上のHexで色とそのコードを見つけることができます: https://github.com/fastled/fastled/wiki/pixel-refe ...

ダウンロード時に問題がある場合は、ミラー:http://bit.ly/1qjtgg0を使用してください。

私の最後のスケッチはダウンロードできます。

ステップ9.ポリスチレンを使って数字を作ります。

カッターの基礎 労働者カッター カッターの全体図
カッターの作品の結果

最初に印刷されたテンプレート内の各セグメントをカットします。
ポリスチレンは、ニクロームワイヤまたはギターストリング、およびOSBストーブのいくつかのセグメントからの急激なナイフで切断することができます。

上記の画像の中でやった方法を見ることができます。

カッターに電力を供給するために、12V電源を使用しました。

その結果、カットはのための4つのセグメントであるべきです 巨乳そのうちの1つが写真に表示されています。

ステップ10.数字を接着して、すべての散乱体を閉じます。 最後の大きな壁時計。

輝く日 輝く夜

壁時計の4桁とポイントをすべて切り出した後、LEDリボンが付いている段ボールに全部接着します(プロセスを簡単にするために、双方向粘着テープを使用)。

硬いを払拭するために lEDライト ポリスチレン桁上で2枚の紙を使用しました。 利便性と美学のために、私は2回折り畳まれたA2のサイズを使いました。

これらすべてのステップを完了した後、私は結果として生じる大きな壁時計の組み立てを対応する素晴らしいフォトフレームに入れました。

この時計は非常に壮観で目を引き付けることができました。 そのような大きな壁時計は完全に多くの部屋を飾ると思います。

に連絡して

それで、リアルタイムクロック。 この便利なことは、時間に関連した便利なタスクのほとんどを解決します。 午前5時に国の散水の管理があるとします。 ある点で光をオンしてオフにします。 日付によって、あなたはいくつかの家で暖房を走ることができます。 物事は非常に面白くて便利です。 そしてより具体的には? 人気のあるARDUINOプラットフォーム用のリアルタイムDS1302時計を検討します。

この記事から、あなたは学ぶでしょう:

良い日、親愛なる読者のキップワールドブロック! お元気ですか? コメントを書いて、ロボット工学を楽しんでいますか? このトピックはあなたにとって何を意味しますか?

私はそれについてのアイデアを残していません。 私たちが眠って、私たちがついに誰もが個人的なロボットを買う余裕があるという事実にやってくるときに見えます - アシスタント。 それは彼が何をするか、ゴミの掃除、ヘアカット芝生、洗車洗浄です。

私は彼らが彼らの「頭脳」に含まれるべき困難なアルゴリズムを想像してみてください。

結局のところ、私たちはパーソナルコンピュータ上のソフトウェアをフラッシュすることになるという事実にやってきます。 適用プログラムもダウンロードしてください。 縫い目の手、脚、爪の変更、マニピュレータ。

映画「i-Robot」を見てください」 人工知能「、「スターの戦士」。

日本人は長い間彼らの開発を実施しています。 私たちは何を悪化していますか? 私たちは非常に弱い人気があります。 私はいくつかの開発者を知っています。 指を再計算するための。 私たちは他人に従事しています。 私たちはディーラーです。 既製のセット、ロボット - トイ、すべてのこすりを買うだけです。

これを開発しないのはなぜですか。

またはこれは次のとおりです。

私は私の考えを大声で終えました。 Real-Time Time Timer DS1302をArduinoに接続することについて話しましょう。

リアルタイムDS1302

Arduinoコントローラには独自の時間がありません。 したがって、必要に応じて、特別なDS1302マイクロ回路を補完する必要があります。

栄養によって、これらのボードはそれらの電池を使用することができ、あるいは仲介料から直接紹介することができます。

ピンオーの表:

接続図C Arduino Uno:


DS1302を操作するためのArduinoプログラミング方法

信頼できる情報源から有効なライブラリを必ずダウンロードしてください。

ライブラリを使用すると、リアルタイムパラメータを読み書きできます。 小さい説明私は下記を引用しています:

#include。 //ライブラリを接続してください。
ovarduino_rtc。 オブジェクトtitle [、output_st [、output_clk [、output_dat]]]] ); //オブジェクトを作成します。

関数 ベギン (); // RTCモジュールの動作の初期化

関数 安静(秒[min [、時[、日] [、月[、日[、日]]]]]]]]]]]]]]] ); // 設定時間。

関数 時間をもらう ([LINE] ); // 読書の時間。

関数 blinkTime([頻度]パラメータ ); //指定された時間パラメータを「Flash」にgettime関数を "Flash"させます。

関数 限目 (議事録 ); //モジュールへの最小参照期間を分単位で示します。

変数 秒数// 0から59まで秒を返します。

変数 分。// 0から59まで分を返します。

変数 時間// 1~12のクロックを返します。

変数 時間// 0から23のクロックを返します。

変数 正午。// NOON 0または1(0-AM、1-PM)を返します。

変数 日。// 1から31までの月の日を返します。

変数 平日。// 0~6の曜日を返します(0~日曜日、6土曜日)。

変数 月。// 1から12までの月を返します。

変数 年。// 0から99までの年を返します。

簡単なプログラムを書いています。 RTCモジュール(DS1302)の現在時刻を設定します。

アルドイーノ。

#include。 ovarduino_rtc時間(RTC_DS1302,6,7,8); void setup()(遅延(300); serial.begin(9600)。time.begin(); time.settime(0.51,21,27,10,15,2); // 0秒、51分、21時間、27、2015年、2015年、火曜日)void loop()(if(millis()%1000 \u003d\u003d 0)(// 1秒のserial.println(time.gettime( "dmy、h:i:s、d" )); //時間遅延(1); // 1ミリ秒の時間を数回出力しないように、1ミリ秒で中断してください))

#include。

ovarduino _ RTCTIME(RTC_DS1302,6,7,8);

void setup()

遅延(300);

シリアル。 始める(9600);

時間。 ベギン ();

時間。 SetTime(0,51,21,27,10,15,2)。 // 0秒、51分、21時間、27,2015、火曜日

void loop()()

if(millis()1000 \u003d\u003d 0)( // 1秒が経過した場合

シリアル。 println(時間。gettime( "d-m-y、h:i:s、d"))。 // 時間がかかる

遅延(1); // 1ミリ秒の時間を数回出力しないように1ミリ秒で中断します。

RTCモジュール(DS1302)で現在時刻を読み、「シリアルポート」を表示します。

#include。 ovarduino_rtc時間(RTC_DS1302,6,7,8); void setup()(遅延(300); serial.begin(9600)。time.begin();)void.begin()()(if(millis()%1000 \u003d\u003d 0)(// 1秒のserial.printlnが渡した場合) (Time.GetTime( "DMY、H:I:S、D")); //時間遅延(1); // 1ミリ秒の時間を数回出力しないように、1ミリ秒に停止します。

記事では、バッテリー上の優れたリアルタイムクロックモジュールを知り合います。

このモジュールでは、再プログラミングや電源を切っても、Arduinoのプロジェクトの時間を追跡できます。 これは、アラームクロック、アラーム、センサーからの読み取りのリアルタイムのプロジェクトに必要な要素の1つです。 リアルタイムクロックモジュールの最も一般的なモデルの1つはDS1307です。 止まることがあります。 モジュールはArduinoマイクロコントローラと完全に組み合わされており、その上に論理の栄養は5 Vです。

AdaFruitの製造元からのモジュールの機能(中国語は3つまたは4つの安いオプションで類似のオプション):

  • 全包括的な:チップ、ストラップ、バッテリー。
  • 簡単に行くと使いやすい。
  • ワイヤを使用して任意のバッチにインストールされているか、直接接続されています。
  • 有る 優秀な図書館 そしてスケッチの例。
  • 取り付け用の2つの穴
  • 仕事の期間 - 約5年!

リアルタイムクロックモジュールはすでに振りかけることができ、個々のコンポーネントの形で販売することができ、それ以上は約15分かかります。

リアルタイム時計とは何ですか?

本当に時間は...時間です。 モジュールは自律型電源 - 電池から実行され、プロジェクトがArduinoに行ったとしても、時間を数え続けます。 リアルタイムモジュールを使用して、スケッチを変更してマイクロコントローラを再プログラムしたい場合でも、時間を追跡できます。

Arduinoを含むほとんどのマイクロコントローラでは、Millis()と呼ばれる一時的なカウンタが内蔵されています。 より長い期間(分または日数)を追跡できるチップに組み込まれているタイマーがあります。 それではなぜあなたは別の時間モジュールを持っていますか? 主な問題は、Millis()がArduinoへの電力供給以来の時間を追跡することです。 つまり、ボードを切断したらすぐにタイマーは0に排出されます.Proch Arduinoは、現在、木曜日または3月8日です。 内蔵カウンタから取得できるのは、「最後の包含以降、14,000ミリ秒が経過しました」です。

たとえば、プログラムを作成し、今後の時間を数えます。 マイクロコントローラの電源を切ると、時間カウンタが購入されます。 それが安いところで起こる方法について 中国の時計:バッテリーが座っているとき、彼らは12:00の証言で点滅し始めます。

いくつかのプロジェクトでは、Arduinoは割り込みなしで信頼できる時間を制御する必要があります。 外部リアルタイムクロックモジュールが使用されるような場合です。 チップは、同様の時間で使用され、年間を追跡し、月に数日を知っています(通常は考慮されていない唯一のものは、そのような翻訳がさまざまな部分で異なるため、夏と冬の時間は夏と冬の時間に移行されます。世界)。

下の図 マザーボード リアルタイムクロックDS1387のコンピュータ。 クロックでは、リチウム電池が使用されているので、サイズが散らばっています。

リアルタイムクロックDS1307を使用する例を検討します。 これは小さなバッテリーから数年間働く安価で使いやすいモジュールです。

モジュール自体のバッテリーは充電を排気しないが、Arduinoが電源から切断されているかまたは再プログラムされていても、DS1307はカウントダウンを行います。

リアルタイムクロックモジュールが構成されているノード

DS1307 adafruiteのリアルタイムモジュールの詳細
画像 指定 description メーカー
IC2。 リアルタイムチップ DS1307。 1
Q1。 32.768 kHz、12.5 PFクリスタル 汎用 1
R1、R2。 1/4 W 5%2.2 COM抵抗赤、赤、赤、ゴールデン 汎用 2
C1。 0.1μFのセラミックコンデンサー 汎用 1
5コンタクト用レール(1×5) 汎用 1
電池 リチウム電池の12 mm 3 CR1220。 1
12mmコインセルホルダー キーストーン3001。 1
支払う アダフレート産業。 1

リアルタイムクロックモジュールの組み立て

リアルタイムクロックDS1307アダフレートのコレクション
写真 説明されている

アセンブリに準備します。 必要な部品やツールをすべて確認してください。 回路基板をバイスに取り付けます。

マイナスバッテリの接触に少しはんだ付けします。

2つの抵抗器2.2 COMとセラミックコンデンサを取り付けます。 あなたはそれらをどのように正確に配置するのでしょう - 関係なく。 極性は関係ありません。 その後、電池とリアルタイムクロックチップのホルダー(保持)を(対称的に)、ホルダー(保持)を設定します。 リアルタイムモジュールチップは、チップ上のマーク(グルーブ)が回路基板上の指定に従って配置されるように設定されている。 左側の写真を慎重に見て、チップが正しく取り付けられています。


バッテリーの保持が落ちないように、上からそれをはんだ付けするのが良いです。 その後、ボードを回して残りの連絡先をはんだ付けします。

抵抗、水晶、コンデンサからの接点の残りを取り外します。

連絡先を使用してモジュールをインクリメンタル回路基板にインストールする場合は、ピンの連絡先を上からのリアルタイムクロックモジュールと船の連絡先に設定します。

電池を取り付けます。 バッテリーの平らな部分は上でなければなりません。 平均して、バッテリーは約5年間役立ちます。 バッテリーが座っていても、スロットを空にしたままにしないでください。

DS1307を扱うためのArduinoライブラリ

DS1307は、5 VロジックとI2C機能を持つ任意のマイクロコントローラに簡単に接続します。 このモジュールをArduinoで接続して使用することを検討します。

RTCLIBライブラリを使用して、DS1307からの読み取り値を受信して\u200b\u200b設定します。 追加のArduinoライブラリに保存する質問がある場合 - この命令をチェックしてください。

この記事では、adafruitからリアルタイムの時間の例を説明していますが、同じ成功を持つ中国語の対応物を使用できます。 操作と接続の原理は変わりません。

  • Arduino Uno R3を購入する。
  • ブレッドボードを買う。
  • リアルタイムクロックモジュールDS1307を購入する。

実際のプレミュニー5の時計で5V、GND、SCL、SDA、SQW。

  • 時間データを受信するように要求するときにリアルタイムクロックチップに電力を供給するために5Vを使用します。 5V信号が到着しない場合、チップは「スリープ」モードに入ります。
  • GND - 総土地。 必ず回路に接続してください。
  • SCL - I2Cクロックコンタクト - リアルタイムクロックでデータを交換するために必要です。
  • SDA - I2Cからのデータがリアルタイムのクロックから送信される場所。
  • SQWでは、データ出力を正方波として設定することができます。 ほとんどの場合、この接点は使用されていません。

アナログピン3(デジタル17)を出力とハイモードに設定し、アナログピン2(デジタル16)を出力してローモードに設定した場合は、これらの連絡先から直接リアルタイムの時間を節約できます。

Arduinoにアナログピン4をSDAに接続します。 Arduinoのアナログピン5はSCLに接続します。


Arduinoのスケッチ。

リアルタイムの腕時計の検証

最初のスケッチは、実行価値があるプログラムで、1秒間に1回、リアルタイムモジュールからデータを読み取るプログラムです。

スタートについては、ArduinoがUSBに接続されるまで、バッテリーを取り外して別の方法に置き換えれば、何が起こり、それを別のものに置き換えましょう。 3秒間待ってバッテリーを取り外します。 その結果、チップはリアルタイムクロックで再起動します。 その後、以下に示すコードを挿入します(例ではコードをアンロードすることもできます。→RTCLIB→DS1307メニューにはアンロードできます。 Arduino IDE)そしてArduinoでそれをダウンロードします。

また、OneWire.hライブラリもダウンロードできます。

.

// I2Cを介して接続されたリアルタイムクロックDS1307を使用した日時関数。 スケッチはワイヤ\u200b\u200bーLIBライブラリを使用しています

#include&ltwire.h&gt

# "rtclib.h"を含める

serial.begin(57600);

if(!RTC.Isrunning())の場合

serial.println( "RTCが実行されていません!");

// RTC.Adjust(DateTime(__ date__、__time__));

DateTime \u003d RTC.NOW();

serial.print( "/");

serial.print( "/");

serial.print(now.day()、dec);

serial.print( "");

serial.print( ":");

serial.print( ":");

serial.println();

serial.print(now.unixtime());

serial.print( "s \u003d");

serial.println( "d");

//日付を計算する:7日と30秒

DateTime Future(Now.UnixTime()+ 7 * 86400L + 30);

serial.print( "Now + 7d + 30s:");

serial.print(Future.year()、Dec);

serial.print( "/");

serial.print(Future.Month()、Dec);

serial.print( "/");

serial.print(Future.day()、Dec);

serial.print( "");

serial.print(Future.hour()、Dec);

serial.print( ":");

serial.print(Future.Minute()、DEC);

serial.print( ":");

serial.print(Future.Second()、dec);

serial.println();

serial.println();

シリアルモニタウィンドウを開き、データ転送速度が正しく設定されていることを確認します.57600 BPS。

その結果、シリアルモニタウィンドウで次のことがわかります。


リアルタイムに電源がある場合は、0:0:0が表示されます。 秒は遮断されます。 時間を設定した後は、新しいカウントが行く予定です。 現在のタイムモジュールの動作中にバッテリを取り外すことは不可能であるためである。

時計モジュールの設定時間

同じスケッチで、rtc.adjustで始まる行は:

//下記の行は時計の日時を設定するために使用されます

RTC.Adjust(DateTime(__ date__、__time__));

日付と時刻を設定するプロセスは非常にエレガントです。 この行には、カウンタからのデータが含まれています パソコン (コードの賛辞の時点)。 このデータは、リアルタイムクロックモジュールをファームウェアするために使用されます。 つまり、PC上の時間が間違って設定されている場合は、このバグを修正してからArduinoのクロックモジュールのファームウェアに移動します。

設定後、シリアルモニタを開き、クロックが正しく設定されていることを確認してください。


すべて。 この時点から、次の数年間で、DS1307は構成する必要はありません。

DS1307で読んでいる読み取り時間

リアルタイムクロックDS1307を設定した後、それらに要求を送信できます。 これらの要求が実装されているスケッチの一部を検討しましょう。

DateTime \u003d 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();

本質的には、リアルタイムクロックを使用して時間が1つあります。 これを行うには、now()関数を使用します。これは、DateTimeオブジェクトを返します。 この施設には、年、月、日、時、分、秒に関する情報が含まれています。

リアルタイムクロックのためのライブラリはたくさんあります。これは、RTC.YEAR()とRTC.HOUR()のような機能を提供します。 これらの機能は、一年と1時間を別々にストレッチします。 しかし、彼らの使用は多くの問題に関連しています。たとえば、たとえば、3:14:59、つまり議事録の証言の直前の右の前に、 15 "(3:15:00)、取得したデータは3:14:00に等しくなります - つまり、あなたは1分を失います。

一般に、1分か1分の間の変動の精度が重要でない場合にのみ、1時間か年を呼び出すための個々の機能の使用は正当化されます(原則として、証言がある場合はめったに削除されました - 1日に1回、週に1回)。 いずれにせよ、読み取り値のエラーを回避したい場合は、今()、すでにデータから使用している場合は、必要な測定値を引いてください(分、年など)。

私たちが学ぶことができる別のデータフォーマットがあります - 1970年1月1日の真夜中からの秒数。 これを行うには、unixtime()関数を使用します。

serial.print( "1970 \u003d"から "。

serial.print(now.unixtime());

serial.print( "s \u003d");

serial.print(now.unixtime()/ 86400L);

serial.println( "d");

1日60 * 60 * 24 \u003d 86400秒で、結果として得られる値を日数と年数に変換することができます。 非常に便利なオプション、あなたが追跡する必要があるなら、最後の要求からどのくらいの時間が経過したか。 たとえば、リアルタイムクロックDS1307への最後のARDUINOハンドルから5分が経過した場合、UnixTime()が300に戻る値が渡されます。

あなたのコメント、質問、あなたの個人的な経験を下回ってください。 新しいアイデアやプロジェクトはしばしばディスカッションで生まれました!

多くのプロジェクトでは、Arduinoは特定のイベントの開始時刻を追跡し修正する必要があります。 追加の電池を装備したリアルタイムクロックモジュールでは、現在の日付を保存できます。デバイス自体の電源の入手可能性には依存しません。 この記事では、Arduinoボードで使用できる最も一般的なRTC DS1307、DS1302、DS3231モジュールについて説明します。

時計モジュールは、ルールとして、DS1307チップ、DS1302、DS3231.come、ボード上で、電力バッテリーの取り付け機構を見つけることができます。 そのようなボードはしばしば時間、日付、曜日およびその他の年代記録パラメータを考慮するために使用されます。 モジュールは、Ardioinoで電源がオフになっていても、自律型電源、電池、電池から動作します。 最も一般的なクロックモデルはDS1302、DS1307、DS3231です。 それらはArduino(リアルタイムクロック)に接続されているRTCモジュールに基づいています。

時計は、通常のカウンタや時計発生器とは異なり、通常の人、時間、曜日などに快適な単位でカウントされています。 Arduinoは利用できます 特殊機能 Millis()では、異なる時間間隔も読むことができます。 しかし、この機能の主な欠点は、タイマーがオンになっているときにゼロに落ちます。 これにより、時間を数えるだけで、曜日または曜日を設定できます。 この問題を解決するために、リアルタイムクロックモジュールが使用されます。

電子回路は、チップ、電源、石英共振器および抵抗器を含む。 石英振動子は32768Hzの周波数で動作します。これは通常のバイナリメーターには便利です。 DS3231方式には、高精度値を得ることができる内蔵石英と熱安定性が含まれています。

人気RTC DS1302モジュールDS1307、DS3231の比較

この表では、最も人気のあるモジュールとその主な特性のリストがLEDです。

名前 周波数 正確さ サポートされているプロトコル
DS1307。 1 Hz、4.096 KHz、8.192 KHz、32.768 KHz QUARTZによって異なります - 通常、値は1日に2.5秒に達し、1日1秒を超える精度を達成することは不可能です。 また、精度は温度に依存します。 i2c。
DS1302。 32.768 kHz 1日あたり5秒 I2C、Spi.
DS3231。 2つの出力 - 1 Hzから8.192 kHzの2番目から32.768 kHz、2番目のプログラム可能 0~40℃の温度で±2 ppm。

-40℃から85℃の温度で±3.5ppm。

温度の精度 - ±3C

i2c。

モジュールDS1307。

DS1307は時間を参照するために使用されるモジュールです。 それはDS1307ZNチップに基づいて組み立てられ、食品はリチウム電池からの実施のために供給される。 自律的な仕事 長期間。 ボード上のバッテリーはに取り付けられています 裏側。 モジュールはAT24C32チップを持っています。これは32 KBだけ不揮発性のEEPROMメモリです。 両方のチップはI2Cバスによって相互接続されています。 DS1307は消費電力が低いため、2100年に時間とカレンダーが含まれています。

モジュールには次のパラメータがあります。

  • 食品 - 5V
  • 動作温度範囲は-40℃から85℃です。
  • 56メモリバイト;
  • リチウム電池LIR2032。
  • 12と24時間のモードを実装します。
  • I2Cインターフェイスのサポート

このモジュールは、データが非常にめったに読まれる場合に使用するために正当化されます。 バッテリーがあっても、中断のない使用がより多くの電圧を使わなければならないので、これは栄養を節約します。 メモリの存在により登録することができます 様々なパラメータ (例えば、温度測定)およびモジュールから取得した情報を読み取る。

他のデバイスとの対話とそれらとの交換は、SCLおよびSDAコンタクトからのI2Cインターフェイスを使用して行われます。 この方式には、必要な信号レベルを提供できる抵抗があります。 また、DS18B20温度センサーを固定するための特別な場所があります。連絡先は2つのグループで分布しています。ステップ2.54 mm。 最初の連絡先グループは次のような結論です。

  • DS - センサDS18B20の出力。
  • SCL - タクトライン;
  • SDA - データ行。
  • VCC - 5V;

接点の2番目のグループでは:

  • SQ - 1 MHz。
  • BAT - リチウム電池用入力。

Arduinoボードに接続するには、ボード自体が必要です(この場合はArduino UNOが考慮されています)、リアルタイムクロックモジュールRTC DS1307、ワイヤー、およびUSBケーブル。

コントローラをArduinoに接続するには、4本のピンが使用されます - VCC、Earth、SCL、SDAがクロックからのVCCはArduinoの5V、Arduino、SDA - A4、SCL-A5では、Arduinoの5Vに接続されています。

クロックモジュールの操作を開始するには、DS1307RTC、TimeLib、およびWire Librariesをインストールする必要があります。 作業やRTCLIBに使用できます。

RTCモジュールの確認

最初のコードを開始するとき、プログラムは1秒間に1回モジュールからデータを読み取ります。 最初に、モジュールからバッテリを取得し、Arduinoボードがコンピュータに接続されていない間に、プログラムの動作がどのように動作して別のものを置き換えることができます。 結果として、数秒待ってバッテリーを引っ張る必要があります。 次に、例→RTCLIB→DS1307メニューの例を選択する必要があります。 譲渡金利を57600 bpsに修正することが重要です。

シリアルモニタウィンドウを開くと、次の行が表示されます。

時間0:0:0を表示します。 これは、時計の時間が消え、カウントダウンが停止するという事実があります。 このため、モジュール操作中にバッテリを引っ張ることはできません。

モジュール上で時間を設定するには、スケッチ内の行を見つける必要があります。

RTC.Adjust(DateTime(__ date__、__time__));

この行には、リアルタイムクロックモジュールのファームウェアを使用するコンピュータからのデータが含まれます。 にとって 正しい仕事 最初にコンピュータ上の日付と時刻の正確さを確認し、その後クロックモジュールの点滅を開始する必要があります。 モニタで設定したら、次のデータが表示されます。

セットアップは正しく実行され、リアルタイムクロックが必要ではありません。

読み取り時間。 モジュールが設定されるとすぐに、時間の要求を送信できます。 これは、日時オブジェクトを返すnow()関数を使用します。これには、日時に関する情報が含まれています。 時間の読み取りに使用される多数のライブラリがあります。 たとえば、RTC.YEAR()とRTC.HOUR() - それらは別に年と時間に関する情報を受け取ります。 それらを操作するとき、問題があるかもしれません:たとえば、時間出力の要求は1:19:59に行われます。 時間が1:20:00に表示される前に、時計は時間1:19:00、つまり、実際には1分が失われます。 したがって、これらのライブラリーは、読み取りがめったにない場合に使用することをお勧めします。 呼び出し時間には他の機能がありますが、エラーを減らすか避ける必要がある場合は、今()を使用することをお勧めします()とそれから必要な読み取り値を抜いています。

I2Cクロックと表示モジュールを備えたプロジェクトの例

プロジェクトは通常の時計であり、正確な時間がインジケータに表示され、数字の間のコロンは1秒後に間隔内に点滅します。 プロジェクトを実施するために、Arduino UNOカード、デジタルインジケータ、リアルタイムクロック(この場合は上記のDS1307モジュール)、接続のためのシールド(この場合はトロイカシールドが使用されている)、時計やワイヤー用のバッテリーが使用されています。

このプロジェクトは、TM1637チップ上に単純な4桁のインジケータを使用します。 この装置は2線式インタフェースを有し、8レベルのモニタの明るさを提供します。 時計形式で時間を表示するのにのみ使用されます。 インジケータは使いやすく、簡単に接続できます。 記念的または毎時のデータ検証を必要としない場合は、プロジェクトに適用することは有益です。 詳しくは 完全な情報 時間と日程については液晶モニターを使用しています。

クロックモジュールは、I2Cバスを参照するSCL / SDAコンタクトに接続されています。 土地と栄養をつなぐ必要もあります。 Arduinoは上記と同じものを接続します.SDA-A4、SCL-A5、モジュールからの地球、Arduino、VCC -5Vを使用して。

インジケータは単に接続されています - IT CLKとDIOからの結論はボード上の任意のデジタルピンに接続されています。

スケッチ。 コードを書き込むには、Setup関数を使用します。これにより、クロックとインジケーターを初期化でき、コンパイル時間を記録します。 画面への時間出力はループを使用して実行されます。

#include。 #include "TM1637.h" #include "ds1307.h" //すべての必要なライブラリを時計と表示で動作させる必要があります。 char compileTime \u003d __time__; //コンパイル時間。 #define display_clk_pin 10#deplay_dio_pin 11 //スクリーンが結合するARDUINO出力からの数字。 void setup()(display.init(); //スクリーンの接続と設定。clock.begin(); //時間を有効にします。バイトhour \u003d getIntime、0); byte minute \u003d getInt(コンパイレクトタイム2)。バイト秒\u003d getInt(コンパイラ、4); //時間を取得。Clock.Fillbyhms(1時間、分、秒)。//タイムモジュールでの録音の準備。Clock.Sttime(); //レコード情報の情報 内部メモリ時間の読みを始めます。 )void.timedISP; // 4桁のそれぞれに表示されます。clock.getTime(); //時間を要求します。timedisp \u003d clock.hour / 10; timedisp \u003d clock.hour%10; timedisp \u003d時計.mine / 10; timedisp \u003d clock.minute%10; //数十数、数時間、分などのさまざまな操作。display.display(timedisp); //ディスプレイディスプレイに出力します.point(clock.second %2?POINT_ON:POINT_OFF); // 2秒後にコロンをオンしてオフします。)CHAR getInt(int(String - "0")* 10 + int(string) - "0"; //アクション2桁の整数での正しい時間録音。それ以外の場合は、単に文字のペアが画面に表示されます。)

その後、スケッチをダウンロードする必要があり、モニタに時間が表示されます。

プログラムはわずかにアップグレードできます。 上記の電源を切ったら、書き込まれたスケッチはディスプレイを切り替えた後、コンパイルに設定された時間につながります。 セットアップ機能では、常に計\u200b\u200b算されるたびに、コンパイル開始前に00:00:00から渡されます。 このハッシュはEEPROMに格納されているものと比較されます。これは、電源がオフになっているときに保存されます。

不揮発性メモリへのまたはそれから時間を書き込んで読み取るためには、EEPROMWriteintとEEPromReadIntの機能を追加する必要があります。 それらは、EEPROMに記録されたHASHEとの一致/ハッシュの不一致をチェックするために必要です。

プロジェクトを改善することができます。 液晶モニターを使用する場合は、画面上の日付と時刻を表示するプロジェクトを作成できます。 すべての要素を接続することを図に示します。

その結果、コードでは表示する必要があります 新しい図書館 (液晶スクリーンの場合は液晶画素である)、そして日付を取得するためにLoop()関数に追加します。

作業アルゴリズムは次のとおりです。

  • すべてのコンポーネントを接続してください。
  • チェック - モニタ画面は、2回目と日付ごとに変更する必要があります。 画面に表示されている場合 間違った時間スケッチにRTC.Write(tmelements_t tm)を追加する必要があります。 誤って指定された時間の問題は、クロックモジュールがオフのときに00:00 AM 01/01/2000の日時をリセットするという事実に関連しています。
  • 書き込み機能を使用すると、コンピュータから日付と時刻を取得できます。その後、正しいパラメータが画面に表示されます。

結論

クロックモジュールは多くのプロジェクトで使用されています。 それらは、指定されたスケジュールで機能するタイマーおよび制御装置を作成するときに、データロギングシステムに必要です。 家庭用器具。 広範囲のモジュールや安価なモジュールの助けを借りて、センサーからのアラームクロックやデータレコーダーなどのプロジェクトを作成したり、SDカードの情報を記録したり、表示画面上の時間を示したりできます。 この記事では、最も人気のあるモデルを接続するための使用とオプションの典型的なシナリオを調べました。

トピックを続ける:
インターネット

Windowsブートディスクを作成する最も一般的な方法の1つは、この記事で説明されている方法です。 そしてより正確に創造の中で、それは遠い世界で私たちを助けるでしょう...