担当:リンゴスター(・∀‐)v&SEGA(*´Д`)=з
☆目次
これがぼくらのマシンです。
マシンを作るうえでベースとなったのはTAの方々のグループのものですが、あくまで参考にしながら一生懸命やったつもりです
タイヤに使うモーターは前後移動のためのひとつだけ。のこり2つのモーターを上下・左右にそれぞれ使い、字を書きます。
タイヤにはモーターはひとつなのでマシンはいろいろ動き回らないし、マシンをターンさせる角度を考えたりする必要もなかった分、比較的プログラムはラクだったと思います。
ちなみに見えにくいかもしれませんが、今回、マシンには操縦士:メカ崎くんが搭乗しています。
正面からの写真です。
真ん中にモーターの歯車が見えると思います。このモーターが回るとその下にあるギザギザが動き、ペンのついたアームごと左右に移動ができます。
中央になんか黒い部品がエックスみたいについてますが、あれはスライドさせるとどうしてもマシンに負荷がかかってだんだん崩壊してきてしまったのでエックスで止めました。
これは上下にペンを動かすためのモーターですね。
これが棒を回して反対側のアームを動かすわけです。
でもアームとペンはくっついてるし、アームのモーターも当然つながってるわけだから…ペンもアームもモーターも、全部一緒に左右に動かさないといけないわけだ!これには結構まいりましたね(´ー`)「
で、これが(俺が撮ったんでボケてますが)例のアームです。
ゴムのついたリール(?)を回して上下に動きます。
ペンはアームにゴムでうまいことくくり付けています。
こんな仕組み考えたひとはすごいと思いますよ。
これらの技術が結集してこのマシンができました。
でもなんかごちゃごちゃして片付けなんか面倒そう…ご心配なく!なんとこのマシンあっという間にアームとスライド部分が取り外せて片付けラクラク!収納スペースもとりません。非常に良心的なマシンでございます。
そんなこんなで形にはなりましたが、中身がなければただの抜け殻。マシンの頭脳であるプログラムをつくらなければいけません。
ではそのプログラムを見てくださいよ。
sub pen_down() //筆を下ろす { OnRev(OUT_A);Wait(50); Off(OUT_A); } sub pen_up() //筆を上げる { OnFwd(OUT_A);Wait(50); Off(OUT_A); } void slide_right(int r) //筆を右に移動 { OnFwd(OUT_B);Wait(r); Off(OUT_B); } void slide_left(int s) //筆を左に移動 { OnRev(OUT_B);Wait(s); Off(OUT_B); } void go(int t) //本体の前進 { OnFwd(OUT_C);Wait(t); Off(OUT_C); } void back(int u) //本体の後進 { OnRev(OUT_C);Wait(u); Off(OUT_C); } task main() { pen_down(); //1画目『|』 back(60); pen_up(); //2画目の位置に移動 go(60); pen_down(); //2画目『ー』と『|』 slide_right(20); back(60); pen_up; //3画目の位置に移動 go(40); slide_left(20); repeat(2){ pen_down(); //3画目(4画目も)『ー』 slide_right(20); pen_up(); //次の位置に移動 slide left(20); back(20); } pen_down(); //5画目『ー』 slide_right(20); pen_up(); //6画目の位置に移動 slide_left(20); pen_down(); //6画目『ノ』 back(10); OnRev(OUT_C); //ここはサブルーチンを使うとうまく動作しなかったため、省略してない Wait(15); OnRev(OUT_B); Wait(10); Off(OUT_B+OUT_C); pen_up(); //7画目の位置に移動 slide_right(14); go(30); pen_down(); //7画目 back(20); slide_right(10); OnFwd(OUT_C); //上と同じ Wait(5); OnFwd(OUT_A); Wait(50); Off(OUT_A+OUT_C); } //完成
関数を使ったプログラムを書きました(-∀-)v
void go_straight(int t) //前進を定義 { OnFwd(OUT_C); Wait(t); Off(OUT_C); } void go_back(int t) //後退を定義 {OnRev(OUT_C); Wait(t); Off(OUT_C); } void slide_left(int t) //ペンの左移動を定義 { OnRev(OUT_B); Wait(t); } void slide_right(int t) //ペンの右移動を定義 { OnFwd(OUT_B); Wait(t); Off(OUT_B); } void down_pen(int t) //ペンを下げることを定義 { OnRev(OUT_A); Wait(t); Off(OUT_A); } void up_pen(int t) //ペンを上げることを定義 { OnFwd(OUT_A); Wait(t); Off(OUT_A); }
(ペンを上げて右いっぱいにペンが寄った状態でスタート) task main() { slide_left(5); //「長」1画目『ー』 down_pen(40); slide_left(30); up_pen(40); slide_right(30); //2画目の位置まで移動 down_pen(40); //2画目『|』 go_straight(60); up_pen(40); go_back(40); //3画目の位置まで移動 repeat(2){ //3,4画目『-』2つ down_pen(40); slide_left(20); up_pen(40); slide_right(20); go_straight(20); } slide_right(15); //5画目の位置まで移動 down_pen(40); //5画目『―』 slide_left(60); up_pen(40); slide_right(35); //6画目の位置まで移動 down_pen(40); //6画目『|』と『/』(ハネ) go_straight(60); OnRev(OUT_B); //『/』のとこ Wait(5); OnRev(OUT_C); Wait(30); Off(OUT_B+OUT_C); up_pen(40); go_straight(20); //7画目の位置まで移動 down_pen(40); //7画目『/』 OnFwd(OUT_B+OUT_C); Wait(10); Off(OUT_B+OUT_C); up_pen(40); go_back(20); //8画目の位置まで移動 slide_right(15); down_pen(40); //8画目『\』 OnRev(OUT_B); OnFwd(OUT_C); Wait(35); Off(OUT_B+OUT_C); up_pen(40); //…書けた。 }
そしてついに書けた字がこれ!(^▽^)/
よくいうと風情があってとてもロボが書いたとは思えません。筆を使って書くとこんな感じですが、ふつうのマジックペンを使うともう少し直線のしっかりした字体になります。
ここまで来るのにこれだけの手間と時間がかかるとは思いませんでした。今ロボットによってわたしたちの身の回りの多くの製品が作られるていることが当たり前のようになっていますが、そんな当たり前なものも、ひとつひとつ製作者が苦労して試行錯誤のすえ作り出したものであると文字を書き終えて思いました。