Global lo0

One good turn deserves another. GPS×ImageProcess×...

ラズパイでGPSを測位してみた話

ラズパイで準天頂衛星みちびきをロガーしました.


ざっくりまとめると...

  • GPSモジュールをはんだ付け
  • ラズパイにつないで測位してみた話


完成図

こんな感じのものが出来上がります.

f:id:kuri_megane:20190901220955j:plain
完成図

用意した材料

だいたい9000円くらいです.

f:id:kuri_megane:20190901221226j:plain
用意した材料

使った道具

  • ラズパイの初期構築のために必要なもの
    • ディスプレイ
    • HDMIケーブル
    • USBキーボードとマウス
    • 電源
  • はんだ付け
    • はんだごて
    • はんだ吸収線
  • ブレッドボード
  • ドリル
  • ピンセット

1. GPSモジュールのはんだ付け

まずはGPSモジュールに付属のピンをはんだ付けします.

はんだ付けは下手っぴですが,適当な導線を見つけて練習したあと,くっつけました.

f:id:kuri_megane:20190901222233j:plain
GPSモジュールのはんだ付け 表面

f:id:kuri_megane:20190901222307j:plain
GPSモジュールのはんだ付け 裏面

2. GPSモジュールとラズパイの接続

次の図を参考にまずはブレッドボードを使って接続しました.

f:id:kuri_megane:20190901222422p:plain
GPSモジュールとラズパイの接続

出展: http://denor.daa.jp/wp-content/uploads/2018/01/RaspberryPiにGYSFDMAXB接続PPS付き.png

3. ラズパイで受信

作業はラズパイの中へ移ります.

ターミナルからラズパイの必要な設定を行っていきます.

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

ラズパイのUARTを使うため,コンソールを変更します.

$ sudo nano /boot/cmdline.txt

ファイルの内容を次のように変更します.

#dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=PARTUUID=2924e30a-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait

シリアルを無効化し,コンソールをsirial0からtty1へ変更します.

$ sudo systemctl stop serial-getty@ttyS0.service
$ sudo systemctl disable serial-getty@ttyS0.service

または,

$ sudo raspi-config

を実行し,「P5 Interfacing Options」を「P6 Serial (disable)」にします.

これにより,ブートメッセージがシリアルポートに送信されないようにし,ログインサービスが有効にならないようになります.

UARTの有効化

$ sudo nano /boot/config.txt

末尾に次の1行を変更します.

enable_uart=1

以上の操作で /dev/ttyS0 は,コンソールの標準入出力をシリアル接続0番(S0)からtty1へ変更されます.

試しに次のコマンドで確認してみてください.

$ tty
/dev/pts/1
$ who
pi  tty7    2019-08-15 22:44 (:0)
pi  tty1    2019-08-15 22:44
pi  pts/0   2019-08-15 22:44 (ここにIPアドレス)

タイムパルスの受信設定

GPSモジュールに1PPSのパルスを入力できるようにします.

GPIO18番の設定を変更し,パルスを出力するGPIOを指定します.

$ sudo nano /boot/config.txt

次の1行を追加します.

dtoverlay=pps-gpio,gpiopin=18

PPSを有効にする記述をします.

$ sudo nano /etc/modules

次の1行を追加します.

pps-gpio

再起動すると設定が読み込まれます.

確認コマンド

$ lsmod | grep pps
pps_gpio               16384  0
pps_core               20480  1 pps_gpio

ソフトウェアのインストール

GPSを確認するためのソフトをインストールします.

$ sudo apt-get install gpsd gpsd-clients pps-tools

gpsd デーモンの有効化

gpsdの接続デバイスとオプションの設定

今回ははんだ付けでGPSモジュールにボタン電池を接続しており,ポーリングは行わないため,-n オプションを有効にしました.

$ sudo nano /etc/default/gpsd

ファイルを次のように変更します.

START_DAEMON="true"
USBAUTO="true"
DEVICES="/dev/ttyS0 /dev/pps0"
GPSD_OPTIONS="-n"

gpsd.socketの有効化

$ sudo systemctl enable gpsd.socket

私の環境では特に何も表示されませんでした.

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

確認コマンド

$ systemctl status gpsd.socket
● gpsd.socket - GPS (Global Positioning System) Daemon Sockets
   Loaded: loaded (/lib/systemd/system/gpsd.socket; enabled; vendor preset: enabled)
   Active: active (listening) since Mon 2019-08-19 21:17:05 JST; 1 weeks 6 days ago
   Listen: /var/run/gpsd.sock (Stream)
           [::1]:2947 (Stream)
           127.0.0.1:2947 (Stream)
   CGroup: /system.slice/gpsd.socket

 8月 19 21:17:05 raspberrypi systemd[1]: Listening on GPS (Global Positioning System) Daemon Sockets.

GPSの受信結果を見る

インストールしたgpsmonから確認します.

$ gpsmon

なお,GPSモジュールは衛星からPPS信号も受信しているため,次のコマンドで受信を確認できます.

$ sudo ppstest /dev/pps0
trying PPS source "/dev/pps0"
found PPS source "/dev/pps0"
ok, found 1 source(s), now start fetching data...
source 0 - assert 1567342546.094455297, sequence: 331 - clear  0.000000000, sequence: 0
source 0 - assert 1567342547.094416198, sequence: 332 - clear  0.000000000, sequence: 0
source 0 - assert 1567342548.094373122, sequence: 333 - clear  0.000000000, sequence: 0

最後に

このモジュールで受信できるみちびきの衛星番号は,193,194, 195 なのでgpsmonでこの数字が表示されたときはみちびきも受信しています.

次は,ラズパイでGPSの受信結果を保存したいと思います.

kuri-megane.hatenablog.jp

この記事の内容で,準天頂衛星みちびきと従来GPSの測位結果を比較した記事はこちら!

kuri-megane.hatenablog.jp

参考記事

denor.jp

www.rs-online.com