Arduinoを使った大型電子室クロック。 Arduinoに基づくバイナリクロックを自分でやる

こんにちは、今日、私は室温計との時計の製造の指示を共有します( Arduinoの時計を自分でやる)。 クロックはArduino UNOで動作し、WG12864Bグラフィックスクリーンを使用して時間と温度を表示します。 温度センサー - DS18B20として。 他のほとんどの時間とは異なり、私はRTS(リアルタイムクロック)を使用しません。この追加モジュールなしではやろうとします。

Arduinoの方式は、それらの単純さによって区別され、Arduinoを学ぶことができます。 ライブラリとFlash Arduinoを接続する方法については、当店で読むことができます。

続行しましょう。

データ時間を作成するには:

Arduino Uno(またはその他のArduino対応料金)
- グラフィックスクリーン WG12864B。
- DS18B20温度センサー
- 抵抗器4.7 COM 0.25 W.
- 抵抗体100オーム0.25 W
- AAタイプ「フィンガー」の4電池用バッテリーコンパートメント
- フィットボックス
- 小さいファイル。
- マニキュア(黒またはボディカラー)
- 少し薄いプラスチックまたは厚紙
- isol.
- 配線を接続します
- 回路基板
- ボタン
- はんだごて
- ソルダー、ロジン
- 両面テープ

グラフィックスクリーンの準備
スクリーンの接続で、一見すると、多くの問題と困難があります。 しかし、あなたが最初に彼らの見解を扱うならば、それははるかに簡単でより明確になるでしょう。 KS0107 / KS0108コントローラーには、多くの品種や種類の画面があります。 すべての画面は4種類を分割するように作られています。
オプションA:HDM64GS12L-4、CrystalFontz CFAG12864B、Sparkfun LCD-00710CM、NKC Electronics LCD-0022、Winstar WG12864B-TML-T
Variant B:HDM64GS12L-5、Lumex LCM-S12864GSF、Futurlec Blue128x64LCD、AZディスプレイAGM1264F、DisplayTech 64128A BC、ADAFRUTE GLCD、DATAVISION DG12864-88、TOPWAY LM12864LDW、Digitron SG12864J4、QY-12864F、TM12864L-2,12864J-1
オプションC:Shenzhen Jinghua Dishage Co Ltd。 JM12864。
オプションD:Wintek-カスケードWD-G1906G、Wintek - Gen / WD-G1906G / KS0108B、Wintek / WD-G1906G / S6B0108A、TECDIS / Y19061 / HD61202、Varitronix / MGLS19264 / HD61202

リストは完了していません、それらがたくさんあります。 最も一般的で、私の意見では便利なWG12864B3 v2.0。 ディスプレイはシリアルポートまたはパラレルポートのArduinoに接続できます。 Arduino UNOと一緒に使用する場合は、シリアルポートを介した接続を選択することをお勧めします。次に、パラレルポートを介して接続されている場合、少なくとも13行の代わりに3行のマイクロコントローラ出力しか必要としません。 それはすべてが非常に単純なものです。 もう1つのニュアンスがあります、あなたは(コントラストを調整するための)内蔵ポテンショメータを持つ、ディスプレイに2つのオプションを見つけることができます。 私は選びました、そして私はあなたにあなたを作るようにあなたに組み込まれていることを助言します。


これにより、はんだ付けの部品数と時間が短縮されます。 強調表示のために100オームの顔値を持つ電流制限抵抗器を配置する価値があります。 直接5ボルトを接続すると、バックライトを燃焼する危険があります。
WG12864B - Arduino Uno.
1(GND) - GND.
2(VCC) - + 5V
4(RS) - 10
5(R / W) - 11
6(E) - 13
15(PSB) - GND.
19(BLA) - 抵抗器 - + 5V
20(BLK) - GND.

最も便利なすべてこれはすべてスクリーンの後ろを集めて、Arduino Unoに接続する5本のワイヤを出力します。 最後に、それはこのようなものを判明してください。


それでも並列接続を選択した人のために接続テーブルを与えます。

オプションBの画面のスキーム:



