皆さんFlightradar24はご存知ですか?
Flightradar24は、世界中を飛んでいる飛行機の現在位置をリアルタイムで確認できるサービスです。
Webブラウザやスマートフォンのアプリから利用でき、飛行機の位置だけでなく、便名、出発地・目的地、高度、速度、機種など、さまざまな情報を見ることができます。
飛行機好きの方なら、一度は使ったことがあるのではないでしょうか。
そんなFlightradar24ですが、実は表示されている航空機の位置情報の多くは、世界各地に設置された受信機から集められています。
そして、この受信機はRaspberry Piと市販のUSBワンセグ受信機を使って自作することができます!
さらに、自分で受信した航空機のデータをFlightradar24へ提供すると、通常は有料の機能を利用できるようになる仕組みも用意されています。
今回は、
「Raspberry Pi + USBワンセグ受信機」を使って航空機の電波を受信し、Flightradar24へデータを送信する方法
を紹介していきます。
- そもそも、どうやって飛行機の位置を受信するの?
- ワンセグ受信機で飛行機の電波が受信できる?
- 必要なもの
- 専用OS「ADS-B Feeder Image」をインストール
- Raspberry Piを選択
- ADS-B Feeder Imageを選択
- microSDカードを選択
- Customisation画面
- microSDカードへ書き込む
- 書き込み完了!
- Raspberry Piを起動してみよう
- スマホからネットワーク設定
- ADS-B Feederの初期設定
- アンテナの設置場所を設定する
- アンテナの緯度・経度・標高を調べる
- タイムゾーンを設定する
- 受信するデータをADS-Bに設定
- セットアップ完了!
- Flightradar24へデータを送信する
- Flightradar24のSharing Keyを取得する
- Flightradar24への送信状態を確認
- そしてFlightradar24のContributorプランが無料に!
- 完成!
そもそも、どうやって飛行機の位置を受信するの?
飛行機は飛行中、自分の位置や高度などの情報を電波で送信しています。
今回利用するのが、主に1090MHz帯のADS-B(Automatic Dependent Surveillance–Broadcast)と呼ばれる信号です。
ADS-Bに対応した航空機は、GPSなどで取得した自機の位置情報を周囲へ送信しています。
その電波を地上に設置したアンテナで受信すると、
- 航空機の識別情報
- 緯度・経度
- 高度
- 速度
- 進行方向
などの情報を取得できます。
つまり今回作る装置は、
飛行機 → 1090MHzの電波 → アンテナ → USB受信機 → Raspberry Pi → インターネット → Flightradar24
という流れで動作します。
意外とシンプルですよね。
ワンセグ受信機で飛行機の電波が受信できる?
ここで、
「ワンセグ受信機なのに、飛行機の電波を受信できるの?」
と思うかもしれません。
実は一部のUSBワンセグ・地デジ受信機には、RTL2832Uというチップが搭載されています。
このチップを搭載した製品の中には、テレビ受信用途だけではなく、パソコンから受信周波数などを制御してさまざまな電波を受信できるものがあります。
この使い方は一般的にRTL-SDR(Software Defined Radio)と呼ばれています。
対応するUSB受信機を使えば、航空機が使用する1090MHz付近の信号も受信できます。
数千円程度のUSB受信機とRaspberry Piだけで航空機の信号を受信できるので、電子工作の題材としてもかなり面白いです。
必要なもの
今回使用するものは次の通りです。
Raspberry Pi
基本的にはネットワークに接続できるRaspberry Piであれば利用できます。
今回はRaspberry Pi OSをインストールしたRaspberry Piを使用します。
24時間運用する場合は、ディスプレイやキーボードを接続せず、SSHで操作できるようにしておくと便利です。
RTL-SDR対応USB受信機
ここが一番重要です。
USB接続のワンセグ受信機なら何でも使えるわけではありません。
RTL2832Uなどを搭載し、RTL-SDRとして利用できる製品を選ぶ必要があります。
見た目がほぼ同じ製品でも内部のチップが異なる場合があるため、購入前にRTL-SDRでの動作実績を確認しておくことをおすすめします。
今回はゾックスというメーカーのDS-DT308SVというものを使用します。楽天で非常に安価に購入できます。おそらく日本で新品購入可能なワンセグ受信機では最安です。おすすめです。
1090MHz対応アンテナ
USB受信機に付属しているアンテナでも実験できますが、受信できる航空機の数や距離を伸ばしたい場合は、1090MHzに適したアンテナを使用すると効果的です。
また、アンテナはできるだけ周囲に障害物がない場所へ設置します。
ADS-Bは1090MHzという比較的高い周波数を使用するため、建物や山などの影響を受けやすくなります。
そのため、
「どのUSB受信機を使うか」以上に「アンテナをどこに設置するか」が重要
だったりします。
窓際に置くだけでも、室内の奥に設置した場合と比べて受信状況が大きく変わることがあります。
DS-DT308SVの場合は、付属のアンテナを使って窓際に置けば十分でした。
専用OS「ADS-B Feeder Image」をインストール
今回は通常のRaspberry Pi OSは使用しません。
Raspberry Piには、ADS-B受信機を簡単に構築できる「ADS-B Feeder Image」という専用イメージをインストールします。
ADS-B Feeder Imageは、ADS-Bの受信や各種サービスへのデータ送信をWebブラウザから設定できるようにまとめられたシステムです。Raspberry Pi向けのイメージはRaspberry Pi Imagerから直接選択できます。
そのため、
Raspberry Pi OSをインストール
↓
ADS-B受信ソフトをインストール
↓
Webサーバーを設定
↓
Flightradar24などのフィーダーを設定
……と一つずつ環境を構築する必要がありません。
今回はこの専用イメージを使って、なるべく簡単にADS-B受信機を作ってみます。
Raspberry Pi Imagerをインストール
まず、パソコンにRaspberry Pi Imagerをインストールします。

