モールス練習機の製作

ハムフェアの電子工作の資料を興味深く見た。

「IC高感度ラジオ」たった一つのICを使うだけで AMラジオが出来ちゃうみたい。おいらが初めて作った、「一石ラジオ」とは、同じ石でも 大違いだ。おいらの時は、検波用の石だったものなあ。

「オリジナルモールス練習機」NE555を使った方形波発生器ICの電源を On/Off すると言う、 電信そのものの原理に基づく発生器だ。いいなあ、こういうの。モールスの練習以前に、 ICは、電気が無いと動きませんと言う事が、理解出来るもの。

「工作教室で作ろう! 身近な電波を調べてみよう」これの用途って何でしょう? 盗聴器の 発見だったら、やだな。感度を上げるために、ショットキー・ダイオードを使うあたり、OM (長老)さんの設計になるのかな?

ハムフェアには、どんな出展があるのだろうか? メーカーからの出展は当然あるだろう。 トリオさん、八重洲さん、後何だっけ? 井上さんが居たかなあ。リグも様変わりしてるんだろうなあ。 中身は当然、DSPとかがふんだんに使われた、アマチュアとはかけ離れたものになってるだろうな。 そんなリグで、お喋りしたってDXごっこしたって、所詮「電話ごっご」だよなあ。

いろいろなクラブも、出展してるだろうな。多分、こういうクラブの方が手作り感溢れるものを 出していて、楽しいに違いない。行ってみたくなったぞ。

モールス練習機の製作

前回のモールス発信器を元に、練習機を作ってみよう。うまく出来たら、ハムフェアへ出展したりして。

通常世界の文字を、モールス発信器用にエンコードすればいいんだ。エンコード/デコードと 言うと、生臭い世界に突入する訳だが、ぱっと頭にロジックが浮かぶ限り、Haskellでも 大丈夫そうなので、Haskellで行く事にする。

import System
import System.Process

type Table = [(Char,String)]
morse :: Table
morse = [('a', "sl"), ('b', "lsss"), ('c', "lsls"), ('d', "lss")
         ,('e', "s"), ('f', "ssls"), ('g', "lls"), ('h', "ssss")
         ,(' ', "W")]

a2m :: Char -> String
a2m c  = case lookup c morse of
            Just p -> p ++ "c"
            Nothing -> "ssllssc"    -- ?

encode  :: String -> String
encode s = concat $ map a2m s

mosc :: String -> IO ExitCode
mosc s = do { putStrLn s; rawSystem "mosc" [s] }

main :: IO ()
main = do
  mosc . encode =<< getLine
  main

本来モールス符号には、スペースは定義されていないが、モールス発生器に送り込む コードとして、"w" を、割り当ててしまった。(ワード区切りに相当します)

また、各文字を表わすコードの後に、文字区切り "c" を、自動的に付加するようにしちゃったので、 mosc.exe は、ちょいとタイミングを変更しておいた。まあ、行き当たりばったりで作ってるから しょうがないか。

下記は、実行例。入力した文字列を、エンコードし、結果を表示すると共に、発生器から 音が出てきます。

*Main> :main
ab cd efgh ij
slclssscWclslsclsscWcscsslscllscsssscWcssllsscssllssc
de cbb
lsscscWclslsclsssclsssc

こういうお遊びが、手軽に出来るのがいいなあ。失敗しても、何度でもやり直せるし。その点、 ハード屋さんはつらいよね。モールス発生器がICで出来ていたら、ICの作り直しになっちゃうもの。

ああ、最近は、FPGAか何かで、機能を実現するから、ソフトと一緒か。 ハムフェアでも、きっと、FPGAを使って何か作りましたとか、DSPを使ってSSB発生器を作りました と言うのが、展示されてるに違いない。

昔は、半田こてを振り回して、電子工作。今は、キーボード叩いて、ソフト工作か!

おまけ

おなぐさめで、"haskell モールス" なんてのを検索してみたら、ずばり モールス信号 なんてページがTopに出てきた。面白い。ハフマン符号ですか。そして、説明がSICPに出てたとは。

頭のすみから、ごっそりと抜け落ちていたよ。これから、SICP開いてみる。