GPSセンサー、設定変更、情報取得、精度確認してみる

Pocket

arduino sheild 3Dモデル

 Arduino(マイコン)からGPSセンサー(モジュール)使ってみました。使用したのは秋月で売っているGPSモジュール(GYSFDMAXB)です。「みちびき」にも対応してるようです。

 

 とりあえず今回は、GPSセンサーの設定を少し変更して、欲しい情報のみを取得、精度を確認するところまでやってみました。

 

 こういったセンサー類は昔に比べるとずいぶん安くなってきてますが、GPSは私にとってはまだ少し高いですね。

 

とりあえず情報を取得してみる

▼届いたGPSモジュール▼

 半田付け後の写真です。届いた時にはヘッダーピンと、裏にある電池ホルダーは半田していない状態でした。自分で半田付けが必要です。

 

 電池は衛星情報や各種情報をバックアップしておくもので、必要ないなら付けなくてもいいです。ただ、再電源投入時が常にコールドスタートとなるため起動が遅くなるようです。

 

 ▼さっそくArduinoと繋いで使ってみました▼

 ▼繋ぎ方は簡単▼

Arduino 5V <==> GPS 5V
Arduino TX  ==> GPS RX
Arduino RX <==  GPS TX
Arduino GND <==> GPS GND

 で繋ぐだけで良いのですが「UNO 5V」に対して、「GPSモジュール 3.3V仕様」のため、Arduino TX==> GPS RXは直接繋ぐと 壊れてしまう可能性があります。
(秋月の販売ページのマニュアルに繋ぎ方が載ってます)

 

 とりあえずGPSから情報を読み取るだけなら「Arduino TX==> GPS RX」は繋が無くてもO.Kでした。ですので3本のラインだけです。GPSとの接続はソフトウェアシリアルで行ってます。

 

 まずGPSから流されてくる情報をシリアルモニターで表示してみました。

 

▼使用したスケッチはこんな感じ(抜粋)▼

void loop() {
  if (mySerial.available()) {
    Serial.write(mySerial.read());
  }
}

 ループでシリアル通信を垂れ流してるだけです・・。

 

▼GPSから受信した情報▼

 デフォルトでは1秒おきにGPS情報が更新されるようです。

 

 NMEAフォーマットと呼ばれる形式で、「$GP**」などから始まるセンテンスと呼ばれる1行ごとの文字列がカンマ区切り形式で出力されます。それぞれいろいろな情報が載っています。

 

 はじめて知ったのですが、GPSセンサーってこんなに大量な情報が取得できるのですね。ただこれだけの情報をシリアル通信(文字列)で受け取るとたいした処理時間がかかりそうです。

 

 少しスケッチをいじってセンテンス(1行)ごとの取得時間を計測してみました。(挟んで計測してるだけなので大体です・・。)

 

▼センテンスごとの取得時間(9600bps)▼

 Aruduinoでは受信バッファが(確か?)64byteのため、さっきのソースでは一瞬でバッファがいっぱいになってしまいます。ですので、シリアル通信にかかっているだけの処理時間なんですけどね・・・。9600bpsではこれくらいでしょうか。結構な情報量です。文字列なので状況で受信量(受信byte)は変動するでしょうし・・。

 

 私にはいらない情報も多くあるので少しGPSセンサーの設定をいじって情報量を限定してみました。

 

<スポンサーリンク>

GPSセンサーの設定変更

 GPSセンサーの設定を変更するには、PMTKコマンドを送信してあげれば変更できるようです。

 

例えば通信ボーレートを4800bpsに変更する場合は、

$PMTK251,4800*14

 などと、$PMTK***から始まる、書式に乗っ取ったコマンドを送信すれば設定を変更できます。

 

 最後の*以降はチェックサムとなっており、$~*で挟まれている部分を排他論理和(XOR)し、16進数表記したものです。

 

 ここに便利な計算機がありました。

 

 PMTKの細かい書式等はGPSセンサーの仕様書を確認しましょう。

 

 とりあえず、取得するセンテンス情報を自分に必要な情報のみに減らしてみました。

 

"$PMTK314,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0*28\r\n"

 上が出力するセンテンス情報を変更するコマンドです。ここでは$GPGGAと$GPRMCの情報のみを取得する設定です。緯度、経度、捕捉衛星数、移動速度・方向などの情報です。

 

 あと更新頻度(1Hz~10Hz)やボーレートの設定など、その他にもいろいろ設定が変更できるようです。

 

 とりあえず情報量を絞った設定で欲しい情報のみ取得してみました。

▼GPSからの情報▼

 

 経度、緯度、速度など、、欲しい情報のみに受信データを加工して表示してます。今回は表示してませんが、受信している衛星番号も取得できます。

 

 ちなみに「みちびき」初号機が193番できちんと受信してました。

 

 文字列操作が結構めんどいですね。いろいろ工夫が必要そうです。

 

精度を確認してみる

 取得した緯度、経度からGoogleMapで地図表示してみました。

 

▼GoogleMapでの検索画面▼

 自宅のリビング窓際です・・・。家の中の細かい位置まであってます。こんな小さなモジュールですごいです。GoogleMapもすごいですが・・。

 

 時間ができたらドローン(クアッドコプター)の制御プログラムに組み込んでみたいですね。

 

・参考・

 とても分かり易く使い方やGPSについて解説されてます。(プチモンテ)
みちびき対応のGPS受信機(GYSFDMAXB)の使い方 [Arduino]

 

Pocket

<スポンサーリンク>


この投稿へのコメント

コメントはありません。

コメントを残す

メールアドレスが公開されることはありません。

この投稿へのトラックバック

トラックバックはありません。

トラックバック URL