*目次 [#y56c268a]
#contents
*課題 [#z7e616e4]
**お絵描きロボット [#eca505e8]
・A3用紙に相棒の似顔絵を書くロボットの製作
*使用したロボット [#j92985e2]
**課題を行うために必要な機能 [#if6315f0]
・前進後進が可能~
・左右に方向転換、及びその場での回転が可能~
・ペンを装着し固定できる~
・モーターによってペンを上げ下げできる~
・ペンと紙との摩擦でペンがずれない~
・動作中に分解しない耐久性がある~
~
以上の点を満たすロボットを制作した~
** [#yc740fb0]

**ロボットの説明 [#gfe35e0e]
*プログラム [#ye456378]
**A [#a461ad51]
 #define up OnRev(OUT_B);Wait(10);Off(OUT_B);     //「up」でペンを上げる
 #define down OnFwd(OUT_B);Wait(40);Off(OUT_B);   //「down」でペンを下げる
 #define matu Off(OUT_A+OUT_C);Wait(50);          //「matu」で0.5秒間モーターA,Bの動作停止
 void go(int t)
 {
   OnFwd(OUT_C+OUT_A);Wait(t);                    //「go(秒数)」で秒数分だけ前進
 }
 void back(int t)
 {
   OnRev(OUT_C+OUT_A);Wait(t);          //「back(秒数)」で秒数分だけ後進
 }
 void right(int t)
 {  
   OnFwd(OUT_A);OnRev(OUT_C);Wait(t);             //「right(秒数)」で秒数分だけ右回りに回転
 }
 void left(int t)
 {
   OnFwd(OUT_C);OnRev(OUT_A);Wait(t);             //「left(秒数)」で秒数分だけ左回りに回転
 }    
 task main()
 {
 left(40)                                         //左の眉毛を書く
 matu
 down
 right(80)
 matu
 up
 matu
 right(40)
 matu
 go(90)                                           //右の眉毛に移動
 matu
 left(90)
 matu
 left(40)                                         //右の眉毛を書く
 matu
 down
 right(80)
 matu
 up                                               
 matu                                                
 right(40)                                        //右目に移動
 matu
 back(30)
 matu
 down
 matu
 back(40)                                         //右目を書く
 matu
 up
 right(190)                                       //180度回転と同時に左目の移動
 matu
 down                                             //左目を書く 
 matu
 back(40)
 matu
 go;(20)                                          //顔の中心に移動
 matu
 up
 matu
 left(90)                                         //左に90度回転
 matu
 down                                             //鼻を書く
 go(30)
 up
 matu
 go(50)                                           //口に移動
 matu
 left(40)                                        //口を書く
 matu
 down
 matu
 right(80)
 matu 
 Off(OUT_A+OUT_B+OUT_C);                           //停止
 }
 
**B [#ha17cc83]
 
*苦労した点 [#h5dff449]
**問題点 [#sdebd678]
1:ペンを下げるときに出しすぎてしまい車体が浮いてしまう~
2:できる限り小さな円を描こうとした結果ロボットの重心が後方にずれてしまい急発進する際に後ろに浮き上がることがあった~
3:プログラムを書く際にOnFwd(OUT_A+OUT_C);Wait(300);・・・のように前進させるだけでも長い文を書かなければならず手間がかかるうえに解りずらい~
4:ペンが紙から離れる前に次の動作が動き出し紙に不要な線ができる~


**解決策 [#h49458d4]
1:ペンの構造を利用してブロックである一定以上にペンが出すぎるのを防いだ~
2:ロボットの後ろにストッパーをつけて浮き上がってもすぐに戻るようにした~
3:最初に前進、後進、方向転換を「go(300)」「back(300)」のように定義することで書きやすく分かりやすいプログラムを書いた~
4:ひとつの動作が終わるごとにすべてのタイヤのモーターを止めることで不要な線が書かれるのを防いだ~




*コメントをどうぞ [#p74563c5]
#comment


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS