📡

ADS-Bを自宅で受信して自宅近辺の航空機を見てみる

に公開

ADS-Bを自宅で受信して自宅近辺の航空機を見てみる

ADS-B(Automatic Dependent Surveillance-Broadcast)の仕組み

基本動作原理

ADS-Bは航空機搭載のGPS受信機とトランスポンダーを組み合わせたシステムです。GPS衛星から正確な位置情報を取得し、1090MHz帯の電波で周囲に放送します。

データ送信の流れ

  1. GPS測位: 航空機がGPS衛星から位置・時刻情報を受信
  2. データ生成: 位置、速度、高度、機体識別情報をパケット化
  3. 自動送信: 1090MHz Extended Squitterで毎秒1-2回放送
  4. 受信・処理: 他の航空機や地上局が信号を受信・解析

技術的特徴

Mode S拡張: 既存のSSRトランスポンダー技術を拡張
非暗号化: オープンな信号形式で誰でも受信可能
自律動作: 管制官の問い合わせ不要で自動送信

自宅でこのメッセージを受信し、デコードできれば航空機の位置情報などがわかります。

Raspberry Pi + PiAwareイメージ

ここのショッピングリストに従ってPiAwareイメージで作る方法が一番簡単だと思う。
FlightAwareのフィーダーになる必要がありますが、大体の方がFilghtAwareと同時にflightrader24に
フィードしたいと考える気がするのでこの方法が簡単です。

https://ja.flightaware.com/adsb/piaware/build

受信機とかアンテナはこの辺りを買えば大丈夫です。
https://amzn.asia/d/ip5fssX

https://amzn.asia/d/anh69Sa

本格的に受信したければ、屋外の高い位置にアンテナをあげると受信範囲が
広がります。私は近所の電気屋さんにお願いしてテレビアンテナと一緒に
設置してもらいました。

PiAwareの画面

http://<Raspberry Piのアドレス>:8080でアクセスすると受信した
航空機の位置情報を確認することができます。

データの取得方法

RESTで取得

航空機の位置情報を取得するREST APIは以下からアクセスできます。
http://<Raspberry Piのアドレス>:8080/data/aircraft.json

ソケット通信で取得

30003ポートにncで接続するとストリームデータとして航空機の位置情報を取得することができます。

pi@raspberrypi:~ $ nc -v localhost 30003
Connection to localhost (::1) 30003 port [tcp/*] succeeded!
MSG,7,1,1,AC6744,1,2025/09/23,09:35:57.295,2025/09/23,09:35:57.349,,23250,,,,,,,,,,
MSG,4,1,1,84D28E,1,2025/09/23,09:35:57.297,2025/09/23,09:35:57.349,,,365,271,,,2304,,,,,0
MSG,4,1,1,861AE1,1,2025/09/23,09:35:57.297,2025/09/23,09:35:57.350,,,363,277,,,2304,,,,,0
MSG,7,1,1,84D28E,1,2025/09/23,09:35:57.300,2025/09/23,09:35:57.350,,24900,,,,,,,,,,
MSG,8,1,1,84B83E,1,2025/09/23,09:35:57.307,2025/09/23,09:35:57.352,,,,,,,,,,,,0

RESTよりも詳細な情報を取得することができます。
フォーマットについてはこちらに詳細があります。
http://woodair.net/sbs/article/barebones42_socket_data.htm

そのほかの設定

Raspberry PIの定期的な再起動

24/365で稼働させ続けていると固まって動作しないことがあったので、
深夜にRaspberry Piを再起動させています。

この辺りを参考に作成しました。
https://blog.sgitl.org/2025/06/linux-timer-auto.html

/etc/systemd/systemに以下2つのファイルを作成

sched-reboot.service
pi@raspberrypi:/etc/systemd/system $ cat sched-reboot.service 
[Unit]
Description=Scheduled Reboot

[Service]
Type=simple
ExecStart=/usr/bin/systemctl --force reboot
sched-reboot.timer
pi@raspberrypi:/etc/systemd/system $ cat sched-reboot.timer
[Unit]
Description=Reboot Scheduling.

[Timer]
OnCalendar=*-*-* 01:39:00

[Install]
WantedBy=multi-user.target

タイマーの有効化

sudo systemctl enable shed-reboot.timer

タイマーのステータスを確認

pi@raspberrypi:/etc/systemd/system $ sudo systemctl status sched-reboot.timer
● sched-reboot.timer - Reboot Scheduling.
     Loaded: loaded (/etc/systemd/system/sched-reboot.timer; enabled; vendor preset: enabled)
     Active: active (waiting) since Tue 2025-09-23 01:39:06 JST; 8h ago
    Trigger: Wed 2025-09-24 01:39:00 JST; 15h left
   Triggers: ● sched-reboot.service

Discussion