SHIROのIchigoJam日記

マイコン「IchigoJam」(イチゴジャム)の電子工作とプログラミングをメインに

StickJam(バーサライタ用IchigoJam)

※この記事は「IchigoJam Advent Calendar 2019」に参加しています。

f:id:shiro0922:20191220164819j:plain
バーサライタ(POV)用のスティック形IchigoJamです。手に持って左右に振ると、点滅するLEDで文字が見えます。ライブ会場で振ればオタ芸ができます(^_^)
★12/31にコミックマーケット97(東京ビッグサイト)で販売予定です。
説明動画はこちら。

【IchigoJam】StickJam

f:id:shiro0922:20191223001839p:plain

f:id:shiro0922:20191222142431p:plain
先月にデザインフェスタVol.50へ出展した時に、振ったり回したりして文字が見えるバーサライタが人気でした。それをヒントに、バーサライタ用IchigoJamの基板を起こして、作ってみました。

f:id:shiro0922:20191220164956j:plain
基板の裏に、電源の単3電池×3本があります。

f:id:shiro0922:20191220165322j:plain
LED部分は、マイコン内蔵フルカラーLED・WS2812B(チップタイプ)を8個搭載。IchigoJam BASIC 1.4から、このLEDを簡単に制御できるようになりました。フルカラーなので色もいろいろ変えられます。
表示する文字は2文字分(縦8ドット×横16ドット)です。
チップタイプLEDは見た目がカッコイイのですがはんだ付けがかなり大変なので、子ども向けには5mm砲弾タイプのLEDにした方がいいかもしれません。ちょっと考え中です。

写真ではLEDの左側にありますが、黒いチルトスイッチが2個付いています。通常のバーサライタでは、右に振る時と左に振る時で文字が逆(左右裏返し)に表示されてしまいます。このスティックでは、振る動きの切り替わりをチルトスイッチで検知して、左右どちらに振っても同じ向きで文字が見えるようにしています。
当初はジャイロセンサーを試したのですがうまく検知できず、ボール入りのチルトスイッチにしました。振るとカチカチ言うのが難点ですが、シンプルな物の方が案外うまく行くようです。

f:id:shiro0922:20191220165209j:plain
両端にビデオ端子とUSBキーボード端子が付いているので、モニタとキーボードをつなげると、普通にIchigoJamとして使えます。中のプログラムの書き換えもできます。


下の方に「1・2・3」と書かれた切り替えスイッチが付いています。
→3接点小型スライドスイッチ SS-14MDP2(共立エレショップ)
中のプログラム次第ですが、これで表示する文字を切り替えることができます。


カラーLEDとセットボタン。
これもプログラム次第ですが、モニタが無くても、表示する文字をキーボードなどで設定することができます。

プログラム

セレクタ

ファイル0にこのプログラムを入れて自動起動させると、切り替えスイッチの位置を読み取って、ファイル1~3のプログラムを起動します。

10 @ARUN:'*Selecter
20 OUT 1,-2:OUT 2,-2:OUT 3,-2
30 IF !IN(5) LRUN 1
40 IF !IN(6) LRUN 2
50 IF !IN(7) LRUN 3
60 GOTO 30

「上田」

左右に振ると「上田」の文字を表示します。
30~180行のデータを変更すれば、表示する文字が変えられます。
250~270行(1文字目)、350~370行(2文字目)の値を変えると、それぞれの文字の表示色(GRBの順)が変えられます。1文字目と2文字目で色を変えた方が、文字が見やすいようです。

