課題1:書道ロボット製作

Image071~01.jpg

製作者:もっさん、タマヂャン

目標:『甲』と『州』を書かせる

本体の構造

本体を作るにあたり次の3つのことに苦労しました

  1. ペンを持たせる
  2. 本体におけるペンの位置
  3. 本体の安定

1.ペンを持たせる

文字を書かせるための最大の難関は本体のペンを持つ機構でした。

最初に考えたのは「モーターにつないだタイヤにペンを挟む」というアイデアでした。(下図)

Image071.jpg

でも、この方法でペンを持たせたところ、逆回転の時に空回りしてしまう事と、本体のバランスが取れな かったこともあり、別の組み方にすることに…

そこで、次に考えたのが蛇腹のパーツの利用でした(下図)

Image077~00.jpg

これでペンの上げ下げが可能になりました。

2.本体におけるペンの位置

次の問題はペンをどこに持ってくるかでした。 横や前につけることも考えたのですが、それだと後でプログラムを補正しなければならないので、話し合いの結果

ペンは本体の真ん中につける!

ということになりました。ちなみに本体を真下から見るとこんな感じです。

Image079~00.jpg

ただ、このアームは固定している場所がないので重力で落ちてくる事と、本体の移動中のブレによってアームが動いてしまうことが問題だったので、少し強引ではあるのですが下図のように周りをブロックで固めてアームがぶれないようにしました。

Image078~00.jpg

3.本体の安定性

Image075~00.jpg

ペンを真ん中につけることでRCX2.0を縦につけることにしました(上図)・・・が! なんとかRCXを土台につけることはできたのですが、RCXの重みで前進することさえスムーズにいかなくなりました。 なので、見栄えは悪いのですが前輪と後輪のタイヤを交換することにしました。

プログラム

甲.JPG
#define TURN_TIME 095
#define TURN_TIME2 080
#define TURN_TIME3 100
#define MOTER OUT_A+OUT_C 
sub write_on()                   //ペンを上げる
{
OnFwd(OUT_B);Wait(006);
Off(OUT_B);
}
sub write_off()                                     //ペンを下ろす
{
OnRev(OUT_B);Wait(003);
Off(OUT_B);
}
sub turn_right()                  //右回転
{
OnRev(OUT_A);
OnFwd(OUT_C);Wait(TURN_TIME);Off(OUT_A+OUT_C);
}
sub turn_left()                                     //左回転
{
OnRev(OUT_C);
OnFwd(OUT_A);Wait(TURN_TIME);
Off(OUT_A+OUT_C);
} 
task main()
{
write_on();OnFwd(MOTER);Wait(TURN_TIME2);write_off();     //�→�移動
OnRev(MOTER);Wait(TURN_TIME2);                //�→�移動
turn_left();
write_on();OnFwd(MOTER);Wait(TURN_TIME3);write_off();     //�→�移動
turn_right();
write_on();OnFwd(MOTER);Wait(TURN_TIME2);write_off();     //�→�移動
turn_right();
OnFwd(MOTER);Wait(TURN_TIME3);                            //�→�移動
turn_right();
OnFwd(MOTER);Wait(050);                                   //�→�移動
turn_right();
write_on();OnFwd(MOTER);Wait(TURN_TIME3);write_off();     //�→�移動
OnRev(MOTER);Wait(TURN_TIME3);                            //�→�移動
turn_right();
OnFwd(MOTER);Wait(050);                                   //�→�移動
turn_left();
write_on();OnFwd(MOTER);Wait(TURN_TIME3);write_off();     //�→�移動
turn_left();
OnFwd(MOTER);Wait(TURN_TIME2);                            //�→�移動
turn_left();
OnFwd(MOTER);Wait(055);                                   //�→�移動
turn_left();
write_on();OnFwd(MOTER);Wait(150);write_off();            //�→�移動
Off(MOTER);
}
州.jpg
sub p_up()                          //ペンを上げるサブルーチン
{
OnRev(OUT_B);Wait(006);Off(OUT_B);
}
sub p_down()            //ペンを下げるサブルーチン
{
OnFwd(OUT_B);Wait(006);Off(OUT_B);
}
sub turn_right()          //右に曲がるサブルーチン
{
OnFwd(OUT_A);OnRev(OUT_C);Wait(095);Off(OUT_A+OUT_C);
}
sub turn_left()          //左に曲がるサブルーチン
{
OnRev(OUT_A);OnFwd(OUT_C);Wait(095);Off(OUT_A+OUT_C);
}
sub go_wark()           //前に進むサブルーチン
{
OnFwd(OUT_A+OUT_C);Wait(020);Off(OUT_A+OUT_C);
}
task main()
{
OnFwd(OUT_A+OUT_C);Wait(030);Off(OUT_A+OUT_C);     //1〜2を書く
p_up();                       
OnFwd(OUT_A+OUT_C);Wait(050);Off(OUT_A+OUT_C);
turn_left();                     //左に動き次の線の準備を
go_wark();                       する
turn_left();
p_down();                      //3〜4を書く 
OnFwd(OUT_A+OUT_C);Wait(100);Off(OUT_A+OUT_C);          
OnFwd(OUT_A);OnRev(OUT_C);Wait(064);Off(OUT_A+OUT_C); //4〜5を書く
OnFwd(OUT_A+OUT_C);Wait(050);Off(OUT_A+OUT_C);
p_up();
OnFwd(OUT_C);OnRev(OUT_A);Wait(127);Off(OUT_A+OUT_C); //正三角形を書くようにし
OnFwd(OUT_A+OUT_C);Wait(050);Off(OUT_A+OUT_C);     て次の線の準備をする
OnFwd(OUT_C);OnRev(OUT_A);Wait(032);
go_wark();
turn_right();
OnFwd(OUT_A+OUT_C);Wait(070);Off(OUT_A+OUT_C);         //6〜7を書く
p_down();
OnFwd(OUT_A+OUT_C);Wait(030);Off(OUT_A+OUT_C);
p_up();
OnFwd(OUT_A+OUT_C);Wait(050);Off(OUT_A+OUT_C);
turn_left();                     //次の線のための準備を
go_wark();                       する
turn_left();
p_down();                                             //8〜9の書く
OnFwd(OUT_A+OUT_C);Wait(120);Off(OUT_A+OUT_C);
p_up();
OnFwd(OUT_A+OUT_C);Wait(030);Off(OUT_A+OUT_C);    //次の線のための準備をしる
turn_right();
go_wark();
turn_right();
OnFwd(OUT_A+OUT_C);Wait(070);Off(OUT_A+OUT_C);       //10〜11を書く
p_down();
OnFwd(OUT_A+OUT_C);Wait(030);Off(OUT_A+OUT_C);
p_up();
OnFwd(OUT_A+OUT_C);Wait(050);Off(OUT_A+OUT_C);   //次の線のための準備をする
turn_left();
go_wark();
turn_left();
p_down();
OnFwd(OUT_A+OUT_C);Wait(150);Off(OUT_A+OUT_C);       //12〜13を書く
}

感想

ペンを持たせる機構がなかなか思いつかなくて、今回はそれを作るのにほとんどの時間を費やしました。精神的に厳しかったのはプログラムにはない動きをロボットがすることでした(これは本体に問題があった)。また紙の上で動かすときの摩擦も考えなければならないのも大変でした。そして授業中とは比べものにならいほどの量を一気に作成したのでところどころに打ち間違いが出てしまい何度もエラーに直面した。 「ゼミ」ということで2人で1つのロボットを完成させていくので、授業の予定を聞き空き時間を見つけながらなど、1人だけとは違った大変さや達成感を味わうことができたと思う。いろいろな失敗を繰り返す中でより質の高まるロボットに愛着を感じるまでになったと思う。明日の発表がうまくいくといいなぁ〜と強く思う。

コメントをどうぞ

  • 説明に写真・図を多用しており大変素晴らしい。次回も頑張ってください。 -- ヒロヤ? 2007-05-24 (木) 01:20:54
  • ↑『写真・図を多用して』いることが素晴らしいのではなくて、それらを有効に活用してわかりやすい説明を心がけているところが素晴らしい、ということですね。 -- 松本 2007-06-02 (土) 21:58:53


添付ファイル: fileImage071~01.jpg 290件 [詳細] file州.jpg 273件 [詳細] file甲.JPG 290件 [詳細] fileImage071.jpg 278件 [詳細] fileImage075~00.jpg 283件 [詳細] fileImage078~00.jpg 289件 [詳細] fileImage074~00.jpg 155件 [詳細] fileImage079~00.jpg 301件 [詳細] fileImage077~00.jpg 349件 [詳細]

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