Raspberry Piに「みちびき」対応GPSモジュールを接続

Raspberry Piに「みちびき」対応のGPSモジュールを接続して、高精度の位置情報と時刻を取得したいと思います。


Raspberry Piに「みちびき」対応GPSモジュールを接続

使用する材料

Raspberry Pi本体

この記事の設定は、Wi-Fi内蔵のRaspberry Pi 3及びPi Zero W用の設定になります。Wi-Fi無しのモデル(Pi 2、Pi Zero)はUART端子の設定が異なりますのでご注意下さい。

GPSモジュール

秋月電子通商さんの『GPS受信機キット 1PPS出力付き 「みちびき」対応』を使用させて頂きました。基板へ部品実装済みですが、コネクタと電池ボックスをハンダ付けする必要がありました。

※18.3.29追記:2018年11月以降予定の4機のみちびき正式運用に対応した、新しいGPS受信機キットが発売されるようです(4機すべてに対応かどうかは未確認です)。詳細は秋月電子通商さんのページを御覧ください。既存のGPSモジュールも、ファームウェアアップデートで対応して頂けるのでしょうか?

ケーブル

配線は、ジャンパーワイヤーのメス-メスを使用しました。


配線図

GPSモジュールの信号線は3.3Vですが、Raspberry PiのGPIOも3.3Vですので、そのまま接続すればOKのようです。図のように、GPSモジュールをUART端子に接続しました。

1PPS端子をGPIO18に接続することで、シンプルな一直線な配線で済みました。

ジャンパーワイヤーの色は抵抗値のカラーコードになっています。茶色が1、赤が2、緑が5になりますので、その順番で配線した感じです。端子の親和性が高いおかげで配線がシンプルになりました。ありがたいですね。


時刻・位置情報の受信設定

OSはRaspbianのStretch版を使用しました。Raspbianの設定はこちらの情報を参考にさせて頂きましたが、gpsdでppsを読み込む設定など、いくつか工夫を織り込ませて頂きました。

コンソールをserial0からtty1へ変更

UARTを使用する都合から。まずは、シリアルコンソールを無効にします。

  1. /boot/cmdline.txtを編集し、既存のdwc_ort.lpm_enableをコメントアウトして、コンソールをserial0からtty1に変更します。


  2. systemdの設定を変更し、シリアルコンソールを無効化します。
    Pi 3, Pi Zero W:

  3. /boot/config.txtを編集し、UARTを有効にします。

    次の1行を追加します。

タイムパルスの受信設定

Raspberry PiのGPIO端子に1PPS出力の配線を行いました。タイムパルスを受信できるように設定しましょう。

  1. /boot/config.txtを編集し、dtoverlay行を追加します。

    次の1行を追加します。

  2. /etc/modulesを編集し、pps-gpioを追加します。

    次の1行を追加します。

  3. 再起動すると、pps-gpioモジュールが読み込まれ、1PPS信号を受信することができます。

GPS関連ツールのインストール

  1. gpsdとpps-toolsをインストールします。

gpsd設定

  1. /etc/default/gpsdを編集し、gpsdの接続デバイスとオプションを設定します。GPSモジュールにバッテリーを接続、ポーリングは行わないため、-nオプションを有効にしました。

    Pi 3, Pi Zero W:

  2. systemdの設定を変更し、gpsd.socketを有効にします。

  3. 再起動すると/dev/ttyS0と/dev/pps0をターゲットデバイスとしてgpsdが起動します。

GPS信号の受信確認

  1. 窓際など、空が直接見える位置へ、GPSモジュールを水平に(アンテナ部が天頂を向くように)配置します。
  2. 1PPS信号は1秒おきに出力されるようです。ppstestを実行すると、1秒おきに受信したPPS情報が表示されます。

  3. gpsmonを起動します。位置情報が表示されるかどうか、1PPS信号を受信できているか確認します。


以上で、Raspberry PiにGPSモジュールを接続し、時刻・位置情報と、1PPS情報を受信できるかどうか確認が完了しました。

受信したGPS情報は、時刻同期サーバやGPSロガー等に活用することができます。

まあ、とりあえず配線と下準備が終わりましたということで・・・・活用方法は、別の記事でご紹介できればと考えています。

ではまたお会い致しましょう!

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク

