[[2005/C2]] *五角形に動くキャタピラロボット [#z24f6e92] task main() { OnFwd(OUT_A); OnFwd(OUT_C); Wait(150); repeat(4){ OnRev(OUT_C); Wait(80); OnFwd(OUT_C); Wait(150); } Off(OUT_A+OUT_C); } -何秒回転させるかを決めるのが大変だった。 -repeat使って簡単に見やすく作ってみました☆ *「左」を書くロボット [#kadai1] task main() { OnFwd(OUT_A+OUT_C); //1画目 Wait(100); OnFwd(OUT_B); //ペン上げ Wait(50); Off(OUT_A+OUT_B+OUT_C); Wait(200); OnRev(OUT_A); Wait(130); OnRev(OUT_B); //ペン下げ OnRev(OUT_A+OUT_C); //2画目 Wait(150); OnFwd(OUT_B); //ぺン上げ Wait(50); Off(OUT_A+OUT_B+OUT_C); Wait(200); OnFwd(OUT_A+OUT_C); Wait(200); OnRev(OUT_A); Wait(108); OnRev(OUT_A+OUT_C); Wait(75); OnRev(OUT_B); //ペン下げ OnRev(OUT_A+OUT_C); //3画目 Wait(90); OnFwd(OUT_B); //ペン上げ Wait(50); Off(OUT_A+OUT_B+OUT_C); Wait(200); OnFwd(OUT_A+OUT_C); Wait(180); OnRev(OUT_A); Wait(85); OnRev(OUT_A+OUT_C); Wait(85); OnFwd(OUT_A+OUT_C); //4画目 OnRev(OUT_B); //ペン下げ Wait(55); OnFwd(OUT_B); //ペン上げ Wait(50); Off(OUT_A+OUT_B+OUT_C); Wait(200); OnFwd(OUT_A); OnRev(OUT_C); Wait(90); OnRev(OUT_A+OUT_C); Wait(15); OnRev(OUT_B); //ペン下げ OnRev(OUT_A+OUT_C); //5画目 Wait(120); Off(OUT_A+OUT_B+OUT_C); } -3画目からが難しかった。 -予想以上に思いどおりに動いてくれなくて苦労した。 -サブルーチンを使って書き換えると下のようになった。少しは見やすくなったと思う。 sub up_pen() //ペン上げ { OnFwd(OUT_B); Wait(50); Off(OUT_A+OUT_B+OUT_C); Wait(200); } task main() { OnFwd(OUT_A+OUT_C); //1画目 Wait(100); up_pen(); OnRev(OUT_A); Wait(130); OnRev(OUT_B); //ペン下げ OnRev(OUT_A+OUT_C); //2画目 Wait(150); up_pen(); OnFwd(OUT_A+OUT_C); Wait(200); OnRev(OUT_A); Wait(108); OnRev(OUT_A+OUT_C); Wait(75); OnRev(OUT_B); //ペン下げ OnRev(OUT_A+OUT_C); //3画目 Wait(90); up_pen(); OnFwd(OUT_A+OUT_C); Wait(180); OnRev(OUT_A); Wait(85); OnRev(OUT_A+OUT_C); Wait(85); OnFwd(OUT_A+OUT_C); //4画目 OnRev(OUT_B); //ペン下げ Wait(55); up_pen(); OnFwd(OUT_A); OnRev(OUT_C); Wait(90); OnRev(OUT_A+OUT_C); Wait(15); OnRev(OUT_B); //ペン下げ OnRev(OUT_A+OUT_C); //5画目 Wait(120); Off(OUT_A+OUT_B+OUT_C); } コメントをお願いします -サブルーチンや関数を使ってみましょう。 -- [[松本(教員)]] &new{2005-11-11 (金) 22:59:48}; #comment *センサを使って机の周りを動くキャタピラロボット [#kadai2] task main() { SetSensor(SENSOR_1,SENSOR_TOUCH); SetSensor(SENSOR_3,SENSOR_TOUCH); while(true) { if(SENSOR_3 == 1) //右のセンサが押されている { OnFwd(OUT_A+OUT_C); //直進 } else { //右のセンサが押されていない Off(OUT_C); //右に回る OnFwd(OUT_A); } if(SENSOR_1 == 1) //左のセンサが押されている { OnRev(OUT_A); //左に曲がる OnFwd(OUT_C); Wait(170); } } Off(OUT_A+OUT_C); } -机の足にタイヤがひっかからないように、センサがうまく働くように工夫してロボットを作った。 -センサがうまく働かず、右に回りすぎて困った。 #ref(img_0007_Medium.jpg) コメントをお願いします #comment *黒い線上を動くロボット(モータ2個、センサ1個) [#kadai3-1] task main () { SetSensor(SENSOR_1, SENSOR_LIGHT); while (true) { if (SENSOR_1 < 40) { // 線上にいるとき OnFwd(OUT_A); Off(OUT_C); } else { // 線から外れたとき Off(OUT_A); OnFwd(OUT_C); } } } -これはとりあえず一周はするが、ショ-トカットしてしまう。 task main () { SetSensor(SENSOR_1,SENSOR_LIGHT); while (true) { if (SENSOR_1<40) { // 線上にいるとき OnFwd(OUT_C+OUT_A); } else { // 線から外れたとき OnFwd(OUT_A); OnRev(OUT_C); Wait(50); OnFwd(OUT_C); OnRev(OUT_A); until(SENSOR_1<40); } } } -何種類か考えたが、やはりうまくいかない。 早くもプログラミングの壁にぶつかってしまったみたい。早く壁を乗り越えたい…。 *黒い線上を動くロボット(モータ1個、センサ1個) [#pdae8853] task main () { SetSensor(SENSOR_1,SENSOR_LIGHT); while (true) { if (SENSOR_1<40) { //線上にいるとき OnRev(OUT_A); Wait(25); OnFwd(OUT_A); Wait(20); } else { //線からはずれたとき OnRev(OUT_A); Wait(50); OnFwd(OUT_A); until(SENSOR_1<40); } } } -ロボット作りが難しく、後進するロボットになってしまった。 コメントをお願いします -左右のタイヤの間隔が広ければ、カーブの回転半径は大きくなります。急なカーブをさくっと曲がるには、プログラムとロボットの両方を改良する必要がありますね。ぜひいろいろとやってみてください。 -- [[松本(教員)]] &new{2005-12-09 (金) 23:01:52}; #comment *懐中電灯の光を追うロボット [#kadai4] task main () { SetSensor(SENSOR_1,SENSOR_LIGHT); //センサ1は光センサ SetSensor(SENSOR_3,SENSOR_LIGHT); //センサ3は光センサ while(true){ if(SENSOR_1>45&&SENSOR_3>45){ //センサ1とセンサ3の値が45以上のとき OnFwd(OUT_C+OUT_A); //前進 } if(SENSOR_1>65){ //センサ1の値が65以上の時 OnFwd(OUT_C); //左に回る Off(OUT_A); } if(SENSOR_3>65){ //センサの値が65以上の時 OnFwd(OUT_A); //右に回る Off(OUT_C); } } } -キャタピラロボットの左右に光センサを付けた簡単なロボット -光の値を調べてプログラミングをしたので簡単にできた☆ -最初は、Offを入力するのを忘れて言うことを聞かなくて戸惑った。 コメントをお願いします #comment