課題3 †課題3で作ったロボットは、まずその場で一回転して光のある方向を探し、その光を追いかけるというロボットです。 完成までの道のり †ロボットの完成までの道のりを次の2点で紹介します。
ロボットについて †まずロボットについてです。 前の課題のとき、小型で、速くて、丈夫というとても贅沢なロボットを作ろうとし、課題の達成よりもロボットの見た目を重視してしまいました。その結果、時間がなくなり、結局見た目もプログラムも納得いくものができませんでした。 今回はその反省を生かし、色々な部品は使わず、必要最小限の部品だけを使いとてもシンプルなロボットを作りました。 プログラムについて †#define turn_time 400 //回転の時間を定義 int light_max=0,time_max; // task main() { SetSensor(SENSOR_1,SENSOR_LIGHT); //センサー1に光センサーをセット SetSensor(SENSOR_3,SENSOR_LIGHT); //センサー3に光センサーをセット ClearTimer(0); //タイマー0をリセット&スタート start play_music; //音を鳴らしはじめる while(FastTimer(0) < turn_time) //タイマー0がturn_time以下のとき { OnFwd(OUT_A); OnRev(OUT_C); //右回転 if(SENSOR_1>light_max) //センサー1の値がlight_maxより大きいとき { light_max=SENSOR_1; //センサー1の値をlight_maxに代入 time_max=FastTimer(0); //タイマー0の値をtime_maxに代入 } } OnRev(OUT_A); OnFwd(OUT_C); //左回転 Wait(turn_time-time_max); //元の回転時間から一番明るいところまでにかかった時間を引いた時間だけ待つ OnFwd(OUT_A); //Aのモーターを正回転させ前進 Wait(80); while(true) //以下の内容を永久に繰り返す { if(SENSOR_1>SENSOR_3) //センサー1の値がセンサー3の値より大きいとき { OnFwd(OUT_C); Wait(10); Off(OUT_A+OUT_C); } //左に曲がりながら前進 if(SENSOR_1<SENSOR_3) //センサー1の値がセンサー3の値より小さいとき { OnFwd(OUT_A); Wait(10); Off(OUT_A+OUT_C); } //右に曲がりながら前進 else //上の二つの条件以外のとき { OnFwd(OUT_A+OUT_C); Wait(10); Off(OUT_A+OUT_C); } //直進 } } task play_music() //音を鳴らすタスク { SetSensor(SENSOR_1,SENSOR_LIGHT); //センサー1に光センサーをセット while(true) //以下を永久に繰り返す { PlayTone(15*SENSOR_1,5); //センサー1の値の15倍の周波数の音を0.05秒鳴らす Wait(5); //0.05秒待つ } } 苦労した点、工夫した点 †苦労したことは、はじめのうちは光センサーを1つだけで課題に取り組んでいました。しかし、センサーが1つだけしかない分プログラムが複雑になり、なかなか思うように動くロボットができなかったことです。 しかし、光センサーを2つ付けるという工夫をすることでこの苦労を乗り越えました。 センサー1つのときだと、光がセンサーから少しずれただけで見失ってしまうけど、センサー2つだと片方から光がずれても、もう片方ですぐ見つけられるというように、光を見失いにくくなり、プログラムもあまり複雑ではなくなり、課題が達成できました。 コメントをどうぞ †コメントはこちら↓
|