Windows、macOS、Linuxに対応しています。
また、Raspberry Piで使用するmicroSDカードをパソコンに接続しておきます。
今回は32GBのmicroSDカードを使用しました。
Raspberry Piを選択
Raspberry Pi Imagerを起動すると、最初に使用するRaspberry Piを選択する画面が表示されます。
今回はRaspberry Pi 3B+を使用するため、Device → Raspberry Pi 3を選択します。

Raspberry Pi Imagerでは、最初に使用するRaspberry Piのモデルを選び、続いてOSと書き込み先ストレージを指定する流れになっています。
ADS-B Feeder Imageを選択
続いて「OS」を選択します。
ここが通常のRaspberry Piのセットアップと大きく違うところです。
今回は「Raspberry Pi OS」ではなく、一覧を下にスクロールして、
Other specific-purpose OS
を選択します。

さらに一覧をスクロールして、
ADS-B Feeder Image
を選択します。

今回の画面では、
ADS-B Feeder Image v3.0.13
が表示されています。

説明にも、
Simple to use ADS-B Feeder Image that allows you to feed most of the public ADS-B aggregators.
とあるように、ADS-Bの受信データを各種サービスへ送信するために作られた専用イメージです。
つまり、今回のようなADS-B受信機を作るにはうってつけです。
microSDカードを選択
次に「ストレージ」を選択します。
パソコンに接続しているmicroSDカードを選びます。
今回の場合は、
Generic- Multi-Card USB Device / 29.5GB
がmicroSDカードです。

ここは間違えないように注意してください。
このあと選択したストレージの中身はすべて消去されます。
外付けSSDやUSBメモリなどを複数接続している場合は、容量などを確認して、必ずRaspberry Piで使用するmicroSDカードを選択します。
Customisation画面
続いて「Customisation」画面が表示されます。が、この場合は特に設定は必要ないので、「SKIP CUSTOMISATION」をクリックします。

microSDカードへ書き込む
設定が終わったら「Writing」へ進みます。
最終確認画面に、
Device: Raspberry Pi 3(設定したもの)
Operating system: ADS-B Feeder Image
Storage: microSDカード
と表示されていることを確認します。

問題がなければ、
WRITE
をクリックします。
すると、
You are about to ERASE all data on…
という警告が表示されます。

これは「選択したmicroSDカードのデータをすべて消去します」という意味です。
もう一度、書き込み先が間違っていないことを確認して、
I UNDERSTAND, ERASE AND WRITE
をクリックします。
あとはイメージのダウンロードとmicroSDカードへの書き込みが行われるので、しばらく待ちます。
書き込み完了!
書き込みと確認が正常に終了すると、
Write complete!
と表示されます。

これでADS-B Feeder Imageが入ったmicroSDカードの完成です!
「FINISH」を押してRaspberry Pi Imagerを終了し、パソコンからmicroSDカードを取り外します。
Raspberry Piを起動してみよう
それでは、作成したmicroSDカードをRaspberry Piに挿入します。
このとき、まだ受信機だけではADS-Bを受信できません。
Raspberry Piには、
microSDカード + RTL-SDR対応USB受信機 + アンテナ
を接続します。
アンテナをUSB受信機へ接続し、USB受信機をRaspberry PiのUSBポートへ差し込みます。
準備ができたらRaspberry Piの電源を入れます。
初回起動時には内部でセットアップ処理が行われるため、すぐに電源を切らず数分程度待ちます。
スマホからネットワーク設定
まずはWi-Fiに接続するための設定をしなければいけません。スマホから簡単にできます。
スマホのWi-Fi設定画面から「adsb.im-feeder」を探して接続します。

するとこのような画面が表示されます。

Raspberry Piを接続したいWi-FiのSSIDとパスワードを入力して進みます。

このような画面になったらしばらく待ちます。
完了すれば自然と消えます。
ADS-B Feederの初期設定
microSDカードをRaspberry Piに挿入したら、
アンテナ → USBワンセグ受信機(RTL-SDR) → Raspberry Pi
の順に接続し、Raspberry Piの電源を入れます。
初回起動ではシステムの準備に時間がかかる場合があります。ADS-B Feeder Imageの公式説明でも、通常は数分、環境によっては15~20分程度かかる場合があるとされています。
しばらく待ったら、Raspberry Piと同じネットワークに接続しているパソコンからWebブラウザを開きます。
アドレス欄に、
http://adsb-feeder.localと入力します。
うまく接続できると「ADS-B Feeder」の設定画面が表示されます。

この専用OSにはデスクトップ環境がなく、基本的な設定はこのWeb画面から行います。adsb-feeder.localで接続できない場合は、ルーターなどからRaspberry PiのIPアドレスを調べてアクセスする方法もあります。
アンテナの設置場所を設定する
最初に表示されるのがBasic Setupです。

ここではADS-B受信局の基本情報を入力します。
主に設定するのは、
- Station Name
- Latitude(緯度)
- Longitude(経度)
- Altitude(標高)
- Timezone
です。
Station Name
まず「Station Name」に、この受信局の名前を入力します。
好きな名前で構いません。
この名前はADS-B Feederの画面などで受信局を識別するために使用されます。公式ドキュメントでは、マップサイトやAggregatorのMLATグラフなどにも使用されると説明されています。
アンテナの緯度・経度・標高を調べる
続いて重要なのがアンテナの位置です。
ADS-B Feederでは、
Latitude:緯度
Longitude:経度
Altitude:標高
を入力します。
ここで入力するのはRaspberry Piを操作しているパソコンの場所ではなく、実際にADS-Bアンテナを設置している場所です。
Basic Setup画面には「location and elevation finder tool」というリンクが用意されています。

クリックすると地図が表示され、アンテナを設置している場所の緯度・経度・標高を調べることができます。
調べた値をBasic Setupへ入力します。
LatitudeとLongitudeについては、画面の指示に従って小数点以下5桁程度まで入力します。
例えば、
Latitude : 37.xxxxx
Longitude : 140.xxxxx
Altitude : xxxといった形です。
なお、アンテナの位置情報は公開サービスへのデータ送信にも関係する情報なので、自宅などに設置する場合は位置情報の公開範囲についても確認しておくとよいでしょう。ADS-B Feederには、公開Aggregatorの地図上でサイト位置を表示しないためのPrivacy設定も用意されています。
タイムゾーンを設定する
次に「Timezone」を確認します。
日本で使用する場合は、
Asia/TokyoとなっていればOKです。
違うタイムゾーンが表示されている場合は「UPDATE TIMEZONE」から変更します。
これで受信局の基本的な位置情報設定は完了です。
受信するデータをADS-Bに設定
画面を下へスクロールすると、
What data do you want to track?
という項目があります。

ADS-B Feeder Imageは飛行機だけではなく、ACARS/VDL2、HFDL、AIS、気象観測用ラジオゾンデなどにも対応しています。
今回はFlightradar24へ航空機のADS-Bデータを送信するのが目的なので、
「ADS-B」だけにチェック
を入れます。
その下には、
Default (integrated)
Micro
Nano
Stage 2という選択肢があります。
今回はRaspberry PiにUSB受信機を直接接続して、そのRaspberry Pi自身で受信・地図表示・データ共有まで行う一般的な構成なので、
Default (integrated)
を選択します。
これは通常の利用者向けの標準設定です。MicroやNano、Stage 2は、受信部分と処理部分を複数のコンピューターへ分けるような構成で使用します。
設定できたら、
APPLY
をクリックします。
セットアップ完了!
APPLYをクリックするとこのような画面が表示されるので、処理が完了するまで待ちます。

