Hatena::ブログ(Diary)

SHIROのモバイル日記 RSSフィード Twitter

2016-04-30

[]IchigoJamロボット「paprika」

PCNからIchigoJam関連の新製品がいくつか発売されました。
さっそく取り寄せてみました。
f:id:shiro0922:20160430093538j:image:w360

まずはpaprikaを作ってみました。
f:id:shiro0922:20160430154437j:image:w360
工作は結構大変で、3時間以上かかりました。子ども達が工作するとしたら1日がかりでしょう。
段ボールロボット本体よりも、足回りのギアボックスやキャタピラなどが結構面倒です。
f:id:shiro0922:20160430153511j:image:w360
メインの頭脳はIchigoJamなので、ロボットの動作をBASICプログラミングできます。
足回りは、左右のキャタピラのモーターを正転/逆転させて操作します。

OUT 1 …左キャタピラ正転(前進)
OUT 2 …左キャタピラ逆転(後退)
OUT 32 …右キャタピラ正転(前進)
OUT 16 …右キャタピラ逆転(後退)
ロボットの左右の腕はサーボモーターで角度(パルス数)を指定して動かせます。
PWM 3,50 …左腕を前90度
PWM 3,145 …左腕を真下0度
PWM 3,240 …左腕を後ろ90度
PWM 4,50 …右腕を前90度
PWM 4,145 …右腕を真下0度
PWM 4,240 …右腕を後ろ90度
あとはプログラム次第で、いろいろ動かせます。
IchigoJamの入出力ポートはMapleSyrupを突き抜けて出ているので、センサーなどを付けるとさらに面白いかもしれません。

2016-01-26

[]LightsOut

FacebookのIchigoJam-FANグループで話題に出たパズルゲーム「LightsOut」をリメイクしたものを掲載します。
通常のIchigoJam版と、Ichigo64版(IchigoJam+IchigoDot+ジョイスティック)の2種類です。
f:id:shiro0922:20160126011855p:image

IchigoJam版

起動すると、5×5=25個のライトがランダムにON/OFFされて表示されます。
反転するカーソルをカーソルキーで上下左右に動かして、スペースキーを押すと、そのライトおよび上下左右に隣接するライトが反転(ON→OFF、OFF→ON)します。
全てのライトをOFFにすると、そのステージはクリアとなり、次のステージへ進みます。
ギブアップの場合は、「R」キーを押すと別のステージに変わります。

1 '*LightOut
2 CLV:LET[90],-1,0,1,0,0,-1,0,1,0,0
3 POKE#740,0,0,0,#18,#18,0,0,0
4 POKE#750,#FF,#FF,#FF,#E7,#E7,#FF,#FF,#FF
5 POKE#758,#C3,#81,0,0,0,0,#81,#C3
6 SRNDTICK()+ANA(2)
7 FORI=1TO10:P=RND(5):Q=RND(5):GSB20:NEXT
8 CLS:GSB26:P=0:Q=0
9 R=2:GSB25
10 K=INKEY()-28:IFK=54GOTO6
11 IFK<0ORK>4GOTO10
12 IFK=4GOTO17
13 R=0:GSB25
14 P=P+[90+K*2]:Q=Q+[91+K*2]
15 P=P+(P<0)-(P>4):Q=Q+(Q<0)-(Q>4)
16 GOTO9
17 BEEP:GSB20:GSB26
18 IFL>0GOTO9
19 LC0,6:?"CLEAR!":BEEP9,5:WAIT9:BEEP9,5:WAIT120:S=S+1:GOTO6
20 FORD=0TO4
21 X=P+[90+D*2]:IFX<0ORX>4GOTO24
22 Y=Q+[91+D*2]:IFY<0ORY>4GOTO24
23 Z=X+Y*5:[Z]=![Z]
24 NEXT:RTN
25 LCP,Q:?CHR$(232+R+[P+Q*5]):RTN
26 L=0:FORY=0TO4:LC0,Y:FORX=0TO4
27 Z=X+Y*5:?CHR$(232+[Z]);:IF[Z]L=L+1
28 NEXT:NEXT:RTN

Ichigo64版

起動すると、8×8=64個のライトがランダムにON/OFFされて表示されます。
点滅するカーソルをジョイスティックで上下左右に動かして、ボタンを押すと、そのライトおよび上下左右に隣接するライトが反転(ON→OFF、OFF→ON)します。
全てのライトをOFFにすると、そのステージはクリアとなり、次のステージへ進みます。
ギブアップの場合は、ボタンを1秒以上長押しすると別のステージに変わります。

  • ジョイスティックのアナログ値による調整(3行目のH,L)
    • 横方向(IN5):「左」=0近辺・「右」=1023近辺の時は「H=1」、逆の時は「H=-1」。
    • 縦方向(IN6):「上」=0近辺・「下」=1023近辺の時は「L=1」、逆の時は「L=-1」。

