2023年5月17日水曜日

SparkFun GNSS NEO-M9N と SparkFun OpenLog Artemis で GNSS ロガーを作った(ほぼ線をつないだだけやけど…)

 久々の投稿の気がするが,まぁ,気にしないでおこう。

 今回は GNSS ロガーを組み上げた,というお話し。 組み上げたと言っても,Qwiic というシステムのケーブルでつないだだけ,という工作ともなんとも言えない話になっている。 ま,一応,いろいろとあるので備忘録を兼ねて書いておこうと思ったのが今回の投稿。

 まず,GNSS ロガーについてだが,これは GPS ロガーとほぼ同義語として使ってる。 GPS というのはアメリカが開発した衛星測位システムであり,同様の衛星測位システムとして,ヨーロッパの Galileo,ロシアの GLONASS,中国の北斗 (BeiDou) や,日本のみちびき (QZSS) などがあり,その総称として GNSS (Global Navigation Satellite System) が使われているので,ここでは GNSS ロガーと記載している。

 これまでも登山の行動経路の記録のために GPS ユニットや GNSS ユニットと SparkFun 製 OpenLog(シリアル通信上に流れてきたデータを単純に記録し続けるユニット)を組み合わせたお手製の GNSS ロガーを作ってきた。
Gms-g9 を使った GNSS ロガーに挑戦してみた
GNSS ロガー (Gms-g9 使用) の2号機を作る
ランニングエレクトロニクス社製 Gms-g9 基板使用 GNSS ロガー 3号機の製作
など…。

 しかし,それらも徐々にヘタってきた。GNSS ユニットがヘタったというよりは,基板のはんだ付けやら,基板用のミニスイッチなどがヘタってきた感じで,うまくログを記録できないケースも出てきた。そこで新しくなにかできないか?と思っていた時に見つけたのが SparkFun 製 OpenLog Artemis と SparkFun 製の GPS Breakout - NEO-M9N, U.FL (Qwiic) だった(NEO-M9N Breakout board は,Chip Antenna がついたものや,SMA コネクターのものもある)。

 この OpenLog Artemis と NEO-M9N board は Qwiic という接続システムを搭載しており,Qwiic 専用のケーブル(50mm100mm,など)を使えば,はんだ付けなしでコントローラーとセンサー類を接続できる。 そこで,今回はこれを使って GNSS ロガーを作ってみた。

OpenLog Artemis

 OpenLog Artemis は,Artemis Module という ARM 製 Cortex-M4 Processor を持つ Microcontroller の Apollo 3 Blue MCU で構成され,Qwiic で接続されたセンサー類からのデータを Micro SD カードに記録できるモジュールである。Bluetooth 5 も搭載している(今のところ日本の無線基準認証を受けておらず,技適マークが付いていない。そのため Bluetooth を使うと法律違反になるかもしれないので注意が必要)。ボード上の回路は 3.3V で駆動されているため省電力タイプとなっている。電源としては 3.3V 〜 6.5V で動作可能であり,LiPo バッテリー(リチウムポリマーバッテリー)で駆動できるのみならず,LiPo バッテリーの充電もできる仕様となっており,OpenLog Artemis があれば,携帯したり,移動する機器につけた状態で種々のセンサー類のログを取ることができるすぐれものである。USB Type-C コネクターで LiPo バッテリーの充電や,コンピューターとつないで制御も可能となっている。

 また 9軸 (9 DoF = Degree of Freedom) の IMU ユニット (ICM-20948 のチップ) がついている(IMU ユニットなしのものもある)。ICM-20948 は 3軸の加速度センサー,3軸のジャイロセンサー,3軸の磁気方位センサー,さらに温度センサーもついている。そのため模型飛行機などにつけておくと,飛行データを記録することもできる。

 なお,今は SparkFun DataLogger IoT - 9DoF という製品もあるのだが,ちょっと大きいみたい。ただ,コントローラーとして無線 LAN のついた ESP32-WROOM-32E Module を使っているので,日本国内の認証が取れているという安心感はあるが…。

OpenLog Artemis の使い方は OpenLog Artemis Hookup Guide を見れば書いてあるが,かいつまんで書いておくと,
(1) 電源が供給されれば Processor がオンとなり,記録を始める。必要なら「PSWC」端子にスイッチを接続して,電源のオン/オフができる。

(2) micro SD card は FAT32 と exFAT に対応している(Firmware のバージョンによるが)。

(3) Firmware Update は AFU (Artemis Firmware Uploader) を使い,最新版の Firmware の binary file を Artemis にアップロードする。V2.3 以降だと「NoPowerLossProtection」とあるものの方が使いやすいかもしれない。

(4) Artemis モジュールの設定は「Terminal」系ソフトで可能である。Hookup Guide には,Tera Term や Real Term,Cool Term が紹介されているが,Windows の PuTTY や Mac のターミナルソフトでも接続可能である。 いずれの場合も「OpenLog Artemis をオン」にしておかないといけない。具体的には PSWC 端子に SW を付けた場合に,SW がオフだと Artemis は反応しない。

Windows の PuTTY でつなぐ場合は OpenLog Artemis がオンの状態で「Serial」通信を選び,ボーレートを 115200 とし,適当な COM ポートを指定して接続する。COM ポートは,私の経験では COM3 や COM6 が多かった気がする。

Mac の場合は OpenLog Artemis がオンの状態でターミナルソフトを起動し
> la /dev/tty.*| grep usb
として接続した OpenLog Artemis のデバイス番号を取得する。 デバイス番号は
/dev/tty.usbserial-1470
のようなものになる。デバイス番号がわかれば,
> screen /dev/tty.usbserial-1470 115200
として screen コマンドで OpenLog Artemis と接続する。

(5) 接続されると,デバイス情報を表示した後,センサーのログを表示し始める。その時に「何かキーを押す」と「メニュー」に移行する。
(以下のようなメッセージが表示されれば,接続できている)
Artemis OpenLog v2.5
Finding the next available log file.
This could take a long time if the SD card contains many existing log files.
Logging to: dataLog00001.TXT
Finding the next available log file.
This could take a long time if the SD card contains many existing log files.
Logging to: serialLog00000.TXT
SD card online
Data logging online
Serial logging online
IMU online
Identifying Qwiic Muxes...
Identifying Qwiic Devices...
Autodetect complete
GPS-ublox online at address 0x42
gps_Date,gps_Time,gps_Lat,gps_Long,gps_Alt,gps_SIV,gps_FixType,gps_GroundSpeed,gps_Heading,gps_pDOP,output_Hz,
Print GPS Timestamp / not yet implemented
08/02/2020,00:00:01.000,0,0,0,0,0,0,0,9999,2.13,
Print GPS Timestamp / not yet implemented
08/02/2020,00:00:01.300,0,0,0,0,0,0,0,9999,2.56,
.........

ここで「何かのキーを押す」と,以下のようなメニューが現れる。 以下は Firmware バージョンが v2.5 のものである。
Menu: Main Menu
1) Configure Terminal Output            <-- ターミナル出力設定
2) Configure Time Stamp                 <-- 時刻表示設定
3) Configure IMU Logging                <-- IMU (Inertial Measurement Unit) 設定
4) Configure Serial Logging             <-- シリアルログ設定
5) Configure Analog Logging             <-- アナログログ設定
6) Detect / Configure Attached Devices  <-- 接続デバイス設定
7) Configure Power Options              <-- 電源オプション設定
h) Print Sensor Helper Text (and return to logging)
s) SD Card File Transfer
r) Reset all settings to default
q) Quit: Close log files and power down
x) Return to logging

1) ターミナル出力設定メニューは以下の通り
Menu: Configure Terminal Output
1) Log to microSD: Enabled                       <-- Enabled で SD カードがあれば記録される
2) Log to Terminal: Enabled                      <-- ターミナル側にログを吐き出す
3) Set Serial Terminal Baud Rate: 115200 bps     <-- 9600 なら 115200 に変更すると早くなる
4) Set Log Rate in Hz: 1.0                       <-- 10 Hz から 1.0 Hz に変更した
5) Set Log Rate in seconds between readings: 1.0
6) Enable maximum logging: Disabled
7) Output Actual Hertz: Enabled
8) Output Column Titles: Enabled
9) Output Measurement Count: Disabled
10) Open New Log Files After (s): 0 (Never)
11) Frequent log file access timestamps: Disabled
12) Use pin 11 to trigger logging: No
13) Logging is triggered when the signal on pin 11 is: Falling
14) Use TX and RX pins for Terminal: Disabled
15) Use Pin 11 to control fast/slow logging: No
17) Use RTC to control fast/slow logging: No
x) Exit

