地球の周りには、あらゆる場所の正確な位置を提供するために使用される多くのGPS衛星があります。位置座標(緯度と経度)に加えて、時間、日付、高度、方向追跡角度などの他のデータも提供します。Arduinoを使用して衛星からこのGPSデータを読み取ることをすでに学びました。そこで、GPS衛星からの「時刻と日付」のデータを使用してGPS時計を作成します。GPS更新時計は非常に正確で、ミリ秒の精度でリアルタイムデータを提供します。
コンポーネント:
- Arduino Uno
- GPSモジュール
- 16x2 LCD
- 接続線
- 電源
作業説明:
GPSモジュールはNMEA形式でデータを送信します。下のスクリーンショットのGPSデータの出力を参照してください。NMEA形式は複数の文で構成されており、日付と時刻を抽出するには1つの文が必要です。この文は$ GPRMCから始まり、座標、時間、その他の有用な情報が含まれています。この$ GPRMCは、推奨される最小の特定のGPS /トランジットデータを参照しており、この文字列の長さは約70文字です。以前、車両追跡システムで$ GPGGA文字列を抽出して、緯度と経度の座標を見つけました。GPS出力は次のとおりです。
また、$ GPRMC文字列には、主に速度、時刻、日付、位置が含まれています
$ GPRMC、123519.000、A、7791.0381、N、06727.4434、E、022.4,084.4,230394,003.1、W * 6 A $ GPRMC、HHMMSS.SSS、A、latitude、N、longitude、E、speed、angle、date、 MV、W、CMD
識別子 |
説明 |
RMC |
推奨される最小文C |
HHMMSS.SSS |
時間、分、秒、ミリ秒の形式の時間。 |
A |
ステータス// A =アクティブおよびV =ボイド |
緯度 |
緯度49度 16.45分 北 |
N |
方向N =北、S =南 |
経度 |
経度(座標) |
E |
方向E =東、W =西 |
速度 |
ノット単位の速度 |
角度 |
度単位のトラッキング角度 |
日付 |
UTCでの日付 |
MV |
磁気変動 |
W |
変化の方向E / W |
CMD(* 6A) |
チェックサムデータ |
文字列内のコンマを数えることにより、$ GPRMC文字列から時刻と日付を抽出できます。Arduinoとプログラミングの助けを借りて、$ GPRMC文字列を見つけて配列に格納すると、時間(24時間形式)は1つのコンマの後に、日付は9つのコンマの後に見つけることができます。時間と日付はさらに文字列に保存されます。
GPS衛星は協定世界時(UTC)で時刻と日付を提供するため、それに応じて変換する必要があります。インドの時刻はUTC / GMTより5時間半進んでいるため、インドの時刻に従って変換するために、UTC時刻に5:30を追加しました。
回路図:
ArduinoGPSクロックの回路接続は簡単です。Arduinoはプロセス全体を制御するために使用され、GPSモジュールを介して衛星からGPSデータを受信し、$ GPRMC文字列から日付と時刻を抽出して、LCDに表示します。
16x2 LCDのデータピンD4、D5、D6、D7はピン番号に接続されています。Arduinoの5、4、3、2とLCDのコマンドピンRSとENは、それぞれArduinoのピン7と6に接続されています。GPS受信機モジュールのTxピンはArduinoのRxピン10に接続されています。ArduinoのアースPINとGPSが接続されています。ここでは、9800bpsのボーレートで動作するSKG13BLGPSモジュールを使用しました。Arduinoは、関数 「Serial.begin(9800)」 を使用して、 9800bpsの ボーレートで構成されています 。
プログラミングの説明:
プログラミングのパートでは、最初にライブラリを含め、LCDとソフトウェアのシリアル通信用のピンを定義します。また、データを格納するための配列を使用して変数を定義します。ここでソフトウェアシリアルライブラリを使用することにより、ピン10と11でのシリアル通信を許可し、それぞれRxとTxにしました。デフォルトでは、Arduinoのピン0と1がシリアル通信に使用されますが、SoftwareSerialライブラリを使用することで、Arduinoの他のデジタルピンでのシリアル通信を許可できます。
#include
その後、 セットアップ 機能でシリアル通信とLCDを初期化し、LCDにウェルカムメッセージを表示しました。
次に、受信した文字列から時刻と日付を抽出しました。
while(x
次に、時刻と日付を10進数に変換し、インド標準時に変更します(UTC +5:30)
int UTC_hourDec = UTC_hour.toInt(); int UTC_minutDec = UTC_minut.toInt(); int Second = UTC_second.toInt(); int Date = UTC_date.toInt(); int Month = UTC_month.toInt();…………..。
そして最後に、時間と日付が lcd.print 関数を使用してLCDに表示されました。以下の完全なコードを確認してください。