GPS受信モジュールで現在地を受信してみる(GY-NEO6MV2)
本日はGPS受信モジュールを使って現在地をマイコンで取得してみたいと思います‼
ちょっと難しい内容かもしれませんが、不可能は無いので頑張りましょう‼
①「使う部品」
・GPS受信モジュール(GY-NEO6MV2)
電子工作ステーション 747円(送料無料)
※pinを接続するためにはんだ付けが必要となります。
はんだ付けができない場合はこちらをご使用ください⇩
・Arduino UNO
電子工作ステーション 1110円(送料無料)(互換ボード)
※UNO以外、Nanoとかでも大丈夫です。
・ジャンパーワイヤー(オス・メス)(4本)
電子工作ステーション 1セット(10本)100円+送料(500円以上で無料)
②「回路図」
GY-NEO6MV2 | Arduino |
VCC | 5V |
GND | GND |
TX | 2 |
RX | 3 |
③「開発環境」
・Arduino IDEというソフトを使ってプログラムをArduinoに書き込みます!
※Arduino IDE導入済みの方はスキップしてOKです。
Arduino IDEをダウンロードされていない方は、こちら↓の①「Arudino IDEをダウンロード」参考に↓
Arduino IDEでESP-WROOM-02(ESP8266)とESP-WROOM-32を使えるようにする!(Windows10)
次に、GPSセンサーで取得した値を見やすく表示するためのライブラリーを入れます‼
TinyGPS++というライブラリーで、これを入れることで、GPSデバイスから位置情報などを見やすく表示してくれます‼
Arduino IDEを開きツール→ライブラリーの管理→検索するところに「TinyGPS」と入力→「TinyGPSPlus by Mikal Hart バージョン」
というのが出てくるかと思いますので、それをインストール、これで準備完了です‼
④「プログラミング」
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 |
#include <TinyGPS++.h> #include <SoftwareSerial.h> // シリアル通信に使用するpinを指定。 int RXPin = 2; int TXPin = 3; int GPSBaud = 9600; // TinyGPS++オブジェクトを作成する TinyGPSPlus gps; // 「gpsSerial」というソフトウェアシリアルポートを作成します SoftwareSerial gpsSerial(RXPin, TXPin); void setup() { // シリアルポートを9600で起動します Serial.begin(9600); gpsSerial.begin(GPSBaud); } void loop() { while (gpsSerial.available() > 0) if (gps.encode(gpsSerial.read())) displayInfo(); // 5000ミリ秒が経過し、文字が入力されていない場合「No GPS detected」とエラーを表示します。 if (millis() > 5000 && gps.charsProcessed() < 10) { Serial.println("No GPS detected"); while(true); } } void displayInfo() { if (gps.location.isValid()) { Serial.print("Latitude: "); Serial.println(gps.location.lat(), 6); Serial.print("Longitude: "); Serial.println(gps.location.lng(), 6); Serial.print("Altitude: "); Serial.println(gps.altitude.meters()); } else { Serial.println("Location: Not Available"); } Serial.print("Date: "); if (gps.date.isValid()) { Serial.print(gps.date.month()); Serial.print("/"); Serial.print(gps.date.day()); Serial.print("/"); Serial.println(gps.date.year()); } else { Serial.println("Not Available"); } Serial.print("Time: "); if (gps.time.isValid()) { if (gps.time.hour() < 10) Serial.print(F("0")); Serial.print(gps.time.hour()); Serial.print(":"); if (gps.time.minute() < 10) Serial.print(F("0")); Serial.print(gps.time.minute()); Serial.print(":"); if (gps.time.second() < 10) Serial.print(F("0")); Serial.print(gps.time.second()); Serial.print("."); if (gps.time.centisecond() < 10) Serial.print(F("0")); Serial.println(gps.time.centisecond()); } else { Serial.println("Not Available"); } Serial.println(); Serial.println(); delay(1000); } |
ビルド後、シリアルモニターを開き、こんな表示がでたら配線などが違うので
ご確認ください。
⑤「結果」
室内だとなかなか取得されず、窓際に置いたら10分ぐらいで取得され始めました‼
しかし、窓際でも精度はイマイチ、外に出してみたところ結構正確に測定できるようになりました。
緯度、経度、高度、共にだいたいあってますね‼
自分でGPSを測定してみるのも中々楽しいです。
是非皆さんもお暇があればやってみてください^^
参考サイト⇩
Interface ublox NEO-6M GPS Module with Arduino
※「上手く動作しない原因一覧」
①配線が違う
よくあるのが配線の間違えで、TXとRXを逆につけている、もしくはケーブル不良なんてことが良くあります。
その場合はシリアルモニターに下記の様に表示されます。
②電波が拾えていない
このっ場合は「No GPS …」とは表示されず、
LatiやDateやTimeといった文字が表示されます。
30分程待っても数値が表示されなければ場所を変えてみましょう。
③チップが雑に付けられていて接触不良を起こしている
Amazonなど安いところで買うと、チップの取り付け位置が半コンマズレている場合があります。
それが原因で接触不良を起こし、動作不良の原因に繋がっています。
この場合は購入元に初期不良対応してもらいましょう。
④なぜか動作しない番号がある?
これがは電子工作ステーションさんから聞いた情報なのですが、下記の画像の番号は「25」と書いてあるモデルは、
何故か動作しないとのことです。(原因不明)
この場合も購入元に初期不良対応してもらいましょう。
(電子工作ステーションでは2024年5月15日以降からは「25」の物は売ってないそうです。
万が一それよりも前に購入した物で、「25」モデルがあった場合は期限なく新品交換の対応をしてくれるそうなので、その場合はお問い合わせしてみましょう!)
以上、ご閲覧ありがとうございました‼