goo blog サービス終了のお知らせ 

無線と熱帯魚とロードバイクと・・・

#アマチュア無線
#アクアリウム
#ロードバイク
#家庭

マイコン(Arduino)でFTdx10 のCAT制御(その2 4×4キーパッド)

2025年04月12日 | アマチュア無線
マイコン(Arduino)でFTdx10 のCAT制御(その1)ではバンド切替えにブレッドボードに刺したタクトスイッチを使いましたが、実装となるとバンドの数だけこのスイッチとマイコンの入力が必要になり現実的ではありません。

マイコンの入力数は、今使っているATmega382ではデジタル入力が12個、アナログ入力が6個なので(アナログ入力はデジタル入力に変えられる)、かなり絞り込む必要があります。

そこで FTdx3000 などではバンド切替えに3×4キーパッドを使っていますが、これに倣ってここでは安価に入手できる4×4キーパッドを使うことにしました。

現在安価に入手できるのは次の2つぐらいしかないのですが、左のプラ仕様のものはタッチが結構重く上から押さないと動きません。右のパッドは比較的タッチが軽く前から押しても良さそうなのでこちらを使うことにしました。

4×4キーパッドの使い方については参考資料がネットに多くあるので、動作原理など分からなくてもすぐ使えると思いますが、一応基本動作を確認してみました。

ここで使った4X4キーパッドの端子は、左側4個が「列、1~4」、右側4個が「行、5~8」になっています。

いま端子1(一番左、1列目)に5Vをつなげ「1」を押すと端子5(1行目)が5Vになります(赤LED)。
続いて下の「4」を押すと端子6(2行目)が5Vになります(黄LED)。

この様に行(行、列どちらでもいい)に順番に5Vを加え、その間にボタンが押された時の列(または行)を検出すれば、押したボタンが分かるという仕組みですが、このルーチン はArduino IDE でライブラリイが使えるので簡単に書くことができます(ここでは設定方法など省略)。

4X4キーパッドへのキーの割り当てですが、まずバンド切替えとして「1」~「9」に 3.5メガ~50メガを(1.9、5メガ、GENは除く)、最下段の「*」はMWに割り当てました。また右端の列、「A」、「B」、「C」、「D」はそれぞれメーター選択、モード、IPO、ルーフィングフィルターの選択切替を割り当てています。

これ以外で常時使うものとして、送信電力とCWキーイングスピードについてはアナログ入力を使ってボリュームで変えることにしました。なおマイコンには当初使っていたUNO(互換品)から Serialラインを切替えるために Atmega328P とTTL-USBコンバーターを基板上に配置した自作品に変えました。


以上の割り当てでATmega328P の8個のデジタル入力と2個のアナログ入力を使うことになり、残りはデジタル入力4個とアナログ入力4個(もしくはデジタル6個)となりました。


マイコン(Arduino)でFTdx10のCAT制御 シリーズ記事


マイコン(Arduino)でFTdx10 のCAT制御(その1 初めの一歩)

2025年04月08日 | アマチュア無線
FTdx10のCAT制御をPCで行う実験をやってきましたが、これをマイコンでやってみようと思い立ちました。マイコンはArduinoが動くATmega382Pです。

初めの一歩として、まずマイコンとFTdx10とのシリアル通信(RS232C、DSUB)ができるかの確認です。
これにはマイコンのTTLレベルをRS232Cに変換するコンバーターが必要ですが、ネット通販で安価に入手できるMAX3232 によるRS232 TTLコンバーターモジュールが良いと思います( DSUBソケットがあるFT991でもできます)。

まずマイコンのシリアル通信を確認するために、マイコンの通信相手方としてRS232CのDSUBがあるPC(デスクトップ?)を用意し、ケーブルをつないで Arduino-IDEを起動し、シリアルモニタを表示させます。

Arduinoではプログラム(スケッチ)の書込みとシリアルモニタを表示させるため必ず Serial.begin(**); を記述しますが(**はボーレート)、これとは別に相手方(ここではデスクトップPC)へのシリアル通信は SoftWareSerial を使います。

