2007b/A5/りんた

目次

課題 1:文字書きロボットの製作

『本』『板』の文字を書く

メンバー紹介

一平くん…プログラム担当

たいすけ…ロボット製作担当

りんた…HP製作担当

ロボット紹介

我々の製作したロボットはタイヤでの移動を前後のみにし、アームを二段階に動く構造にした。『本』と『板』を書かかせた。

他のロボットとの違い

本体がモータが一つだけで動くように構造を工夫

アームを2段階の動き(上下左右)できるような構造にした。

筆ペンを用いることによりロボット特有の角ばった線をなくすことができた。

筆の運び方

アーム.jpg

写真1:この写真でわかるようにギアの噛み合わせにより、アームを左右に移動させる。

さらにギアを組み合わせることにより左右の移動スピードを本体の前後の移動に合わせた。

むかって左側の離れたギアはモーターとは独立しておりアームを上から押える役割がある。

上下ぺん.jpg

写真2:このアームで筆の上げ下げをする。ここでは単純な回転運動を上下運動に変える構造を用いた。

さらに写真からもわかるように大きめなギアを二つもちいた。これは上げ下げのスピードを調整するだけでなく、

筆ペンの重さに耐えらるようにするためである。

アームを2段階構造にするメリット

本体自体は前後に進むだけなので、曲線を書くとき角度の計算をせずにアームの動く時間だけで良いので、プログラムを大幅に変えることなく、いろんな文字に挑戦することができる。さらに他の方向転換を必要とするロボットと違い細かい動きが可能となり小さいもじを奇麗に書くことができる。

デメリット

なめらかな曲線を書くの難しく直線のみになってしまう。さらに一つの文字の中で斜めの線の角度を変えることができない

左右に動く範囲が限られてるので、二つのモーターを移動に用いるタイプのロボットより文字が小さくなる

制作過程

過程1 土台作り

土台.jpg

上の写真のようにモーター1個でも走れるようにする

この形にしたメリットは早さの調整がしやすいからだ。

過程2 アーム作り

2段階のアームを作るため、バランスなどの調整

この過程に大部分の時間を割くことになるとはこの頃誰一人思ってなかった…

過程3 組み立て

がいかん1.jpg

がいかん2.jpg

アームと土台をつなげて出来上がり〜♪

プログラム

『本』のプログラム

本.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);     //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();
 }                //縦横斜めの線を引く関数を作ることでほかのプログラムを作る時にも応用できます。
                 そしてifを用いることにより左右の斜め線を書くときに楽になる。
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(170);
	Off(OUT_A);
	OnRev(OUT_B);//
	Wait(40);
	Off(OUT_B);
	
	
	write_time=80;     //本の五画目です
	yoko();
	Off(OUT_C+OUT_A+OUT_B);
}

『板』のプログラム

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();
           OnRev(OUT_A);
           Wait(20);
	    Off(OUT_A);
           sayuu=0;
           write_time=70;
           naname();
           OnRev(OUT_B);   //ここで八画目の書き始めの位置を指定していますが、
               ロボットの性質上斜め線が右よりに始まってしまうためここのプログラムで調整しています。
           Wait(60);
           Off(OUT_B);
           OnRev(OUT_A);
           Wait(40);
           Off(OUT_A);
           
           sayuu=1;      //板の八画目です
           write_time=70;
           naname();
           Off(OUT_A+OUT_B+OUT_C);
 }

プログラムの工夫点

 関数やサブルーチンを使い、いろいろな文字に応用できる汎用的なものにした。

 それにより縦、横、斜めのプログラムの組み合わせだけで様々な文字を書くことを可能にした。

まとめ

製作にあたって…

試行錯誤と微調整の末ようやく上下左右動くアームを完成させた

きれいな文字の追求ならアームなど必要ないかもしれない だが、我々は他とは違う『個性』の追求を忘れなかった。

上下左右に動くアームの構想、製作、調整は手こずったが、その分この経験が次ぎに生かせそうだと思う

苦労した所

まず、そもそもモーターの回転運動をどうやってアームの横移動に変えるかでなかなか思い浮かばなかった。そこで過去のロボットを参考に独自のアームを作成した。 しかしそこでさらにそれぞれの移動スピードの違いに直面した。 これが合わないと斜め線の角度がおかしなことになるため重要な問題だった。そして速過ぎる移動はロボットの負担となり、書いている最中何度もパーツがはずれる原因となった。これを上手く合わせるためにギアの組み合わせ色々試すなど苦労した。

考察&改善点

改善する点については

.前腕部分の強度不足
.プログラムの性質上おり返す時も筆を上げ下げしてしまう
.斜め線の角度の調整と曲線の多いじへの対応。

考察

 .プログラムの改善をすることで不必要な筆の上げ下げを無くすことができる

 .強度はパーツの組み合わせを考え直すとともに重心の位置をもっとロボットの中心に移す必要がある。

コメントをどうぞ

  • 上の評価になるには説明不足な印象を受けます。 -- クノ? 2007-11-07 (水) 19:37:01


添付ファイル: file本.jpg 216件 [詳細] fileitaita.jpg 244件 [詳細] fileいたに.jpg 103件 [詳細] file板.jpg 107件 [詳細] fileSA380045.jpg 110件 [詳細] file概観.jpg 117件 [詳細] fileアーム.jpg 211件 [詳細] file071105_181824.jpg 112件 [詳細] file左右パーツ.jpg 116件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2007-11-07 (水) 23:34:38