通信の原点は「モールス信号」と言いたいところですが、古代に遡ると通信の原点は「狼煙(のろし)」ではないでしょうか? てなことを思いながらLEDテープを狼煙にみたてた「モールス狼煙」をつくってみました。
まずは、動画をご覧ください。
キーボード入力文字、固定メッセージをがモールス符号に変換されてテープ上をがっていきます。動画にはありませんがパドル打ちにも対応しています。
実は、このモールス信号狼煙は、以前に作っていて今年の
関ハムシンポでデモをしたのですが、その時はLEDが32個(x2回繰り返し)だったのですが、今回はLED119個で全長4mにグレードアップしました。これは、使用しているマイコンのIchigoJam Basic(正確にはIchigoCake Basic)がバージョンアップされたおかげで狼煙らしく見えるようになりました。
今回のハードウェアについて:
・自作の
ミニマム・ジャム基板の内、拡大版にも対応した
ミニマム・ジャム・ターボ基板にマイコンチップは1ランク上のLPC1115FBD48/303(64KB flash)を実装。クリスタルの実装は割愛(本当は実装した方が良い)、5V→3.3Vの3端子も実装せず3.3Vで駆動。ファームウェアはIchigoCake Basic V1.4を書き込み。
・ミニマムJAMは、自作の変換基板を介して、
IchigoIgai(お子さんに人気の
IchigoDake用のドッグ)をヤドカリして、LCDモニターとキーボードに接続。(最初はキーボードの動作が不安定※でしたがIchigoDakeのキーボード端子は抵抗でプルアップ強化して解決しています。(※おそらく、GND線の引き回しの影響と推測。)
・WS2812B LED Tape(5mロール/150LEDs)のDin端子とGNDをミニマムジャムのLEDとGND端子に、電源(+5VとGND)は大容量モバイルバッテリーに接続。
(結構電流が流れるので、JAMやIgai経由の電源供給では無理がありました。)
プログラムについて
・
2月の関ハムシンポでデモで使ったIchigoJam用に作ったプログラムを修正して使用しています。IchigoJamでは最大1KBの制限の為、3プログラムに分割していましたが、IchigoCake Basicは8KBまでプログラムできるので1本のプログラムでおさまります。また配列変数の個数も増えた分だけLED個数を増やし、結局119個のLEDを使用しています。
・全プログラムリスト
10 @ARUN:'201019MorseNoroshi(for Cake 1.40)
20 '
30 POKE#700,107,82,0,0,0,40,94,54,109,34,42,115,97,85,50,63,47,39,35,33,32,48,56,60,62,120,0,0,49,0,76,90,5,24,26,12,2,18,14,16,4,23,13,20,7,6,15,22,29,10,8,3,9,17,11,25,27,28
40 POKE#73A,84,85,0,23,59,5,9,55,40,11,51,7,22,45,59,5,9,55,40,20,52,17,27,31,53,58,61,46,30,6,18,22,43,36,10,26,16,29,19,24,57,28,2,12,25,37,3,49,50,11,51,7,8,14,54,15,21,13,42,4,38
50 '
60 CLS:VIDEO3:?"Morse Noroshi 2"
70 KBD1:CLV:S=5:V=50:T=720:GSB@WS
80 '
90 @KB:?"KEY =";:CLT
100 GSB@WS:K=INKEY():I=IN(1):J=IN(4):IF TICK()>T GOTO@AUTO ELSE IF !(K=8 OR (K>32 AND K<91) OR K=127 OR (K>162 AND K<224))AND (I AND J) CONT
110 X=RND(V):Y=RND(V):Z=RND(V)
120 IF !I OR !J GOTO@PADDLE
130 L=9
140 IF K=8 OR K=127 M=256:? "xx";:GOTO 200
150 IF K>161 A=K-105 ELSE A=K-33
160 M=PEEK(#700+A)
170 IF !M GOTO 100
180 ? CHR$(K);" ";
190 IF!(M&256) M=M<<1:L=L-1:CONT
200 M=M<<1:L=L-1
210 IF !L ?:GSB@W2:GOTO@KB
220 BEEP 13,99
230 IF !(M&256) ?CHR$(#A5);:GSB@W1 ELSE?"-";:GSB@W1:GSB@WS:GSB@WS
240 BEEP 0:GSB@W0:GOTO200
250 '
260 @PADDLE:?"*PADDLE*"
270 IF !I BEEP 13,99:GSB@W1::BEEP0:GSB@W0
280 IF !J BEEP 13,99:GSB@W1::GSB@WS:GSB@WS:BEEP 0:GSB@W0
290 I=IN(1):J=IN(4)
300 IF !I OR !J GOTO270ELSE GSB@W2:GOTO@KB
310 '
320 @AUTO:?:?"*AUTO DEMO*":V=50:S=7:T=7
330 'MSG="CQCDEICHIGOHAM"
340 POKE#780,#43,#51,#43,#51,#44,#45,#49,#43,#48,#49,#47,#4F,#48,#41,#4D,#00
350 C=#780
360 IF INKEY() OR !IN(1) OR !IN(4) GOTO @KB
370 X=RND(V):Y=RND(V):Z=RND(V)
380 K=PEEK(C):C=C+1
390 IF !K WAIT T:GOTO350
400 L=9
410 IF K=8 OR K=127 M=256:? "xx";:GOTO 470
420 IF K>161 A=K-105 ELSE A=K-33
430 M=PEEK(#700+A)
440 IF !M GOTO360
450 ?"AUTO:";CHR$(K);" ";
460 IF!(M&256) M=M<<1:L=L-1:CONT
470 M=M<<1:L=L-1
480 IF !L ?:GSB@W2:GOTO360
490 BEEP 13,99
500 IF !(M&256) ? CHR$(#A5);:GSB@W1: ELSE?"-";:GSB@W1:GSB@WS:GSB@WS
510 BEEP 0:GSB@W0:GOTO470
520 '
530 @W1:LET[0],X,Y,Z:GOTO@WS
540 '
550 @W2:GSB@W0
560 @W0:LET[0],0,0,0
570 @WS:WS.LED 119:COPY #DFD,#DF7,-504:COPY #C05,#8CB,-6:COPY #8CB,#8C5,-198:WAIT S:RTN
詳細説明は割愛しますが、モールス符号変換方式については
こちらの記事をご参照下さい。
また、2月にデモをしたエレキーから狼煙を送出(IN1とIN4にパドルを接続)のプログラムも残しています。(今回は接続検証をしていませんが)
以上、何かのご参考になれば幸いです。
※IchigoJamは(株)Jig.jpの登録商標です。
#IchigoJam #IchigoHAM #自作室
PR