無線方向探知用オートマチック・キーヤー – 精度、簡単操作、信頼性
部品と材料
| 部品 | 数量 | 備考 |
|---|---|---|
| Arduino UNO | 1 | |
| コンデンサ 100nF | 5 | |
| リレー(汎用) | 1 | |
| LED(汎用) | 1 | |
| コンデンサ 100µF | 1 | |
| ジャンパーワイヤー(汎用) | 1 | |
| アマチュア無線機用外部ハンドセット/マイクプラグ | 1 | お使いの無線機に合わせて選択 |
| トグルスイッチ | 1 |
必要な工具と機器
- はんだごて(汎用)
- はんだ(鉛フリー)
- アマチュア無線機(動作確認用)
プロジェクト概要
アマチュア無線愛好家は、「フォックスハント(狐狩り)」と呼ばれる、遠方に隠された送信機(フォックス)を無線方向探知で見つけ出す練習を行って技術を磨きます。この技術は、送信機を持つ機器や人物を特定する際に役立ちます。
このプロジェクトでは、Arduinoを用いて無線機をキーイング(送信状態に)し、モールス信号で局識別信号(コールサイン)を送出した後、長いトーンを送信します。送信中の電波を方向探知機で追跡することで、送信機の位置を特定できます。
筆者は2011年のARRL教師研修で初めてフォックスハントを体験し、その面白さに魅了されました(ただし、チームが間違ったフォックスを見つけてしまいました)。中学生の理科の授業でこの活動を取り入れたいと考えましたが、自作は複雑すぎるか、コストが高すぎると感じていました。
しかし最近、安価な2m帯無線機とプログラマブル・マイクロプロセッサ(Arduinoなど)を組み合わせれば、わずかな費用で自作フォックスが作れると気づき、夏休みの学習プロジェクトとして取り組みました。
今回は安価で手に入るBaofeng UV-3R(現在は使用していないもの)とArduino Unoを使用しました。異なる無線機(異なるジャック形状)を使う場合でも、ジャックとマイクのテスト手順は同様で、回路とArduinoスケッチはオペレーターのコールサイン部分を除いて同じです。
注意: 回路図は見た目ほど複雑ではありません。0.01µFのコンデンサは、送信時に回路がRFI(高周波妨害)を拾って誤動作するのを防ぐために追加しています。これがないと、至近距離からの送信電波の影響でArduinoが再起動を繰り返すなど、不安定な挙動を示しました。もう1つのコンデンサは、Arduinoの矩形波を滑らかにして正弦波に近づけ、音質を改善するためのものです。
コード
フォックスハント無線キーヤー
無線機をキーイングしてモールス信号で自己識別を行い、トーンを送信するArduinoスケッチです。
/* By Nelson Farrier
* 無線機をキーイングしてトーンを送信
* Baofeng UV-3RをリレーのON/OFFでキーイングし、コールサイン送出後に5秒間のトーンを送る
* 参考: Mike Myers (https://mikemyers.me) @netnutmike
* Let's Make It Episode 6 (https://tech-zen.tv/index.php/shows/let-s-make-it/episodes/59-sensor-fun-with-arduino-1-massive-failure-but-4-successes-let-s-make-it-episode-6)
*/
// モールス符号定義(アルファベット・数字)
char* letters[] = {
".-", // A "-...", // B "-.-.", // C "-..", // D ".", // E
"..-.", // F "--.", // G "....", // H "..", // I ".---", // J
"-.-", // K ".-..", // L "--", // M "-.", // N "---", // O
".--.", // P "--.-", // Q ".-.", // R "...", // S "-", // T
"..-", // U "...-", // V ".--", // W "-..-", // X "-.--", // Y
"--.." // Z
};
char* numbers[] = {
"-----", // 0 ".----", // 1 "..---", // 2 "...--", // 3 "....-", // 4
".....", // 5 "-....", // 6 "--...", // 7 "---..", // 8 "----." // 9
};
int relay = 12; // リレー制御ピン
int TonePin = 13; // トーン出力ピン
int frequency = 1000; // トーン周波数 (Hz)
int dotDelay = 70; // モールス・ドットの長さ (ms)
int charDelay = 500; // 文字間隔 (ファーンズワース方式)
int wordDelay = 1100; // 単語間隔 (ファーンズワース方式)
int cycleDelay = 15000; // サイクル間隔の半分(最大値16383の制限対策)
void setup() {
pinMode(12, OUTPUT);
pinMode(13, OUTPUT);
delay(2000); // 起動後の初期待機
}
void loop() {
digitalWrite(relay, HIGH); // リレーON(送信開始)
delay(1000);
SendText("NF7Z FOX"); // コールサイン送出
delay(1000);
tone(TonePin, frequency); // 7秒間トーン送信
delay(7000);
noTone(TonePin);
delay(10000); // トーンなしで10秒間送信継続
digitalWrite(relay, LOW); // リレーOFF(送信終了)
delay(cycleDelay);
delay(cycleDelay); // 合計30秒のサイクル待機
}
// モールス符号シーケンス送信関数
void morseCodeSequence(char* sequence) {
int i = 0;
while (sequence[i] != NULL) {
dotOrDash(sequence[i]);
i++;
}
delay(charDelay); // 文字間ギャップ
}
// テキストをモールス信号に変換して送信
void SendText(char* MorseCodeLetters) {
int i = 0;
char ch;
while (MorseCodeLetters[i] != NULL) {
ch = MorseCodeLetters[i];
if (ch >= 'a' && ch <= 'z') {
morseCodeSequence(letters[ch - 'a']);
} else if (ch >= 'A' && ch <= 'Z') {
morseCodeSequence(letters[ch - 'A']);
} else if (ch >= '0' && ch <= '9') {
morseCodeSequence(numbers[ch - '0']);
} else if (ch == ' ') {
delay(wordDelay); // 単語間ギャップ
}
i++;
}
delay(charDelay);
}
// ドット/ダッシュの出力制御
void dotOrDash(char dotOrDash) {
tone(TonePin, frequency);
if (dotOrDash == '.') {
delay(dotDelay);
} else { // ダッシュと判定
delay(dotDelay * 3);
}
noTone(TonePin);
delay(dotDelay); // 要素間ギャップ
}
回路図

