目次
#contents

*課題 [#q895aa54]
「空」という漢字をロボットにペンをもたせて、紙に書かせる。
「空」を選んだ理由は、最近秋晴れや夜空が綺麗なので。

*失敗作(写真無し) [#j764bc16]
3輪で、ペンのついたアームを上下させるロボットを最初に作ったのだが、
-水平面と接する4点(ペン先含む)が離れすぎていて紙の端を巻き込みやすい。
-ペン先とロボットの動く軌道が離れていてプログラミングが非常に難しい。また、ロボットの中心線の延長線上にペン先は来ない。
-プログラムが読みにくい、問題個所が分からない。

等の理由により、ロボットもプログラムも一度白紙に戻してやり直すことにする。

*最終案 [#maa99ff9]
**ロボット [#ra001f76]
#ref(正面.JPG)
失敗作から反省してできたものがこちら。地面に接する部分が近くなり、その結果縦長になった。

#ref(下から.JPG)
下からとった写真。両輪のほぼ中間点にペン先が落ちる(白線)。ペン先を紙に着けたまま自由にその場で回転できるようになった。

また支持脚を前後にそれぞれ二本付けた(赤丸)。摩擦が小さいので紙を巻きこむことなく、安定してロボットが移動できる。

#ref(ナナメタッチ.JPG)
上部に着けたモーターAの腕は円弧上に動くが、下の穴の中を通すのでペンは垂直に上下する。

**プログラム [#qc95fde4]

***文字の書き順 [#pd2cc76c]
#ref(空の書き順.jpg)
番号の通りに○画目と呼ぶことにする。

***定義 [#ge136a77]

 #define turn_left(t) RotateMotorEx(OUT_BC,50,t,-100,true,true); //その場で左折する
 #define turn_right(t) RotateMotorEx(OUT_BC,50,t,100,true,true); //その場で右折する
 #define go(t) RotateMotor(OUT_BC,50,t);  //直進する
 #define back(t) RotateMotor(OUT_BC,-50,t);  //後退する

***サブルーチン [#r6085714]

 sub hitohude(int t)
 {
     RotateMotor(OUT_A,50,-45); OnFwd(OUT_A,5); //ペン先を下げ、押し続ける
     RotateMotor(OUT_BC,50,t); Wait(200);
     RotateMotor(OUT_A,50,45); //ペン先を上げる
 }
ペンで直線を書かせるプログラム。RotateMotorは動作が終わるとモーターを止めてしまうので、ペンを押し続ける命令(OnFwd(OUT_A,5); )がなければ線がかすれてしまう。

「空」の2,4画目では使用していない。

***プログラム [#gc7ed5c0]

 task main()
 {
     hitohude(80); //1画目
 
     go(100);
     turn_right(260);
     go(100);
     turn_right(240);
 
     RotateMotor(OUT_A,50,-45); OnFwd(OUT_A,5);
     go(80);
     turn_right(260);
     go(200);
     turn_right(240);
     go(50);
     RotateMotor(OUT_A,50,45);  //2画目
 
     back(80);
     turn_right(240);
     go(110);
     turn_left(150);
 
     hitohude(110); //3画目
 
     back(110);
     turn_right(150);
     back(50);
     turn_left(240);
 
     RotateMotor(OUT_A,50,-45); OnFwd(OUT_A,5);
     go(100);
     turn_left(240);
     go(80);
     RotateMotor(OUT_A,50,45); //4画目
 
     back(200);
     turn_right(280);
     go(50);
     turn_left(330);
 
     hitohude(160); //5画目
 
     back(50);
     turn_right(240);
     back(50);
 
     hitohude(100); //6画目
 
     go(10);
     turn_left(260);
     back(120);
 
     hitohude(220); //7画目
 }

後半になるにつれモーターが回りづらく、数値通りには動かないので値を大きくする必要があった。

電圧によっても変化してくるので調整が難しかった。とはいえ、失敗作と比べると修正する手間と修正箇所の発見が大幅に楽になった。

書き順によるペン先のわずかなズレ、次のhitohudeまでの移動距離など、実際に動かしてみないとわからないことがたくさんあった。一回一回少しずつ調整した。
***できたもの [#bcb2068a]

#ref(空.JPG)
バランスよく、満足いく出来だと思う。
大きさは15cm*15cmぎりぎりだった。

*感想 [#gd46b991]
ロボットの構造によってプログラミング・調整の難しさが大きく違うことを痛感した。

失敗作に早めに見切りをつければ楽だっただろう。

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS