目次 #contents *課題 [#ed7b2005] 詳しくは[[課題1>2017a/Member]]を参照。 私は、大学生になり一人暮らしをする中で、家事の大変さを思い知り、また同時に親の有難みを感じる機器が多くなりました。そのなかで火事の大変さを痛感した点から「苦」という文字を選んだ。 *ロボットについて [#qea3d5e7] 私たちは、多少プログラミングが難しくなっても良いので、ロボット本体を動かしながら文字を書くロボットを作った。なぜなら、私はロボット初心者なため複雑な構造を作ろうとすると困惑して時間がかかると思ったからである。完成品は下記の写真の通りである。 #ref(./ロボット1.jpg,50%,robote) **試作品 [#hdb24b26] 私たちはまず下記の写真のロボットを作った。 #ref(./ロボット2.jpg,50%,robote) 作った当初は上手くいくと思っていたが、動かしてみると重大な問題点が見つかった。 それは、重さのバランスが悪いためタイヤにかかる負荷がことなり、各タイヤに同じプログラムをしてもまっすぐ進まない点である。 そこで、完成品の写真にの通り知能ブロックを真ん中に移すことで左右にバランスを釣り合わせることに成功した。 **アームについて [#p0787bf9] 今回は、外側にある2つのモーターで本体を動かし真ん中のモーターでペンの上げ下げを行う仕組みを作った。ペンに関しては下記写真にある通り二重に固定させてある。下の部分ではペンの幅に合わせて大きさが調整できるようになっておりペン幅ぎりぎりにすることで固定することができる。上の部分は補助的な役割といてペンを固定している。 #ref(./ロボット1.jpg,50%,robote) *プログラミングについて [#ef6be19e] 文字に斜めに書くところがないため基本的に縦の線の長さと横の線の長さをそれぞれ統一してプログラミングを楽にした。線の長さの比は、縦:横=1:2で書くようにした。サブルーチンを使い図に示した番号に従った名前にしている。 ロボットが小回りが利かないため回転した後に前進や後進して位置を調節している。 **定義 [#uccaa734] 最初に時間を変数として前(mae)と後ろ(ushiro)で定義した。 #define mae(t) OnFwd(OUT_AC,25);Wait(t);Off(OUT_AC); #define ushiro(t) OnRev(OUT_AC,25);Wait(t);Off(OUT_AC); **スピン [#c93a85f0] 次に、文字を書くにあたって必要となるスピンを約90度回転するようにした。 sub spin() { OnFwd(OUT_A,50); OnRev(OUT_C,50); Wait(1500); Off(OUT_AC); } **アームの上げ下げ [#n5a29afa] アームを下げる(arm_down)場合はモーターを後ろに回転させることで、アームを上げる(arm_up)場合はモーターを前に回転させることでアームを上げ下げしている。 sub arm_up() { OnRev(OUT_B,50); Wait(100); Off(OUT_B); } sub arm_down() { OnFwd(OUT_B,50); Wait(100); Off(OUT_B); } **1番目 [#cc2b3d5f] 1番目は草冠の横長の部分を書くプログラムである。 sub first() { mae(1000); arm_up(); } **2番目 [#z714d946] 次に十の部分の縦線を書くプログラムである。 sub second() { spin(); ushiro(900); arm_down(); ushiro(500); arm_up(); } **3番目 [#b565ccd2] 次は、口の部分を書くプログラムである。ここではリピートを使うことでプログラムを簡略化してある。 sub third() { repeat(2){spin(); ushiro(400); arm_down(); ushiro(1000); arm_up(); spin(); ushiro(400); arm_down(); ushiro(500); arm_up(); } } **4番目 [#z0a610e5] 次は、十の横線の部分を書くプログラムである。 sub fourth() { mae(300); spin(); mae(100); arm_down(); ushiro(1000); arm_up(); } **5番目 [#i3a0267f] 5番目は、草冠の左側の縦線の部分を書くプログラムである。 sub fifth() { mae(200); spin(); ushiro(400); arm_down(); ushiro(500); arm_up(); } **6番目 [#w9f033ee] 最後に、草冠の右側の縦線の部分を書くプログラムである。 sub sixth() { spin(); ushiro(300); spin(); ushiro(400); arm_down(); ushiro(500); } **本文 [#yac75a17] サブルーチンを使うことで本文は限りなく短くした。 task main() { first(); second(); third(); fourth(); fifth(); sixth(); } *結果 [#y3155b31] 結果的にかけた文字は下記の写真の通りである。 *考察・まとめ [#xfe85bf2] 文字自体はそこそこよくかけていると感じる。しかし、実際に書いてみると問題点も浮上してきた。 それは、下記の写真の通りに後輪をつけたが、後方に想像してた以上の負荷がかかってしまう点である。後輪が外れることはないが、書く場所が変わるとそれにあわせてスピンさせたときの角度が変わってしまいうまく書けなくなってしまう。書く場所によって成功したり失敗するのはあまりよくないと自分は思う。この問題点は、知能ブロックを今回よりも前につけたりタイヤの数を増やすなどいろいろな解決策があると感じた。この反省を生かしていきたい。