これはライブラリを使いスケッチのトップに次のように記述します。
# include <SoftwareSerial.h>
SoftWareSerial mySerial(2,3);    // Rxd,Txd
ここで(2,3)は RxdとTxdに結線するピン番号で任意です。具体的には TTLコンバーターのRxdをピン2に、Txdをピン3に、VccとGNDをそれぞれ5VとGNDピンにつなげればOKです。

なお実験ではブレッドボードの上にマイコンやTTLコンバータを配置するのがおススメです。ここではタクトスイッチを3個用意し、それぞれONで3つのバンドが切替わるようにスケッチを記述しました。

この状態で FTdx10のバンド設定命令を送信しますが、例えば、
mySerial.println("BS01;");      // 1.9メガバンドに設定
mySerial.println("BS02;");      // 3.5メガバンドに設定
mySerial.println("BS03;");      // 5メガバンドに設定

この命令がデスクトップPCのArduino IDE モニター上に表示されればシリアル通信はこの構成で良いことが確認できます。

次はいよいよFTdx10につないで実際にバンドが切替わるかですが、これにはRS232Cをクロス結線にする必要があります。なのでクロスケーブルが必要になりますが、ない場合はDSUBコネクタを2個用意して、ピン2と3を互いに入替える結線をすればOKです(ピン5はGND)。
なおこのソケットはメスーオスなのでピン配置が写真のように向かい合っていますが、メスーメスやオスーオスでは上下がねじれた格好になります。

これでFTdx10が指示通りに動けばマイコンによるCAT制御の準備が整ったことになりましたが、実はここで使った SoftWareSerial には少し問題があります。

それはFTdx10に送信する場合は良いのですが、FTdx10からのデータを受信することができません(受信はするが文字化けが起こる)。これはFTdx10のCAT送信でのポート設定値の内、Stop Bit が2であることによります。つまりFTdx10からの送信を受けるには受信側(ここではマイコン)も Stop Bit を2に設定する必要があるのですがSoftWareSerial にはその設定が無いようなのです。

具体的にはストップビット2の設定は
  Serial.begin(9600,SERIAL_8N2)  
と書きますが、SoftWareSerial ではこのような記述ができません(エラーが返ってくる)。つまり Stop Bit を2にしてFTdx10と通信をするにはスケッチ書込みで使用するメインのRx(D0)、Tx(D1)を使う必要があり、スケッチ書込みとFTdx10とは両立しないのでその都度切替える必要があります。

なのでFTdx10との通信を送受信で行うために、Atmega382PとTTL-USBシリアル基板の間にスイッチを用意してスケッチ書込みとFTdx10との送受信テストを行うことにしました(RX側のみ切替えでTX側は共通で構わない)。

この構成により FTdx10の電源を入れた時点での設定値を受信することができるようになりました。

以上でブレッドボード上での機能確認は終了したので、いよいよ実装に移ることになります。


マイコン(Arduino)でFTdx10のCAT制御 シリーズ記事

FTdx10 vs FTdx3000 vs IC-705 FT8で受信性能を比較してみたら

2025年03月26日 | アマチュア無線
HFトランシーバーの某ランキングによれば、FTDx10は3位、IC-705は13位、FTDx3000は16位となっていますが、その差は実際にはどのくらいあるのだろうか? と思い、その受信性能比較をFT8で調べてみました。

なぜFT8か、はFT8を運用している方はご存じのように、受信信号の同時性があるので同じ局の比較が可能になるからです。またワイドグラフ(ウォーターフォール)を並べると同時間内の受信状況が比較できます。

ここではアンテナはもちろんリグの IPO、フィルタ他受信時の条件を一致させています。具体的には2つのモニターに両者の画像を表示させて、スクショでコピーした画像から同じ局の受信信号強度(dB)を読み取り、両者の差をグラフ化してみました。
最初は FTdx10 vs FTdx3000 です。バンドは 7MHz で、アンテナはマストトップに配置したへリカルDP(7)です。また当然ですが、両者のJTDXの設定値とトランシーバーのSSB DATAの設定値は同じにしてあります。