複数のセンサーを1つの通信に含めることができます。 私たちの時計の場合、1つは十分です。 コンタクト「DQ」DS18B20から「ピン5」のArduino Unoに電線を接続します。

ボタン付きボードの準備。
時計の時間と日付を設定するには、3つのボタンを使用します。 便宜上、回路基板の3つのボタンをはんだ付けしてワイヤを表示します。


次のように接続します.3つのボタンすべての共通線は "GND" Arduinoに接続します。 最初のボタンは、時間設定モードを入力して時間と日付を切り替え、「ピン2」に接続します。 第2、倍率ボタン - 「ピン3」、および3番目の値縮小ボタン「ピン4」へ。

まとめてすべての組み立て。
避けるために 短絡、画面を描くべきです。 円では、テープで巻き付けられ、両面テープの取り付けの後ろに、サイズが刻まれて、絶縁材料からのバー。 緻密な段ボールまたは薄いプラスチックが適しています。 私は紙のためにタブレットからプラスチックを利用しました。 次のことがわかりました。


泡底面の接着剤二周辺テープの端部のスクリーンの前面、好ましくは黒い。


画面をArduinoに接続します。


バッテリーコンパートメントから、「VIN」Arduino、マイナスから "GND"に接続してください。 Arduinoの後ろからそれを置きます。 ケースに取り付ける前に、温度センサーとボードをボタンで接続することを忘れないでください。


準備と充填スケッチ。
温度センサーには、OneWire Libraryが必要です。

画面への出力はU8GLIBライブラリを介して実行されます。

スケッチを編集して記入するには、これら2つのライブラリをインストールする必要があります。 これは2つの方法で行うことができます。 インストールされているフォルダ内のこのアーカイブを解凍して、開梱されていないファイルをフォルダ内のライブラリフォルダに配置するだけです。 Arduino IDE。 またはプログラミング環境で直接ライブラリを確立するための2番目のオプション。 ダウンロードされたアーカイブを開梱することなく、Arduino IDEで、[Skatch]メニューを選択します - ライブラリを接続します。 ドロップダウンリストの最上位で、Add.IP Libraryを選択します。 表示されるダイアログボックスで、追加するライブラリを選択します。 スケッチメニューをもう一度開きます - ライブラリを接続します。 ドロップダウンリストの一番下に見なければなりません 新しい図書館。 これで、ライブラリはプログラムで使用できます。 alduino IDEをすべて再起動することを忘れないでください。

温度センサーは1つのワイヤプロトコルで動作し、各デバイスに固有のアドレスを持ちます - 64ビットコード。 このコードを探すたびに不適切なことです。 したがって、最初にセンサーをArduinoに接続し、ファイルメニューにあるスケッチを注ぐ必要があります - 例 - Dallasの温度 - OneWireSearch。 次に、ツール - ポートモニタを実行します。 Arduinoは私達のセンサーを見つけ、そのアドレスと現在の温度測定値を書き込みます。 私たちのセンサーのアドレスをコピーまたは単に書き込むだけです。 Sketch Arduino_WG12864B_TERMを開くと、文字列を探しています。

Byte AddR \u003d(0x28、0xFF、0xDD、0x14,0xB4,0x16,0x5,0x97); // My Sensorのアドレス

センサーのアドレスを置き換えて、カーリーブラケットの間にセンサーのアドレスを記録してください。

ストリーム:

//u8g.setprintpos(44,64); U8G.Print(SEK); //ストロークの正当性を制御するために秒数を撤回する

碑文「データ」の隣に秒を出力するのに役立ちます。 これは時間ストロークを正確に設定するために必要です。
時計が急いでいるか遅れている場合は、行で変更する必要があります。

