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行目)