ArduinoTemp。 3.2ディスプレイを備えたモニターとリアルタイムクロック
コンポーネントと消耗品
> |
| × | 1 |
アプリとオンラインサービス
> |
|
このプロジェクトについて
はじめに <図>
親愛なる友人は別のチュートリアルへようこそ! educ8s.tvのニックです。今日はこのリアルタイムクロックと温度モニターの開発方法を見ていきます。始めましょう!
数週間前、私はこの3.2インチカラーTFTディスプレイをArduinoMegaとDueの両方でArduino用にテストしました。表示は正常に機能し、それを使用して簡単なプロジェクトを作成しました。温度モニターとリアルタイムクロックです。上部に表示されているように、現在の日付と時刻、現在の温度が表示され、下部に、Arduinoが測定した最低温度と最高温度が記録されています。また、シンプルな形だけで基本的なユーザーインターフェイスをデザインしようとしました。ご覧のとおり、すべてが正常に機能しており、構築するのは非常に簡単で便利なプロジェクトです。方法を見てみましょう!
ステップ1:すべての部品を入手する
このプロジェクトを構築するために必要な部品は次のとおりです。
- Arduino Due
- 3.2インチカラーTFTディスプレイ
- DS3231RTCモジュール
- 男性ヘッダー
- ワイヤー
プロジェクトの費用は約24ドルです。 Arduino Dueには約14ドル、ディスプレイには8ドル、RTCモジュールには約2ドルが必要です。
ステップ2:DS3231リアルタイムクロックモジュール <図>
DS3231リアルタイムクロックモジュールは、その名前が示すようにリアルタイムクロックです。バッテリーを使用すると、消費電力が最小限に抑えられるため、何年も時間を保つことができます。
DS3231は、温度補償水晶発振器(TCXO)と水晶を統合した、低コストで非常に正確なI2Cリアルタイムクロック(RTC)です。デバイスにはバッテリー入力が組み込まれており、デバイスへの主電源が遮断されたときに正確な計時を維持します。水晶共振器の統合により、デバイスの長期的な精度が向上するだけでなく、製造ラインでの部品点数が削減されます。
RTCは、秒、分、時間、日、日付、月、および年の情報を保持します。うるう年の修正を含め、31日未満の月の月末の日付は自動的に調整されます。時計は、AM / PMインジケーター付きの24時間形式または12時間形式で動作します。 2つのプログラム可能な時刻アラームとプログラム可能な方形波出力が提供されます。アドレスとデータは、I2C双方向バスを介してシリアルに転送されます。
モジュールのコストは非常に低いです。バッテリー込みで約2ドル!
ここで入手してください。
時間を保ち、温度を読み取るために使用します!
ステップ3:3.2 "カラーTFTディスプレイ(HX8357CまたはHX8357B) <図>
私はいつもArduinoプロジェクトのために大きなディスプレイを持ちたいと思っていました。それで、数週間前、価格がとても魅力的だったので、ArduinoMegaとArduinoDueのためにこの3.2インチカラーTFTディスプレイを購入することにしました! 3.2インチカラーTFTディスプレイの場合は10ドル未満。その価格で、あなたは間違って行くことはできません。
ここで入手してください。
ディスプレイの解像度は480x320ピクセルで、背面にSDカードアダプターがあります。これまでSDカード機能を使用していません。将来的に使ってみます。注意深く見ると、ディスプレイも3.3Vレギュレーターを使用しているため、5Vおよび3.3Vロジックレベルで正常に動作することがわかります。
ディスプレイには2つのバリエーションがあります。 1つはHX8357Cコントローラーを使用し、もう1つはHX8357Bコントローラーを使用します。幸い、両方に同じライブラリを使用できます。
DISPLAYライブラリ。
ライブラリをダウンロードした後、User_Setup.hファイルのコメント行13を開き、ディスプレイが私のようなHX8357Cドライバーを使用している場合は、コメント行14を解除する必要があります。
ステップ4:パーツを接続する <図> <図> <図> <図>
このプロジェクトをビルドするためにArduinoを使用しますが、少し安価ですが遅いArduinoMegaを使用することもできます。 ArduinoDueはArduinoMegaよりもはるかに高速で、多くのメモリを備えているため、このプロジェクトではArduinoDueを好みます。
まず、すべてのパーツを接続する必要があります。 RTCモジュールをArduinoDUEに接続するために、これらのオスヘッダーを使用します。
4つのヘッダーピンが必要です。電源用に2つ、I2Cインターフェース用に2つ。これらをこのように曲げ、1つをArduino Dueボードの3.3Vピンに接続し、もう1つをGNDに接続し、他の2つをボードのSDAピンとSCLピンに接続します。いくつかのメス線を使用して、モジュールをボードに接続します。それでおしまい。
これで、ディスプレイをボードに取り付けることができます。これらの2つのピンをArduinoボードに接続する必要がないので、フローティングのままにしておきます。
これで、プロジェクトをパワーアップする準備が整いました。ご覧のとおり、正常に動作します。とても簡単です!それでは、コンピューターに移動して、プロジェクトのソフトウェア側を確認しましょう。
ステップ5:プロジェクトのコード <図>
これで、コードを確認する準備が整いました。このプロジェクトでは2つのライブラリを使用しています:
- ライブラリの表示
- DS3231ライブラリ
それらをインストールする必要があります。そうすれば、プロジェクトは問題なくコンパイルされます!
最初に行う必要があるのは、リアルタイムクロックモジュールがまだ設定されていない場合は、時刻をリアルタイムクロックモジュールに設定することです。これを行うには、voidsetRTCTime関数で現在の日付と時刻を入力します。
void setRTCTime(){DateTime dt(2016、4、4、13、56、30、1); //年、月、日、時、分、秒、曜日rtc.setDateTime(dt); }
セットアップ関数で関数の呼び出しのコメントを解除します:
void setup(){rtc.begin(); tft.init(); tft.setRotation(1); tft.fillScreen(0xC618); delay(100); printUI(); setRTCTime();}
そして、プログラムをArduinoにアップロードします。これで時間が設定されました。ただし、setRTCTime関数の呼び出しに再度コメントを付けて、プログラムをArduinoにもう一度アップロードする必要があります。
void setup(){rtc.begin(); tft.init(); tft.setRotation(1); tft.fillScreen(0xC618); delay(100); printUI(); // setRTCTime();}
ご覧のとおり、プロジェクトのコードは単純です。ユーザーインターフェイスを印刷して、日付と時刻を表示するだけです。
void loop(){float Temperature =rtc.getTemperature(); getAndPrintTime(); printTemperature(温度); if(temperature> maxTemperature){maxTemperature =温度; updateMaxTemperature(); } if(temperature
このステップに添付されているコードを見つけることができます。コードの最新バージョンは、プロジェクトのWebサイト(http://educ8s.tv/arduino-real-time-clock-32/
)からダウンロードできます。 DueRTC.ino
ステップ6:最終的な考え <図>
数行のコードと非常に低コストでわかるように、非常に便利なプロジェクトを構築できます。このプロジェクトは、より多くのセンサー、グラフ、wifi機能を備えた高度な気象観測所になるため、私はこのプロジェクトにさらに取り組むつもりです。
Arduino Dueは非常に高速で大量のメモリを搭載しているため、Arduinoボードを使用するのに理想的だと思います。このプロジェクトについてどう思いますか?それがどのように進化するのを見たいですか?
以下のコメントセクションにコメントやアイデアを投稿してください。
コード
- コードスニペット#2
- コードスニペット#3
- コードスニペット#4
コードスニペット#2 プレーンテキスト
void setup(){rtc.begin(); tft.init(); tft.setRotation(1); tft.fillScreen(0xC618); delay(100); printUI(); setRTCTime();}
コードスニペット#3 プレーンテキスト
void setup(){rtc.begin(); tft.init(); tft.setRotation(1); tft.fillScreen(0xC618); delay(100); printUI(); // setRTCTime();}
コードスニペット#4 プレーンテキスト
void loop(){float Temperature =rtc.getTemperature(); getAndPrintTime(); printTemperature(温度); if(temperature> maxTemperature){maxTemperature =温度; updateMaxTemperature(); } if(temperatureGithub
https://github.com/Bodmer/TFT_HX8357_Duehttps://github.com/Bodmer/TFT_HX8357_DueGithub
https://github.com/SodaqMoja/Sodaq_DS3231https://github.com/SodaqMoja/Sodaq_DS3231
製造プロセス