JAMCAR版 黒ラインを見つけろ!

6.自動運転をプログラムする

①つぎの課題をクリアするプログラムを完成させよう
 ・道路外のスタート位置からまっすぐ走って、
  道路が見つかったところからトレースを開始する
 ・道路からはみだした時は、自動的に戻る!
 ・ほかのロボットカーや、障害物(お邪魔ロボット)に
  ぶつかりそうになったり、ぶつかったときは自動停止!
 ・ぶつかる危険がなくなったら自動的に走行を再開する!
 ・完全にコースアウトしたら(道路外に出たら)自動停止する!

②全員で 1 つのコースを集団で走ろう
 ・1 台づつスタート!
 ・先にコースを走っているロボットカーに止まって
  もらえるようにタイミング良くスタートさせよう

③チャレンジ課題!
 ・コースからはみ出しにくいように、プログラムを調整してみよう!
 ・コースアウトしたら、自動的にコースに戻るプログラムを考えてみよう!
 このプログラム例ではロボットカーは停止したままなので、
 ぜひ改良をしてみてください

10 ‘2022 JAMCAR LT OTARU
20 GSB @START
100 ‘コースイン ショリ
110 GSB@G
120 PWM2,2000:PWM4,2000
130 IF IN(3)=0 AND IN(4)=0 GOTO120
140 CLO

200 ‘MAIN ショリ
210 GSB@B
220 GOSUB @AUTOSTOP
230 L=IN(3):R=IN(4)
240 IF L=1 AND R=1 OUT10 :GOTO280
250 IF L=0 AND R=1 OUT8 :GOTO280
260 IF L=1 AND R=0 OUT2 :GOTO280
270 IF L=0 AND R=0 GOSUB @C_OUT
280 WAIT5:OUT0:WAIT1
290 GOTO200

300 @AUTOSTOP:’ジドウテイシ ショリ
310 ‘セッショクセンサー
320 B=ANA(9)/100
330 IF B<5 AND B>0 OUT0:GSB@R:GOTO320
340 ‘チョウオンパセンサー
350 OUT6,1:OUT6,0:U=ABS(USR(#700,0)):WAIT3
360 IF U<100 OUT0:GSB@Y:GOTO350
370 RETURN

400 @C_OUT:’コースアウト ショリ
410 GSB@M:BEEP
420 OUT0
430 WAIT10
440 RETURN
1000 END


1010 @START:POKE#700,114,182,0,32,3,73,10,104,64,28,0,42,251,209,64,9,98,182,112,71,0,16,0,80
1020 IF BTN() CONT
1030 IF!BTN() LET[0],0,0,(TICK()/30%2)*20:WS.LED1,8:CONT:ELSE:RTN

1200 @G:LET[0],20,0,0:GOTO@E
1300 @R:LET[0],0,20,0:GOTO@E
1400 @B:LET[0],0,0,20:GOTO@E
1500 @Y:LET[0],20,20,0:GOTO@E
1700 @M:LET[0],0,20,20:GOTO@E
2000 @E:WS.LED1,8:RTN

プログラム説明

■さいしょの処理(20~140行目)
・初期化やボタン押し待ち(サブルーチンSTART処理)
・コースイン処理
 まっすぐ走ってコースに合流する

■メイン処理(200~290行目)
・LEDバーを青色に点灯する(サブルーチン)
・自動停止処理を行う(サブルーチン)
・ラインセンサー左右の状態を調べて、
 1.道路上なら、ロボットカーを前進する OUT10
 2.道路が右曲がりなら、右へ向く OUT8
 3.道路が左曲がりなら、左へ向く OUT2
 4.道路外なら、コースアウト処理に行く(サブルーチン)
・動きの調整(WAIT)とちょっと停止(WAIT1)

■■サブルーチン:自動停止処理(300~370行目)
 接触センサーと障害物距離センサーが感知したときの動きを決めます
・接触センサーが障害物を感知していたら、
  LEDバーを赤色に点灯する(サブルーチン)
  ロボットカーを停止する(OUT0)
・超音波距離センサーが障害物を感知していたら、
  LEDバーを黄色に点灯する(サブルーチン)
  ロボットカーを停止する(OUT0)

■■サブルーチン:コースアウト処理(400~440行目)
・LEDバーを紫色に点灯する(サブルーチン)
・BEEP音を鳴らす
・ロボットカーを停止する(OUT0)

■■サブルーチン:初期化とスタート処理(1010~1030行目)
・超音波距離センサー用のマシン語を準備する
・LEDバーを点滅してスタートスイッチが押されるのを待つ

■■サブルーチン:LEDバーの点灯処理(1200~2000行目)