10 '*Ueda
20 CLV:CLS
30 [80]=`01000000
40 [81]=`01000000
50 [82]=`01000000
60 [83]=`01111111
70 [84]=`01001000
80 [85]=`01001000
90 [86]=`01000000
100 [87]=`00000000
110 [88]=`01111111
120 [89]=`01001001
130 [90]=`01001001
140 [91]=`01111111
150 [92]=`01001001
160 [93]=`01001001
170 [94]=`01111111
180 [95]=`00000000
190 A=#900
200 FOR I=0 TO 7
210 FOR J=0 TO 7
220 M=1<<J
230 D=[80+I]&M
240 P=A+I*48+J*6
250 POKE P,70*(D>0)
260 POKE P+2,0*(D>0)
270 POKE P+4,0*(D>0)
280 NEXT
290 NEXT
300 FOR I=8 TO 15
310 FOR J=0 TO 7
320 M=1<<J
330 D=[80+I]&M
340 P=A+I*48+J*6
350 POKE P,0*(D>0)
360 POKE P+2,0*(D>0)
370 POKE P+4,70*(D>0)
380 NEXT
390 NEXT
400 @LOOP
410 X=IN(1):Y=IN(4)
420 IF X=0 && U=1 GSB @VM
430 IF Y=0 && V=1 GSB @VP
440 [0]=0:[1]=0:[2]=0
450 WS.LED 1,8
460 U=X:V=Y
470 GOTO @LOOP
480 @VP
490 WAIT 1
500 FOR I=0 TO 15
510 COPY #800,A+I*48,48
520 WS.LED 8
530 NEXT
540 RTN
550 @VM
560 WAIT 1
570 FOR I=15 TO 0 STEP -1
580 COPY #800,A+I*48,48
590 WS.LED 8
600 NEXT
610 RTN

以前に8LEDスティックで作ったバーサライタと同様に、表示データをいったんVRAMへ展開(190~390行)、チルトスイッチで振る方向の切り替わりを検知して(410~430行)、VRAMのデータを配列変数領域へコピーしながらLEDを光らせています(480~540行が順方向、550~610行が逆方向表示)。そのため起動後は、データをVRAMへ展開するのを3秒くらい待ってから、左右に振ってください。

キー入力カスタム

USB端子にキーボードをつないで、表示する文字をカスタマイズできるプログラムです。

  • キーボードをつないで、切り替えスイッチをこのプログラムが入っているファイル番号にして、電源を入れます。
  • セットボタンを押して、設定モードに入ります。カラーLEDが赤く点灯します。
  • キーボードのカーソルキー(矢印キー)を押して、カラーLEDを見ながら表示色を設定します。←(左)で赤、↓(下)で緑、→(右)で青の値を変化させます。それぞれ「0」(消灯)~「7」(最大輝度)の8段階があり、「7」の時にキーを押すと「0」に戻ります。↑(上)を押すとリセットされて3色とも「0」(消灯)になります。
  • 表示色が決まったら、表示したい1文字をキーボードから入力します。入力した文字がそのままIchigoJamフォントで設定されて、8個のLEDで表示パターンが1回レビューされます。
  • 同様に、2文字目の表示色と文字を設定します。
  • 2文字目の入力が終わると、その設定が保存されて、通常モードに戻ります。スティックを左右に振ると、設定した2つの文字が表示されます。
  • 設定した文字と色は、プログラムと一緒にSAVEされるので(コード領域の末端に書きこんでいます)、電源を切っても消えません。新たな文字を設定するまで保持されます。
1 '*Key-In
2 CLV:WS.LED 9
3 N=0:GSB26
4 N=1:GSB26
5 V=#900:M=0:L=15:W=0
6 IF BTN() GOTO 36
7 X=IN(1):Y=IN(4)
8 IF X=0 && T=1 GSB 20
9 IF Y=0 && U=1 GSB 14
10 [0]=0:[1]=0:[2]=0
11 WS.LED 1,8
12 T=X:U=Y
13 GOTO 6
14 WAIT 1
15 FOR I=M TO L
16 COPY #800,V+I*48,48
17 WS.LED 8:WAIT W
18 NEXT
19 RTN
20 WAIT 1
21 FOR I=L TO M STEP -1
22 COPY #800,V+I*48,48
23 WS.LED 8:WAIT W
24 NEXT
25 RTN
26 A=#FF0+N*4
27 C=PEEK(A):G=PEEK(A+1):R=PEEK(A+2):B=PEEK(A+3)
28 V=#900+384*N
29 FOR I=0 TO 7:E=128>>I
30 FOR J=0 TO 7
31 D=PEEK(C*8+J)&E:P=V+I*48+J*6
32 POKE P,G*(D>0)
33 POKE P+2,R*(D>0)
34 POKE P+4,B*(D>0)
35 NEXT:NEXT:RTN
36 CLV:R=10
37 FOR N=0 TO 1
38 IF BTN(28) R=R+10:IF R>70 R=0
39 IF BTN(31) G=G+10:IF G>70 G=0
40 IF BTN(29) B=B+10:IF B>70 B=0
41 IF BTN(30) R=0:G=0:B=0
42 [24]=G:[25]=R:[26]=B:WS.LED 9
43 CLK:WAIT10:C=INKEY()
44 IF C<32 GOTO 38
45 A=#FF0+N*4
46 POKE A,C,G,R,B:GSB26
47 M=0:L=7:W=10:GSB14
48 NEXT
49 SAVE FILE()
50 RUN

