モールス練習機の製作
ハムフェアの電子工作の資料を興味深く見た。
「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開いてみる。