目次
お描きロボット!
A3の紙に相棒の似顔絵を書くロボットを作成せよ!!!
カンウ 機械システム工学科
K.H 電気電子工学科
やる気満々だった僕たちは何でも作れる気がしていろいろ考えてみました。僕たちが一番狙ったところは他のみんなも思ったと思いますが、やっぱり「他のロボットと違う構造のロボットを作ろう!」ということでした。そこでまずペンを固定する部分をタイヤやゴム輪などを使わずに純粋なレゴの部品だけで作ろうと思いました。次にペンをどうやって上下に動かすかという点については他のところとは違うギアーを使ってみることにしました。また実現には至らなかったのですが、車体と本体を分離して本体だけを回すとか、列車のように本体を前に出すなどといったことも色々と実験してみました。
それでは僕たちのロボットを紹介させていただきます。
こちらがロボットの外見です。
これはペンを固定する部品です。ペンがちょうどぴったりレゴの中に入っています。ここは運がよかったと思います。
こちらはペンの上下運動をさせる部品です。ラックギヤを使って上げ下げしています。モータの固定は電車のように棒でレールを作って昇降させています。
1.ペンの筆圧が一定せずガタガタした感じの直線しかかけなかった。
2.ペンを垂直に移動させることはできるようになったが、かみ合っているはずのギアがなぜか空転してしまった。
3.ある程度柔らかい地面の上ではうまく描けたが、机のような固い面の上だといっぱいまでペンを下ろしても筆圧が足りなかった。
4.3の後ペン固定部がペンを下げた際に外れることが頻発した。
1.初めにキャタピラーを使っていたのですが、それを通常のタイヤに変更する事で筆圧が一定しガタガタした感じがなくなりました。
2.ギアのモーターボックス部分の強度が足りずボックス部が変形していたことが原因でした。レゴパーツを付け足し強度を増強することで解決できました。
3.レゴのパーツを付け足したりしてペン固定部を少し下げてやることで解決しました。
4.プログラムのペンを上げ下げする部分のパラメータをいじることで解決しました。
#define cir(t) OnFwd(OUT_A); OnRev(OUT_C); Wait(t); Off(OUT_A+OUT_C); //回る #define hcir(t) OnFwd(OUT_C); OnRev(OUT_A); Wait(t); Off(OUT_A+OUT_C); //反対の方向で回る #define zen(t) OnFwd(OUT_A+OUT_C); Wait(t); Off(OUT_A+OUT_C); //前進 #define pen_up OnFwd(OUT_B); Wait(30); Off(OUT_B); //ペンアップ #define pen_down OnRev(OUT_B); Wait(20); Off(OUT_B); //ペンダウン #define back(t) OnRev(OUT_A+OUT_C); Wait(t); Off(OUT_A+OUT_C); //バックする #define hidari(t) OnFwd(OUT_C); Wait(t); Off(OUT_C); //左に回る #define migi(t) OnFwd(OUT_A); Wait(t); Off(OUT_A); //右に回る task main() { pen_down; //括弧 cir(30); //一つ目の括弧 pen_up; cir(141); pen_down; cir(30); //二つ目の括弧 pen_up; hcir(16); zen(10); Wait(30); pen_down; Wait(30); zen(30); //一つ目の目 Wait(30); pen_up; zen(45); Wait(30); pen_down; Wait(30); zen(30); //二つ目の目 Wait(30); pen_up; back(120); cir(168); pen_down; Wait(60); cir(3); //セミコロンの上 pen_up; cir(8); //セミコロンの下 Wait(30); pen_down; Wait(30); cir(11); pen_up; back(77); hcir(17); zen(130); pen_down; Wait(40); zen(30); //口 pen_up; Off(OUT_A+OUT_B+OUT_C);//プログラムの終了 }
sub pen_down(){ OnRev(OUT_B);Wait(40); Off(OUT_B); } //ペンを下げる sub pen_up(){ OnFwd(OUT_B);Wait(40); Off(OUT_B); } //ペンを上げる #define go_s(t) OnFwd(OUT_A+OUT_C);Wait(t);Off(OUT_A+OUT_C); //指定時間直進 #define back_s(t) OnRev(OUT_A+OUT_C);Wait(t);Off(OUT_A+OUT_C); //指定時間後退 #define turn_r(t) OnFwd(OUT_A);OnRev(OUT_C); Wait(t);Off(OUT_A+OUT_C); //指定時間時計回りに回転 #define turn_l(t) OnRev(OUT_A);OnFwd(OUT_C); Wait(t);Off(OUT_A+OUT_C); //指定時間反時計回りに回転 task main(){ //プログラムスタート pen_down(); turn_r(400); //顔の輪郭完成 pen_up(); go_s(20); pen_down(); go_s(35); //左目完成 pen_up(); go_s(20) pen_down(); go_s(35); //右目完成 pen_up(); back_s(95); turn_l(90); pen_down(); turn_l(60); turn_r(120); turn_l(60); //口完成 go_s(40); //鼻完成 pen_up(); go_s(50); pen_down(); turn_l(30); turn_r(60); //前髪(?)眉毛(?)完成 pen_up(); Off(OUT_A+OUT_B+OUT_C); } //プログラム終了
顔文字で書いてみました。
(-_-;)←これです。
カンウ:自分は機械工学科で今からギヤを使う機会が多いと思っていますが、この授業の課題より、自分の力でいろいろなギヤの動きや動かし方を考えてみるいい勉強になりました。でも最初だったので思ったよりそんなにうまくは行けなかったところがあってちょっと惜しいなと思っています。正直にいうとこの授業の最初は簡単にできそうな気がして頑張らなかったところがあります。そのせいで考えた構想をちゃんと実現させてないところが一番残念なところです。それで次回からはもっと頑張りたいと思います。
K.H:私は昔レゴで遊んでいた経験があったので、初めこれは結構簡単にいけるかなと思っていました。 しかしベースの車体部分、ペンを持つアーム部分などの単体で強度維持は結構できましたが、それぞれの接合部の強度を維持しつつロボットとしての動きを保つことに苦労しました。 さらに、ギア関連については素人同然なのでどういう動きがほしければそれぞれのギアをどういう風につなげていけばよいかがわからずかなり大変でした。 しかし最終的に、至らなかった点もありますが上の工夫点・改善点にもあるようにいろいろと改善できた部分もあったのでよかったと思います。
コメントをどうぞー