2) 時刻設定メニューは以下の通り
Menu: Configure Time Stamp
Current date/time: 05/16/2023, 00:37:51.78
1) Log Date: Enabled               <-- 日付の記録
2) Log Time: Enabled               <-- 時刻の記録
3) Set RTC to compiler macro time
4) Manually set RTC date           <-- 最初は日付を手入力した
5) Toggle date style: mm/dd/yyyy   <-- mm/dd/yyyy と dd/mm/yyyy の切替えみたい
6) Manually set RTC time           <-- 最初は時刻を手入力した
7) Toggle time style: 24 hour
8) Synchronize RTC to GPS          <-- GPS (GNSS) ユニットがあれば,GPS で取得した時刻を使う
9) Local offset from UTC: 9.00     <-- 0 から変更 (JST は UTC より「9時間進んでいる」)
10) Log Microseconds: Disabled
x) Exit

3) IMU 設定
Menu: Configure IMU
1) Sensor Logging: Enabled           <-- All センサーの ON/OFF
2) Accelerometer Logging: Enabled    <-- 加速度センサーの ON/OFF
3) Gyro Logging: Enabled             <-- ジャイロセンサーの ON/OFF
4) Magnotometer Logging: Enabled     <-- 磁気センサーの ON/OFF
5) Temperature Logging: Enabled      <-- 温度センサーの ON/OFF (温度のみ ON にしてみた(2022/4/30))
6) Accelerometer Full Scale: +/- 2g  <-- 加速度センサーのフルスケール
7) Accelerometer Digital Low Pass Filter: Disabled  (Bandwidth is 1209 Hz (3dB) 1248 Hz (Nyquist))
9) Gyro Full Scale: +/- 250dps
10) Gyro Digital Low Pass Filter: Disabled  (Bandwidth is 12106 Hz (3dB) 12316 Hz (Nyquist))
12) Digital Motion Processor (DMP): Disabled
x) Exit

4) シリアルログ設定
Menu: Configure Serial Logging
1) Log serial data: Enabled, analog logging on RX/A13 pin disabled
2) Output serial data to TX pin: Disabled
3) zmodem start delay: 20 seconds
4) Set serial baud rate: 9600 bps
5) Add RTC timestamp when token is received: Disabled
6) Timestamp token: 10 (Decimal) = Line Feed
x) Exit

5) アナログログ設定
Menu: Configure Analog Logging
1) Log analog pin 11 (2V Max): Disabled
2) Log analog pin 12 (TX) (2V Max): Disabled
3) Log analog pin 13 (RX) (2V Max): Disabled
4) Log analog pin 32 (2V Max): Disabled
5) Log output type: Calculated Voltage
6) Log VIN (battery) voltage (6V Max): Disabled
x) Exit

6) 接続デバイス設定
Menu: Configure Attached Devices
1) u-blox GPS Receiver (0x42)                   <-- u-blox の GNSS が接続されている時のみでてくる
2) Configure Qwiic Settings                     <-- Qwiic の設定へ
3) Detect Bio Sensor Pulse Oximeter: Disabled   <-- パルスオキシメーターがあれば有効化できる
x) Exit

6-1) uBlox GPS 受信機設定(接続されている時のみ)
Menu: Configure uBlox GPS Receiver
1) Sensor Logging: Enabled
2) Log GPS Date: Enabled
3) Log GPS Time: Enabled
4) Log Longitude/Latitude: Enabled
5) Log Altitude: Enabled
6) Log Altitude Mean Sea Level: Disabled
7) Log Satellites In View: Enabled
8) Log Fix Type: Enabled
9) Log Carrier Solution: Disabled
10) Log Ground Speed: Enabled
11) Log Heading of Motion: Enabled
12) Log Position Dilution of Precision (pDOP): Enabled
13) Log Interval Time Of Week (iTOW): Disabled
14) Set I2C Interface Speed (u-blox modules have pullups built in. Remove *all* I2C pullups to achieve 400kHz): 100000
15) Use autoPVT: No
16) Reset GNSS to factory defaults
x) Exit

6-2) Qwiic 設定
Menu: Configure Qwiic Bus
1) Turn off bus power between readings (>2s): No
2) Set Max Qwiic Bus Speed: 100000 Hz
3) Set minimum Qwiic bus power up delay: 250 ms
4) Qwiic bus pull-ups (internal to the Artemis): 1.5k
x) Exit

7) 電源オプション設定
Menu: Configure Power Options
1) Turn off Qwiic bus power between readings (>2s): No
2) Use pin 32 to Stop Logging: No
3) Power LED During Sleep: Enabled
4) Low Battery Voltage Detection: Disabled
5) Low Battery Threshold (V): 3.40
6) VIN measurement correction factor: 1.470
7) Serial Tx and Rx pins during sleep are: Disabled
x) Exit