製作のポイント
- RFI対策: 送信機に近接するため、バイパスコンデンサ(0.01µF)を電源ラインと信号線に配置し、Arduinoの誤動作を防止しています。
- 音質改善: 出力段にコンデンサを挿入し、矩形波を滑らかにして正弦波に近づけています。
- リレー駆動: 無線機のPTT(Push-To-Talk)ラインをリレーで切り替え、Arduinoを高周波から絶縁しています。
- コールサイン変更: スケッチ内の
SendText("NF7Z FOX")部分を自分のコールサインに変更してください。
運用上の注意
- アマチュア無線の免許が必要です。自分のコールサインを正しく送信してください。
- フォックスハントは屋外で行うため、防水・防塵対策を施したケースへの収納を推奨します。
- 電池駆動の場合、消費電流を考慮して電池容量を選定してください。
製造プロセス
- ラジオ技術の進化と工学
- 狩猟ナイフ:青銅器時代から現代フィールドギアへの進化
- Arduino UNOとMAX7219で作るUFOアタックゲーム – レトロなドットマトリクスシューティング
- 3D RGB アルドゥクロック:Bluetooth対応LED時計(RTC内蔵)
- 川の健康を見守る:Arduinoベース水質監視システム「MyRiver」
- Arduinoとジョイスティックでインタラクティブゲーム – LEDフィードバック付き
- ArduinoとBluetoothで作るスマート紛失防止タグ「Find Me」
- COVID-19緊急対応用 携帯型パルスオキシメーター(Arduino Nano+MAX30100)
- Arduinoで作る自律走行ミニローバー
- ヘルスバンド:高齢者を見守る信頼のスマートウェアラブルアシスタント
- 精密な力率改善:コンデンサバンク計算機(kVAR・µF)