公開日:2019/08/03
title.png

6th Season


#6-9 モールス符号発信機

 二進数情報伝送の走りともいうべき、モールス符号の発信機を作ってみようと思います。

 今回は、特に何も難しいことはありません。文字と符号の対応表を調べて、文字列から符号へ変換したら、アクティブブザーで音を鳴らすだけです。

  モールス符号について検索する(別ウインドウが開きます)

発信時間の決まり

 ご存知の通り、モールス符号は、2つの符号、短点と長点の組み合わせで成り立っています。短点と長点、トンとツー、「・」と「−」など、表記は様々ですが、以下、短点/長点と呼びます。

 モールス符号を音として発信する場合、その音の長さと、間隔には規定があります。

 まず、基本的なところから決めておくと、スイッチなどを使って、人間が手動でモールス符号を発信する機能は、今回持ちません。……さすがに、モールス符号を手動でカッコ良く送信できる方は少ないでしょうし、そもそも、筆者が使えないので、機能の検証ができないからです。
 今回は、シリアルモニタから文字列を打ち込むと、それをモールス符号に変換して送信する、と言う機能を提供します。送信するモールス符号のスピードを、基準となるTsdotの時間で指定することによって、制御することができるようにします。

文字とモールス符号の対応

 以下、調べた範囲で、各文字と対応するモールス符号の対応表です。

コード 文字 符号 備考
  送信要求 −・− (Kと同じ)
  送信開始「BT」 −・・・− (=と同じ)
  送信終了「AR」 ・−・−・ (+と同じ)
  通信の終了「VA」 ・・・−・−  
  了解 ・・・−・ (*と同じ)
  訂正「HH」 ・・・・・・・・  
09 タブ   ※SP扱い
  訂正・終了「ラタ」 ・・・−・
  本文「ホレ」 −・・−−−
  待機要求「AS」 ・−・・・ (&と同じ)
20 空白" "   SP(単語の区切り)
21 感嘆符"!" −・−・−−  
22 二重引用符" ・−・・−・  
23 #    
24 $    
25 %    
26 & ・−・・・  
27 ' ・−−−−・  
28 左括弧"(" −・−−・  
29 右括弧")" −・−−・−  
2A * ・・・−・  
2B + ・−・−・  
2C カンマ"," −−・・−−  
2D ハイフン"-" −・・・・−  
2E ピリオド"." ・−・−・−  
2F 斜線"/" −・・−・  
30 0 −−−−−  
31 1 ・−−−−  
32 2 ・・−−−  
33 3 ・・・−−  
34 4 ・・・・−  
35 5 ・・・・・  
36 6 −・・・・  
37 7 −−・・・  
38 8 −−−・・  
39 9 −−−−・  
3A : −−−・・・  
3B ;    
3C <    
3D = −・・・−  
3E >    
3F 疑問符"?" ・・−−・・  
40 アットマーク"@" ・−−・−・  
41 A ・−  
42 B −・・・  
43 C −・−・  
44 D −・・  
45 E  
46 F ・・−・  
47 G −−・  
48 H ・・・・  
49 I ・・  
4A J ・−−−  
4B K −・−  
4C L ・−・・  
4D M −−  
4E N −・  
4F O −−−  
50 P ・−−・  
51 Q −−・−  
52 R ・−・  
53 S ・・・  
54 T  
55 U ・・−  
56 V ・・・−  
57 W ・−−  
58 X −・・−  
59 Y −・−−  
5A Z −−・・  
ここより、S-JISコード
コード 文字 符号 備考
A1 。段落"」" ・−・−・・
A2 「下向き括弧"(" −・−−・−
A3 」上向き括弧")" ・−・・−・
A4 、区切点"、" ・−・−・−  
A5   ※SP扱い
A6 ・−−−  
A7 −−・−− (アと同じ)
A8 ・− (イと同じ)
A9 ・・− (ウと同じ)
AA −・−−− (エと同じ)
AB ・−・・・ (オと同じ)
AC ・−− (ヤと同じ)
AD −・・−− (ユと同じ)
AE −− (ヨと同じ)
AF ・−−・ (ツと同じ)
B0 ー長音"ー" ・−−・−  
B1 −−・−−  
B2 ・−  
B3 ・・−  
B4 −・−−−  
B5 ・−・・・  
B6 ・−・・  
B7 −・−・・  
B8 ・・・−  
B9 −・−−  
BA −−−−  
BB −・−・−  
BC −−・−・  
BD −−−・−  
BE ・−−−・  
BF ソ −−−・  
C0 −・  
C1 ・・−・  
C2 ・−−・  
C3 ・−・−−  
C4 ・・−・・  
C5 ・−・  
C6 −・−・  
C7 ・・・・  
C8 −−・−  
C9 ・・−−  
CA −・・・  
CB −−・・−  
CC −−・・  
CD  
CE −・・  
CF −・・−  
D0 ・・−・−  
D1  
D2 −・・・−  
D3 −・・−・  
D4 ・−−  
D5 −・・−−  
D6 −−  
D7 ・・・  
D8 −−・  
D9 −・−−・  
DA −−−  
DB ・−・−  
DC −・−  
DD ・−・−・  
DE ゙濁点 ・・  
DF ゚半濁点 ・・−−・  
  ・−・・− 対応する文字なし
  ・−−・・ 対応する文字なし

 冒頭にも書きましたけど、モールス符号って、二進数情報伝送の走りですよね。さらに進んでいることに、アルファベットの方は、単語の中での出現確率が高いアルファベットに短いコードが割り当てられているのだそう。これって、ハフマン符号化の考え方ですから、まさに、現代におけるデジタル伝送の礎と言って過言ではないでしょう。
 ただ、残念ながら、日本語のモールス符号の方は、日本語での出現確率順にはなっていなくて、「ABCD……」の符号を、「イロハニホヘト」の順に、割り当てたものをベースとして、少しいじっただけみたいです。

