光を追いかけるロボットカー

明るいほうはどっち?

光ロボットカーの動き

左目  ANA(2)
右目  ANA(5)

前進  OUT 4,1 OUT 2,1
後退  OUT 5,1 OUT 3,1
左折  OUT 4,0 OUT 2,1
右折  OUT 4,1 OUT 2,0



プログラムを考えよう

Mission1.「光が当たったら前進!」

光センサーをひとつだけ使って、光が当たったら前進するという、シンプルな動きです。

左側光センサーANA2の値を読み込んで、変数L に入れます。
このプログラムでは、センサー値を1/100にして、明るさが0から10の数値になるようにしました。
数字が大きいほど明るいことを意味します(30行目)。

もし、明るさが5よりも小さいならば、光ロボットカーを止めます。
光ロボットカーの両方のモータを停止する命令は、OUT 0 です(50行目)。

もし、明るさが5以上なら、光ロボットカーを前進させます。
両方のモータを回す命令は、OUT 4,1: OUT 2,1です(60行目)。

最後に、0.1秒(6/60)待って、センサ入力に戻ります(100,110行目)。

 昼間や日光のよく当たる場所では、懐中電灯で光を当てなくても、勝手にロボットカーが動く場合があります。
その場合は、明るさの基準を5ではなく、7や8にしてください。
 光ロボットカーの走らせる場所によっては、明るさの基準を下げたり上げたりして、最適な値をみつける必要があります。

10 ‘HIKARI-ROBOT1
30 L=ANA(2)/100
40 ? L
50 IF L<5 OUT 0

60 IF L>=5 OUT 4,1: OUT 2,1
100 WAIT 6
110 GOTO 30

 


Mission2.「光スキ! 明るい方向へ走れ」

右側光センサーANA5も加え、左右のセンサーで、光の方向へロボットカ-を走らせましょう。

さて、ANA5は電源を入れた直後は入力ポートとして機能しません※1。
事前にANA5として使えるよう、おまじないが必要です(20行目)。

ANA2とANA5の準備ができたならば、それぞれセンサーの値を読み込みます。
ANA2は左=変数L、ANA5は右=変数R、として読み込みます(30行目)。

もし、右も左も両方とも明るさが5よりも小さい(暗い)なら、光ロボットカーを止めます(50行目)。

もし、右と左の両方とも同じ明るさなら、光ロボットカーを前進させます(60行目)。

もし、左側のほうが明るい(左>右)なら、光ロボットカーを左へ向けます。
左へ進みたい場合は、左モーターは停止して、右モーターのみを前進させます。
左モーターを止める命令は、OUT 4,0
右モーターを前進させる命令は、OUT2,1
(70行目)

もし、右側センサーのほうが明るい(左<右)なら、光ロボットカーを右へ向けます。
左モーターを前進させる命令は、OUT 4,1
右モーターを止める命令は、OUT2,0
(80行目)

IF命令の最後のGOTO100命令は必要です。
もう少し正しく説明すると、50行目のIF命令だけGOTO100が必要なのです。
60,70,80行目のGOTO100はなくても良いのです。
※50行目のGOTO100を削除してどんな動きになるのか試すのもよし!

10 ‘HIKARI-ROBOT2
20 OUT1,-1
30 L=ANA(2)/100:R=ANA(5)/100
40 ?”ヒカリ スキ”,L,R
50 IF L<5 AND R<5 OUT 0:GOTO 100
60 IF L=R OUT 4,1: OUT 2,1:GOTO 100
70 IF L>R OUT 4,0: OUT 2,1:GOTO 100
80 IF L<R OUT 4,1: OUT 2,0:GOTO 100
100 WAIT 5
110 GOTO 30

※1 IchigoJamCPUのOUT1(出力)と ANA5(入力)は、IO端子を共有しており、切り替えて使用できる仕組みです。
OUT1,-1とすると以降はANA(5)として使用できます。
OUT1,1等を実行するとOUT端子になります。


Mission3. 「光はきらい・・ 光から逃げる」

ひかりが当たったら、逃げるプログラムです

10 ‘HIKARI-ROBOT3
20 OUT1,-1
30 L=ANA(2)/100:R=ANA(5)/100
40 ? “ヒカリ キライ”,L,R
50 IF L<5 AND R<5 OUT 0:GOTO 100
60 IF L=R OUT3,1:OUT5,1: GOTO 100
70 IF L>R OUT3,0:OUT5,1: GOTO 100
80 IF L<R OUT3,1:OUT5,0: GOTO 100
100 WAIT 5
110 GOTO 30


Mission4. 「光は好き!でも、強い光は嫌い・・」

さて、光ロボットカーに、もう少しわがままを聞いてもらうようにしましょう。
1.光があればそちらによっていく(Mission1の動き)。
2.でも、強すぎる光はキライなので、光から逃げるようにします(Mission3の動き)。
  2秒間は光から逃げる動きをしますが、その後は、また光があれば寄っていきます。

10 ‘HIKARI-ROBOT4
20 OUT 1,-1

30 L=ANA(2)/100:R=ANA(5)/100
40 ? “ヒカリキ スキ” L,R
45 IF L>7 AND R>7 GOTO 200
50 IF L<5 AND R<5 GOTO 300
60 IF L=R OUT 4,1:OUT 2,1: GOTO 100
70 IF L>R OUT 4,0:OUT 2,1:GOTO 100
80 IF L<R OUT 4,1:OUT 2,0:GOTO 100
100 WAIT 5
110 GOTO 30

200 CLT:OUT 0
210 L=ANA(2)/100:R=ANA(5)/100
220 ? “ヒカリ キライ”,L,R
230 IF L=R OUT 5,1:OUT 3,1: IF L<5 GOTO 280
240 IF L>R OUT 5,1:OUT 3,0
250 IF L<R OUT 5,0:OUT 3,1
260 WAIT 5
270 IF TICK()<120 GOTO 210
280 OUT 0
290 GOTO 30


300 OUT 0:H=L:?:?”ヒトヤスミ”
310 LED1:L=ANA(2)/100:R=ANA(5)/100
320 IF L>H OR R>H OUT 0:GOTO 30
330 IF !RND(500) OUT 4,1: OUT 2,1
340 IF !RND(100) OUT 4,0: OUT 2,1: WAIT 10*RND(7)
350 IF !RND(100) OUT 4,1: OUT 2,0: WAIT 10*RND(7)
360 WAIT 10
370 OUT 0
380 GOTO 310