1 '*LightOut64J
2 WAIT60:VIDEO0:UART1:CLS:?:OUT1,-1:OUT2,-1
3 CLV:H=1:L=1:LET[90],-1,0,1,0,0,-1,0,1,0,0
4 ?"MATLED SHOW 868989E602979263":PLAY"R32L8GECC":WAIT99
5 FORY=0TO7:[Y]=0:NEXT
6 SRNDANA(2)+TICK()
7 FORT=1TO20:P=RND(8):Q=RND(8):GSB22:NEXT
8 GSB27:P=0:Q=0
9 [8]=[8]^(#80>>P):GSB27
10 IFBTN()CLT:GOTO15
11 I=(ANA(5)-511)/300*H:J=(ANA(6)-511)/300*L
12 IF!(I|J)GOTO9
13 P=P+I:Q=Q+J:P=P+(P<0)-(P>7):Q=Q+(Q<0)-(Q>7)
14 [8]=0:WAIT10:GOTO9
15 IFBTN()GOTO15
16 IFTICK()>60BEEP30,60:GOTO5
17 BEEP:GSB22:GSB27
18 IFW>0GOTO9
19 [8]=0:FORT=1TO2:BEEP9,5:GSB21:GSB21:NEXT
20 WAIT99:S=S+1:GOTO5
21 FORY=0TO7:[Y]=[Y]^#FF:NEXT:GSB27:RTN
22 FORE=0TO4
23 X=P+[90+E*2]:IFX<0ORX>7GOTO26
24 Y=Q+[91+E*2]:IFY<0ORY>7GOTO26
25 [Y]=[Y]^(#80>>X)
26 NEXT:RTN
27 W=0:?"MATLED SHOW ";
28 FORY=0TO7:D=[Y]:W=W+D:IFY=QD=D^[8]
29 IFD<16?0;
30 ?HEX$(D);:NEXT:?:RTN

2016-01-24

[]IchigoJamミュージック

音楽をテーマにしたミニプログラム4本を掲載したペーパー(PDF)です。
「はじめのいっぽ/ミニゲームス」に続く、子ども向けのIchigoJam入門課題として作りました。
PLAY命令の文字変数演奏機能を使っていますので、ファームウェア1.2b3以降が必要です。
ペーパーおよびプログラムは、CC BYライセンスとします。プログラミング教室などでご自由にお使いください。
f:id:shiro0922:20160124192724p:image:w360
PDFファイルはこちらからダウンロードしてください。

ピアノ

「1〜8のすうじでえんそう!」
1〜8の数字キーを押すと、ド〜1オクターブ上のドを演奏します。
f:id:shiro0922:20160124193025p:image:w360

1 '*Piano* CC BY Copyright (c) 2016 Shiro SAITO
10 CLS
20 ?"ドレ ミ ファソ ラ シ ド"
30 ?"1 2 3 4 5 6 7 8"
40 P="C ;D ;E ;F ;G ;A ;B ;>C"
50 I=INKEY()
60 IF !I GOTO 50
70 PLAY P+(I-49)*3
80 GOTO 50

オルゴール

「すうじでメロディをいれてエンターをおすと、そのとおりになるよ!」
1〜8の数字キーをいくつか入力してEnterキーを押すと、そのメロディを演奏します。
10〜40行はピアノとほぼ同じなので、スクリーンエディットすると入力の手間が省けます。
f:id:shiro0922:20160124193054p:image:w360

1 '*Music Box* CC BY Copyright (c) 2016 Shiro SAITO
10 CLV:CLS
20 ?"ドレ ミ ファソ ラ シ ド"
30 ?"1 2 3 4 5 6 7 8"
40 P="C ;D ;E ;F ;G ;A ;B ;>C":?
50 I=INKEY():IF !I GOTO 50
60 IF I=10 GOTO 90
70 L=L+1:I=I-48:[L]=I:?I;
80 GSB 120:GOTO 50
90 FOR I=1 TO L
100 GSB 120
110 NEXT:RUN
120 PLAY P+([I]-1)*3:WAIT 30:RTN

きおくゲーム

「おとがなったじゅんばんにすうじをおせ!」
いわゆるサイモンです。最初に1つの音を出題されるので、そのとおりにキーを押します。
音が1個ずつ増えて出題されるので、その順番にキーを押します。
押し間違えると、正確に答えられた音の数を表示して終了します。
f:id:shiro0922:20160124193114p:image:w360

1 '*Simon* CC BY Copyright (c) 2016 Shiro SAITO
10 CLV
20 CLS:?"12345678"
30 P="C ;D ;E ;F ;G ;A ;B ;>C"
40 L=L+1:[L]=RND(8)+1
50 FOR I=1 TO L:GSB 110:NEXT:I=0
60 K=INKEY():IF !K GOTO 60
70 I=I+1:K=K-48
80 IF K<>[I] BEEP:LC 0,2:?"SCORE=";L-1:END
90 GSB 110:IF I<L GOTO 60
100 WAIT 30:GOTO 20
110 LC [I]-1,0:?"*"
120 PLAY P+([I]-1)*3:WAIT 30
130 LC [I]-1,0:?[I]:RTN

リズムゲーム

「いちばん上にきたタイミングで、すうじをおせ!」
いわゆる音ゲーです。画面下から1〜4の数字が上がってくるので、一番上の「<」に来たタイミングで数字キーを押してください。スコアが加算されます。
制限時間の1分が経つと、ゲームが終了します。
f:id:shiro0922:20160124193209p:image:w360

1 '*Rhythm* CC BY Copyright (c) 2016 Shiro SAITO
10 CLV:CLS:CLT
20 P="C ;E ;G ;>C"
30 M=RND(20)+1
40 LC M-1,23:IF M<5 ?M ELSE ?
50 LC 4,0:?"< SCORE=";S
60 FOR T=1 TO 20
70 I=INKEY()
80 IF I>0 AND SCR(I-49,0)=I GSB 120
90 NEXT
100 IF TICK()/60<60 GOTO 30
110 LC 0,1:END
120 PLAY P+(I-49)*3:S=S+1
130 LC I-49,0:?" ":RTN

2016-01-21

[]明るさセンサー回路

子ども向けに「センサーで制御する」簡単な教材が欲しいと思い、フォトトランジスター回路を試してみました。
ブレッドボードに簡単な回路を組んでIchigoJamに入力してみた所、ちゃんと0,1のデジタルで読み取ることができました。
f:id:shiro0922:20160121215524j:image:w360

f:id:shiro0922:20160121222922p:image:w360

10 IF IN(1)=0 THEN LED 1 ELSE LED 0
20 GOTO 10
こんなプログラムで、フォトトランジスターに手をかざして暗くすると、IchigoJamのLEDを光らせることができます。
「暗くなると自動的に点く電灯があるよね?」などと子ども説明すると、実体験に基づいて理解しやすいのではないでしょうか。
今回はオンボードLEDを光らせましたが、出力側で何をさせるかは回路とプログラム次第で、いろいろ使えると思います。

1/22追記

FacebookのIchigoJam-FANグループでアドバイスをいただきました。
後段のトランジスター部分を無くして、100kΩ抵抗とフォトトランジスターだけでもセンサーになります。
f:id:shiro0922:20160122003847j:image:w360

f:id:shiro0922:20160122004103p:image:w360
この場合はIchigoJamのポート2へ接続して、アナログ入力で読み取ります。

10 IF ANA(2)>500 THEN LED 1 ELSE LED 0
20 GOTO 10
「ポート2はアナログの入力もできて、入力値は0〜1023の範囲だよ」などと子ども達に説明しないといけませんが、リアルに照度を読み取っている感じがしていいかもしれません。

1/23追記

4個のLEDを順番に光らせる回路を作り、上記のアナログ入力を応用して、LEDの移動速度が明るさによって変化するようにしてみました。
フォトトランジスターに手をかざして陰にすると、LEDの速度が速くなります。
f:id:shiro0922:20160123154736j:image:w360

f:id:shiro0922:20160123155235p:image:w360

10 FOR I=1 TO 4
20 OUT I,1
30 WAIT (ANA(2)-400)/20
40 OUT I,0
50 NEXT
60 GOTO 10

2016-01-15

[]LIFE PC

FacebookIchigoJam-FANグループで、PCで動くソフト版IchigoJam BASIC「IchigoJam PC」のβ版が公開されています。
一部の機能が実装されていませんが、動作速度はハードウェア版よりかなり速いです。
IchigoJam PCの動作速度を検証するために、ライフゲームのフル画面版を作ってみました。
f:id:shiro0922:20160115235836p:image:w360
ハードウェア版のIchigoJamだと、1世代進めるのに約2分50秒〜3分かかります。気長に待ってください。
IchigoJam PCでは、ThinkPad X100e(CPUAthlon Neo MV-40 1.60GHz)で、1世代に1秒かかりません。200倍くらい速いです。

1 '*LIFE PC
2 CLV
3 '@RESTART
4 FORZ=50TO97:[Z]=(RND(256)<<8)+RND(256):NEXT:BEEP:GSB27
5 '@LOOP
6 L=0:K=0
7 FORY=0TO23:FORX=0TO31:C=0
8 FORE=-1TO1:FORD=-1TO1
9 U=(X+D)&31
10 V=Y+E:V=V+24*((V<0)-(V>23))
11 Z=V*2+U/16:M=1<<(U%16)
12 B=[Z]&M:C=C+(B<>0)
13 NEXT:NEXT
14 Z=Y*2+X/16:M=1<<(X%16)
15 B=[Z]&M
16 IFBB=1:C=C-1
17 Q=0
18 IFC=2Q=B
19 IFC=3Q=1
20 IFQ[Z+50]=[Z+50]|M
21 IFB<>QK=1
22 L=L+Q
23 NEXT:NEXT
24 GSB27
25 IFL>0&&K>0GOTO5
26 GOTO3
27 '@PRTLIFE
28 CLS:A=#900
29 FORZ=50TO97:D=[Z]:[Z-50]=D:[Z]=0:FORX=0TO15
30 B=D&1:POKEA,B
31 A=A+1:D=D>>1
32 NEXT:NEXT:RTN

ダウンロード
リンク集
アクセスカウンター