NOBのArduino日記!

NOBのArduino日記!

趣味は車・バイク・自転車・ラジコン・電子工作です。

GPSモジュールの使い方(LS20031) その1 データ取得編

 
GPSモジュール(LS20031)
 
 GPSモジュールを使ってみました
うれしい事にこちらのモジュールは一時期話題となった「みちびき」にもしっかり対応しております
 2019年迄に追加で3機打ち上げられる計画ですので今後GPSの測位精度がcm級に向上する事が期待されているそうです!

1. GPSモジュールLS20031

1.1 GPSとは?
 グローバル・ポジショニング・システム(英語: Global Positioning System, GPS全地球測位システム)とは、アメリカ合衆国によって運用される衛星測位システム(地球上の現在位置を測定するためのシステムのこと)を指す。
1.2 GPS以外にもある衛星測位システム
 人口衛星による測位システムとしてGPS以外にもロシア(グロナス)・EU(ガリレオ)・日本(みちびき)があります。
アメリカ:GPS(Global Positioning System,約30機)
ロシア :GLONASS(GLObal'naya NAvigatsionnayaSputnikovaya Sistema,約24機)
EU    :Galileo(Galileo In-Orbit Validation Element,約18機)
日本  :QZSS(Quasi-Zenith Satellite System、1機(2019年迄に4機を予定)
 
1.3 LS20031の仕様
  このモジュールはMediaTekのMT3339と言うチップが使われており、なんとGPSも含めて上記各国の測位システム全てに対応していると言う優れものです
 GPSモジュールの仕様は表1に示す通りで、3cm角と非常にコンパクト!消費電力も29mAと少くシリアル通信で出力する事からArduinoに直付け出来ます!
表1:GPSモジュールの仕様
項目 内容
サイズ 約30x30x9mm
重量 12.8g
チップ MediaTek MT3329ソリューション
出力頻度 5Hz(最大10Hz)
出力方式 TTLシリアル出力57600bps (または115200bps )
※4800bps ~最大115200bpsまで変更可能
電源 3.3V、29mA
受信 66チャンネルGPS
特徴 低信号レベルでの高速TTFF
SBAS ( WAAS 、 EGNOS 、 MSAS )の可能
特徴 マイクロバッテリーを内蔵しており、急速な衛星捕捉のための
システムデータを保存します
特徴 GPSからの電波はキャッチするとアンテナ面にある赤色LED
(左の写真のD2)が点滅します
補足 裏面5つの端子にピンヘッダーをハンダ付けする必要あり
※仕様書:LS20031のSDS
 
1.4 入出力端子
  LS20031 GPSモジュールの入出力端子は図1の通りです。
 電源の「VCC」と「GND×2」に、シリアル入力の「RX」と出力の「TX」と言うシンプルさです!
 
イメージ 3
図1:GPSモジュールLS20031の外観及び端子図

2. 回路図

 
  殆ど何の工夫も無く図1の通りArduinoProMini(3.3V)に直付け出来ちゃいます!
 実際に接続したものが図2の写真です、配線は3本だけと非常に簡単でした
イメージ 1
 
図3:接続!(ArduinoとPCはFTDIBasicでシリアル接続します)

3. プログラム

 図3の様にGPSArduinoProMiniとPCを接続し、下記プログラムArduinoProMiniに書き込むと図4の様にGPSから何やら色々な情報が出力されて来ます!
ArduinoProMiniに書き込む際はGPSモジュールをブレッドボードから抜いておきます。理由としてはArduinoProMiniのシリアルポートがPCともGPSモジュールとも共用の為、抜いておかないと何時まで経っても書き込みは終了しません
//NOBのArduino日記!LS20031TEST(20160803)

void setup() {
  Serial.begin(115200);  // シリアル通信の初期化
  Serial.println("Software Serial Test Start!");  // 開始メッセージの出力
  delay(1000);
}

void loop() {
  if (Serial.available()) {
    Serial.write(Serial.read());
  }
}
イメージ 1
図1:プログラム例
 
 
イメージ 4
図4:シリアルモニター

4. ドはまりポイント

 PCからArduinoのプログラムを修正するためにTX,RX端子は開けておきたいし、GPSArduinoシリアル通信したい!だったらSoftwareSerialで解決!
 さらに5VのArduinoMicroと3.3VのGPSを接続するためにロジックレベル変換モジュールを使えば良いのでは!
(↑全てハマりポイントです)
 良かれと思ってあれこれ難しく配線しようとするとドップリハマりますのでご注意ください!(昨日まで4日程ハマりました)
 シンプルが一番です!
 
4.1 ハマる原因となった前提
○LS20031から出力されるシリアル通信のスピード(ボーレート)は9600bpsである!(←間違いです!実際は57600or115200bps)
ArduinoSoftwareSerialシリアル通信のスピード(ボーレート)115200bpsをサポートしている!(←間違いです!実際はせいぜい38400bps)
4.2 ハマり(1回目)
 ArduinoNano(5V)とGPS(3.3V)を繋ぐためにロジックレベル変換モジュールを間に挟めSoftwareSerial通信しましたが文字化けします。
4.3 ハマり(2回目)
 ArduinoMicro(5V)GPS(3.3V)を繋ぐためにロジックレベル変換モジュールを間に挟めSoftwareSerial通信しましたが文字化けします。
4.4 ハマり(3回目)
 ArduinoProMini(5V)GPS(3.3V)を繋ぐためにロジックレベル変換モジュールを間に挟めSoftwareSerial通信しましたが文字化けします。
4.5 ハマり(4回目)
 ArduinoProMini(3.3V)GPS(3.3V)を直接つなぎSoftwareSerial通信しましたが文字化けします。
4.6 ハマり(5回目)
 ArduinoProMini(3.3V)GPS(3.3V)を直接つなぎSoftwareSerial通信のボーレートを片っ端から試しましたが文字化けします。
4.7 ハマり(6回目)
 ArduinoProMini(3.3V)GPS(3.3V)の間に苦し紛れのコンデンサーをかましSoftwareSerial通信のボーレートを片っ端から試しましたが文字化けします。
4.8 ハマり(7回目)
 ArduinoProMini(3.3V)GPS(3.3V)の間に苦し紛れの抵抗とコンデンサーをかましSoftwareSerial通信のボーレートを片っ端から試しましたが文字化けします。
4.9 ハマり(8回目)
 ArduinoProMini(3.3V)GPS(3.3V)を直接つなぎGPSのボーレートを変更する信号をSoftwareSerial通信で送りますが出力される信号の周波数に変化なし
4.10 ハマり(9回目)
 ArduinoProMini(3.3V)GPS(3.3V)を直接つなぎプログラムを大幅変更してSoftwareSerial通信しましたが文字化けします。(3回プログラムを変更しましたが撃沈!)
4.11 10回目にして成功!
 ArduinoProMini(3.3V)GPS(3.3V)を直接つなぎ、ハードウェアSerial通信に回路を変更しボーレートを片っ端から試した所115200bpsで無事図4の表示となりました
 

5. まとめ

 初めは原因不明のドハマリに合い文字化けしか出力されませんでしたが、出来てみればGPSはとっても簡単に使えますね
 次回は図4の意味不明な文字の羅列について解説いたします!
 
イメージ 1 イメージ 3
励みになりますのでよければクリック下さい(^o^)/

↩【GPSモジュールの使い方】目次に戻る