「各自の出身地または氏名の中の一文字(7画以上)をA4用紙の中に書く」ロボットを製作した。初期ロボットの後ろにペンをつけた構造。ペンは輪ゴムで固定してある。モータAはペンを持つアームに、モータBは右のタイヤに、モータCは左のタイヤに取り付けた。ペンの位置は、モータBCの中間と一直線上にある。これが後々役に立った。†サーボモータと、回転数を計算する関数を使って、「移動距離」や「方向変換する角度」を引数にとるサブルーチンを作った。それらを用いてロボットを移動させるため、モータを回す秒数は考えなくて良くなった。方向変換時のスピードは、タイヤの摩擦を減らすことばかり考えた結果、100になった(せざるを得なかった)。このせいで紙をおさえなければ字が書けなくなってしまった。//ペンを上げ下げする時、モータが回転する角度ペンの上げ下げを行うマクロ「down」と「up」。ペンを二段階に分けて下ろす。一段階目(down1)で「残り20度で接地する」角度まで素早く下ろし、二段階目(down2)で「残りの20度」ゆっくり下ろす。上げるとき(up)は、素早く、一気に一段階で。「magni×移動距離」移動する、とプログラムすることで、好きな大きさで文字を書けるようにする。移動にはサブルーチンを使っているため、magniをあちこちにつける必要は無く、3つのサブルーチンにつけるだけで済んだ。{RotateMotorEx(OUT_BC,-SPEED,GetAngle_d(rev)*magni,0,true,true);//rev(cm)*magni(倍率)後転}GetAngle_dを用いることで、サブルーチン「forward」「reverse」は「前転後転する距離(cm)」をそのまま引数にとることができる。引数pl_miは、ロボットが右回転するか左回転するかを決める。左まわりに回転*/左右のタイヤを逆向きに回すことで、その場で回転する。RotateMotorEx(OUT_BC,TURN_SPEED,GetAngle_s(tn),100*pl_mi,true,true);//左右のタイヤの逆向きに回すことで方向変換Off(OUT_BC);Wait(100);}GetAngle_sを用いることで、サブルーチン「turn」は「回転する角度」をそのまま引数にとることができる。ロボットの向きを変えるが、ペンの位置は変えない引数pl_miは、ロボットが右回転するか左回転するかを決める。引数spin_angは、方向変換したい角度を決める。turn(spin_ang,pl_mi);//spin_ang(度)回転RotateMotorEx(OUT_BC,20,GetAngle_d(pen_to_center-gosa2-gosa1),0,true,true);//pen_to_center-gosa2-gosa1(cm)前転}・方向変換のとき、ロボットはその場で回転するので、左右のタイヤの間に回転の中心がある。・回転の中心では、いくら回転しても位置が変わらない。→ペンを動かさずにロボットの向きを変えたいならば�「回転の中心(今回は左右のタイヤの中間)」を「ペンの位置」まで移動させる�ロボットを指定の角度回転させる�ペンを、�の「ペンの位置」まで移動させるとすればよい�〜�を行うと、「ペンを中心に指定の角度回転させた」ときと同じ結果が得られる。spin_re(90,1);「spin_re」の説明は、少し分かりづらいと思われる。「方向変換の動作を詳しく」の項目で、写真とともに説明する。ペンが地面についた状態で、ロボットを前進させることで字を書くペンを二段階に分けて下ろすのが特徴。一段階目(down1)では「あと20度で接地する角度」まで素早く下ろし、そこで0.1秒停止する。二段階目(down2)では、「残りの20度」だけゆっくりペンを下ろす。ペンが接地するときに発生する力は、二段階目の「20度分ゆっくり下ろした」ときの力だけなので、ペンは安定した接地が可能。ペン接地後、指定された距離だけ進む(このとき字を書く)。その後、ペンを上げる。このとき、ペンを素早く、一気に(一段階で)上げることで、無駄なインクが紙に付くのを防ぐ。「高」では「口」を2回書くので、一応サブルーチンにした。今回は「90度左回転の方向変換をする」ときを例に説明する。回転の中心を、最初ペンのあった位置まで持っていく。実際に方向変換したい角度分、回転させる。†ペンを元の位置に戻すため、�で下がった分の距離を進む。このときのペンの位置は、最初のペンの位置と同じ。「ペンを中心にして、指定の角度回転させたとき」と同じ結果が得られる。・サーボモータや、回転角度を計算する関数を使ったことで、「xセンチ進む」「yセンチ下がる」「z度向きを変える」のように長さや角度を指定してロボットを動かせるようになった。サブルーチンの引数に進む距離や回転する角度が書いてあるので、プログラムを見れば、ロボットがどんな動きをしているのかがわかる。・文字の倍率を設定できるようにした。そのおかげで、文字が紙からはみ出る心配が消えた。・紙をおさえないと字が書けなくなってしまった。タイヤの摩擦を減らすためとはいえ、回転スピード100%は流石にやり過ぎだった。・プログラムがかなり長くなってしまった。必要以上にサブルーチンを使っているので、サブルーチン同士をまとめたりして、数を減らすべきだった(特に、「turn」と「spin_re」は、まとめておくべきだった)・ロボット製作では全く貢献できなかったので、次回からは貢献できるように頑張りたい。