- 追加された行はこの色です。
- 削除された行はこの色です。
[[2007b/A5/りんた]]
目次
#contents
*課題 1:文字書きロボットの製作[#y45b8ba3]
『本』『板』の文字を書く
*ロボット紹介[#i9ae234b]
**筆の運び方 [#f886c517]
~&ref(2007b/A5/りんた/アーム.jpg);
~写真1:この写真でわかるようにギアの噛み合わせにより、アームを左右に移動させる
~&ref(2007b/A5/りんた/SA380045.jpg);
~写真2:ペンを上げ下げする
**他のロボットとの違い [#gd828ea8]
~本体がモータが一つだけで動くよう写真1のように構造を工夫
~アームを2段階の動き(上下左右)できるように写真2のような構造にした
**アームを2段階構造にするメリット [#abe25031]
~本体自体は前後に進むだけなので、曲線を書くとき角度の計算をせずにアームの動く時間だけで良いので、プログラムを大幅に変えることなく、いろんな文字に挑戦することができる
**デメリット [#o6ca2fd0]
~なめらかな曲線を書くのに、微調整が大変
~左右に動く範囲が限られてるので、文字が小さくなる
*制作過程 [#l4d49906]
**過程1 土台作り [#s5235401]
~上の写真のようにモーター1個でも走れるようにする
**過程2 アーム作り [#u7eb3fa9]
2段階のアームを作るため、バランスなどの調整
**過程3 組み立て [#t18d4bac]
アームと土台をつなげて出来上がり〜♪
* プログラム [#ldea66e7]
**『本』のプログラム [#l87ac80a]
~&ref(2007b/A5/りんた/本.jpg);
int write_time, sayuu; //sayuuha 1=migi 0=hidari
sub fudesage () //筆を下げます
{
OnFwd(OUT_C);
Wait(15);
Off(OUT_C);
}
sub fudeage() //筆を上げます
{
OnRev(OUT_C);
Wait(15);
Off(OUT_C);
} //何回か書くのでサブルーチンにしました
void yoko() //横線を引きます
{
fudesage();
OnFwd(OUT_A);
Wait(write_time);
Off(OUT_A);
fudeage();
}
void tate() //縦線を引きます
{
fudesage();
OnFwd(OUT_B);
Wait(write_time);
Off(OUT_B);
fudeage();
}
void naname(){ //斜めに線を引きます
fudesage();
OnFwd(OUT_B);
if(sayuu==1){ //このとき変数sayuuが1なら右斜めの線に
OnFwd(OUT_A);
Wait(write_time);
Off(OUT_B);
Wait(30);
}else{ //0なら左斜めの線になります
OnRev(OUT_A);
Wait(write_time);
}
Off(OUT_B+OUT_A);
fudeage();
} //縦横斜めの線を引く関数を作ることでほかのプログラムを作る時にも応用できます
task main(){
write_time=220; //本の一画目です
yoko();
OnRev(OUT_A);
Wait(100);
OnRev(OUT_B);
Wait(20);
Off(OUT_A+OUT_B);
write_time=130; //本の二画目です
tate();
OnRev(OUT_B);
Wait(110);
Off(OUT_B);
sayuu=0; //本の三画目です
write_time=100; //ここで斜めを書くのでsayuuも指定しています
naname();
OnFwd(OUT_A);
OnRev(OUT_B);
Wait(90);
Off(OUT_A+OUT_B);
sayuu=1; //本の四画目です
naname();
OnRev(OUT_A);//
Wait(130);
Off(OUT_A);
OnRev(OUT_B);//
Wait(20);
Off(OUT_B);
write_time=50; //本の五画目です
yoko();
Off(OUT_C+OUT_A+OUT_B);
}
**『板』のプログラム [#j9cb1ed4]
~&ref(2007b/A5/りんた/itaita.jpg);
int write_time, sayuu; //sayuuha 1=migi 0=hidari 本のプログラムの関数をそのまま引き継いでいます
sub fudesage (){
OnFwd(OUT_C);
Wait(15);
Off(OUT_C);
}
sub fudeage(){
OnRev(OUT_C);
Wait(15);
Off(OUT_C);
}
void yoko(){
fudesage();
OnFwd(OUT_A);
Wait(write_time);
Off(OUT_A);
fudeage();
}
void tate(){
fudesage();
OnFwd(OUT_B);
Wait(write_time);
Off(OUT_B);
fudeage();
}
void naname(){
fudesage();
OnFwd(OUT_B);
if(sayuu==1){
OnFwd(OUT_A);
Wait(write_time);
Off(OUT_B);
Wait(30);
}else{
OnRev(OUT_A);
Wait(write_time);
}
Off(OUT_B+OUT_A);
fudeage();
}
task main(){
write_time=160; //板の一画目です
yoko();
OnRev(OUT_A);
Wait(60);
OnRev(OUT_B);
Wait(15);
Off(OUT_A+OUT_B);
write_time=130; //板の二画目です
tate();
OnRev(OUT_B);
Wait(110);
Off(OUT_B);
sayuu=0; //板の三画目です
write_time=100;
naname();
OnFwd(OUT_A);
OnRev(OUT_B);
Wait(95);
Off(OUT_A+OUT_B);
sayuu=1; //板の四画目です
write_time=60;
naname();
OnFwd(OUT_A);
Wait(30);
OnRev(OUT_B);
Wait(60);
Off(OUT_A+OUT_B);
write_time=100; //板の五画目です
yoko();
OnRev(OUT_A);
Wait(100);
Off(OUT_A);
sayuu=0; //板の六画目です
write_time=100;
naname();
OnFwd(OUT_A);
OnRev(OUT_B);
Wait(60);
Off(OUT_A+OUT_B);
write_time=110; //板の七画目です
yoko();
sayuu=0;
write_time=70;
naname();
OnRev(OUT_B);
Wait(60);
Off(OUT_B);
OnRev(OUT_A);
Wait(50);
Off(OUT_A);
sayuu=1; //板の八画目です
write_time=80;
naname();
Off(OUT_A+OUT_B+OUT_C);
}
*まとめ [#e29a9da5]
**製作にあたって… [#ib82b698]
試行錯誤と微調整の末ようやく上下左右動くアームを完成させた
~きれいな文字の追求ならアームなど必要ないかもしれない
だが、我々は他とは違う『個性』の追求を忘れなかった。
~上下左右に動くアームの構想、製作、調整は手こずったが、その分この経験が次ぎに生かせそうだと思う
**考察&改善点 [#i4c77150]
考察する点は
改善する点については…
.前腕部分の強度不足
.筆を上下させる時に左払いが付いてしまう
.プログラムの性質上おり返す時も筆を上げ下げしてしまう
*コメントをどうぞ [#f5bcbecf]
#comment