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オートチューナ」の実現までまだまだ先は長そうです。

bookmark_border[351] PCからのリレー制御

SD330アンテナのオートチューニング化を目指して・・・・今度はPCから外部USBデバイスの制御について試してみようということで、Amazonで送料込み数百円程度のUSBリレーを見つけ購入しました。

取扱説明書は添付されておらず、基板に印字されている型名を頼りにネットで制御アプリを探してダウンロードしました。コネクタはUSB2.0 Type Bで当方に手持ちが無かったため、取り敢えずPCからリグにつないでいるケーブルを外して接続しました。

アプリを立ち上げて色々やってみると・・・カチカチと動きました。リレーは2ヶ搭載されており、ON状態でグリーンのLEDが点灯します。

ちなみにアプリはこのようなものです。黒塗りした部分には、このデバイスの固有コードが表示されています。

しばらくこれで遊んでいたのですが、これでは自動化にはなりませんので、次にコマンドラインから各リレーのON/OFFが制御できるソフトを起動させてみました。コマンドプロンプトから実行させてみると正常にリレーが作動します。

なお、白抜きになっている部分には上述の「デバイス固有コード」が入ります。引数としては「デバイス固有コード」「ON/OFFの指定」「リレーの指定」の3つになります。

次の課題として、この引数付きのexeファイルをPythonからどのようにして実行するかということですが、もしかするとexeを介さずにダイレクトにPythonから制御するソフトがあるかも知れませんので、これについてはまた調べていきたいと思います。

bookmark_border[349] Python シリアル通信

Pythonお試しの続きです。

開発環境が整ったところで、今回はシリアル通信の方法について調べました。これには「pySerial」というパッケージが必要で、コマンドプロンプトから

pip install pyserial

と入力するとPCにインストールされます。

なおPython用の各種パッケージは「https://pypi.org/」サイトで管理・配布されているようで、「pip install パッケージ名」を実行するとこのサイトからパッケージを探し自動でPCにインストールしてくれて大変便利です。画面上でpipの新バージョンのインストールを促されましたので、メッセージに従いpipをアップデートしました。

次に、仮想COMポート設定用のフリーソフト「com0com」をインストールしました。これは2つの仮想COMポートをクロスケーブルで接続したように見せる仕組みで仮想ループバックができるため、実際に外部デバイスを接続しなくてもPC内部で閉じた検証が可能となります。

更に、シリアル通信用ターミナルソフト「Tera Term」をインストールしました。VS CodeやTera Termの黒いターミナル画面を見ていると、昔PCからモデムに対してATコマンドを送ったときのことを思い出して懐かしい感じです。

これでPythonによるシリアル通信の実験準備は完了です。ブログ記事に載っていたサンプルプログラムを動かし、VS CodeとTera Termの間でメッセージの送受信ができることを確認しました。

(送信用サンプルプログラム)

これを実行するとTera Termのターミナル画面には「This is a COM test message.」と表示されました。

(受信用サンプルプログラム)

初めにVS Codeでこのプログラムを実行すると、0.1秒毎にデータを受信するループに入って受信待ちになり、Tera Termのターミナル画面から何か文字を入力するとその文字がVS Codeのターミナル画面に順次表示されます。そしてEnterを押すとプログラムは終了しました。

この様に少しずつではありますが、実際にプログラムを動かして結果を確認していくと仕組みが理解できて楽しいです。

次回は・・・実際にUSB経由で外部デバイスを制御してみたいと思います。