[[2018a/Member]]

書道ロボット

#contents
* 課題 [#n690776d]
-ペンで字を書くロボットを作り地元の地名2文字を書かせる。

*ロボット [#t15086e6]
-アーム型ロボット
-モーターA : 手首(ペン上げ下げ)
-モーターB : 肘関節
-モーターC : 肩関節
#ref(robo2.jpg)
*プログラム [#ud0b4ad0]
 #define arm_12 RotateMotorEx(OUT_BC,50,-100,8,true,true)
 #define penDW RotateMotor(OUT_A,50,90);
 #define penUP RotateMotor(OUT_A,50,-86);
 #define re ResetTachoCount(OUT_BC);
 
 task main()
 {
  RotateMotor(OUT_C,30,85);
  RotateMotor(OUT_A,30,60);
  Wait(500);
  penDW;                        //点1
  penUP;
  RotateMotor(OUT_C,30,-18);
  RotateMotor(OUT_B,30,-15);
  Wait(500);
  penDW;                        //点2
  penUP;
  Wait(500);
  RotateMotor(OUT_C,30,-18);
  RotateMotor(OUT_B,30,-15);
  Wait(500);
  penDW;                           //横1
  RotateMotorEx(OUT_BC,30,40,1true,true);
  Wait(500);
  penUP;
  Wait(500);
  Off(OUT_A);
  RotateMotor(OUT_C,30,-18);
  RotateMotor(OUT_B,30,-20);
  penDW;                              //縦1
  RotateMotor(OUT_C,30,-25);
  Wait(500);
  penUP;
  Wait(500);
  Off(OUT_A);
  RotateMotor(OUT_C,30,-10);
  RotateMotor(OUT_B,30,-20);
  Wait(500);
  penDW;
  Wait(500);
  RotateMotor(OUT_B,30,7);
  Off(OUT_B);
  RotateMotorEx(OUT_BC,30,40,10,true,true);
  Off(OUT_BC);
  RotateMotor(OUT_B,30,-7);
  penUP;
  Wait(500);
  Off(OUT_A);
  RotateMotor(OUT_C,30,10);
  RotateMotor(OUT_B,30,20);
  penDW;                           //口1
  RotateMotor(OUT_C,60,33);
  Off(OUT_A);
  Wait(500);
  RotateMotorEx(OUT_BC,30,-60,10,true,true);
  Off(OUT_BC)
  RotateMotor(OUT_C,30,-50);
  Wait(500);
  penUP;
  Wait(500);
  RotateMotor(OUT_C,30,27); 
  RotateMotor(OUT_B,30,27);
  penDW;                                 //田1
  RotateMotor(OUT_B,40,30); 
  penUP;
  Off(OUT_A);
  RotateMotor(OUT_B,30,28);
  RotateMotor(OUT_C,30,30);
  penDW                                  //口
  RotateMotor(OUT_B,30,-33);
  Wait(500);
  Off(OUT_A);
  RotateMotorEx(OUT_BC,30,-60,-5,true,true);
  Off(OUT_BC);
  RotateMotor(OUT_B,50,27);
  Wait(500);
  RotateMotorEx(OUT_BC,30,60,12,true,true);
  Wait(500);
  penUP;
  Wait(500);
  RotateMotor(OUT_B,30,-5);
  Wait(500);
  penDW;
  Wait(500);
  Off(OUT_A);
  RotateMotorEx(OUT_BC,30,-50,-5,true,true);
  Off(OUT_BC);
  Wait(500);
  penUP;
  Off(OUT_A);
 } 
*ロボット製作 [#k77ca39d]
**形の決定 [#x3e600bc]
-はじめはX-Y型にしようと思ったが、NXTのパーツだと少し難易度が高いと判断し、ロボットだけは簡単に製作できるアーム型にした。
-反省...プログラミングの難易度が高くなることをあまり考慮していなかった。
**製作 [#rc0977ec]
-モーターを2つ連結させ腕の形にし、残った1つのモーターでペンの上げ下げのための手首を製作した。
#ref(robo3.jpg)
-手首モーターとペンを離して紙に対してペンを斜めに当てることでブレをなくそうとした。
#ref(robo1.jpg)
-欠点...制御がしにくなる。
-この時点での課題...アームが重すぎてパーツがもたない、傾く、ぶれる。
-解決策1...補強
#ref(robo4.jpg)
-解決策2...タイヤで本体の重量UP&ブレ減少
#ref(robo7.jpg)
*プログラム製作 [#i9ce965e]
**課題 [#i724d879]
-最初の課題...肩関節モーターだけ、肘関節モーターだけでは線をまっすぐかけない。
-解決策...RotateMotorExを使って肩関節モーターと肘関節モーターを同期させる。
-次の課題...まだぶれる。
-解決策...Wait(500)を使って1画1画止めながら書く。
-その次の課題...電池の消耗が激しく、軌道が変わってしまう。
-解決策...モーターのパワーを50から30な落とす。
-解決策...モーターのパワーを50から30に落とす。
#ref(robo6.jpg)
*最後まで残った課題 [#u749da6e]
-きれいに書けない
-同じプログラムでもアームの位置関係によって全く違う軌道になる。
-サインコサインなどを使えばもう少し簡単にきれいに書けたかもしれない
* [#n1491e52]

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