*目次 [#b25d0539] #contents *最初のプログラム [#ofa238ac] **課題:三角形に動くロボット [#ic250380] task main() { OnFwd(OUT_C); OnFwd(OUT_A); Wait(300); OnFwd(OUT_C); OnRev(OUT_A); Wait(88); OnFwd(OUT_C); OnFwd(OUT_A); Wait(300); OnFwd(OUT_C); OnRev(OUT_A); Wait(88); OnFwd(OUT_A); OnFwd(OUT_C); Wait(300); Off(OUT_A+OUT_C); } 感想:これではちゃんとした三角形にならなかった。 回転する長さを考慮する必要がある。 **課題:三角形に動くロボット(改) [#sb42391c] #define x 300 #define y 88 task main() { repeat(2){ OnFwd(OUT_C); OnFwd(OUT_A); Wait(x); OnFwd(OUT_C); OnRev(OUT_A); Wait(y); } OnFwd(OUT_A); OnFwd(OUT_C); Wait(x); Off(OUT_A+OUT_C); } 感想:定義を使用。ちょっとだけ見やすくなったと思う。 *書道ロボット [#pf7fc2d4] **課題:「左」を書く書道ロボット [#j7ad21aa] task main() { OnRev(OUT_B); Wait(50); //ペンを下げる OnFwd(OUT_C); OnFwd(OUT_A); Wait(75); Off(OUT_C+OUT_A); //1画目 OnFwd(OUT_B); Wait(50); Off(OUT_B); //ペンを上げる OnRev(OUT_C); OnRev(OUT_A); Wait(120); Off(OUT_C+OUT_A); OnFwd(OUT_A); OnRev(OUT_C); Wait(115); Off(OUT_C+OUT_A); OnFwd(OUT_A); OnFwd(OUT_C); Wait(30); Off(OUT_C+OUT_A); //2画目へ移動 OnRev(OUT_B); Wait(50); //ペンを下げる OnFwd(OUT_A); OnFwd(OUT_C); Wait(90); Off(OUT_A+OUT_C); //2画目 OnFwd(OUT_B); Wait(50); Off(OUT_B); //ペンを上げる OnRev(OUT_C); OnRev(OUT_A); Wait(95); Off(OUT_C+OUT_A); OnFwd(OUT_C); OnRev(OUT_A); Wait(108); Off(OUT_C+OUT_A); OnFwd(OUT_C); OnFwd(OUT_A); Wait(75); Off(OUT_C+OUT_A); //3画目へ移動 OnRev(OUT_B); Wait(50); //ペンを下げる OnFwd(OUT_C); OnFwd(OUT_A); Wait(40); Off(OUT_C+OUT_A); //3画目 OnFwd(OUT_B); Wait(50); Off(OUT_B); //ペンを上げる OnRev(OUT_C); OnRev(OUT_A); Wait(85); Off(OUT_C+OUT_A); OnRev(OUT_C); OnFwd(OUT_A); Wait(107); Off(OUT_C+OUT_A); OnFwd(OUT_A); OnFwd(OUT_C); Wait(61); Off(OUT_C+OUT_A); //4画目へ移動 OnRev(OUT_B); Wait(50); //ペンを下げる OnFwd(OUT_A); OnFwd(OUT_C); Wait(35); Off(OUT_C+OUT_A); //4画目 OnFwd(OUT_B); Wait(50); Off(OUT_B); //ペンを上げる OnRev(OUT_C); OnRev(OUT_A); Wait(65); Off(OUT_C+OUT_A); OnFwd(OUT_C); OnRev(OUT_A); Wait(102); Off(OUT_C+OUT_A); OnFwd(OUT_A); OnFwd(OUT_C); Wait(40); Off(OUT_C+OUT_A); //5画目へ移動 OnRev(OUT_B); Wait(50); //ペンを下げる OnFwd(OUT_A); OnFwd(OUT_C); Wait(60); Off(OUT_C+OUT_A); //5画目 OnFwd(OUT_B); Wait(50); Off(OUT_B); //ペンを上げる } 感想:1度はFloatを使おうとしたけど妥協。 サブルーチンや変数、定数を使わなかったので、かなり長いプログラムに なってしまった。 紙に書いてみても、バランスの悪いものとなってしまった。 **課題:「左」を書く書道ロボット(改) [#wb02f990] #define b 50 sub pen_down() { OnRev(OUT_B); Wait(b); } //ペンを下げるサブルーチン sub pen_up() { OnFwd(OUT_B); Wait(b); Off(OUT_B); } //ペンを上げるサブルーチン void go_straight(int t) { Onfwd(OUT_A+OUT_C); Wait(t); Off(OUT_A+OUT_C); } //直進して止まる関数 void turn_right(int t) { OnFwd(OUT_A); OnRev(OUT_C); Wait(t); Off(OUT_A+OUT_C); } //右へ曲がって止まる関数 void turn_left(int t) { OnFwd(OUT_C); OnRev(OUT_A); Wait(t); Off(OUT_A+OUT_C); } //左へ曲がって止まる関数 task main() { pen_down(); //ペンを下げる go_straight(); //1画目 pen_up(); //ペンを上げる go_back(120); turn_right(115); [回転] go_straight(30); //2画目へ移動完了 pen_down(); //ペンを下げる go_straight(90); //2画目 pen_up(); //ペンを上げる go_back(95); turn_left(108); [回転] go_straight(75); //3画目へ移動完了 pen_down(); //ペンを下げる go_straight(40); Off(); //3画目 pen_up(); //ペンを上げる go_back(85); Off(); turn_right(107) Off(); [回転] go_straight(61); Off(); //4画目へ移動完了 pen_down(); //ペンを下げる go_straight(35); Off(); //4画目 pen_up(); //ペンを上げる go_back(65); Off(); turn_left(102) off() go_straight(40); Off(); //5画目へ移動完了 pen_down(); //ペンを下げる go_straight(60); Off(); //5画目 pen_up(); //ペンを上げる } 感想:定義と関数を使って改良してみた。 プログラムを見るだけで、動きがなんとなくわかるプログラムに なったと思う。 *タッチセンサー [#qa6c36cc] **課題:机の周りを沿って進むロボット~失敗編~ [#r625d3cb] task main() { SetSensor(SENSOR_1,SENSOR_TOUCH); SetSensor(SENSOR_3,SENSOR_TOUCH); while(true) { if (SENSOR_3 == 1 ) { OnFwd(OUT_A+OUT_C); } //センサー3が押されている間、直進 if (SENSOR_3 == 0 ) { while(true){ OnFwd(OUT_A); OnRev(OUT_C); Wait(30); OnFwd(OUT_A+OUT_C); Wait(30); } //センサー3が離れると右へ if ((SENSOR_1 == 1 )&&(SENSOR_3 == 0 )) { OnFwd(OUT_A); OnRev(OUT_C); Wait(90); } //センサー1が押されると左へ } }} 感想:2つ目のifを繰り返してしまう。whileの使い方を間違ってるみたい。 **課題:机の周りを沿って進むロボット~成功編~ [#raa3e593] task main() { SetSensor(SENSOR_1,SENSOR_TOUCH); SetSensor(SENSOR_3,SENSOR_TOUCH); while(true) { if ( SENSOR_3 == 1 ) { OnFwd(OUT_A+OUT_C); } //センサー3が押されている間直進 if(( SENSOR_3 == 0 )&&( SENSOR_1 == 0 )) { OnFwd(OUT_A); Off(OUT_C); } //センサーが押されていないと右へ if ( SENSOR_1 == 1 ) { OnFwd(OUT_C); OnRev(OUT_A); Wait(90); } //センサー1が押されると左へ } } 感想:whileを使うと、シンプルなプログラムになったと思う。 ロボットの形も変えた。今までで1番時間をかけた。 *光センサー [#y3481636] **ライントレースするロボット~モーター2個、光センサー1個使用~ [#c6ba4b0e] #define T 40 task main () { SetSensor(SENSOR_2,SENSOR_LIGHT); while (true) { if (SENSOR_2 < T) { //センサーが線の上にある条件 OnFwd(OUT_A); Off(OUT_C); } else { //それ以外の条件 Off(OUT_A); OnFwd(OUT_C); } } } 感想:うまくライントレースしてくれた。モーターはタイヤ。 **ライントレースするロボット~モーター1個、光センサー2個使用~ [#zaba073c] #define T 40 task main() { SetSensor(SENSOR_1, SENSOR_LIGHT); SetSensor(SENSOR_3, SENSOR_LIGHT); while(true) { if ((SENSOR_1 > T)&&(SENSOR_3 < T)) { OnFwd(OUT_B); } if ((SENSOR_3 > T)&&(SENSOR_1 < T)) { OnRev(OUT_B); } } } 感想:モーター1個に苦戦した。作れた!と思ったら、 ギアの構造が先生のヒントと同じような感じだったので、 ちょっと残念だった。 現在、動くか動かないかの瀬戸際です。 **ライントレースするロボット~モーター2個、光センサー2個使用(前後に設置)~ [#i482f782] #define T 40 task main () { SetSensor(SENSOR_1,SENSOR_LIGHT); SetSensor(SENSOR_3,SENSOR_LIGHT); while (true) { if ((SENSOR_1 < T) &&(SENSOR_3 < T)){ //前後のセンサーが線の上にある条件 OnFwd(OUT_A); OnFwd(OUT_C); } if (SENSOR_1 < T){ //前のセンサーのみ線の上にある条件 OnFwd(OUT_A); Off(OUT_C); } if (SENSER_1 < T){ //後のセンサーのみ線の上にある条件 Off(OUT_A); OnFwd(OUT_C); } } } 感想:うまくライントレースしなかった。 両方のセンサーが線から離れないと曲がらないようにしたため、 車体の長さの分、線からはみ出すまで進んだ。 結果、ズルをしたり、線から離れるロボットとなった。