設定が正常に完了すると、
ADS-B Feeder Homepage
が表示されます。
ここまで来ればADS-B Feeder本体の基本設定は完了です!
ホーム画面では、
- 1秒あたりに受信している位置情報
- 1秒あたりのADS-Bメッセージ数
- 現在受信している航空機数
- 1日に受信した航空機数
- 受信統計
- データ共有先の状態
などを確認できます。

さらに「TAR1090 Mapping Interface」のmapを開けば、自分のアンテナで受信している航空機を地図上で確認できます。
ここまで来るとかなりテンションが上がります。
市販のUSB受信機で、実際に上空を飛んでいる航空機から直接電波を受信しているわけです。
Flightradar24へデータを送信する
さて、ここからが今回の本題です。
受信したADS-BデータをFlightradar24へ送信してみましょう。
画面右上の、
Data Sharing
をクリックします。
すると「Data Sharing Setup」が表示されます。

ADS-B Feeder ImageはFlightradar24専用ではなく、複数のADS-Bデータ集約サービス(Aggregator)に対応しています。どこへデータを提供するかは、この画面から選択できます。
今回はFlightradar24が目的なので、
flightradar24
にチェックを入れます。
Flightradar24のSharing Keyを取得する
ここからの設定にはFlightradar24のアカウントが必要です。先に登録しましょう。

flightradar24にチェックを入れると、Flightradar24用の設定項目が表示されます。

すでにFlightradar24のSharing Keyを持っている場合は、そのキーを入力します。
初めてFlightradar24へデータを提供する場合は、自分のメールアドレスを入力して、
REQUEST KEY
をクリックします。
このSharing Keyは、Flightradar24側で「どの受信局から送られてきたデータなのか」を識別するために使われます。
なお、Flightradar24公式によると、1つのSharing Keyを複数のフィードで共用することはできません。受信機を追加する場合には別のキーが必要になります。
Sharing Keyの設定が終わったら、画面上部の
APPLY
をクリックします。
Flightradar24への送信状態を確認
設定が反映されると、Data Sharing画面の下部に、
You are feeding
という項目が表示されます。
ここに、
flightradar24が表示されていれば、Flightradar24へのフィーダーが設定されています。
さらに、
Enabled / Data / Status
などから動作状態を確認できます。

データ送信を開始した直後は、Flightradar24側へ反映されるまで少し時間がかかることがあります。
飛行機を正常に受信できており、Flightradar24への送信も正常になれば、これで設定完了です!
そしてFlightradar24のContributorプランが無料に!
ここがこの工作のおいしいところです。
Flightradar24では、自分のADS-B受信機から航空機データを提供すると、データ提供者向けのContributorプランを無料で利用できます。現在の公式案内では、Contributorは60以上のプレミアム機能を利用できます。
これらの機能は本来年間8万円近くかかるビジネスプランを契約しなければ使えません。
すでにFreeアカウントを持っている場合も、受信機からデータが正常に届き始めれば自動的にContributorプランへアップグレードされます。

つまり、
自宅のアンテナで飛行機を受信する
↓
そのデータをFlightradar24へ提供する
↓
Flightradar24のContributor向け機能が使えるようになる
という仕組みです。
単に有料機能を無料で使えるだけではなく、自分の受信したデータがFlightradar24の航空機追跡ネットワークの一部になるというのも、この工作の面白いところです。
完成!
これで、
Raspberry Pi + USBワンセグ受信機 + アンテナ
を使ったADS-B受信局の完成です!
今回は専用のADS-B Feeder Imageを使用したため、Linuxのコマンドを大量に入力したり、dump1090やreadsb、fr24feedなどを一つずつインストールしたりする必要はありませんでした。
基本的には、
専用OSをmicroSDへ書き込む → Raspberry Piを起動 → ブラウザでアンテナ位置を設定 → Flightradar24を選択
だけです。
思っていたより簡単だったのではないでしょうか。
快適なFlightradar24ライフを堪能しましょう!
使用した受信機↓

