
今回は、GNSSモジュールを使用してみましたので、解説していきます。
GNSSモジュールを使用するケースは、現在地を把握したり時刻情報を得たりする場合に使用されるケースが多いと思います。
概要
- GNSSモジュールを使用し、位置情報を取得する
- GNSSを受信したら緑色LEDを点灯、未受信は赤色LEDを点灯
- 緯度経度をLCDモジュールに表示させる
用意するもの
- Arduino(Arduino Nano Every)などのマイコン
- GNSSモジュール
- LED (赤×1 緑×1)
- 抵抗 (1KΩ×2、10KΩ×1)
- ダイオード(1N4007×1)
- LCD (16×2行 パラレルインタフェース)
スペック・データシート
GNSSモジュール
使用したGNSSモジュールは秋月電子で購入しました。太陽誘電製のようです。説明書を確認したところ、以下の接続方法をとるようです。
秋月電子より引用
RXとTXはArduinoとテレコに接続し、GNSSのRxとArduinoのTx間にはダイオードと抵抗を接続するような記載がありました。
LCD
使用したLCDはACM1602Kというものです。こちらも秋月電子で購入しましたが、Amazonなどでも安価で販売されているようですので、どちらで購入しても問題なさそうです。
しかし、インタフェースには種類があるようで、私が購入したらものはパラレルでの接続ですが、I2Cなどの製品も多くあります。
この記事ではI2Cは使用していないスケッチとなりますので、ご注意下さい。ピンアサインは以下の通りです。
配線
配線は以下の図のようになります。
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 |
#include <SoftwareSerial.h> #include <TinyGPS++.h> #include <LiquidCrystal.h> SoftwareSerial gpsSerial(2, 3); TinyGPSPlus gps; const int GreenLED = 9; const int RedLED = 10; bool gpsFixed = false; void setup() { Serial.begin(9600); gpsSerial.begin(9600); pinMode(GreenLED, OUTPUT); pinMode(RedLED, OUTPUT); lcd.begin(16, 2); } void loop() { while (gpsSerial.available() > 0) { if (gps.encode(gpsSerial.read())) { lcd.clear(); lcd.setCursor(0, 0); lcd.print("Lat:"); lcd.print(gps.location.lat(), 6); lcd.setCursor(0, 1); lcd.print("Lon:"); lcd.print(gps.location.lng(), 6); if (gps.location.isValid() && gps.satellites.value() > 0) { gpsFixed = true; } else { gpsFixed = false; } } } if (gpsFixed) { digitalWrite(GreenLED, LOW); digitalWrite(RedLED, HIGH); } else { digitalWrite(GreenLED, HIGH); digitalWrite(RedLED, LOW); } } |
・SoftwareSerial
・TinyGPS++
・LiquidCrystal
TinyGPS++を使用し、GPSポートの割り当てを行います。今回はArduinoのD2,D3へ割当てました。
全体的な割り当ては、以下の通りです。
接続先1 | 接続先2 |
D2 (Rx) | GNSS(Tx) |
D3(Tx) | GNSS(Rx)(ダイオード) |
D5 | LCD(DB4) |
D6 | LCD(DB5) |
D7 | LCD(DB6) |
D8 | LCD(DB7) |
D9 | LED(緑)+ |
D10 | LED(赤)+ |
D11 | LCD(E) |
D12 | LCD(RS) |
GND | LCD(R/W) |
可変抵抗器(2) | LCD(VO) |
可変抵抗器(1) | GND |
可変抵抗器(3) | 5V |
5V | LCD(VDD) |
GND | LCD(VSS) |
3V | GNSS(10kΩ抵抗) |
GNSS受信とは無関係ですが、ぱっと見で受信しているか否かを判別するために、LEDを割り入れました。空いていたD9,D10へ割当てています。
lcd.begin(16, 2);
通信設定のセットアップ。今回使用したGNSSは9600がデフォルトでしたので、このように設定しています。使用するGNSSモジュールによって、適切な値を設定します。pinModeでD9,D10を出力モードに設定します。