時代はWiiコントローラーにキネクト。
IchigoJamでもモーションセンサーを使ってみよう。
しかも今回紹介するモーションセンサーはライトセーバー型でカッコイイし (何処が)、
キミでも簡単に作れるぞ (秋月で揉まれるが良い)。
このモーションセンサーは、ライトセーバーの左右の位置を感知出来る。
ライトセーバーはオモチャ屋さんで買おう。
ライトセーバーが無くても、ルミカライトで代用出来る。
ルミカライトを使う場合は、LEDと電池を使ったタイプがおすすめ。
使い捨ての発光液を使ったタイプは暗くてセンサーが反応しにくい。
センサーには光を感知するCdSを使う。 CdSは下の写真の様な形をしていて、
電子工作用のパーツ屋さんで売っている。
このモーションセンサーの原理は簡単。
まず、CdSは光の強さで抵抗値が変わる。
そこで図の様にCdSを2つ繋げると、左のCdSにライトセーバーが近づくほど電圧が下がり、
右のCdSにライトセーバーが近づくほど電圧が上がる様になる。
つまりシーソーの様な働きをするんだ。
そしてIchigoJamはこの電圧を数字に変換する ANA() 関数があるから、簡単に位置を調べられんだ。
下の図は2つのCdSを繋いで電圧を作る為の基板。
左右のケーブルはそれぞれ左右のCdSに繋がっている。
真ん中の3本のケーブルはそれぞれIchigoJamの GND、IN2、VCCに繋がっている。
実際にセンサーを読み取ってみよう。 このプログラムを打ち込んで実行すると、画面のどこかに (^p^) が表示されるハズだ。 そして (^p^) の位置はライトセーバーの位置に応じて変わる。
1 CLS 2 LC X,13 3 ?" " 4 X=18+ANA()-512)/8 5 IF X<0 X=0 6 IF X>35 X=35 7 LC X,13 8 ?"(^p^)" 9 WAIT 10 10 GOTO 2
そしてこのプログラムを実行したら調整して欲しい事がある。 まず、ライトセーバーを光らせずに、何もセンサーに近づけない状態で、 (^p^) が真ん中になるように調整する。 調整の仕方は色々あるけれど、例えば左右のCdSのどちらかに差し込む光が強いと (^p^) がかたよってしまう。 その場合はカーテンを閉めて日差しを遮ったり、背景を隠す黒い板をCdSの後ろに立ててみると良い。
次に、ライトセーバーを光らせて、センサーから見える位置にかざす。 すると、かざす位置によって (^p^) の位置が変わるのはさっき説明した通りだけど、 もう1つ、ライトセーバーをド真ん中にした時に、 (^p^) も真ん中に位置する様に調整する。 CdSの向きがズレてたりすると偏りやすい。 CdS同士が向かい合う様に調整しよう。
最後にもう1つ、センサーの感度が悪くて、 ライトセーバーを左右に振っても左右に振りきれない時は、 4行目の 「4 X=18+ANA()-512)/8」 の 「/8」 を 「/7」 や 「/6」 に書き換えてみよう。 数字が小さいほど感度が上がる。
次は簡単なゲームを作ってみよう。 このプログラムを打ち込んで実行すると、 (^p^) が2つ表示されるハズだ。 そしてキミはライトセーバーを、CdSから見える位置よりも上で構えておく。 次に、左か右、どちらから、CdSから見える位置に向かってライトセーバーを振り落とす。 すると左なら左の (^p^)、右なら右の (^p^) が (x_X) になるハズだ。
1 CLS 2 LC 4,13 3 ?"(^p^)" 4 LC 27,13 5 ?"(^p^)" 6 X=18+ANA()-512)/8 7 IF X<0 X=0 8 IF X>35 X=35 9 LC 4,13 10 IF X<12 ?"(x_X)" 11 LC 27,13 12 IF X>24 ?"(X_x)" 13 WAIT 20 14 GOTO 6
このプログラムは魚釣りゲームだ。 かなり長いけど、間違え内容に慎重に打ち込んでみよう。
1 CLS:X=18:L=6:E=3 2 [0]=RND(18)+9:[3]=15 3 [1]=RND(18)+9:[4]=18 4 [2]=RND(18)+9:[5]=21 5 H=0 6 LC H,9:?"^":LC H,25:?"~" 7 IF RND(2)=0 LC H,25:?"*" 8 H=H+1:IF H<35 GOTO 6 9 LC 3,2 10 ?"CONTINUE:6 FISHES:3" 11 LC X,8:?" ":X=18+ANA()-512)/8 12 IF X>32 X=32 13 IF X<4 X=4 14 LC X,8:?"Q" 15 Y=Y+1:IF Y=10 P=X:PLAY"F8" 16 LC P,Y:IF Y>9 ?"o" 17 LC P,Y-1:IF Y>10 ?" " 18 IF Y=25 Y=9:L=L-1:LC 12,2:? L 19 IF L=0 GOTO 80 20 C=0 21 IF [C+6]=0 GOSUB 30 22 IF [C+6]=1 GOSUB 40 23 IF [C+6]<2 GOSUB 50 24 C=C+1:IF C<3 GOTO 21 25 WAIT 1:IF E=0 GOTO 61 26 GOTO 11 30 [C]=[C]+1 31 IF [C]=30 [C+6]=1 32 LC [C]-1,[C+3]:?" >>>" 33 RETURN 40 [C]=[C]-1 41 IF [C]=4 [C+6]=0 42 LC [C],[C+3]:?"<<< " 43 RETURN 50 IF [C]<(P-3) RETURN 51 IF [C]>P RETURN 52 IF [C+3]<>Y RETURN 53 [C+6]=2:LC P,[C+3]:?"*" 54 PLAY "L16AB":WAIT 60 55 LC [C],[C+3]:?" " 56 E=E-1:LC 29,2:? E 57 RETURN 60 LC 9,5:?"3ビキ ツレナカッタ...":GOTO 62 61 LC 9,5:?"ヤッタ! 3ビキ ツレタ!": 62 PLAY "L16ERERRRERA2R1" 63 WAIT 120:LC 0,0 OK?
F5キーを押してゲームを始めると、プレイヤーの位置がライトセーバーの位置に合わせて移動する。
そして、時間が経つと自動で弾が水中に落ちていく。
弾が魚に当たったら攻撃成功。 弾が無くなる前に全部の魚をしとめたらゲームクリアだ。
画面の見方: