このArduinoベースのリアルタイムクロックは、I2Cプロトコルで動作するRTC ICDS1307を使用してリアルタイムで表示するデジタル時計です。リアルタイムクロックとは、停電後も動作することを意味します。電源が再接続されると、オフ状態であった時間と期間に関係なく、リアルタイムで表示されます。このArduino目覚まし時計プロジェクトでは、16x2 LCDモジュールを使用して、時刻を「時、分、秒、日付、月、年」の形式で表示しました。アラームオプションも追加され、アラーム時間を設定できます。アラーム時刻がarduinoの内部EEPROMに保存されると、リセットまたは停電後も保存されたままになります。リアルタイムクロックは、コンピュータ、住宅、オフィス、電子機器で一般的に使用されており、リアルタイムで最新の状態に保つことができます。
I2Cプロトコルは、2本のワイヤーを使用して2つ以上のデバイスを1つのシステムに接続する方法であるため、このプロトコルは2線式プロトコルとも呼ばれます。127個のデバイスを単一のデバイスまたはプロセッサに通信するために使用できます。ほとんどのI2Cデバイスは100Khzの周波数で動作します。
マスターからスレーブへのデータ書き込み手順(スレーブ受信モード)
- START条件をスレーブに送信します。
- スレーブアドレスをスレーブに送信します。
- 書き込みビット(0)をスレーブに送信します。
- スレーブからACKビットを受信しました
- ワードアドレスをスレーブに送信します。
- スレーブからACKビットを受信しました
- スレーブにデータを送信します。
- スレーブからACKビットを受信しました。
- そして最後にSTOP条件をスレーブに送信します。
スレーブからマスターへのデータ読み取りの手順(スレーブ送信モード)
- START条件をスレーブに送信します。
- スレーブアドレスをスレーブに送信します。
- 読み取りビット(1)をスレーブに送信します。
- スレーブからACKビットを受信しました
- スレーブからデータを受信しました
- スレーブからACKビットを受信しました。
- STOP条件をスレーブに送信します。
このRTCDS1307 ICベースの デジタル時計を構築するために、 ここではArduino Pro Miniを使用しましたが、ArduinoUnoやArduinoNano などの他のArduinoモデルを使用することもできます。ArduinoボードDS1307RTC ICに加えて、16x2 LCDモジュールを使用して時刻と日付を表示し、水晶発振器、7805電圧レギュレーター、ブザー、およびいくつかのトランジスタと抵抗を使用しました。
回路図と説明
このArduinoベースのデジタル時計回路では、IC DS1307、Arduino Proミニボード、16x2LCDモジュールの3つの主要コンポーネントを使用しました。
ここでは、arduinoはds1307から時間を読み取り、16x2LCDに表示するために使用されます。 DS1307は2行を使用して時間/日付をarduinoに送信します。ブザーはアラーム表示にも使用され、アラームが作動するとビープ音が鳴ります。このリアルタイムクロックの動作を理解するために、ブロック図を以下に示します。
回路図からわかるように、DS1307チップピンSDAとSCLは、データラインとクロックラインでデフォルト値をHIGHに保持するプルアップ抵抗を使用してarduinoピンSDAとSCLに接続されています。 32.768KHzの水晶発振器は正確に1秒の遅延を生成するためにDS1307チップに接続され、3ボルトのバッテリーもDS1307のピン3 rd(BAT)に接続され、停電後も動作し続けます。 16x2LCDは4ビットモードでarduinoに接続されています。制御ピンRS、RW、Enはarduinoピン2、GND、3に直接接続されています。データピンD0-D7はarduinoの4、5、6、7に接続されています。ブザーは、ベースに1kの抵抗を備えたNPNBC547トランジスタを介してarduinoのピン番号13に接続されています。
3つのボタン、つまりset、INC、Nextは、アクティブローモードでarduinoのピン12、11、10にアラームを設定するために使用されます。セットを押すと、アラーム設定モードがアクティブになり、INCボタンを使用してアラームを設定する必要があり、次へボタンを使用して桁に移動します。アラーム付きのこのリアルタイムクロックの完全なブレッドボードセットアップを下の画像に示します。また、AVRマイクロコントローラーを使用したデジタル目覚まし時計の詳細なチュートリアルを確認することもできます。
プログラムの説明
このリアルタイムクロック用にプログラムするために、DS1307から時刻/日付を抽出し、LCDに表示するためのいくつかのライブラリを使用しました。これらを以下に示します。
また、RTC、LCD、入出力の初期化はセットアップループで行います。
読み取り時間、アラーム設定などの残りは、ボイドループセクションで実行されます。