- 追加された行はこの色です。
- 削除された行はこの色です。
[[池尻のノート>2005/C1/池尻]]
[[四角形>2005/C1/四角形]]
*四角形[#hed12ed1]
**プログラム [#eff22c62]
#define MOVE_TIME 145
task main()
{
OnFwd(OUT_A);
OnFwd(OUT_C);
Wait(300);
OnFwd(OUT_A);
OnRev(OUT_C);
Wait(MOVE_TIME);
OnFwd(OUT_A);
OnFwd(OUT_C);
Wait(300);
OnFwd(OUT_A);
OnRev(OUT_C);
Wait(MOVE_TIME);
OnFwd(OUT_A);
OnFwd(OUT_C);
Wait(300);
OnFwd(OUT_A);
OnRev(OUT_C);
Wait(MOVE_TIME);#define MOVE_TIME 145
}
**感想 [#bcdd5024]
まあまあ簡単やった。
*課題1:書道ロボット(右) [#hed12ed1]
**プログラム [#eb9aea6c]
#define MOVE_TIME 18 //90度回るために必要な時間
sub lift_up() //リフトを上げるためのサブルーチン
{
Wait(40);
OnRev(OUT_B);
Wait(50);
Off(OUT_B);
}
sub lift_down() //リフトを下げるためのサブルーチン
{
Wait(40);
OnFwd(OUT_B);
Wait(50);
Off(OUT_B);
}
sub go_straight() //直進するためのサブルーチン
{
Wait(50);
repeat(3){
OnFwd(OUT_A);
OnFwd(OUT_C);
Wait(10);
Off(OUT_A+OUT_C);
Wait(10);}
}
sub turn_right() //右に曲がるためのサブルーチン
{
Wait(50);
OnFwd(OUT_A);
OnRev(OUT_C);
Wait(MOVE_TIME);
Off(OUT_A+OUT_C);
}
sub turn_left() //左に曲がるためのサブルーチン
{
Wait(50);
OnRev(OUT_A);
OnFwd(OUT_C);
Wait(MOVE_TIME);
Off(OUT_A+OUT_C);
}
task main()
{
Wait(50); //連続して動かすと徐々に誤差がでるため
OnFwd(OUT_A); //全ての行動の前には基本的に0、5秒間を開ける
OnFwd(OUT_C); //
Wait(10); //最初の「ノ」の字の飛び出る部分です
Off(OUT_A+OUT_C);
Wait(50); //タイヤを片方固定、もう一方を動かして、
OnFwd(OUT_A); //タイヤの間隔を利用し「ノ」の曲線部分を表現
Wait(40);
Off(OUT_A);
turn_right();
lift_up(); //筆を上げる
Wait(50);
OnFwd(OUT_A);
OnFwd(OUT_C);
Wait(20);
Off(OUT_A+OUT_C);
OnFwd(OUT_C);
Wait(5);
Off(OUT_C);
turn_right();
lift_down();
Wait(50); //モーターの左右のパワーバランスが良くないの
repeat(4){ //で、小刻み、且つ微調整を行う
OnFwd(OUT_A);
OnFwd(OUT_C);
Wait(10);
Off(OUT_A+OUT_C);
Wait(10);}
Wait(50);
OnFwd(OUT_A);
OnRev(OUT_C);
Wait(30);
Off(OUT_A+OUT_C);
lift_up();
Wait(50);
repeat(4){ //モーターの左右のパワーバランスが良くないの
OnFwd(OUT_A); //で、小刻み、且つ微調整を行う。さっきも書いたね!
OnFwd(OUT_C);
Wait(10);
Off(OUT_A+OUT_C);
Wait(10);}
Wait(50); //「口」の字に到達
OnRev(OUT_A);
OnFwd(OUT_C);
Wait(12);
Off(OUT_A+OUT_C);
lift_down();
go_straight();
lift_up();
Wait(50);
repeat(4){
OnRev(OUT_A);
OnRev(OUT_C);
Wait(5);
Off(OUT_A+OUT_C);
Wait(10);}
turn_left(); //サブルーチンのオンパレード
lift_down();
go_straight();
turn_right();
go_straight();
turn_right();
lift_up();
go_straight();
turn_right();
turn_right();
lift_down();
go_straight();
}
**感想[#md163209]
マシンのバランスが悪いためか、直進が右にカーブしてしまう機能を持っていたため、改良に改良を重ねた。それと、ペンを上下させるためのリフトを作るのが苦労した。
*課題2:壁に沿って動くロボット[#hed12ed1]
**プログラム [#eb9aea6c]
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が押されると左へ
}
}
**感想[#md163209]
なかなかセンサーが反応せえへんかったから、どうにかして反応させんのが大変やった。
*黒い線に沿って動くロボット(モーター2個、センサー1個) [#hed12ed1]
**プログラム [#eb9aea6c]
#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);
}
}
}
**感想 [#h445ee01]
黒線上に光センサがある場合でもロボットは直進せんかった。
*光センサー(モーター2個、センサー前後に1個) [#hed12ed1]
**プログラム [#eb9aea6c]
#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(SENSOR_3 < T){
Off(OUT_A);
OnFwd(OUT_C);
}
}
}
[[課題1:書道ロボット(右)>2005/C1/課題1:書道ロボット(右)]]
[[課題2:壁に沿って動くロボット>2005/C1/課題2:壁に沿って動くロボット]]
[[課題3:黒い線に沿って動くロボット>2005/C1/課題3:黒い線に沿って動くロボット]]
[[課題4:光を追いかけるロボット>2005/C1/課題4:光を追いかけるロボット]]
[[課題5:演奏するロボット>2005/C1/課題5:演奏するロボット]]