GNSS Breakout NEO-M9N


 SparkFun 製の GPS (GNSS) Breakout NEO-M9N は「u-blox 製の GNSS モジュール NEO-M9N チップ」を搭載した GNSS ボードである。NEO-M9N チップは(多くの他の GNSS チップと同様に)外部に GNSS 用のアンテナが必要である。SparkFun 製の NEO-M9N Breakout board は,Antenna 接続用 U.FL コネクタが付いたものGNSS 用の Chip Antenna が付いたものAntenna 接続用 SMA コネクタが付いたもの,の3種類ある。左の写真は左から順に U.FL コネクタタイプ,Chip Antenna タイプ,SMA コネクタタイプのものである。

 U.FL コネクターはあまり馴染みがないかもしれないが,使ってみると意外としっかりつながっている。SMA コネクターは大きくてしっかりしてそうだが,振動を与えるとネジが緩むみたいで,気づくとよく緩んでいて思ったよりも安心感に欠ける。また Chip Antenna タイプは Pulse 製の W3011 という型番の Chip Antenna が付けてある。 また,U.FL コネクタタイプ,SMA コネクタタイプは,アクティブアンテナに対応している。そのためアンテナに電源を供給できるようになっている。 しかしアンテナとして Passive アンテナを使うと,その電源供給が悪さをしてアンテナに過剰に電流が流れてアンテナが発熱してしまう。設定ソフトで電源をオフにできると思うのだが,いまいちどこで設定すればいいのかわからなかった。そこで仕方なく Passive アンテナ用の NEO-M9N ボードでは,アンテナへの電源供給ラインに入れてある「コイル」(回路図上の FB1) を外しておいた。 「コイル FB1」は,U.FL コネクタタイプのボードを上から(部品のある面)見た時に,u-blox のチップと U.FL コネクタの間にある黒い小さなもの,である。

 今回,NEO-M9N ボードは U.FL タイプを3枚,Chip Antenna タイプを1枚,SMA タイプを1枚の合計5枚用意した。その全てに OpenLog Artemis を使っているので,実は結構な出費だったかもしれない…ははは。 U.FL タイプのものは,1個は Active アンテナ用とし,残りの2個は Passive アンテナ用として,アンテナへの電源供給ラインのコイルを外しておいた(最終的に3個ともコイルを外してしまった…(2023/11/23))。

 また,OpenLog Artemis と NEO-M9N ボードは Qwiic ケーブルで接続し,OpenLog Artemis ボードに LiPo バッテリーをつなぎ,ON/OFF 用のスイッチを付けた。 工作としてはそれだけであり,ほぼコネクタをつないだだけ,という感じになった。まぁ,コイル(チップ部品)を外したり,適当なプラスチックケースに穴を開けたりしているので,ただ単にコネクタをつないだだけじゃないんだけどね。

(下の写真:左:U.FL タイプと OpenLog Artemis を Qwiic ケーブルで繋いだもの,右:Chip Antenna タイプと OpenLog Artemis をつないだもの)
 


 Active アンテナをつないだ U.FL コネクタタイプと SMA コネクタタイプの合計2枚は,プリント基板に適当な穴をあけ,そこにボードをネジ止めしている。 U.FL コネクタタイプは,U.FL コネクタに SMA との変換用のラインをつないで,SMA コネクタを持つ Active アンテナをつないでいる。 Active アンテナの2セットは,透明な樹脂のケースに入れ,ケースを出てすぐに90度曲げるための SMA コネクタを付けている。

