はじめに
車ではAndroid Autoでスマホのナビアプリを使っているのですが、ナビアプリって高度を表示してくれないんですよね。単体のカーナビはもう何年も使っていないので分からないけれど。
林道とかよく走るので「やっぱり高度計が欲しい!」ということで、GPSで遊び始めました。
使ったもの
- Arduino nano every
- TXS0108E 双方向ロジックレベル変換モジュール
- 秋月電子 GNSS(GPS,GLONASS,QZSS) 1PPS出力 みちびき2機対応 アンテナ外付タイプ
- 秋月電子 GPS/GLONASS アクティブアンテナ LNA内蔵
- 秋月電子 SMA-J⇔IPEX(IPX/U.FL)変換ケーブル(120mm)
ロジックレベル変換モジュールは8chの安いものです。8chも要らないのだけど、手元にあったのがこれだけだったので。
GPSモジュールは安い中国製も考えたのだけど、いろいろレビューを見ていると怪しいものもあったので、信頼の秋月電子のものにしました。
配線図
ソフトウェアシリアルを使うので、IO2とIO3に接続。秋月のGPSモジュールがVDD5Vで信号線が3.3Vとなっているのでレベル変換モジュールを間に入れています。面倒だなあ。どっちかの電圧に合わせてくれればいいのにね。上の電源ラインが5V、下の電源ラインが3.3V。OEピンは10kΩ抵抗で3.3Vに接続。
そうそう、GPSモジュールは本当は5ピンありますが、VDD,GND,TX0,RX0のみ使っています。
プログラム
#include <Arduino.h> #include <SoftwareSerial.h> SoftwareSerial mySerial(2, 3); // RX, TX void setup() { // Open serial communications and wait for port to open: Serial.begin(9600); while (!Serial) { ; // wait for serial port to connect. Needed for native USB port only } Serial.println("Goodnight moon!"); // set the data rate for the SoftwareSerial port mySerial.begin(9600); mySerial.println("Hello, world?"); } void loop() { // run over and over if (mySerial.available()) { Serial.write(mySerial.read()); } if (Serial.available()) { mySerial.write(Serial.read()); } }
これでシリアルモニタにGPSモジュールからのデータが表示されます。アンテナをつないで10~15分くらい待つと、データが流れてきます。窓際にアンテナを置いただけですが、わりあい早くデータが入ってきました。
※位置情報が分からないようにぼかしてます
バックアップ電池(CR2032)をつけておけば、前回の情報を保持しているらしく、2回目からは1分ほどで受信できるようです。
とりあえず動作OKを確認できたので、次回はGPSのライブラリを用いて液晶表示する予定です。