#contents
*ロボットの説明 [#tb4ca5f1]
**ロボット全体 [#ifd4fc0a]

ベースはそのまま使用し、前方にモータを取り付けてペンを上下させて紙に描くという構造にしました。
#ref(2016a/Member/kurokouchi/Mission1/01.jpg,100%,01)

大きく分けて三つの部品に解体できるようにしました。
#ref(2016a/Member/kurokouchi/Mission1/02.jpg,100%,02)

**ペン上下部分 [#w01183f5]

ペンが紙にあたっても余計な力が掛からないように空回りするようにしました。
#ref(2016a/Member/kurokouchi/Mission1/03.jpg,100%,01)

ブロック部分が横ではなく縦方向なので、間に細いブロックを挟むことで違うペンを挟むことができるようにしました。
#ref(2016a/Member/kurokouchi/Mission1/04.jpg,100%,01)

*プログラムの説明 [#wdb062dc]

**定数の説明 [#td668626]
約10cmの秒数

 #define MOVE_TIME 85

ペンを降ろす秒数

 #define W_TIME 10 

**関数の説明 [#za1d5edc]

右回転

 void R_turn(int R)
 {
    OnFwd(OUT_A);
    OnRev(OUT_C); 
    Wait(R);
    Off(OUT_AC);
 }
 
左回転

 void L_turn(int L)
 {
    OnFwd(OUT_C);
    OnRev(OUT_A); 
    Wait(L);
    Off(OUT_AC);
 }

前進
 
 void go(int M)
 {
    OnFwd(OUT_A);
    OnFwd(OUT_C); 
    Wait(M*(MOVE_TIME/10));
    Off(OUT_AC);
 }

後進
 
 void back(int M)
 {
    OnRev(OUT_A);
    OnRev(OUT_C); 
    Wait(M*(MOVE_TIME/10));
    Off(OUT_AC);
 }

ペンを降ろしながら前進
 
 void w_go(int M)
 {
    OnFwd(OUT_B);
    Wait(W_TIME);
    Off(OUT_B);
 
    OnFwd(OUT_A);
    OnFwd(OUT_C); 
    Wait(M*(MOVE_TIME/10));
    Off(OUT_AC);
 
    OnRev(OUT_B);
    Wait(W_TIME);
    Off(OUT_B); 
 }

ペンを降ろしながら後進
 
 void w_back(int M)
 {
    OnFwd(OUT_B);
    Wait(W_TIME);
    Off(OUT_B);
 
    OnRev(OUT_A);
    OnRev(OUT_C); 
    Wait(M*(MOVE_TIME/10));
    Off(OUT_AC);
 
    OnRev(OUT_B);
    Wait(W_TIME);
    Off(OUT_B);
 }
 
**メインプログラム [#qd8e2056]

 task main ()
 {
    w_go(10);   //輪郭
    go(10);
    L_turn(120);
    back(12);
    w_go(15);
    go(10);
    L_turn(49);
    back(12);
    w_go(6);
    go(10);
    L_turn(60);
    back(12);
    w_go(6);
    go(10);
    L_turn(49);
    back(12);
    w_go(6);
    go(10);
    L_turn(50);
    back(12);
    w_go(15);
    go(6);
    L_turn(135); //髪
    back(11);
    w_go(12);
    back(12);
    R_turn(135); //目
    back(2);
    L_turn(125);
    go(2);
    w_go(3);
    go(2);
    w_go(3);
    back(12);
    R_turn(125); //口
    back(3);
    L_turn(125);
    go(7);
    w_go(3);
    back(15);
 }

***線を描く [#kc253601]

引数を10とする。

    w_go(10);

変数"M"で受け取る。

 void w_go(int M)
 {
    OnFwd(OUT_B);
    Wait(W_TIME);
    Off(OUT_B);
 
    OnFwd(OUT_A);
    OnFwd(OUT_C); 
    Wait(M*(MOVE_TIME/10));
    Off(OUT_AC);
 
    OnRev(OUT_B);
    Wait(W_TIME);
    Off(OUT_B); 
 }

↓

 void w_go(int 10)
 {
    OnFwd(OUT_B);
    Wait(W_TIME);
    Off(OUT_B);
 
    OnFwd(OUT_A);
    OnFwd(OUT_C); 
    Wait(10*(MOVE_TIME/10));
    Off(OUT_AC);
 
    OnRev(OUT_B);
    Wait(W_TIME);
    Off(OUT_B); 
 }

約10cmの線を描くことができる。

*完成品 [#hd83dffc]

鉛筆で書いたため薄くなってしまった。
#ref(2016a/Member/kurokouchi/Mission1/05.jpg,60%,01)

*反省・感想 [#hec96470]
電池の残量があと少しだった事に気づかず、最後の方は毎回数値を変えなくてはいけなかった。次回からは電池の確認をしっかりと行いたいです。

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