こちらの記事について、内容・翻訳・視点・長さなど、皆様のご意見をお送りください。今後の記事製作の参考にしたいと思います。
Thank you! Your feedback has been received.
There was a problem submitting your feedback, please try again later.
こちらの記事の感想をお聞かせください。
今回、ラズパイとTFTディスプレーを使って超低コストなフライトレーダーを作ってみたので紹介する。この端末で、最大数百km離れた位置にある航空機のモードSトランスポンダ信号を受信し、3.5インチディスプレイに表示させている。
ハードウェア
小型のRTL2832UベースSDRレシーバ(124-5461)。当初はDVB-T受信専用レシーバとして発売されたが、5年ほど前にLinuxカーネル開発者達のハックにより、DVB復調信号に加え、未加工サンプルも受信できるようになった。つまりソフトウェア側で様々な無線システムを受信できるようになったのだ。
このSDRレシーバはAdafruitから提供されているUSBレシーバで、RTL2832Uチップ搭載とチューナとR820Tチューナーを組み合わせることで、24~1,850MHzの電波を受信できるようになる。8ビットADC分解能及び実効ビット数(ENOB)約7ビットのRTL-SDRハードウェアは、より高価なSDRプラットフォームに比べるとダイナミックレンジの広さという点ではかないませんが、多くの場合はこれで十分であり、優れたコストパフォーマンスを発揮する。
モードS信号の受信とデコード用に使ったソフトウェアとしては、Googleマップを使ったWebインターフェイスが用意されていたりするため、必ずしもローカルディスプレイが必要というわけではありません。しかし今回は手軽に飛行概要を「ひと目で」把握できるよう、Adafruit PiTFT 3.5インチディスプレイ(124-5487)を追加し、それに表示するようにした。これを活用することで スペクトルを視覚化できる優れた自己完結型スキャナとして構成することも可能だ。
実装は非常に簡単。TFTディスプレイはPiのP1ヘッダに、SDRレシーバはUSBポートの1つに挿入するだけだ。
Raspbian
Raspbianのインストールについては2つの方法がある。TFTディスプレイのカーネルサポートを設定した状態のイメージをAdafruitからダウンロードする方法と、通常のRaspbianイメージを書き出してから適宜設定する方法だ。私は通常、公式のOSインストールイメージを書き出してから必要なカスタマイズを行うほうが好きなので、後者を選択した。ただし、前者のほうが手順が少なく、エラーも発生しにくいだろう。Adafruitは両方の方法の手順を紹介している。
「dd」でMicro SDカードを書き出したあと、ホスト名をデフォルトの「raspberrypi」から「planepi」に変更して、ネットワーク上で見つけやすくした。このために、ファイルを次のように編集した。
etc/hostname
etc/hosts
冒頭にスラッシュがない点に注意。これは、SDカードを書き出したコンピュータ上の/etc下のファイルを編集しないようにするためだ。そのため、SDカード上のルートファイルシステムをマウントしたパスはすべて追加しなければならない。
付属のキーボード・モニター・マウスを使用してシステムを設定する場合、SSHは不要だ。しかし、私のように、SSH接続を介して設定する場合は次のように指定する。
$ sudo touch boot/ssh
「boot」は完全なパスに置き換えて、SDカード上のファイルシステムを起動する。
Piを有線ネットワークに接続する場合はMicro SDカードを抜いてPiに挿入し、起動する。ただし、無線ネットワーク接続を使用する場合は次のように編集する必要がある。
etc/wpa_supplicant/wpa_supplicant.conf
これはSDカードを書き出したコンピュータ上の/etc/wpa_supplicantの構成ファイルではなく、SDカードのルートファイルシステムにおけるetc/wpa_supplicantディレクトリ内のファイルだ。
無線接続の場合の手動設定の詳細については、Raspberry Piマニュアルを参照のこと。
PiTFTのセットアップ
私はストックのRaspbianイメージを書き出したので、TFTディスプレイのカーネルサポートを設定する必要があった。そこで、私はAdafruitが提供するページ「Easy Install」の「DIY installer script」の手順に従った。しかし、「sudo apt-get install」ラインでは上記に示したエラーが発生した。これは、ストックイメージのソフトウェアのバージョンが新しかったことが原因であり、以下のように指定してダウングレードを強制する必要があった。
$ sudo apt-get install -y --force-yes raspberrypi-bootloader adafruit-pitft-helper raspberrypi-kernel
こうすることで、ヘルパースクリプトが実行され、3.5インチの「抵抗膜」型PiTFTがインストールされた。
$ sudo adafruit-pitft-helper -t 35r
通常は、Adafruitが提供する設定済みのRaspbianイメージを書き出すだけのほうがお勧めかもしれない。それでも、他のアプリを実行している既存のシステムにこれらの機能を追加する場合など、ストックのRaspbianで開始する場合には、上記の情報が役立つはずだ。
最後に、Piはこの投稿の上部の写真に示す方向で、USB電力リードは下方向を向いているため、ディスプレイが180o回転するように設定する必要があった。これには、/boot/config.txtファイルを編集してrotate=270をrotate=90に変更。
dump1090
モードS信号を受信及びデコードするためのソフトウェアにはさまざまなものがあり、5年前にはGNU Radioを基盤としたgr-air-modesについての記事で紹介した。しかし今回は、モードSが使用する周波数である1090MHzにちなんで名付けられた、dump1090というソフトウェアを使用した。
dump1090の利点は、GNU Radioとは異なり、外部依存性が最低限に抑えられていること。また、非常に堅牢で弱い信号のデコードも可能だ。対話型モードで稼働させると、動きのサマリがコンソールに出力され、GitHubで共有されるフォークは、3.5インチTFTディスプレイに合わせてごくわずかに変更いる。
構築するには、次のように指定する。
$ sudo apt-get install libusb-1.0-0-dev librtlsdr-dev rtl-sdr
$ git clone https://github.com/DesignSparkrs/dump1090
$ cd dump1090
$ make
次に、ファイル/etc/rc.localを編集し、「exit 0」の前に次のラインを追加する。
cd ~pi/dump1090; ./dump1090 --net --net-http-port 80 --interactive &
Running
この時点でリブートし、TFTディスプレイのカーネルが設定されていること、そして(邪魔になる可能性のある)RTL-SDRハードウェアのデフォルトのTVチューナサポートがロードされていないことを確認する。問題がなければ、dump1090は上記で/etc/rc.localに追加したラインから開始され、信号を受信するとTFTディスプレイに表示されるようになる。
Raspberry Piでブラウザをポイントすると、Googleマップを基盤としたシンプルなWebアプリケーション上で、航空機の位置や高度などのデータが示された。
SDRレシーバに付属のアンテナは1090MHzに最適とは言えないが、多くのエリアでは、これを使って少なくとも数機の航空機を認識できるはずだ。窓のそばか外に配置するとよいだろう。航空機をまったく認識できない場合、1090MHzに合わせたシンプルなDIYアンテナをオンラインで購入すれば、より高い成果を得ることができるはずだ。
その他のソフトウェアとサービス
dump1090では、未加工のモードSメッセージをネットワーク上で利用できるようにすることも可能だ。これには、PlanePlotterなどのソフトウェアを使用してディスプレイの機能を高める。さらに、レシーバからのデータは、The OpenSky NetworkやFlightAwareなど、クラウドソーシングによるフライトデータへアクセスできるオンラインサービスに送信することも可能だ。