bookmark_border[358] PythonによるNanoVNA制御(続き)

コマンドプロンプトから直接コマンドを打ち込むことでNanoVNAから情報を得ることができるPythonソフト「nanovna.py」を色々と試してみたところ、指定した周波数範囲でのSWRデータをPCで表示させる方法がようやくわかりました。

まずnanovna.pyが格納されているディレクトリに移り、そこで「開始周波数」「終了周波数」「表示するパラメータ(ここではSWR)」を指定するのですが、それらをファイル名の後に列記すれば良いのですね。例えば50MHz~54MHzの範囲でSWRを表示するためのコードは以下の通りです。

py nanovna.py -S 50e6 -E 54e6 -W

ここで、「-S 50e6」は開始周波数50MHz、「-E 54e6」は終了周波数54MHz、「-W」はSWR表示を表します。

その結果、PC上の表示は下の様になります。アンテナはHFV5です。

グラフは最適なスケールに自動調整されているようですが、マニュアルで調整できるかどうかは現時点では不明です。横軸の周波数も10^7の表示になっていて10MHz単位ですので見難いですね。

ただ本来の課題はそこではなく、知りたいのは指定周波数に対するSWR値の生データで、このソフトを使って実際のデータを取得できるのか、また「NanoVNAServer」という別ソフトもPythonコードが開示されているようでこちらを解析する必要があるか・・・いずれにせよ、当局にはPythonの知識が全く不足しており、そちらの習得が先決と思われます。

bookmark_border[357] PythonによるNanoVNA制御

SWR情報はNanoVNAから取るのが良いだろうということで、Pythonで書かれたNanoVNA制御用ソフト「nanovna.py」をネットからダウンロードして動かしてみました。このソフトはコマンドラインからコマンドを打ち込むことができますので、一つずつ動作を確認するのに良さそうです。
ヘルプにはこの様なコマンドが表示されました。

プロット系のコマンドを試して見ると、確かにPC画面上に波形が表示されます。しかし・・・周波数設定ができません。

オプションコマンドの「-S START」と「-E STOP」の部分だと思いますが、どうやってもNanoVNAに周波数が設定されません。このプログラムを動かしてNanoVNAの表示を見ると、STARTが1MHz、STOPが900MHzとなっていてどうやらこれがこのソフトのデフォルト値の様ですが、それを「-S」や「-E」を使って変更する方法がわからず、もう少しネットで調べる必要があります。もしくはソースの内容を見ていくのが良いのかも知れませんが、それにはもっとPythonのことを勉強しなければなりません。

この状態で「-W」コマンドでSWRをPC上に表示させると下の様になります。ちなみにアンテナはHFV5をつないでいます。

 

bookmark_border[356] リレーによるSD330制御(続き)

プッシュスイッチとリレーを組み合わせた回路をどうするか結構悩んでしまいましたが、結局下図の回路にたどり着きました。考えてみれば、スイッチとリレーをシリーズにつなげば良いのでそれほど悩むことも無かったですね。

念のためスイッチやリレーの動作において何か問題が生じないかロジック表を作って確認しました。2種類のステータスを持つデバイスが4ヶありますので、16種類のステータスに応じてアンテナに対して出力される(=アンテナに入力される)電圧がどうなるかを示しています。「0」は出力無し、「+」は正電圧、「-」は逆電圧です。当然のことながら電圧ショートになるステータスは存在しませんので、リレーの動作を気にすることなくプッシュスイッチを押すことができます。

まだSWR情報の取り込み方法などは全く見えていないのですが、とりあえずプッシュスイッチとリレーユニットを組み込んだスイッチボックスは、今のスイッチボックスの代替として作っておこうかなと思います。

※ちなみに今使っているスイッチボックスはこちらで紹介しています。

bookmark_border[354] リレーによるSD330制御

SD330に付属しているシーソースイッチは硬くて微調整が難しいためプッシュスイッチを2ヶ使っているのですが、それをそのままリレーに置き換えることとし、回路はこれまでと同様、以下のものを想定しています。

SW1、SW2はそれぞれRelay01、Relay02に置き換えようと思いますが、手動で微調整をする場面も出てくるでしょうから、プッシュスイッチは残しておき、リレーを追加する形の方が良いかも知れません。

その場合、プッシュスイッチとリレーをどの様に切り替えるかが新たな課題となります。新たにスイッチを設けてガチャと切り替えるのが回路的には楽ですが、なるべく追加コストを掛けずに簡便な方法で済ませたいと思っています。

bookmark_border[353] PythonによるリレーON/OFF

前回はPCのコマンドプロンプトからリレー制御用の実行ファイルを起動させてON/OFFできることが確認できましたので、今回はそのファイルをPythonから実行させてみました。ネットで調べてみると、外部のexeファイルを実行させるには「subprocess」というパッケージを使うと良さそうです。

一応Pythonでコードを書いてみたのですが、うまく行きません。exeの後ろにつく引数をどうやって指定すれば良いのか・・・ブログ記事によってはそのまま列記すれば良さそうな感じなのですが、エラーは出ないもののリレーが動きません。

色々と試行錯誤を繰り返し、ようやくexeファイル名と引数をカンマでつなげることで動作することが確認できました。引数は「デバイス固有コード」「ON/OFFの指定」「リレーの指定」の3つありますので、それらをカンマでつなげています。

※白抜き部分はデバイス固有コードです。

exeファイルを置いてある場所が深いところにあるためパスが長くなり見難くなりましたが、「relay_switch」「relay_number」というパラメータを作り、前者はON/OFF(open/close)指定用、後者はリレー(01/02)指定用に充てました。また、「result」や最後のPrint文は特に必要無いのですが、正常にプログラムが動作していることを確認したくて入れています。

GUIのプログラムを組めば、ボタンクリックでリレーを制御できますね。

ここまでたどり着いたところで、今後どう検討を進めて行こうか迷っています。

PCからのリレー制御はこれで何とかなりそうですが、問題はSWR情報をどの様にPCに取り込むかです。リグから入れるかNanoVNAから入れるか・・・たとえ低出力であっても高SWR状態でリグから電波を出したくないので(そもそもその状態でTX ONできるかどうかもわかっていないのですが)、リグからは周波数情報だけを取り込み、PythonでNanoVNAを制御してそこからSWR情報を取ることができれば、それが理想です。

NanoVNA制御用ソースコードもいくつか公開されているようですが、内容を理解するには更にPythonの勉強が必要ですので、「PCによるSD330オートチューナ」の実現までまだまだ先は長そうです。