受信した局は全て国内局でエリア1~10の33局です。各局の受信信号レベル(dB)についてFTdx10とFTdx3000の受信信号強度をグラフで示します(青:FTdx3000、赤:FTdx10)。

またより差が分かるように両者の信号強度差もグラフにしてみました。

ここで横軸は各局なので意味はありません。縦軸は同じ局の同時に受信した信号強度差(dB)ですが、これを見るとFTdx10<FTdx3000なのは約15%程度(グラフで0dB以下)、同じレベルも約15%(0dB)で、それ以外(約70%)ではFTdx10の方が受信信号レベルが平均で約2dB高い、という結果になりました。

またワイドグラフを見てみると受信信号(朱色)の状況が良く分かります。
ここで上はFTdx3000、下はFTdx10ですが、(朱色の)信号強度はあまり変わらないものの信号の周囲の黄色部分がFTDx3000ではFTdx10より広がっており、選択特性?があまり良くないことが分かります。これはスーパーヘテロダイン(アナログ)とSDR(ディジタル)の受信方式の差が出ているとも思えますが、やはりSDRは違うのね! という感じです。

次に IC-705 と FTdx10についても同様に比較してみました。表示したグラフは青:IC-705、赤:FTdx10です。

また両者の受信信号強度の差は次のようになりました。
これを見るとFTdx3000の場合と同様に FTDx10<IC-705 なのは約12%、同じレベルは約20%になり、それ以外はFTdx10の方が平均で約2dB程度高いという結果になりました。またワイドグラフをIC-705(上)とFTdx10(下)を並べてみました。
このようにFTdx3000よりは信号(朱色)の周囲(黄色)は少ないものの、やはりFTdx10の方が良く、同じSDRでもFTdx10の選択特性が良いことが分かります。

以上のようにトランシーバーの性能比較表のように、FTdx10が上位に位置している理由が少し分かったような気がします。

FTdx10 アンテナ自動切替 (1)準備編(3つの方法)

2025年03月15日 | アマチュア無線

現在 FTdx10 のアンテナとしては、7/18、10/14/21/24、28、50 の4系統があり手動で切替ていますが、これをリグのバンド切換えに合わせて自動で行う回路を製作してみました。

回路の基本構成は次のように Relay-1 ~4 の各リレーをON/OFFして4系統のアンテナに切替ます。

まず自動で行うために現状の手動切替装置に自動切替回路を増設しました。これはリレー駆動回路に Tr-SW を挿入したものですが、この Tr-SW には抵抗が内蔵されていて外付け抵抗がいらない素子(DTC143E)を使っています。これは通販のパーツを探していて偶然見つけたものですが、許容電圧50V、電流100mAで何といってもその値段が¥10!とコスパ最強です。ここで Tr-SW のオンオフはロジック回路やマイコンからの5V入力で行います。

なおここでは手動切替装置がすでにあるのでこのようになりましたが、新規に製作する場合は Tr-SW の入力で自動と手動に切換えるのが一般的です。製作には穴あき基板を使って配線はコネクタを配置しています。


次に自動切替の方法としては次の3つの方法があります。

  • ①FTdx10 のバンドデータを利用しロジックICを使う
  • ➁FTdx10 のバンドデータを利用しマイコンで処理
  • (CAT制御プログラムを使っている場合 ) PCにUSB接続したマイコンで制御を行う

1.FTdx10 のバンドデータを利用しロジックICを使用する

ヤエス機には各バンドに対応するバンドデータ出力が用意されています。これは バンドデータ A、B、C、D(1・2・4・8)として後部パネルの LINEAR 端子にありますので、このBCD出力をロジック回路で各バンド出力に分け、各リレーを駆動することになります(ただし miniDIN-10Pプラグ が必要)。

このバンドデータから各バンド出力(1:1.9、2:3.5…、10:50)を得ますが、これは A(1.9)、B(3.5)、A∩B(7)…B∩D(50)のようにAND素子で組み、その出力から希望のアンテナ切替リレー駆動信号を作成します。例えば当局のように 7/18、10~24、28、50 では次の様になり、ロジックICとしては2入力ANDが2個、2入力ORが2個必要になります。ただしこの回路は(説明のため)正論理で示していますが、実際には浮遊電圧による誤動作を避けるために負論理(NAND、NOR)で構成するのが一般的です。

