- 追加された行はこの色です。
- 削除された行はこの色です。
#contents
*課題2:黒い線に沿って動くロボットの作成 [#u7ac9691]
光センサーを使って黒い線に沿って動くロボットを作る。
タッチセンサーを使って他のロボットとぶつかったら道を譲るようにする。
交差点で優先側を走っていないときには、一時停止する。
**メンバー紹介 [#t22ae3b2]
小鉢 ロボット担当
コリン ホムペ担当
プログラムは二人で協力して考えて、コリンが入力してます。
実際、コリンは混乱することが多いので、小鉢がかなり考えてくれてます。感謝☆
**使用するロボットについて [#cf08e12a]
#ref(2008a/A4/課題2左/2-robo.JPG,50%,全体図)
↑全体図 カブトムシみたい。角のついた方が前です。
見ての通りタイヤを使ったロボットです。
#ref(2008a/A4/課題2左/2-ura.JPG,50%,裏から見た図)
↑裏から見た図
青いブロック二つが光センサで、前方に黄色いブロックのついた灰色のブロックがタッチセンサ。
向かって右の光センサはセンサ端子3に接続、向かって左の光センサはセンサ端子1に接続。
タッチセンサはセンサ端子2に接続。
向かって右のタイヤはA出力のモータに接続、向かって左のタイヤはC出力のモータに接続。
**コース [#ff776a48]
#ref(2008a/A4/課題2左/michi.jpg,150%,コース全体図)
急なカーブが多い。
**プログラム [#a8de38c5]
task main()
{
SetSensor(SENSOR_2 , SENSOR_TOUCH); //センサ端子2に接続されたセンサがタッチセンサと設定
SetSensor(SENSOR_1 , SENSOR_LIGHT); //センサ端子1に接続されたセンサが光センサと設定
SetSensor(SENSOR_3 , SENSOR_LIGHT); //センサ端子3に接続されたセンサが光センサと設定
SetPower(OUT_A,7); //A出力のモータの出力を7にする
SetPower(OUT_C,7); //C出力のモータの出力を7にする
while(true)
{
OnFwd(OUT_A+OUT_C); //A出力とC出力のモータを正回転させる
if(SENSOR_1 < 40) //光センサの値が40未満になったらC出力のモータを負回転させるように設定
{ //ロボットの右側が黒いところから外れたら左に回転する。
OnRev(OUT_C);
}
if(SENSOR_3 < 40) //光センサの値が40未満になったらA出力のモータを負回転させるように設定
{ //ロボットの左側が黒いところから外れたら右に回転する。
OnRev(OUT_A);
}
if((SENSOR_1 < 40)&&(SENSOR_3 < 40))
if((SENSOR_1 < 40)&&(SENSOR_3 < 40)) //光センサの値が40未満になったら
{
Off(OUT_A+OUT_C);
Off(OUT_A+OUT_C); //A出力とC出力のモータを1秒止めてから
Wait(100);
OnFwd(OUT_A+OUT_C);
Wait(100);
OnFwd(OUT_A); //A出力のモータを0.4秒正回転させる
Wait(40);
OnFwd(OUT_A+OUT_C); //A出力とC出力のモータを1・3秒正回転させる
Wait(130);
}
if(SENSOR_2 == 1)
{
PlaySound(SOUND_LOW_DOWN);
PlaySound(SOUND_LOW_BEEP);
Wait(50);
OnRev(OUT_A+OUT_C);
Wait(50);
Off(OUT_A+OUT_C);
Wait(300);
}
}
Wait(2000);
Float(OUT_A+OUT_C);
}
**制作してみての感想 [#c62b2f32]
<工夫した点>
プログラムをなるべくわかりやすくしました。
<苦労した点>
タッチセンサと光センサを付けるとき。着ける位置が近かったので、タッチセンサと光センサがぶつかってタッチセンサがうまく反応しなかった。タッチセンサの位置を変えるのに苦労した。
三周でプログラムの実行を止めるようにするのが難しかった。