先日、全市全郡コンテストに大山のふもとで6時間程度運用したんですが、それなりの大きさのモバイルバッテリーが空になってしまい、ログを取るPCって結構電気食いだな、と思いました。また、衛星通信を移動運用でやろうと思ってるのですが、そこでも同様にリグのコントロールをするためにPCを使うと、やっぱり結構電気食うなという印象がありました。
それと、JL1NIEさんが、IC-705のリモートCWキーイングをつくられていたのを横目で見ていたのですが、そんな中で、私も遊んでいたesp32を見ると、wifiがつながるマイコンで、メモリもそれなりにあるなあ、このメモリの量って、昔のPC9801とおんなじ程度なんだよなあ、と思った瞬間、これを使って、屋外に持ち出せるログをつくろう、それで衛星やコンテストの運用もこなせるのをつくろう、と思いました。
思ったのが、twitter を見る限り10/5頃。約1か月を経過してある程度のところまできたので、途中経過ということでこれを書きます。
製作物の目標ですが、
1. 屋外に持ち出して1日フルに使っても、リグと比べても電池が目立たない程度の消費電力。手のひらに乗るぐらいのサイズ感で担ぎ上げに気楽に持っていける。
2. キーボード、リグをつないでCW打鍵、コンテストのログが取れること。
3. IC-705 などと連携して、ログのモード、周波数、時間などがしっかりと記録され、追加の操作が必要ないこと。
4. コンテストログに必須の機能(バンド(・モード)毎のデュープチェック)があること。
5. コンテストログにあるといい機能(クラスタからのデータ取り込みとバンドマップ、未QSOの表示)。
6. n1mm+に似た操作性(余計なキー操作がない)でサルオペに向いていること。
7. QSOデータは不揮発メモリに記録され、失われないこと。
8. 衛星通信に対応していること。リグの周波数等の制御ができるとともに、QSOの記録に使った衛星、運用地などの情報が書かれること。また、軌道情報のアップデートが常になされることと。
ぐらいの目標を立てました。今のところ、5.が半分ぐらいの実装なのを除けばおおむね実現できています。
一方、実装の優先度として高くないことや、難しいかなと思っているのは、
9. コンテスト得点・マルチの計算、本器からの直接の書類提出。これは、ctestwinで読める形式のファイル出力を実装して、ctestwinにおんぶにだっこでやろうかと。
10.次にAOSになる衛星の検索。これがないと完全にスタンドアローンでの運用は難しいので、やっぱり実装をしたい。
11. あとなんかあったと思うけど、忘れた。運用をしてみるといろいろあるものです。
今のところ2枚のOLEDの画面で右側が運用情報。左側が衛星やバンドマップ情報という感じで、コンパクトにまとまってます。CWのメモリーキーヤーやコンテストナンバー、自局コールサインなどの情報はすべて右側のウインドウで選んで編集ができるようになっています。
ハードウェア:
Amazonで買える中華ものを集めたら、出来上がり。のコンセプトで作ります。
CPUはesp32 のdevkit どれでも。これでWifi, BTの接続ができるなんてすごい。
OLEDのLCDはI2Cで2枚を同じバスに繋げました。128x64ドットの画面2枚で表示できる情報には限界がありますが、OLEDは消費電力が小さいので、大きいLCDは使わず、これで何とかします。
SDはSPI接続します。
別のSPIバスにUSBインターフェース(USB host shield v2 mini とかいうの)をつなぎます。このhost shield は5Vのところに3.3Vが出る仕様なので、少し変更をして5Vが出るようにします。これに、USB有線キーボードをつなぎます。
IC-705 のUSB接続もできるのですが、IC-705 はUSBハブにシリアルが複数ぶら下がっている構成になっているのと、Arduino for esp32のUSB host ライブラリではシリアル接続が複数あった場合にうまくそれぞれとお話しができるようになっていないため、USBキーボードとIC-705両方をUSBハブを使ってつなごうとしたのですが、ハブの先にハブがあるのをライブラリがちゃんと処理できないなどの問題に引っ掛かり、簡単には両立できませんでした。
BTはIC-705のCI-V接続に使います。最初BTのサンプルスケッチで接続をやってちょろいと思っていたんですが、USB host の接続もやると、メモリがどこかで足らなくなるのかリブートしてしまうようになってしまいました。これも、ソフトでの対処をとりあえず置いといて、BT-シリアルのアダプターを使うという力業で逃げてます。BT-シリアルは、esp32のdevkit をもう1枚使うのが安価でらくちんですが、他にもいろいろな方法があると思います。ソフトが満足いくできになったらもう一度やれるか試そうと思っていますが、たぶんやらない。
キーイングはesp32 devkit のLEDのポートにジャンク箱に転がっていたPhoto TRをつなぎます。入力抵抗は一応photo TRの仕様書を見て、ちゃんとONになるような電流が流れるように考えました。LEDが点滅するので、仕事しているのがちゃんとわかりいい感じ。
あとは、2台目のリグ(例えばIC-9700とか)とシリアルでお話しができるといい感じと思って、シリアルポートを割り当ててます。が、ソフトをまだ書いていません。
あとは、時刻管理。当初wifi でネット接続をしてntpで時刻を取ろうと思っていたのですが、山の中で時計が合ってないとか悲しいので、amazonで売っているRTCモジュールをOLEDディスプレイがつながっているI2Cバスにこれもぶら下げました。RTCはWifi でインターネットにつながっていたら、ntp でチェックして、ずれていたら合わせなおすようにしましたので、無線のログ取りにはこの程度で十分でしょう。お仕事では、時刻合わせが重要なことをやっているので、もう少し真面目に刻時管理をしますが、1秒ぐらいずれてもいいや。ってことで。これもモジュールそのままではリチウム電池が充電されちゃうとかいうふざけた仕様になってますので、ちゃんと対処して使います。
いろいろ買ったモジュールをまとめるのは、arduinoっぽく、mega 2560用のIC基板2枚使って、esp32がmega2560っぽくなって、その上にディスプレイとSDの基板が乗っているという構成にしました。ケースは3Dプリンタで適当に造形して、画面基板の上には、アクリル板を乗せようと思っています(一応雨降っても運用できるようにしたい)。
ソフト:
私は、ちゃんとしたソフトウェアの素養がないので、ひどいプログラムを勢いで書くというスタイルで、公開するのはためらわれますが、もし似たものを作ってみたいという奇特な方がいらしたら試してもらえるようにはしようかなと思う程度には真面目に書いています。オブジェクト指向それなにおいしいの状態のコーディングですが。
CWのキーイングは、最初K3NGのキーヤーのコードを導入しようかと思っていたのです。で、ソースコードを眺めていたら、ログソフトウェアと統合するにはちょっとやりにくい構造になっていることと、Americanコードとか、(私には)いらない機能てんこ盛りだったので、一部だけ拝借して根っこ部分は自分で作りました。一応1msごとの割り込み(というかTicker のタスク)で、符号長を管理する真面目な作りで、符号のリズムがおかしくなることがない仕組みでやってます。割り込みは、試しに簡単にTickerでやりましたが、35WPMぐらいまでは全くおかしな感じもしなかったため、これでいいやということで、このままにします。
ソフトの作りこみでめんどくさいのは、UIでしょう。n1mm+の使いごこちを手のひらに、をコンセプトに、tabまたはspaceで入力項目を切り替えながら操作する作りのUIを実装しました。dupe check も5文字以上コールサインを入れたら自動でチェックされますし、コールサインを入れて';'を押したら、相手のコールサインとナンバーを送出して、Exchange入力欄に自動で移動します。また、他のバンドで同じ局とやっていたら、そのナンバーを自動で入れてくれます。CWの送出マクロも同じUIでエディットできますので、移動地やコールサインが変わったりいろいろしても、簡単に変更が可能です。
ログのフォーマットは、最初はCabrilloそっくりの形式を出力しようかと思っていたのですが、ちょっと保存情報に不足が感じられたので、Cabrilloに似ていますが独自のテキストフォーマットのログを出すようにしました。ログをパソコンで読みだすのは、ファイルをダンプするだけという手抜き仕様です。一応QSO固定長のデータフォーマットにしましたので、SDに保存された過去のQSOエディットもできますが、データは消さない(フラグ立てるだけ)ので復活できる仕様にしました。
衛星対応ですが、よくある衛星トラッキングソフトの多くが衛星固定周波数のトラッキングとなっているので、受信固定や送信固定のトラッキングができるようにコードを書きました。もちろん衛星固定もできる(左画面の*でどれが選択されているかを示す)ので、ビーコンを聴いて、2wayの周波数に戻ってくるなんてこともできます。衛星の選択は、Sat.の名前をキーインプットするだけで、周波数まで自動でセットされますので、目標はJO3MQYさんのsattrackを超える使い心地!です。オフセットも一度これを見ながら合わせたら、次回以降も衛星ごとに覚えている、ようにしようと思います。
実践:
つくりかけの段階からコンテストで試してバグ取りを進めています。最初はひどかった・・・デュープチェックも動いていなかったし。
今は、ふつうにQSOできると思います。先日の東京CWや高校コンテストもこれでやってみましたが、やるたびにバグが出ますが、自分でコードを書いているので改修も早い。
高校コンテストのログをctestwinに出力するのにコンバーターをpython で作るか、こちらのロガープログラムにコンバーターを実装するかどっちが楽か今考え中です。
衛星の方は、先日8エリアに行ったときに試してみたんですが、その際はリグコンが使い物にならなかったので、CAS-4BでループをしただけでQSO相手を探すことはしませんでした。とりあえず、しばらく家のアンテナで試し運用をして、熟成をさせたいと思っています。
0 件のコメント:
コメントを投稿