モールス符号を送信する

 シリアルモニタで受け付けるコマンドの仕様は以下の通りです。

 Arduinoとアクティブブザーを以下の通り、接続してください。

Arduino 接続 アクティブブザー
D11
GND −(表示なし)

 手元のアクティブブザーのサイズだと、「+」端子をUNOのD11ピンソケットに挿入すると、「−」端子位置がちょうどGNDのピンソケット位置に来るので、デュポンワイヤ無しでUNOに直挿しできます。

ar69_expr.jpg

 プログラムをリンクしておきます。

  完成版プログラム:morse_code.ino

 コンパイルしてArduinoへ書き込んだら、シリアルモニタを開いてください。と、言いたいところですが、今回は、S-JISコードの送受信に対応した通信ソフトウェア(Tera Termを推奨)を起動してください。Arduino IDEのシリアルモニタでは、文字コードがunicodeになってしまうので、半角カタカナの送信ができません。
 Tera TermでArduinoと接続したら、「KanjiCodeメニュー ⇒ Recv/Send: Shift_JIS」を選択してください。

  実験サンプル:【 】内はTera Termからの送信データ
  【send,I MISS YOU.】 …… こんな電信をもらったら飛んで行きます。イヤ、相手によるな。
  **(I) ( )
  --(M)**(I)***(S)***(S) ( )
  -*--(Y)---(O)**-(U)*-*-*-(.)
  OK: sent I MISS YOU.

  【sdot,75】 …… 送信速度が少しゆっくりになります。
  OK: sdot=75[ms]

  【send,ニイタカヤマノボレ】 …… 現在の日本では、これを伝送しても戦争は始まらないはず。
  -*-*(ニ)*-(イ)-*(タ)*-**(カ)*--(ヤ)-**-(マ)**--(ノ)-**(ホ)**(゙)---(レ)
  OK: sent ニイタカヤマノボレ

  録音データを聞いてみる:
    「I MISS YOU.」(Tsdot=50ms)
    「ニイタカヤマノボレ」(Tsdot=75ms)

 音を鳴らすと共に、変換したモールス符号をシリアルに出力するようになっています。
 また、英数字と日本語カタカナのモールス符号は、一部重複しており、同時使用できません。そこで、本プログラム(morse_code.ino)のローカルルールとして、日本語のモールス符号は、日本語の制御コードとして規定されていた「本文(ホレ、[SI]に割り当て)」〜「訂正・終了(ラタ、[SO]に割り当て)」の間に挟むようにしました。……本来の電信ルールではないので、ご注意ください。
 あと、対応しているのは、「半角」カタカナなので、全角カタカナを送らないようにしてください。


 普通に生活していると、さすがにモールス符号なんて使いませんけど、Arduinoで目覚まし時計をDIYして、アラーム音をモールス符号「アサダ、オキロ」にしてみるとか、ちょっとした遊びには使えそうではないですか?


btn_arduino.png

btn_prev.png btn_next.png

home