IchigoJam BASIC 1.4用プログラムまとめ

先日公開されたIchigoJam BASIC 1.4の新機能を使ったプログラムを、改めてまとめます。皆さんも試してみてください。

ロゴクロック


【IchigoJam】ロゴクロック
簡易グラフィック(XOR描画)と三角関数のテストとして作りました。

10 '*Logo Clock
20 CLV:CLS
30 LET [0],5,0,0,5,0,1,0,0,0,0,0,5,0,0,0,0,0
40 LET [17],5,7,1,7,5,5,7,5,7,5,0,5,7,5,#B,#B,#B
50 LET [34],1,3,1,1,1,1,3,5,3,1,3,1,3,3,2,2,2
60 LET [51],3,3,3,3,3,1,3,1,3,3,3,3,3,3,3,3,3
70 FOR Y=0 TO 51 STEP 17
80 LC 7,Y/17+10
90 FOR X=0 TO 16
100 ? CHR$(#80+[X+Y]);
110 NEXT
120 NEXT
130 FOR T=-90 TO 269
140 X=COS(T)/11
150 Y=SIN(T)/11
160 U=COS(T+1)/11
170 V=SIN(T+1)/11
180 DRAW 31+X,23+Y,31+U,23+V
190 NEXT
200 @LOOP
210 FOR T=-90 TO 264 STEP 6
220 X=COS(T)/11
230 Y=SIN(T)/11
240 DRAW 31,23,31+X,23+Y,2
250 WAIT 60
260 DRAW 31,23,31+X,23+Y,2
270 NEXT
280 GOTO @LOOP

花火アート

  • 起動すると画面下に発射台(ドット)が点滅します。カーソルキー左右で発射位置を決めてください。
  • スペースキーを押すと花火を発射します。適当な高さでもう一度スペースキーを押すと、花火が炸裂します。
  • 好きな大きさに花火が開いた所で、スペースキーを押して止めてください。発射台の移動へ戻ります。
  • 発射台移動中にXキーを押すと、画面をクリアします。

簡易グラフィックと三角関数を使って、花火の円を描いています。また、画面クリアのXキーはBTN(88)で読み取っています。
PCN北はりま謹製「HetaPad」を使うと、操作しやすくて楽しいです(^_^)

10 '*Hanabi Art 1.4
20 CLV:CLS
30 @START
40 IF BTN(32) CONT
50 Y=47
60 @XLOOP
70 DRAW X,Y,0
80 X=X-BTN(28)*(X>0)+BTN(29)*(X<63)
90 DRAW X,Y
100 IF BTN(88) CLS
110 IF !BTN(32) GOTO @XLOOP
120 IF BTN(32) CONT
130 @YLOOP
140 BEEP 50-Y,1
150 DRAW X,Y,0
160 Y=Y-1
170 DRAW X,Y,1
180 WAIT 1
190 IF !BTN(32) && Y>0 GOTO @YLOOP
200 IF BTN(32) CONT
210 BEEP 50,10
220 R=1
230 @FIRE
240 FOR T=0 TO 330 STEP 30
250 DRAW X+R*COS(T)/256,Y+R*SIN(T)/256
260 NEXT
270 R=R+1
280 IF !BTN(32) GOTO @FIRE
290 GOTO @START

バイオリズム

www.ichigojaman.jp
先日記事にしました。誕生日(年・月・日)と、現在の年・月を入力すると、今月のバイオリズムを描きます。
簡易グラフィック、三角関数を使っています。

IchigoJamスポーツ1.4

www.ichigojaman.jp
「大なわとびさっちゃん」「ゴルフ」「PK戦チームバトル」のスポーツゲーム3本をまとめたペーパーです。
簡易グラフィック、三角関数、BTN(88)でのXキーの読み取りを使っています。

スイングスピード計測


【IchigoJam】スイングスピード計測
TICK(1)での高速TICKを利用して、バットのスイングスピードを計測してみました。
センサーはとりあえず手持ちのフォトトランジスタを2個並べて、その上でバットを振りました。
f:id:shiro0922:20191209002117p:plain
赤外線センサーを使えばもっと正確になるでしょうし、ミニ四駆の速度計測などもできそうです。

10 '*Swing Speed
20 CLV:VIDEO 3:CLS:OUT 1,-1:OUT 2,-1:L=30
30 ?"Let's Swing"
40 IF ANA(5)>500 CONT
50 CLT
60 IF ANA(6)>500 CONT
70 C=TICK(1)
80 V=L*565/C
90 ?"C=";C;" V=";V;"km/h"

速度の計算方法ですが、高速TICKのカウントが48MHzの3056分周

f=48×10^6/3056(Hz)
で動いているので、1カウント当たりの秒数はその逆数
t=3056/(48×10^6)(秒)
になります。
速度=距離/時間なので、2つのセンサー間の距離をL(cm)、その間のカウント数をCとすると、
V=L/(C×t)(cm/s)
 =L÷100÷1000/(C×t÷60÷60)(km/h)
 =L×108000/(C×191)(km/h)
 ≒L×565/C(km/h)
となります。今回のセンサー間距離Lは30cmなので、これで2バイト整数の計算に収まります。
ちなみにプロ野球選手の平均スイングスピードは140km/hだそうです。30cmの距離を進むのにかかる時間は、
30÷100÷1000/(140÷60÷60)
 =27/3500
 ≒0.00771(秒)
高速TICKでのカウント数は、
27÷3500/{3056/(48×10^6)}
 =27×48×10^6/(3500×3056)
 ≒121(カウント)
ということで、プロ野球選手のスイングも何とか計測できそうです。

IchigoJam用モバイルバッテリ

IchigoJamをモバイルバッテリで動かしたい」時に使えるバッテリについてです。
よくあるモバイルバッテリをつないで動かすと、IchigoJam単体では消費電力が低いため、しばらく経つとバッテリ側の保護回路が働いて給電が切れてしまいます。

※バッテリを保護するためで、それが正常な動作です。モニタなど周辺機器も一緒につないでいると、合計の消費電力が大きくなるので切れません。

それを防ぐモバイルバッテリとして有名なのが、「IoT機器対応」を謳う「cheero Canvas」。

cheero Canvas 3200mAh IoT機器対応 モバイルバッテリー ホワイト CHE-061

cheero Canvas 3200mAh IoT機器対応 モバイルバッテリー ホワイト CHE-061

  • 出版社/メーカー: cheero
  • メディア: エレクトロニクス
これだとIchigoJam単体で動かしていても、給電が切れません。
が、マイコン使いの人達に有名なのか、よく品切れしています。

先日、Facebookで話題に出ていたのが「RAVPower RP-PB125」。

「電源ボタンを4秒長押しすると、Bluetoothイヤホン充電モードになる」という製品です。入手して試してみました。


RP-PB125(上)と、Anker PowerCore Fusion 5000(下)との比較。
RP-PB125は6700mAhなので若干大きいですが、見た感じはほぼ同じ。


PowerCore Fusionとほぼ同じ大きさなので、スクールセットの右上のスペースに収まります。
※PowerCore FusionはIchigoJam単体への給電には使えません(数分で給電が切れます)。スクールセットで液晶モニタと同時に給電すると、消費電力が大きいので切れません。


RP-PB125の側面。左から、給電用USB A端子×2、充電用micro USB端子、LEDインジケーター、電源スイッチ。

IchigoJamにつないで試してみましたが、結論から先に言うと使えました。以下にやり方や注意点を書きます。

  • 通常モードでは、一般的なバッテリと同じく20秒ほどで給電が切れます。
  • 給電中に電源ボタンを4秒長押しすると「Bluetoothイヤホンモード」になります。LEDインジケーターが、通常の電源ボタン押しでは数秒点灯して消えるのですが、Bluetoothイヤホンモードだと数十秒光り続けるので区別できます。なお、何も繋いでいない(給電していない)時に長押ししても切り替わらないので注意。給電中にもう一度長押しすると通常モードに戻ります。
  • Bluetoothイヤホンモードにすると、IchigoJam単体に給電しても切れません。

なお、上記のcheero Canvasは、スイッチ切り替え操作をしなくても、そのままIchigoJam単体につないで給電できます。
「スイッチでの切替は面倒だけど、コンセントに挿して直接充電したい」「ACアダプタとしても使いたい」という人は、RP-PB125を買ってもいいかもしれません。