if(micros() - prevmicros\u003e 494000)(//調整のために別のものに変更すると50,000

私は時計がかなり正確に進む番号を表しました。 あなたの時計が後ろに遅れている場合、この数を増やすために急増するならば。 ストロークの正確さを判断し、秒の終了を必要とします。 正確な校正後、秒をコメントして画面から削除することができます。

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

このモジュールでは、再プログラミングや電源を切っても、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秒間待ってバッテリーを取り外します。 その結果、チップはリアルタイムクロックで再起動します。 その後、以下のコードを挿入します(コードはArduino IDEの例→RTCLIB→DS1307メニューにアンロードすることもできます)、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ピンが使用されます。

クロックモジュールの操作を開始するには、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カードの情報を記録したり、表示画面上の時間を示したりできます。 この記事では、最も人気のあるモデルを接続するための使用とオプションの典型的なシナリオを調べました。

初心者である最初のプロジェクトの1つはArduinoの料金に基づいていますが、単純な時間の先頭のカウントダウンです。 基本的に、そのような時間はArduino RTCモジュール(リアルタイムクロックまたはリアルタイムクロック)に基づいています。 今日の電子部品市場で利用可能です 異なるモデル RTC、異なる正確さと価格。 一般的なモデルの中には、DS1302、DS1307、DS3231と呼ぶことができます。



しかし、Arduinoの時計はなしで行うことができます rTCを使用しています。特にそれがそのようなモジュールを得ることが不可能であるならば。 もちろん、この場合の正確さは小さくなりますので、プロジェクトはトレーニングとして扱われるべきです。


そのような時間の操作の原則は非常に簡単です。 Arduinoでこのクロックをオンにするたびに、それらのための現在の時間値、およびアナログ時計を設定する必要があります。 そのような時間は、長期運転の過程における現在時刻との距離が実質的なものとなるため、再起動およびさらなる構成を伴わずに、それらの活動の長い活動で彼らの日常生活で使用しないことが確かにより良いことである。


これらのクロックは、ここに多くのコンポーネントがないため、従来のバッチで収集できます。 ここでの主な所有者はここでArduino Unoボードになります。 時間を表示するには、16×2のLCDディスプレイを取ります。 時間設定を変更するには、2つのボタンを接続します(時間と分)。 ボタンは抵抗器10 COMを介して樹立に接続されています。 ディスプレイの明るさを変更するには、ポテンショメータが10 COMで必要です。 これらすべてのコンポーネントをArduino Unoボードに接続する回路を以下に示します。



今あなたはArduinoをプログラムする必要があります。 LCD画面画面上の時間を出力することを可能にする簡単なコード(スケッチ)を以下に示します。


#include。 液晶LCD(12,11,5,4,3,2)。 INT H \u003d 12。 int m; int s; intフラグ; int time; const int HS \u003d 8。 const int ms \u003d 9; int state1; int state2; void setup()(lcd.begin(16,2);)void loop()(LCD.SetCursor(0,0); s \u003d s + 1; lcd.print( "time:"); lcd.print(h ); lcd.print( ":"); lcd.print(m); lcd.print( ":"); lcd.print(s); if(フラグ<12)lcd.print("AM"); if(flag==12)lcd.print("PM"); if(flag>12)LCD.PRINT(「PM」); (flag \u003d\u003d 24)フラグ\u003d 0の場合 遅延(1000); lcd.clear(); if(s \u003d\u003d 60)(m \u003d\u003d 60)の場合(m \u003d\u003d 60)(m \u003d 0; h \u003d h + 1; flag \u003d flag + 1;)if(h \u003d\u003d 13) )LCD.SetCursor(0.1); lcd.print(「素敵な一日」)。 //----time // Time //設定------- // state1 \u003d DigitalRead(HS); if(state1 \u003d\u003d 1)(h \u003d h + 1; flag \u003d flag + 1; if(フラグ<12)lcd.print("AM"); if(flag==12)lcd.print("PM"); if(flag>12)LCD.PRINT(「PM」); (flag \u003d\u003d 24)フラグ\u003d 0の場合 (h \u003d\u003d 13)h \u003d 1の場合 state2 \u003d DigitalRead(MS)。 if(state2 \u003d\u003d 1)(s \u003d 0; m \u003d m + 1;))

&NBSP&NBSP&NBSPサイト情報プロジェクトへの興味をありがとうございました。
&NBSP&NBSP&NBSPHIあなたは興味深くそして有用な素材がより頻繁に出てくるほど、広告が少なかった、
&NBSP&NBSP&NBSPSは、その開発のために任意の金額を犠牲にすることによって私たちのプロジェクトを支援します。
トピックを続ける:
インターネット

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