- 追加された行はこの色です。
- 削除された行はこの色です。
*課題1:書道ロボット [#e428dd52]
**ロボットの概要 [#f00faa4d]
今回制作したロボットは、車体は前後運動のみでペン部分が上下左右に動くタイプのロボットです。車体が動いて、文字を書くロボットも考えましたが、正確な動作が難しいこととプログラムが複雑になることからこのタイプのロボットを制作しようと考えました。ただ、このタイプのロボットは制作するのが難しく、完成するまでには数多くの苦労がありました。
#ref(071107_174035.jpg)
ロボットの全景
**本体 [#sedfac4a]
本体は最初に制作したので、今後の制作に支障をきたさないよう、必要最小限のパーツで制作しました。その結果、非常にシンプルなものになりました。車体の前から後ろまでを一本のパーツで作ったので、十分な丈夫さも
確保することができました。
#ref(071107_164025.jpg)
上から見た本体
**ペン左右部分 [#c9bd433b]
最も苦労した部分。最初はラックとギアを使って、左右の動きを作ろうとしましたが、それでは左右の作動範囲が狭く、大きな文字が書けないため、タイヤによる摩擦でアームを動かすことにしました。キャタピラに使う白いパーツがアームの幅にちょうど合ったので、それを使って下から支え、上からタイヤで押さえつけるという形にしました。
#ref(071107_164146.jpg)
上から見たところ
#ref(071107_164204.jpg)
横から見たところ
**ペン上下部分 [#d4b39767]
はじめはペンを支える部分とモーターを車体左側にまとめて取り付けましたが、アームを左側にのばしたときに車体が左に倒れてしまうため、モーターを右側に移しました。動力の伝達が大変になりましたが、ロボットが倒れる問題は解決することができました。動力はシャフトを3本つなげることで伝達しています。また、ペンを上下させる部分はギヤの使用が困難だったためベルトを使用しましたが、これが逆に適度な筆圧を生むことになり役立ちました。ペンは輪ゴムを使って取り付けましたが、取り付け部の上部にストッパーを付けることでずれないようにしています。
#ref(071107_174116.jpg)
外側から見たところ
#ref(071107_174139.jpg)
車体側から見たところ。上部にストッパーがある
**プログラム [#t52ad429]
今回は二人の名字から「中」、「戸」という字を書くプログラムを制作しました。
***「中」のプログラム [#y50ebb02]
#define YS 100
#define YL 300
#define X 200
#define P 30
sub ys_fwd() //「中」の短い縦線上→下
{
OnFwd(OUT_C);
Wait(YS);
Off(OUT_C);
}
sub ys_rev() //「中」の短い縦線下→上
{
OnRev(OUT_C);
Wait(YS);
Off(OUT_C);
}
sub yl_run() //「中」の長い縦線上→下
{
OnFwd(OUT_C);
Wait(YL);
Off(OUT_C);
}
sub x_fwd() //「中」の横線左→右
{
OnFwd(OUT_B);
Wait(X);
Off(OUT_B);
}
sub x_rev() //「中」の横線右→左
{
OnRev(OUT_B);
Wait(X);
Off(OUT_B);
}
sub xy_run() //
{
OnRev(OUT_C+OUT_B);
Wait(YS);
Off(OUT_C+OUT_B);
}
sub pup() //ペンを上げる
{
OnFwd(OUT_A);
Wait(P);
Off(OUT_A);
}
sub pdw() //ペンを下げる
{
OnRev(OUT_A);
Wait(P);
Off(OUT_A);
}
task main()
{
pdw();
ys_fwd();
pup();
ys_rev();
pdw();
x_fwd();
ys_fwd();
pup();
x_rev();
pdw();
x_fwd();
pup();
xy_run();
ys_rev();
pdw();
yl_run();
pup();
OnRev(OUT_B); //アームを元の位置に戻す
Wait(YS);
Off(OUT_B);
}
***「戸」のプログラム [#eea93047]
void go_straight(int t) //ペンを(上から下へ)進める
void go_back(int t){OnRev(OUT_C); Wait(t);Off(OUT_C)} //ペンを進ませる(下に進む)
void go_straight(int t){ OnFwd (OUT_C); Wait(t);Off(OUT_C);} //ペンを戻す
void go_right(int t){OnFwd(OUT_B); Wait(t);Off(OUT_B);} //ペンを右に動かす
void go_left(int t){OnRev(OUT_B);Wait(t);Off(OUT_B);} //ペンを左に動かす
void go_up(int t){OnRev(OUT_A);Wait(t);Off(OUT_A);} //ペンを上げる
void go_down(int t){OnFwd(OUT_A);Wait(t);Off(OUT_A);} //ペンを下げる
task main()
{go_down(40); //ペンを下げる
go_right(80); //一画目
go_up(40); //ペンを二画目の始めまで動かす
go_straight(30);
go_left(100);
go_down(40);
go_right(120); //二画目
go_straight(50);
go_up(40); //ペンを三画目の始めまで動かす
go_left(120);
go_down(40);
go_right(120); //三画目
go_up(40); //ペンを四画目の始めまで動かす
go_left(120);
go_back(50);
go_down(40);
repeat(10) //四画目(右曲がりの曲線)
{go_straight(5);
go_right(4);}
repeat(5) //左曲がりの曲線
{go_straight(5);
go_left(4);}
repeat(5) //さらに左曲がりの曲線
{go_straight(4);
go_left(3);}
repeat(5) //もっと左曲がりの曲線
{go_straight(3);
go_left(2);}
go_up(40); //ペンを上げる
Float(OUT_A);} //停止
{OnFwd(OUT_C);Wait(t);Off(OUT_C)}
void go_back(int t) //ペンを(下から上へ)戻す
{OnRev(OUT_C); Wait(t);Off(OUT_C)}
void go_right(int t) //ペンを右に動かす
{OnFwd(OUT_B);wait(t);Off(OUT_B);}
void go_left(int t) //ペンを左に動かす
{OnRev(OUT_B);Wait(t);Off(OUT_B);}
void go_up(int t) //ペンを上げる
{OnFwd(OUT_A);Wait(t);Off(OUT_A);}
void go_down(int t) //ペンを下げる
{ OnRev(OUT_A); Wait(t);Off(OUT_A);}
task main()
{go_right(50);//一画目
go_up(30);//ペンを上げる
go_straight(50);go_left(150);//二画目の始めまで移動
go_down(30);//ペンを下げる
go_right(250);go_straight(50);//二画目
go_up(30);//ペンを上げる
go_left(250);//三画目の始めまで移動
go_down(30);//ペンを下ろす
go_right(250);//三画目
go_up(30);//ペンを上げる
go_left(250);go_back(50);//四画目の始めまで移動
go_down(30);//ペンを下ろす
go_straight(50);//四画目
SetPower(OUT_B,1);SetPower(OUT_C,5);//「はらい」のためのギアチェンジ
OnRev(OUT_B);OnFwd(OUT_C);Wait(50);Float(OUT_B+OUT_C);}//はらい
**課題点 [#bbe35e17]
全体的に必要最小限のパーツで制作したため、壊れやすく持ち運びが大変になってしまいました。分解して運ぶにも、別の部分も壊れてしまい、さらなる補強が必要だと思います。また、ペン上下部分に何段もベルトを使用したため、動作が不正確になってしまいました。
よろしければコメントをどうぞ
#comment