Memorandumの小部屋
本ページは金銭授受を伴う行為を含むAuctionや商用Web
Pageからの無断リンク・無断参照を禁じます。
無断リンク・無断参照が判明した時点で然るべき処置をとらさせて頂きます。
まるごとNMEA Raspberry Pi Pico編
このWebページは「Raspberry Pi Pico」を用いてGNSSロガーを試作した経緯を記録として残した個人的なメモです。
文中の一部の用語は下記を意味します。
GNSSモジュール
GM−318B・GR−A013U(GM−A013R)・GM−5157A・GSU−140型GNSS評価キットなどのGNSS受信機
(受信器)もしくはGNSSモジュール。
GNSSロガー
GNSSモジュールから送信されたNMEAセンテンスSDカードに記録する本Webページで紹介する試作品(プロトタイプ)。
− 目次 −
「まるごとNMEA Arduino編」では GNSSモジュールから受信したデータを確実にSDカードに記録することができませんでした。 数時間以下の連続記録では、実用上は我慢できるかなとは思いましたが、やはりちゃんと記録できるGNSSロガーに仕上げたくなります。 そのためには我が身のスキル不足を GNSSロガーの性能・能力でカバーする必要があります。 幸いにも、最近はスキル不足を隠すことのできる性能・能力を有するデバイスを安価に入手できる時代です。 今回は安価で開発ツールも慣れてきたArduino IDEを利用できる「Raspberry Pi Pico 」を採用することにしました。 「Raspberry Pi4 Model B」・「Raspberry Pi Zero」もありますが、パソコンと同様に電源投入からアプリケーションを起動するまでに とても時間を要します。 電源投入後に短時間でアプリケーションが立上り、かつ、小型化も視野に入れることができる「Raspberry Pi Pico 」に軍配があがりました。 さあ、「Raspberry Pi Pico」版GNSSロガーの製作開始です。
結論じみた記載ですが、製作して痛感したのは開発ツール(環境)としてArduino IDEをそのまま利用することで効率よくスケッチ作成できたことです。
GNSSロガーの操作・機能は「まるごとNMEA Arduino編」とほぼ共通化しました。 主な仕様・相違点を以下に示します。
入出力操作部分は「まるごとNMEA Arduino編」とほぼ同一としました。 プロトタイプ3では「まるごとNMEA Arduino編」で利用した入出力用基板をそのまま利用しました。
GNSSロガー用の受信バッファサイズを任意に拡大できます。 今回は多少余裕をみて1024バイトとしました。
この値は後述のEEPROMからデータで変更できるようにしました。
SDカードへの書込みタイミングのトリガとなるGNSSロガー受信データサイズ(以下、SD用バッファサイズと記します。)を2048バイトとしました。
この値は後述のEEPROMからデータで変更できるようにしました。
GNSSロガーのパラメータをスケッチ中の値の他、EEPROMからデータをロードすることができるようにしました。
EEPROMのパラメータはユーザで任意に設定できるBLOCK0とBLOCK1の2つのブロックを選択できるようにしました。
選択方法は電源投入時(電源投入直後でも可)に操作スイッチSW1を押すとBLOCK0、SW2を押すとBLOCK1、何もしなければデフォルトで設定された9600bps用GNSS
モジュール用パラメータ、計3通りのパラメータを選択できるようにしました。
「Raspberry Pi Pico 」ではUSBを用いたシリアルポートの他にシリアル通信機能を2ポート有しているため、この2ポートをGNSS受信機(モジュール)用とPCモニタ用に割り当てました。 これより、シリアル通信機能の切替えをする必要が無くなりました。
プロトタイプ3の回路図、外観を下記に掲載します。 流用した「まるごとNMEA Arduino編」の入出力用基板 にはSW1・SW2・SW3・SW4にプルアップ抵抗が設けられていますが、プルアップ抵抗は不要なようにスケッチを作成しています。 そのため、下記回路図ではプルアップ抵抗を記載していません。
上記回路図をクリックすると原寸大の回路図をダウンロードできます。
【 プロトタイプ3 回路図 】
【 プロトタイプ3 動作確認状態(全体外観1) 】
【 プロトタイプ3 動作確認状態(全体外観2) 】
【 プロトタイプ3 動作確認状態(ブレッドボード部外観) 】
【 プロトタイプ3 動作確認状態(SDカード接続部外観) 】
あい路事項 「Raspberry Pi Pico」破損 プロトタイプ3のスケッチ確認中に突然「Raspberry Pi Pico
」を認識しなくなりました。 原因調査のために別の「Raspberry Pi Pico
」で確認すると正常に認識するため、当該の「Raspberry Pi Pico
」を損傷したようでした。 当初、不具合部位がわかりませんでしたが、しばらく通電しているととても熱くなる部品を見つけました。 3.3Vを生成する電源ICがダメージを受けているようでした。 動作確認中に3.3Vラインを短絡もしくは過負荷にしたようです。 損傷電源ICの撤去作業はとても難渋しました。 損傷電源ICの裏面放熱パッドが全面ハンダ付けされているため、ハンダこての温度を相当高くして作業をしました。 周辺部品や基板パターンへのダメージを考えると、そう無茶な作業もできず、最後は損傷 していた電源ICを壊しながらの撤去となりました。 どうにか基板回路・パターンに致命的なダメージまでは与えることはなかったようです。
【 損傷電源IC撤去後 全体外観 】
【 損傷電源IC撤去後 撤去部拡大 】
【 撤去した損傷電源IC外観 】
【 修理後 全体外観 】
配線短絡防止のためにポリイミドテープを貼っています。 【 修理部分拡大 】
|
プロトタイプ3では基本的な動作を確認するために「まるごとNMEA Arduino編」と同じ機能の動作をできるようにスケッチの移植をしました。 開発環境Arduino IDEを採用したおかげて、予想より短い時間でスケッチ移植ができました。 この段階ではEEPROMによるパラメータ設定の機能はありませんでした。
なお、「Raspberry Pi Pico」のIOレベルは3.3V用ですが、「Micro SD TFカードメモリシールドモジュール
(MicroSD Card Adapter)」のIOレベルは5V用となっています。 「Micro SD TFカードメモリシールドモジュール」内部のインターフェース用IC(74VHC125)は3.3V電源駆動のため、回路的には「Micro SD TFカードメモリシールドモジュール」に3.3Vレベルの回路を接続しても利用できると判断しました。 インターフェース用ICの入力ラインに挿入されている抵抗1kΩが波形を乱す、もしくはレベル低下を招くのではと気になりましたが特に支障なく使えました。
プロトタイプ3で「Raspberry Pi Pico」を破損したため、配線の見通しをよくしたプロトタイプ4を製作しました。 「Raspberry Pi Pico 」のマイコン部分は電源電圧3.3Vで動作しています。 わざわざ「Micro SD TFカードメモリシールドモジュール」を使う必要もないため、「microSDカードスロットDIP化キット」を利用することにしました。 これ以外はプロ トタイプ3と同じ回路となっています
上記回路図をクリックすると原寸大の回路図をダウンロードできます。
【 プロトタイプ4 回路図 】
【 プロトタイプ3 動作確認状態(全体外観1) 】
【 プロトタイプ3 動作確認状態(全体外観2) 】
【 プロトタイプ3 動作確認状態(全体外観3) 】
Arduino IDEで「Raspberry Pi Pico」を使えるようにライブラリを追加しました。 当初「Arduino Mbed OS RP2040 Boards」と「Paspbery Pi Pico/RP2040」の両方をインストールしていましたが、何かと間違い(?)を生じ、挙句の果てにコンパイルや書込みが正常に行えなくなるなど困った事態になりました。(単に使い方が悪いのが原因だと思うのですが。。。。。) 一旦Arduino IDEをアンインストール、再起動、再度インストールして「Paspbery Pi Pico/RP2040」のみを追加インストールしました。
【 ライブラリ「Paspbery Pi Pico/RP2040」インストール 】
当初の予定どおり、プロトタイプ4ではGNSSロガーのパラメータを設定・選択できる機能を追加しました。 プロトタイプ4の仕様を下記に記載します。
項 目 |
仕 様 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
電源電圧 |
5Vdc (「Raspberry Pi Pico 」のUSBコネクタから給電) |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
消費電流 |
消費電流は利用するSDカード、GNSSモジュールにより異なります。 SDHCカード32GB、GR−A013U(GM−A013R)の場合、約40mA(4.92Vdc)でした。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GNSS |
3.3Vdc及び5Vdc。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GNSS |
4800bps、9600bps、19200bps、38400bps、57600bps、115200bps (接続とロギングを確認したのは4800bps、9600bps、115200bpsのみです。) |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GNSS |
3.3Vレベルのみ (5Vレベル の場合はGNSSロガーのTX信号を抵抗分圧することで対応可能の場合があります。) |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GNSS用 |
外部より別途供給する必要があります。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
SDカード |
FAT16もしくはFAT32。 マイクロSDカードもしくはマイクロSDHCカード。 (最大32GB) できる限り高速書き込みができるクラスの製品が望ましいです。 今回の動作確認にはCLASS10を利用しました。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
タクトスイッチ |
電源投入直後もしくはリセットスイッチSW4押してリセットした直後
GNSSモジュール NMEAセンテンス受信時
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
タクトスイッチ |
電源投入直後もしくはリセットスイッチSW4押してリセットした直後
GNSSモジュール NMEAセンテンス受信時
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
スライド |
SW3をオンすることで、GNSSモジュールのTXデータをTB 2のMonitor−TXから出力します。 Monitor−TXはスケッチデバッグ用に設けた機能です。 通常の使い方ではTXデータを表示する必要はないので、SWをオフで利用、もっと言えばSW3自体を設ける必要はありません。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
LED表示 ブザー発音 |
注記:ブザー周波数はパラメータ設定となります。 下記表中ではパラメータ毎にF1・F2・F3・F4として記載しています。
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GNSS ロガー シーケンス |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
格納ファイル |
格納ファイル名は「GNSS」+「000」を開始番号とした追番号+拡張子「.LOG」となります。 例 GNSS000.LOG → GNSS001.LOG → … 格納ファイルの1行目にヘッダー文字列を格納します。 |
EEPROMにGNSSロガーのパラメータを記録して、電源投入時にEEPROMからロードする機能を有します。 本WebページでEEPROMと記載していますが、「Raspberry Pi Pico」にはEEPROMがありません。 正 しくは「Raspberry Pi Pico」のチップRP2040に内蔵されているFLASHメモリの一部をデータ保存/読出しすることでEEPROMと同等の機能を実現しています。
パラメータ設定するデータ例を下記に掲載します。 BLOCK0は4800bpsのGNSSモジュール、BLOCK1は「GSU−140型GNSS評価キット」(測位する衛星システム「GPS」+「QZSS L1S」)を対象としています。 GNSS用初期設定ルーチンの選択値1は「GSU−140型GNSS評価キット」専用の初期設定ルーチンを実行します。 しかし、GNSS用初期設定ルーチンの選択値2および3はGNSSモジュールの通信速度設定を行うだけです。 そのため、GNSS用初期設定ルーチンの選択値2と3の相違はありません。
項目 |
BLOCK0 |
BLOCK1 |
Default |
Monitor−TX |
|||||||||||
アドレス |
値 |
アドレス |
値 |
値 |
|||||||||||
GNSS用初期設定ルーチンの選択 |
0x0000 |
0x02 |
0x0100 |
0x01 |
0x03 |
Initialize GNSS |
|||||||||
GNSSモジュールの通信速度(bps)
|
0x0001 |
0x01 |
0x0101 |
0x06 |
0x02 |
GNSS Baud Rate |
|||||||||
Monitor−TXの通信速度(bps)
|
0x0002 |
0x06 |
0x0102 |
0x06 |
0x06 |
Monitor Baud Rate |
|||||||||
測位表示トリガ判定用IDメッセージ NMEA ID
|
0x0003 |
0x01 |
0x0103 |
0x01 |
0x01 |
Trigger NMEA ID |
|||||||||
LED表示、ブザー発音有無初期値 0:LED表示有り・ブザー発音無し |
0x0004 |
0x03 |
0x0104 |
0x03 |
0x03 |
LED/Buzzer Status |
|||||||||
ブザー周波数(未測位・2D測位時) F1 |
0x0005 |
0x07 |
0x0105 |
0x07 |
0x07 |
Buzzer Freqency 1 |
|||||||||
ブザー周波数(未測位・2D測位時) F1 |
0x0006 |
0xD0 |
0x0106 |
0xD0 |
0xD0 |
− |
|||||||||
ブザー周波数(未測位・2D測位時) F2 |
0x0007 |
0x0F |
0x0107 |
0x0F |
0x0F |
Buzzer Freqency 2 |
|||||||||
ブザー周波数(未測位・2D測位時) F2 |
0x0008 |
0xA0 |
0x0108 |
0xA0 |
0xA0 |
− |
|||||||||
ブザー周波数(未測位・2D測位時) F3 |
0x0009 |
0x13 |
0x0109 |
0x13 |
0x13 |
Buzzer Freqency 3 |
|||||||||
ブザー周波数(未測位・2D測位時) F3 |
0x000A |
0x88 |
0x010A |
0x88 |
0x88 |
− |
|||||||||
ブザー周波数(未測位・2D測位時) F4 |
0x000B |
0x0B |
0x010B |
0x0B |
0x0B |
Buzzer Freqency 4 |
|||||||||
ブザー周波数(未測位・2D測位時) F4 |
0x000C |
0xB8 |
0x010C |
0xB8 |
0xB8 |
− |
|||||||||
測位表示期間(LED・ブザー) Period |
0x000D |
0x00 |
0x010D |
0x00 |
0x00 |
Period of LED/Buzzer On |
|||||||||
測位表示期間(LED・ブザー) Period |
0x000E |
0x64 |
0x010E |
0x64 |
0x64 |
− |
|||||||||
SDカード用バッファサイズ |
0x000F |
0x04 |
0x010F |
0x04 |
0x04 |
Buffer size (SD) |
|||||||||
SDカード用バッファサイズ |
0x0010 |
0x00 |
0x0110 |
0x00 |
0x00 |
− |
|||||||||
GNSSモジュール受信用バッファサイズ |
0x0011 |
0x08 |
0x0111 |
0x08 |
0x08 |
Buffer size (Serial) |
|||||||||
SDカード用バッファサイズ |
0x0012 |
0x00 |
0x0112 |
0x00 |
0x00 |
− |
|||||||||
SDカード格納時先頭行コメント(ヘッダー) 最大128バイト BLOCK0 BLOCK1 Default |
0x0020 |
− |
0x0120 |
− |
− |
Header |
(下記スケッチのアップデートは中止しています。 「まるごとNMEA AE−RP2040編」のスケッチを利用することを推奨します。)
前節のEEPROM書込みはArduino IDEの書込み専用スケッチを作成して書込みました。 また、書込み結果の確認をするためにEEPROM読み出しスケッチも作成しました。 これらのスケッチはArduino IDEの「ファイル」→「スケッチ例」→「Raspberry Pi Pico用のスケッチ例」→「EEPROM」にある「eeprom_clear」・「eeprom_read」・「eeprom_write」を参考にして作成しました。 これらのスケッチではEEPROMライブラリ開始を「EEPROM.begin(512);」で作成しました。 上記以外の値を設定したい場合は、これらのスケッチ例を参考にして書込むことが可能です。
プロトタイプ4のGNSSロガーを起動するためには以下の手順で行いました。 なお、EEPROMデータを利用する必要のない通信速度9600bpsのGNSSモジュールを利用する場合は下記手順1と手順2をスキップして手順3のみでよいです。 下記のサンプルスケッチファイル名をクリックするとダウンロードできます。
|
そもそも「Raspberry Pi Pico」を用いた「まるごとNMEA」の製作のきっかけとなったNMEAセンテンスの書込み結果は下となりました。
Case1
SDHCカード32GB class10 受信NMEAセンテンス数=1,097,067行 SUM CHECK異常行数無し。
Case2
SDHCカード128M class不明 受信NMEAセンテンス数=850,102行 SUM CHECK異常行数無し。
さすがバッファの効果で全てのNMEAセンテンスを正常に書込みできました。 機能的・性能的には目標を達成できました。
SDカード書込み時の波形を観測しましたので参考までに下記に掲載します。
参考 : 上記波形測定のNMEA_GGA信号は「Raspberry Pi Pico」の29ピン(GP22)に割り当てています。 jsk91s3.uf2でもこの機能は残したいます。、
上記観測結果より、「Raspberry Pi Pico」を用いることで当初目標としていた「GNSSモジュールから受信したデータを確実にSDカードに記録」できることを確認できました。
さらにSDカードclass10クラス以上を利用することで、より確実にl記録できるようです。
今回製作したのはブレッドボードを用いたプロトタイプ4ですが、このまま「Raspberry Pi Pico」を用いて基板化しても外形サイズが大きくなるのは確実です。 GNSSロガーとしては小型化もできるようにしておきたいため、「Raspberry Pi Pico」ではなく「RP2040−Zero」を用いたGNSSロガーを
製作しました。 本Webページ公開時点ではブレッドボード用いて「RP2040−Zero」版のGNSSロガーの動作確認が済んでいます。
スケッチは「Raspberry Pi Pico」版のスケッチオブジェクトuf2ファイル
をそまま流用できることも確認しています。 その後、製作した「RP2040−Zero」版を
「まるごとNMEA RP2040 Zero編」で公開しています。
【 「RP2040−Zero」版GNSSロガー(動作確認中) 】
目次に戻る Memorandumの小部屋 へ戻る ホームページへ戻る
End of This Page.