このようにロジックICで組む場合、必要なバンド情報やアンテナが多くなるとかなり煩雑な回路になるため、一般的にはバイナリー・十進変換素子を使います。以下の回路は負論理素子を使った場合で必要なロジックICはデコーダーの他に2入力 NAND 2個、NOR 1個、2入力 OR 1個になります。

また実際の回路構成では、FTDx10からのバンドデータ出力をそのまま接続するのは避けたいので入力にバッファを置き、また各ロジック素子を配置する基板(ソケット)が必要ですが、何といっても各ICのピン配線を実装するには結構複雑で面倒な工作が必要になります。

2.FTdx10 のバンドデータを利用しマイコン(Arduino)を使う

1.のロジック回路の論理をロジックICではなく、マイコンのプログラムで実行し目的のアンテナ切替リレー駆動信号を得る方法です。プログラムとしては練習問題で良く取り上げられる BCD to Decimal ルーチンで以下のようなフローチャートになります。

マイコンを使う利点はアンテナ構成が変わった時でも簡単に変更可能であり、また回路構成上はロジックICを並べるのに比べマイコン1個になるので配線等も非常に簡単です。Arduino を使う場合は PC と USBコード 1本でできます。

なお Arduino が動く ATmega328P を使う場合はブートローダーやプログラム(スケッチ)を書き込む手段が必要ですが、UNOを使ったり、また自作しても簡単に(安く)できるのでオススメです。


3.PCとマイコン(Arduino)の USB通信を使う

これは CAT制御プログラムが動いている場合、そのプログラム中にマイコンへのバンドデータ送信を組込み、これを受信するマイコンの出力でリレーを切替ます。そのスケッチのフローチャートは以下のようになります。

この場合は2.と同様に、CAT制御プログラムから選択されたバンド情報をシリアル通信で受信して駆動リレーを決定し、各リレー駆動出力に設定したピンを HIGH にする(5Vを出力する)だけです。またマイコンの電源は USB でPCに接続されているため別途用意する必要がありません。

ーーーーーーーーーーーーーーーーーーーーー(2)製作編につづく



FTdx10のCAT制御 キーボードでコントロール

2025年01月25日 | アマチュア無線

FTdx10を購入してその使い勝手への不満から、VB.NET による CAT制御プログラムを制作しQSOで使ってきましたが、そのプログラムが必要とする仕様についてもう一度考えてみました。

今まで制作したCATプログラムは当初リモート制御的な仕様を考えていたため FTdx10 自体の操作は考えていなかったのですが、使ってみるとリモート制御ではなくリグは目の前にある訳なので、あって便利な機能だけ盛り込めば良いのではないか、と思うようになってきました。

FTdx10 自体の操作では、まずマウスの使用が大変便利です。マウスを使うことによって多くのメニュー操作が2クリックでできるので、この部分は強いてCATプログラムに入れなくても良いと思います(これはヤエス機の特徴といっても良いと思いますが、ヤエスさんはそのために外部ディスプレイ接続ができるようにしているものと思われます)。

しかしパネルで表示されマウスで操作できるメニュー以外は、ダイヤル左上の FUNC SWを押し現れたメニュー表から選んでクリニックあるいはタッチし、さらにその値を変えるために FUNC SWを回す(SWとVRが兼用されている)ことになります。

これが FTdx10 の操作方法の最大の不満になります。まずこの FUNC SW の押しが固く、チョンではなくガシっと押す感じです。次にメニュー表から選んでタッチするとこの表は消え、選んだメニューが右上の周波数表示の下に現れます。ここで FUNC SW・VRを回すとその間のみパネル中央にその値が現れ、はじめて目的のメニューを設定することができます。

さらに現在設定されている値を確認するにも、この FUNC SW をガチっと押さなくてはなりません。つまりこの FUNC SW・VR 操作を別の方法で簡単にできれば使い勝手が改善されることになり、これが目的とするCAT制御プログラムの仕様ではないか、と思われます。

