公開日: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