コメント

  1. tankimono より:

    始めまして!
    私も昔購入してお蔵入りに成っていた、Raspberry Pi B+で宅内LANのGPS NTPサーバーが作れないかと調査していて貴殿の記事を拝見させて頂きました。
    貴殿のお使いの「GPS受信機キット 1PPS出力付き 「みちびき」3機受信対応」
    ユニットも昔購入して今回ファームアップしていますが以下の理由から採用に踏み切れません。
    「理由」
    1.PPSがキットの基板に実装されているインバータでパルス極性が反転し、通常のパルスと極性が逆の100mS負パルスとなり100mSecの遅延が考えられる。(PPS受信のドライ設定でパルスの立下りタイミングに変更が可能でしょうか?)
    2.私の環境が屋根にソーラーパネルが乗っかっておりGPS受信機をケーブルで延長したく防滴型のユニットを採用したい。(http://akizukidenshi.com/catalog/g/gM-12905/)
    出力データ形式がNMEA0183V3.01準拠とNMEA0183V4.0準拠とバージョンが異なるようですが設定などの変更が必要でしょうか?

    • hide より:

      tankimonoさん
      はじめまして。コメント頂きまして誠にありがとうございます

      > 1.PPSがキットの基板に実装されているインバータでパルス極性が反転し、通常のパルスと極性が逆の100mS負パルスとなり100mSecの遅延が考えられる。(PPS受信のドライ設定でパルスの立下りタイミングに変更が可能でしょうか?)

      PPS信号の極性について、そのあたりの情報は全く存じ上げませんでした。ふむふむふむ。

      記事では、Raspbianのpps-gpioカーネルモジュールでpps信号を読み取り、/dev/pps0デバイスとしてアクセスしております。

      想像で恐縮ですが、たとえばpps-gpioのオプション指定のようなもので、仰るようなタイミング変更が可能なら良いのですが・・・pps-gpio.c(ソースコード)あたりから、何か情報を読み取れれば良いのですが。申し訳ありませんが、私には難しそうです。orz

      > 2.私の環境が屋根にソーラーパネルが乗っかっておりGPS受信機をケーブルで延長したく防滴型のユニットを採用したい。(http://akizukidenshi.com/catalog/g/gM-12905/)
      > 出力データ形式がNMEA0183V3.01準拠とNMEA0183V4.0準拠とバージョンが異なるようですが設定などの変更が必要でしょうか?

      tankimonoさんにご紹介頂いたGPSモジュールは、みちびき3機に対応しつつ、アンテナの延長も可能、設置しやすくて大変良さそうですね。ふむふむ。

      恐らくですが、NMEAの信号は、gpsdとntpdのソフトウェアでプロトコル解析(時刻や位置情報の取り出し)されるのかと思います。

      gpsdのオプションを拝見したところ、NMEA関係のオプションは、ダンプする/しない等、NMEAバージョンに関係しないもののようです。

      gpsd, ntpdともに、NMEA信号に含まれるバージョンを読み取って、自動的に切り替えて動作するかと思います。
      NMEAバージョンが異なっても、特に何か設定変更を行う必要は無さそうですが・・・いかがでしょうか?

      • tankimono より:

        負パルスのGPS受信機を接続して検証してみました。
        http://hirai.ddns.net/phpbb3/viewtopic.php?f=4&t=725&p=795&sid=f7ba8d07097c315e9edc7dc58f8b02e6#p795

        PPSパルスドライバーやNTSサーバーでパルスエッジの立ち上がりや立下りの選択があるなら問題は解消されますが今のところ確認は出来ておらずデフォルトの正極性パルスの立ち上がりエッジでの動作しか行えていません。

        ソフトの設定が出来ておらず見やすく観測は出来ませんでしたが、この様に負パルスのGPS受信機を接続すると75~100mSec程度遅延オフセットしており、
        又数十mSecのジッタが発生している様です。
        このジッタの主原因はPPSパルスの負パルス幅がGPS精度を有しておらずパルス幅がCR定数?で変動しているように思われます。

  2. tankimono より:

    hide さん
    早速のご返事ありがとう御座います。
    実は私の本名も秀幸で同じですね!
    私も昨日からhideさんの記事を参考に年寄りの手習いで接続テストを始めたが上手く動作しませんでした。
    結果を私のブログに記載を始めています。
    無断ですが此処のサイトの説明(画像)にリンクを張っていますが支障があれば仰ってください削除します。
    何しろ痴呆症状が出始め視力の衰えた年寄りでトラブル続きです。
    最終的にはGPS時計精度の宅内NTPサーバー運用なのですが上手くいけるか不安でご返事を記載しました。