(左の写真:SMA タイプの NEO-M9N ボード + Active アンテナ)
 
  (上の写真:左 = SMA タイプの NEO-M9N ボード + Active アンテナ,右 = U.FL タイプの NEO-M9N ボード+Active アンテナ)

 Passive アンテナをつないだ U.FL コネクタタイプ2枚と Chip Antenna タイプ,の合計3枚の NEO-M9N ボードは,OpenLog Artemis と2段重ねにしてみた。そのために OpenLog Artemis の四隅の穴に M3 (5mm長) のビス+スプリングワッシャを入れ,その下に穴にネジを切ってある六角形の樹脂の柱(長さ 10mm)を付けた。そのうちの1本だけを使って NEO-M9N ボードにネジ止めしてある。また LiPo バッテリーを固定するのに幅広の大きめの「輪ゴム」を使っている。ちょっと不格好だが…。

 Passive アンテナは SparkFun GNSS Chip Antenna Evaluation Board のものを使った。 1号機には TE 1565-1585MHz Puck Single Band Antenna を,2号機には Molex RHCP LDS-MID GPS Antenna 146216 (Molex Cube) を使った。 しかし,2号機の Molex Cube Antenna を壊してしまい,Molex Flexible GNSS Antenna - U.FL (Adhesive) に替えた。性能のほどはまだチェックできていない…。(下の写真のさらに下に「使ってみての感想」を追記した

(左下の写真:左から順に Gms-G9 を使ったもの,1号機:U.FL タイプ,2号機:U.FL タイプ,3号機:チップアンテナタイプ)
 

(下の写真:OpenLog Artemis と NEO-M9N ボードを2段重ねにしたもの)
 
 
(下の写真:OpenLog Artemis と NEO-M9N ボードを2段重ねにしたもの)
 
 
(下の写真:Molex Flexible GPS/GNSS Antenna をつけてみた)

使ってみての感想 (2023/11/23)

 この投稿を書いてから半年ほど経つので,どのタイプがいいかを書いておこう。

 結論から言うと「Passive アンテナをつないだ U.FL コネクタタイプの NEO-M9N ボード」が一番調子がいい。アンテナは SparkFun GNSS Chip Antenna Evaluation BoardTE Puck(TE 1565-1585MHz Puck Single Band Antenna)を使ったものが調子がいい。

 アンテナの性能としては,アクティブアンテナの方が受信面積が大きいし,受信してすぐに信号を増幅するからいいに違いない,と思っていたのだが,やはり大きすぎて持ち運びにくい。 また,それなりに電力を食うのでバッテリーのもちを考えると passive アンテナの方が有利となる。また SMA コネクタはネジ式なので固く締めたつもりでもすぐにコネクターが緩んでしまい,信号が GNSS ボードに送られなくなる。その点 U.FL コネクタは「カチッ」とハマるので調子がいい。となると,U.FL コネクターを持つ GNSS ボードに passive アンテナを付けるのがよい,というのが私の結論となった。

 passive アンテナとしては SparkFun GNSS Chip Antenna Evaluation Board のものをバラして使った。 まずは TE Puck と記載の TE 1565-1585MHz Puck Single Band Antenna「TE 1513634-1」と Molex Cube と記載の Molex Cube (part No.1462160001)(Molex Antenna Guide の中の「RHCP LDS-MID GPS Antenna (146216)」)を使ったが,Molex Cube を壊してしまい(四角のアンテナ部を剥がしてしまった),仕方なく小型の「PulseLarsen W3011」を使ってみた。これは Chip Antenna が付いた NEO-M9N ボードについているアンテナと同じものである。その結果,U.FL コネクタタイプの GNSS ボードに TE PuckW3011 のアンテナを繋いだもの1個ずつ(それぞれ1号機と2号機と呼んでいる)と,W3011 チップアンテナが固定されている GNSS ボード(3号機)の,合計3個の passive アンテナ使った GNSS ボードを使用した。

 3個の passive アンテナだが,使ってみると TE Puck 以外の2個(つまり W3011 がついた2個)はなかなか GNSS を受信しない感じだった。受信しても経路を示す点のばらつきが大きく,とても使い物になる感じがしなかった。きっと私の登山スタイルだと持ち歩く際の保持の仕方がテキトーすぎて,アンテナに効率よく電波が入らなかったせいだと思う。結果的に私の登山スタイルでは,せっかく3個も持って歩いているのに,実際に使えるのは TE Puck アンテナをつけたものだけ,となってしまった。active アンテナのやつはでかすぎてそれはそれで持ちにくかったし…。

 仕方ないので SparkFun GNSS Chip Antenna Evaluation Board をもう1個買い,U.FL コネクタタイプの GNSS ボードの2個目(2号機)のアンテナも W3011 から TE Puck アンテナに換えてみた。すると2号機の GNSS ログは1号機と似たものになった。いやぁ,よかった。さらに3個目の U.FL コネクタタイプの GNSS ボード(当初4号機と呼んでいた)のコイルを外し,アンテナを Molex Cube と記載の Molex Cube (part No.1462160001)(Molex Antenna Guide の中の「RHCP LDS-MID GPS Antenna (146216)」)にしてみた(これを新しく3号機と呼ぶことにし,チップアンテナタイプの GNSS ボードを4号機と呼ぶことにした)。すると,新3号機のログは1号機や2号機と遜色ないものとなった。

 この結果を見る限りでは,結局アンテナは電波を受信する面積が大きい方がよい,という結論になった。 これで U.FL コネクタで passive アンテナをつないだ 1号機から3号機までが使用に耐えるものになった。 これなら簡単にはログが取れないという状況にはならないはず,である。いやぁ,よかったよかった。 しばらくはこの3機体制でいけそうである。

記録されるログについては次の投稿に書こう。

0 件のコメント: