まごころせいじつ堂

浜町庄金 研究開発  マイコンで遊んでばっかりで

GPS

太陽フレアによるGPSの誤差を見てみたい

 2017年9月6日に大規模な太陽フレアが発生し、その影響で9月8日に電離層が乱れGPSの誤差が発生するらしい。
【電子版】大規模な太陽フレア発生 地球への影響は8日午後-情通機構が発表 (日刊工業新聞)
宇宙天気情報センター(NICT)

 で、実際に発生したようだ。
太陽フレアでGPSの誤差増大 国土地理院が報告(ITmedia)
9月6日に発生した太陽フレアのGPS測位への影響(速報)(国土地理院)
11年ぶり大規模な太陽フレア-GNSS測位に影響(速報)(測位技術振興会)

 この前実験した手持ちのGPSモジュールがあるのでこれで観測できないかと考え終日ログを取ってみた。Windows上でTeraTermのログ機能を利用する。時刻情報はGPSのデータ内にあるのでタイムスタンプは付けない。GPSモジュールからは毎秒データが送られてくる。

 採取したログはDropBox経由でMacOSに持っていきawkで加工。そしてWindowsに戻してExcelでグラフを描かせる。
https://gist.github.com/houmei/b9c9dc6d120f7243fffd5ad400c3d69d

加工したのは$GPSRMCからの緯度経度情報のみで誤差情報などは見ていない。



GPS20180908

 時刻はUTCなので+9時間してください。8日13時〜9日5時までの緯度経度について、基準点からのズレを表示。飛んでいる箇所はGPSから座標が取得できなかった時間。22時くらいに跳ねているのがわかる。

GPS20180909


 比較のため9日の9時〜12時くらいまでのデータをみるとそんなに跳ねていない。

 適当にやってみたけどこんな感じ。次回はより厳密に、部屋から出して衛星を常に捕捉できる状態にしてみるかな。


ArduinoでGPSから時刻データを取得する

 Amazonで安いGPSモジュールがあったのでArduinoに接続して時刻データを読んでみた。

Rasbee GY-NEO6MV2 Flight コントローラー NEO-6M APM 2.5 GPSモジュール Arduino用 1個 [並行輸入品]Rasbee GY-NEO6MV2 Flight コントローラー NEO-6M APM 2.5 GPSモジュール Arduino用 1個 [並行輸入品]

Rasbee
売り上げランキング : 1072653

Amazonで詳しく見る
by G-Tools

 このGPSモジュール、基板上にはGY-GPS6MV2と書いてある。主要なモジュールはblox NEO-6M、コイン電池とEEPROM、GPSアンテナ用コネクタが付いている。電源は3.3V、シリアル9600bpsで通信。衛星からの電波を安定して受信しているときは青色LEDが点滅する。

データシート:
NEO-6 u-blox 6 GPS Modules(PDF)
Hardware Inegration Manual(PDF)
u-blox 6 Receiver Description Including Protocol Specification(PDF)

 NEO-6Mはシリアル接続の他にUSBでパソコンに直結できるらしいのだがこのモジュールにはそれらしき引き出しパターンなどはない。時刻取得程度だと特に設定もなく、モジュールのRXとマイコンのTXは接続しなくてもよさそう。

2017GPS1


作例:
GY-GPS6MV2 – NEO6MV2 (Neo 6M) GPS Module with Arduino / USB TTL
(WEBSITE AND BLOG OF AYOMA WIJETHUNGA)
GY-GPS6MV2をArduinoでテスト(woosan900rrの日記)

 マイコンはArduino Leonardo互換のSeeeduino Liteを使用した。5V/3.3Vの切り替えができて便利。モジュールとの接続は電源を3.3V、GND、モジュールのTXとArduinoのRX(D0)を接続する。

 さて、GPSからのデータはNMEAフォーマットというカンマで区切られたテキストデータで取得できる。
NMEA 0183 フォーマット
このうち、GGAメッセージ(第1フィールドが$GPGGA)の行の第2フィールドが時刻データ(UTC)である。第14フィールドは補正時間らしいのだが今回は無視した。チエックサムも無視している。

スケッチはこちら:
https://gist.github.com/houmei/8fbc1e223611258204b071745722b071


 ちょっとがんばってSerial.readStringUntil('\n')を使ってみた。一文字ずつ受信して処理するのは大変なのでStringクラスで全部やった。ついでに今後のためにString.toInt()で整数に変換して時刻もJSTに補正した。
こちらが参考になった:【prog】Arduino・シリアルで文字列受信するには(ゆうがたの特にコレと言って)

 今後は座標やその他の情報が取得できるようカンマ区切りでデータを読み取るようにしたい。以下はそのためのメモ。
文字列を区切り文字で分割するsplit()関数 for Arduino(山形大学工学部ロボタスティクス)
Arduinoにつないだセンサからの値をパソコンで記録する(6)(Ukkari blog)


Seeeduino LiteSeeeduino Lite

Seeed Studio
売り上げランキング :

Amazonで詳しく見る
by G-Tools

GPSモジュールGM318Bの確認

 aitendoでGPSモジュールGM318Bを購入。ちょっと動作確認。
 このモジュールは4800bpsで受信したデータをシリアルから送り出す。フォーマットについてはよく知らないのでこれからやる予定。今回はハードウェアの接続のみ。Groveのコネクタに合わせてシリアル通信させればよいだろう。このモジュールは3.3V動作なのでCrowduinoを3.3V設定にしSoftwareSerialを使おう。

 Grove用コネクタにこんな感じで工作した。
2014GPS1

 配線はこんな感じ。Grove用のケーブルを中央から半分にカットする。黄=TX,白=RX,赤=Vcc,黒=GNDに接続。PWR_CTRLはメッキ線でGNDに接続。

2014GPS2

 これをGroveシールドのD10/D11コネクタに接続。スケッチは以下のとおり。(SoftwareSerialExampleをちょっと変えただけ)
https://gist.github.com/houmei/5020ac8527de0fa9c26f

2014GPS3


 今気付いたがこっちのほうが値段も変わらず楽だったか?……GROVE GPS 

記事検索
プロフィール

hardyboy

カテゴリ別アーカイブ
月別アーカイブ
QRコード
QRコード
  • ライブドアブログ