USB接続の気象センサボードを製作してIC-705からD-PRSの気象データを送信する
概要
D-STARのDVモードには、音声フレームの他にもデータフレームが用意されており、音声と同時にユーザーが任意のデータを送ることができます。D-PRS(D-STAR Packet Reporting System)はこのデータ部分を利用したもので、APRSサーバーに接続されているI-GATE局を介して、送信元のGPSの位置情報等をAPRSサーバーへ引き渡すことができます。
APRSには気象局というカテゴリがあり、位置情報に気温や気圧のデータを付加すると、無線局の送信位置の気象情報を登録することができます。
本稿では IC-705 と 気象センサ、およびArduinoとUSB Host Shieldを組み合わせてD-PRSの気象局を製作します。
Arduino について
Arduino(アルドゥイーノ)は、電子工作に適したマイコンボードおよびプログラミング開発環境です。各種ライブラリがオープンソースで公開されていて様々なデバイスを簡単に扱うことができます。
USB Host Shield について
IC-705には低速データ通信や気象データ用のCOMポートが用意されていますが、USB接続によるCDC-ACM (USB Communication Device Class の Abstract Control Model)で提供されているため、利用するには何らかの USB Host が必要です。一般的にはWindowsやLinuxのPCを使用しますが、今回はスタンドアローンで動作させたいので、ArduinoとUSB Host Shieldを利用します。
USB Host Shieldは、USBホストコントローラのMAX3421Eが搭載されたArduino用の拡張ボードです。ArduinoとはSPIインタフェースで接続します。
このボードはArduino Pro mini (3.3V, 8MHz) に重ねて使用できるように設計されており、組み合わせるとコンパクトに使えます。
USBが普及してから20年以上経ち、シリアルポートが搭載されたデバイスは少なくなりました。特にUSB Host側はデバイスドライバの問題もあり、ちょっとした機器の自作はハードルが高くなりましたが、USB Host Shieldを利用すれば、CDCやHID(マウスやキーボード)の標準的なデバイスならば制御可能です。
IC-705に対して、USB端子に何らかの機器が接続されたことを検出させるには、VBUSに3.4V(実力値)以上の電圧を加える必要があります。しかしながら、このUSB Host ShieldのVBUS端子はVCCに接続されており、かつ、MAX3421Eの動作電圧は3.3Vなので、ギリギリ電圧が足りません。そのため、写真1,2のようにVBUSラインをパターンカットして、別途5Vを供給する必要があります。
写真1:USB Host ShieldのVBUSラインをパターンカットする(表面)
写真2:USB Host ShieldのVBUSとRAWをジャンパ線で接続する(裏面)
VBUS検出に必要な電流は、図1のようにIC-705のUSB電源供給設定をOFFにした場合、0.3mA程度でした。
図1:IC-705のUSB電源入力設定をOFFにする
BME280 について
BME280は温度、湿度、気圧の3つの環境情報を同時に測定できるセンサモジュールです。今回は周辺部品実装済みの秋月電子のセンサモジュールを使用しました。
Arduinoとの通信方式は、I2CまたはSPIを選択できますが、SPIはUSB Host Shieldで使用しているのでI2Cを選択しました。
測定レンジは、温度が-40~+85℃、湿度が0~100%、気圧が300~1100 hPaとなっています。
ソフトウェアについて
ソフトウェアの開発にはArduino IDEを使用します。下準備として、USB Host Shield を Arduino で使えるようにするために、Arduino IDEにUSB Host Shield Library 2.0 をライブラリマネージャーから図2のようにインストールします。なお、このライブラリはGPLv2ライセンスです。
図2:USB Host Shield2.0ライブラリのインストール
前述の通り、IC-705とはCDC-ACMで通信するので、サンプルプログラムから「acm_terminal」をロードし、これをベースにします。
また、BME280の計測値を取得するためのライブラリも準備します。USB Host Shieldと同様に、ライブラリマネージャーから SparkFun BME280をインストールします。なお、このライブラリはMITライセンスです。
図3: SparkFun BME280ライブラリのインストール
IC-705は図4のように、内部のUSBハブ経由でCDC-ACMが接続されています。そこで、サンプルプログラムを USBハブを使用するように変更します。
図4:IC-705内部のUSB接続図
IC-705にUSBを介して接続ができていれば、図5のように画面上部に「USB COM」のアイコンが表示されます。
図5:IC-705のUSBケーブル接続表示
BME280から取得した気象データをIC-705に入力しますが、フォーマットは図6のようなAPRS Weather Dataに準拠した形式にします。
図6: APRS Weather Data形式の説明
(IC-705 活用マニュアルより抜粋)
BME280は温度・湿度・気圧のセンサなので、それ以外の部分については「.」(ピリオド)にします。つまり、気温30℃(= 華氏86゚F)、湿度59%、気圧1012.3hPaだったときは
.../...g...t086r...p...P...h59b10123<CR><LF>
という文字列になります。
図7のようにIC-705の USB(B) 端子機能を「気象」と設定し、気象データが正しく入力されていれば、図8のような気象情報画面にBME280で計測したデータが表示されます。
図7:IC-705のUSB(B)端子機能
図8:IC-705の気象情報画面
製作したプログラムはGithubで公開しています。
https://github.com/7m4mon/dprs_usb_bme280
ハードウェアについて
この気象センサボードの構成を図9に示します。
図9:D-PRS気象センサボードのハードウェア構成
IC-705は図10のように設定するとマイク端子から8V,10mAを取り出せますが、このボードの消費電流はそれより少し多いため、別途電源を準備する必要があります。
図10:IC-705のMIC端子8V出力設定
電源はケースへの収まりを考えて、単5サイズの12Vの乾電池(A23)を使用しました。その都度電源を入切するのは面倒なため、FETによる電源スイッチを挿入して、IC-705のマイク電源に連動するようにしました。
データを送信するためのPTTスイッチもマイク端子に接続しますので、IC-705との接続は、マイクとUSBの2本で済みました。製作したD-PRS気象センサボードの外観写真を写真3に、内部の様子を写真4に示します。
写真3:製作したD-PRS気象センサボード(外観)
写真4:製作したD-PRS気象センサボード(内部)
正確な温度や湿度を測るために、センサ部は外部に露出するようにしました。
APRS サーバーに位置/気象情報を送信する
大まかな手順は、
- 自局のコールサインを無線機に登録する
- GPSを受信できる状態に設定する
- GPS送信モードをD-PRSに設定する
- 送信フォーマットを気象局にする
となります。
「IC-705 活用マニュアル」に詳しい手順が記載されていますのでぜひご覧ください。
位置/気象情報をAPRSサーバーに引き渡すには、電波の届くエリア内にI-GATE局が必要です。自前でD-PRS InterfaceによるI-GATE局を設置すれば、図11のように、実際に受信した気象データの文字列を確認できます。
図11:D-PRS Interface の動作の様子
D-PRS Interfaceの使用方法については作者(Pete Loveall氏, AE5PL)のサイトや過去のFB News等をご参照ください。
送信した位置/気象情報がI-GATE局経由でAPRSサーバーに登録されると、図12のように、インターネットの地図サイト(例:https://aprs.fi/)上に気象情報とともに自局が表示されます。
図12:地図上に自局の位置と気象情報が登録された状態
おわりに
APRSやD-PRS Interface、Arduinoやそのライブラリを無償で使用できるのは、開発者やサポートをされている皆様の努力と情熱のおかげです。素晴らしいソフトウェアを公開し、メンテナンスを継続されているコミュニティの皆様に心から敬意を表するとともに、感謝申し上げます。
最後までお読みいただき、ありがとうございました。