なのでこのメニュー表から「良く使う」、「時々使う」、「一回のみ/使わず」メニューに分類してみました。その分け方は各局長さんで異なると思いますが、当局では以下の様になりました。

  • よく使う:スペクトラムスコープのレベル、CW Speed、RF出力
  • 時々使う:スペクトラムスコープのCOLOR、CWピッチ、MIC Gain、MONI LEVEL、BK-IN、PROC LEVEL、AMC LEVEL
  • 一回のみかほとんど使わない:MARKER、CONTRAST、DIMMER、M-GROUP、MIC EQ、VOX関連、BK-DELAY、DNF

以上よりCATプログラムでの操作メニューは「良く使う」、「時々使う」メニューと、今までのバンド切替、MODE、IPO、R.フィルタ及びメーター切替に限定することにして、一回かほとんど使わないメニューは省略しました。

次にこのCAT制御プログラムの仕様によると FTDX10 自体のマウス使用が前提となり、このままではリグの前に2つのマウスが並ぶことになります。なのでCAT制御プログラムの操作はキーボードでもできるような仕様にしました。

まずプログラムを起動して Enter でリグと接続しますが、もしシリアルポート関連に異常があればエラーメッセージを出して終了します。また終了は ESC です。

次に最初によく使うメニューについては以下のようにキーボードに割り当てました。

  • バンド: F1~F10/1.9~50メガ(5メガを除く)
  • RF出力: INS・DEL(10~100W)及び 数字の1(10W)~0(100W)
  • スペクトラムレベル: PageUP・PageDown
  • CW Speed: Home・End(15~25)

あまり使わない CW Pitch、Monitor Level、Mic Gain、AMC Level、Speech Processor Level は、最初に P、L、M、N、K をそれぞれ押した後上下の矢印キーで増減ができるようにしました。なお Break in、Speech Processor ON/OFF は、それぞれ B、J を割り当てています。さらに MODEにはQ、A、Z、IPO には W、S、X、Roofing Filter  には E、D、C、を割り当てています。

なおここでは Spectram Color が表示されていますが、通常は表示されず O でON/OFFができます(緑ボタン)。この Spectram Color とメーターは、それぞれ @ と「 のキーを押し左右矢印キーで選択できるようにしました(リグの前に置くのでコンパクトタイプを使用)。

このCAT制御プログラムの改修により、実際の運用ではキーボードをリグの左側に置いて左手で操作できるので使い勝手が大変良くなりました。なおこれを有効にするには、他のプログラムと同様にマウスカーソルがこのプログラム上でオンになっている必要がありますが、これはプログラムのアイコンをクリックしてプログラムが表示された状態になります。

なおバンド切替時にキーボードをパッと見てすぐ分かるように、ファンクションキーの上に百均で買った数字シールを張ってみましたが、これは効果抜群です。

参考のため ファンクションキーの F1 からF10 までを 1.9メガから50メガに割り当てる VB.NET のコードを示します。なおこれには Form1 に SerialPort1 が張付けてあり、かつその BaudRate、PortName、StopBits(=Two)が設定されているものとします。

まずマウスが Form1 をフォーカスしている状態でキーボードの操作を検出するために Form_Load にKeyPreview を書きます。次にキーボードの KeyDown を検出しますが、今ファンクションキーの F1 から F10 までを使う場合、そのキーコードは 112 ~ 121 になります。

 以上のコードだけで FTdx10 にバンド切替の指示を送ることができます。なおファンクションキーの F11 と F12 は KeyDown で e.KeyCode を拾えないので10個しか使えません。そこで 5メガバンドは飛ばしています。

このように FTDx10 に各メニューの指示を送信するだけのプログラムは簡単に制作できます。もしプログラム制作にあまりなじみのない方でも VB.NET は他のプログラム言語に比べ簡単で扱いやすいので、是非チャレンジしてみることをオススメします。

一般的にプログラム(アプリケーション)はPCのディスプレイ上で動くモノがほとんどですが、外部の機器をコントロールするこのようなアプリは非常におもしろく、作っていて楽しいプログラムだと思います。