[[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); } -難しかったこと --何秒回転させるかを決めるのが大変だった。約何秒で90度まわるかを見つけ、頑張ってみた。 -工夫したこと --repeat使って簡単に見やすく作ってみました☆ -感想 --初めて自分で作ったプログラムにしてはちゃんと動いてくれたと思う。 *課題1 「左」を書くロボット [#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〜5画目の書きはじめにペンを持っていくところが難しかった。 -工夫したこと --2画目をバックで書くことにより、無駄な動きをなくした。 -感想 --予想以上に思いどおりに動いてくれなくて苦労した。 -ロボット --アルトのプログラムの写真を参照してください。ペンはゴムを二重にして固定したので、グラグラはしないが、衝動はやわらげられてたと思う。 -コメントがあったので… --サブルーチンを使って書き換えると下のようになった。少しは見やすくなったと思う。 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 *課題2 センサを使って机の周りを動くキャタピラロボット [#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 *課題3 黒い線上を動くロボット(モータ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 *課題4 懐中電灯の光を追うロボット [#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を入力するのを忘れていたので、思っていたのと違う行動をとられて戸惑った。 コメントをお願いします -二つの条件式を組み合わせるとき(論理積や論理和をとる場合)には、それぞれの条件式を()で括っておきましょう。 -- [[松本(教員)]] &new{2006-01-07 (土) 00:05:41}; -直してみました。 -- [[あんず]] &new{2006-01-16 (月) 15:39:44}; -『Offを入力するのを忘れて言うことを聞かなくて戸惑った』…実際にはロボットはちゃんと言うこと聞いているんですけどね…(笑) -- [[松本(教員)]] &new{2006-01-16 (月) 16:41:09}; -言い方変えてみました。 -- [[あんず]] &new{2006-01-21 (土) 22:16:55}; #comment *曲を奏でるロボット [#q1bbb014] -考える過程 --必修のテストがある日午前2時、寝ようと思い布団に入るが、何の曲演奏させようか考えてしまう。かえるの歌もメリーさんの羊もありきたり。エーデルワイスなんていいんじゃない!?3拍子の指揮に挑戦しようじゃん!ロボットは上げ下げに加えてちょっと回転すればできるんじゃん?絶対音感なくなっちゃったから楽譜かけないよ。そんなこんな考えてたら眠れなくなっちゃったよ。結局寝たの3時過ぎだし。