戻る
課題1
問題点†
- ペンをどうやって持たせるか
- ペンをどうやって上げ下げするか
- どうやれば綺麗に文字が書けるか
試作ロボット†
- 試作1
- 歯車で腕を持ち上げたり下げたりしようとした。
うまく噛み合わず動かなくて失敗
最終的なロボットとプログラム†
- 歯車が噛み合わなかった点を反省して、ゴムで腕を上げ下げさせるようにした。
- それでも、手動で腕を動かした後はうまく動かなくなるので、ウォーミングアップ用のプログラム(腕を上げ下げさせる)を作った。
各自のプログラム†
sub arms_down() //腕を下げる動作
{
OnFwd(OUT_B);
Wait(100);
Off(OUT_B);
}
sub arms_up() //腕を上げる動作
{
OnRev(OUT_B);
Wait(100);
Off(OUT_B);
}
sub turn_right() //右に曲がる動作
{
OnFwd(OUT_A);
OnRev(OUT_C);
Wait(85);
Off(OUT_A+OUT_C);
}
sub turn_left() //左に曲がる動作
{
OnFwd(OUT_C);
OnRev(OUT_A);
Wait(85);
Off(OUT_A+OUT_C);
}
task main()
{
arms_down(); //腕を下げてペンを紙へ付ける
OnFwd(OUT_A); //ここから右旋回で右の1画目を書く
OnRev(OUT_C);
Wait(70);
Off(OUT_A+OUT_C);
arms_up();// //1画目のはらい終了、ペンを上げる
OnFwd(OUT_A); //2画目の準備
OnRev(OUT_C);
Wait(16);
Off(OUT_A+OUT_C);
OnFwd(OUT_A+OUT_C);
Wait(42);
Off(OUT_A+OUT_C);
turn_right();
OnRev(OUT_A+OUT_C);
Wait(142);
Off(OUT_A+OUT_C);
arms_down(); //ペンを下げて2画目へ
OnRev(OUT_A+OUT_C);
Wait(152);
Off(OUT_A+OUT_C);
arms_up(); //2画目終了、ペンを上げる
OnFwd(OUT_A+OUT_C); //3画目の準備
Wait(213);
Off(OUT_A+OUT_C);
turn_right();
OnRev(OUT_A+OUT_C);
Wait(131);
Off(OUT_A+OUT_C);
arms_down(); //ペンを下げて3画目を書く
OnRev(OUT_A+OUT_C);
Wait(48);
Off(OUT_A+OUT_C);
arms_up(); //3画目終了、ペンを上げる
OnFwd(OUT_A+OUT_C); //4画目の準備
Wait(148);
Off(OUT_A+OUT_C);
turn_left();
OnRev(OUT_A+OUT_C);
Wait(100);
Off(OUT_A+OUT_C);
arms_down(); //ペンを下げて4画目へ
OnRev(OUT_A+OUT_C);
Wait(69);
Off(OUT_A+OUT_C);
arms_up(); //4画目の曲がりまで終了、ペンを上げる
OnFwd(OUT_A+OUT_C); //4画目の曲がりからスタートの準備
Wait(100);
Off(OUT_A+OUT_C);
turn_right();
OnRev(OUT_A+OUT_C);
Wait(100);
Off(OUT_A+OUT_C);
arms_down(); //ペンを下げて4画目の続きへ
OnRev(OUT_A+OUT_C);
Wait(48);
Off(OUT_A+OUT_C);
arms_up(); //4画目終了、ペンを上げる
OnFwd(OUT_A+OUT_C); //5画目の準備
Wait(100);
Off(OUT_A+OUT_C);
turn_left();
OnRev(OUT_A+OUT_C);
Wait(31);
Off(OUT_A+OUT_C);
arms_down(); //ペンを下げて5画目へ
OnRev(OUT_A+OUT_C);
Wait(69);
Off(OUT_A+OUT_C);
arms_up(); //5画目終了、ペンを上げる
OnRev(OUT_A); //1回転回って喜びを表現(無意味)
OnFwd(OUT_C);
Wait(340);
Off(OUT_A+OUT_C);
}
sub pen_down(){// 腕を下げる
Off(OUT_A+OUT_C);
OnFwd(OUT_B);
Wait(100);
Off(OUT_B);
}
sub pen_up(){// 腕を上げる
Off(OUT_A+OUT_C);
OnRev(OUT_B);
Wait(100);
Off(OUT_B);
}
void go(int t){// まっすぐ走る
OnFwd(OUT_A+OUT_C);
Wait(t);
}
void back(int t){// バックする
OnRev(OUT_A+OUT_C);
Wait(t);
}
task main(){
pen_down();
OnFwd(OUT_A);
OnRev(OUT_C);
Wait(70);
pen_up();// 一画目
OnFwd(OUT_C);
OnRev(OUT_A);
Wait(70);
back(30);
OnFwd(OUT_A);
Wait(70);
OnFwd(OUT_C);
Wait(10);
OnRev(OUT_A);
Wait(70);
pen_down();
go(180);
pen_up();// 二画目
back(120);
OnFwd(OUT_A);
Wait(74);
back(50);
OnFwd(OUT_C);
Wait(10);
pen_down();
go(70);
pen_up();// 三画目
OnFwd(OUT_C);
OnRev(OUT_A);
Wait(70);
OnRev(OUT_C);
Wait(100);
pen_down();
go(100);
pen_up();// 四画目
go(100);
OnFwd(OUT_A);
OnRev(OUT_C);
Wait(70);
OnRev(OUT_A);
Wait(100);
pen_down();
go(100);
pen_up();// 四画目その2
go(100);
OnRev(OUT_C);
Wait(70);
OnFwd(OUT_C);
Wait(10);
pen_down();
back(100);
pen_up();// 五画目
}
反省点†
- 一秒間に走る距離と、何秒で回転するかを計ったが、電池の消耗→交換によりズレが生じてしまった