Future Driver

IchigoJam with Lightsaber - 1次元モーションセンサー

時代はWiiコントローラーにキネクト。 IchigoJamでもモーションセンサーを使ってみよう。 しかも今回紹介するモーションセンサーはライトセーバー型でカッコイイし (何処が)、 キミでも簡単に作れるぞ (秋月で揉まれるが良い)。

1次元モーションセンサー

このモーションセンサーは、ライトセーバーの左右の位置を感知出来る。 ライトセーバーはオモチャ屋さんで買おう。 ライトセーバーが無くても、ルミカライトで代用出来る。 ルミカライトを使う場合は、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キーを押してゲームを始めると、プレイヤーの位置がライトセーバーの位置に合わせて移動する。 そして、時間が経つと自動で弾が水中に落ちていく。 弾が魚に当たったら攻撃成功。 弾が無くなる前に全部の魚をしとめたらゲームクリアだ。

画面の見方:

inserted by FC2 system