課題1

これまで住んだことのある都道府県名、市町村名、地区名などの中から2文字以上のものを選び、それをA4の紙を書くロボットを製作せよ。

選んだ文字

新潟の『上越』

ロボットの説明

ロボット

最初は前輪の前方にアームを取り付けていたが、ロボットを90度動かすプログラムを動かしても書ける字は直角とはならなかった。
そこで、アームを出来るだけタイヤに近づけるように作ろうとしたが、後ろのタイヤがうまく動かなかったり、うまくバランスがとれなかったりと写真のようなフォルムになるまで大変だった。
完成したロボットでは、歯車が回転することによって筆が上下し、タイヤとタイヤの間に筆が位置しているため、曲がる動作と書ける字がしっかり一致するようになっている。
また、ロボット本体の位置も重心を考えて調整している。
また、曲がる角度の出力が電池の残量で変化してしまい、同じ電池では常に同じプログラムで動かすことはできなかった。
後述のプログラムは新品の電池で3回程度動かすとちょうどうまく書けるようになった。

プログラムの準備

プログラムを書く前の設計図

プログラムを書く前にどこから書き始めるか決めた。そしてその後どういう動きをさせるか考えた。出来るだけ90°の曲がりで書けるようにした。赤マルがプログラム開始地点、がペンを下ろしての動き、オレンジピンクがペンをあげての動き。数字は直進する出力を示す。ただし最終的なプログラムでは全て1.2倍となっている。同じ長さとすぐにわかるものは省略している。

この工程の利点

この設計図を作ることによりプログラムを書くスピードの向上(図を見ながらひたすら手を動かすだけだった),そして予期しない動きが出たときの原因即解明といったような成果があった。

プログラム

定義

#define arm_down OnFwd(OUT_A,50);Wait(150);Off(OUT_A);
アームを下げる

#define arm_up OnRev(OUT_A,50);Wait(150);Off(OUT_A);
アームを上げる

#define go_straight OnFwd(OUT_B,40);OnFwd(OUT_C,41);
直進

#define turn_right OnFwd(OUT_C,45);OnRev(OUT_B,45);Wait(700);Off(OUT_BC);
右に90度曲がる

#define turn_left OnFwd(OUT_B,45);OnRev(OUT_C,45);Wait(700);Off(OUT_BC);
左に90度曲がる

プログラム

以下プログラムの準備における画像の通り動くようなプログラムである
後述の通り改善すべきプログラムとなった

task main()
{
    arm_down
    go_straight
    Wait(450); //プログラムの準備における始点(オレンジの丸)から左方向に直進
    Off(OUT_BC);
    turn_right
    go_straight
    Wait(90);
    Off(OUT_BC);
    turn_right
    go_straight
    Wait(180);
    Off(OUT_BC);
    turn_left
    go_straight
    Wait(540); //上の縦棒を下から直進
    Off(OUT_BC);
    turn_right
    go_straight
    Wait(90);
    Off(OUT_BC);
    turn_right
    go_straight
    Wait(180);
    Off(OUT_BC);
    turn_left //↓上のうえの横棒を形成
    go_straight
    Wait(120);
    Off(OUT_BC);
    turn_right
    go_straight
    Wait(90);
    Off(OUT_BC);
    turn_right
    go_straight
    Wait(120);
    Off(OUT_BC); // ↑ここまで
    turn_left
    go_straight
    Wait(360);
    Off(OUT_BC);
    turn_left   //ここから上の下の横棒続き
    go_straight
    Wait(270);
    Off(OUT_BC);
    turn_right
    go_straight
    Wait(120);
    Off(OUT_BC);
    arm_up
    

    turn_left //向きを変えて準備画像オレンジ線のように越のそうにょう下部分へ
    go_straight
    Wait(225);
    Off(OUT_BC);
    arm_down //越始点にたどり着いた
    go_straight
    Wait(630); //そのまままっすぐ右方向へ
    Off(OUT_BC);
    turn_left
    go_straight
    Wait(90);
    Off(OUT_BC);
    turn_left
    go_straight
    Wait(360);
    Off(OUT_BC);
    turn_right  //ここから走の縦棒
    go_straight
    Wait(180);
    Off(OUT_BC);
    turn_right //横の突起部分
    go_straight
    Wait(90);
    Off(OUT_BC);
    turn_left
    go_straight
    Wait(90);
    Off(OUT_BC);
    turn_left
    go_straight
    Wait(90);
    Off(OUT_BC);
    turn_right //ここから縦棒再開
    go_straight
    Wait(450);
    Off(OUT_BC);
    turn_left
    go_straight
    Wait(90);
    Off(OUT_BC);
    turn_left //縦棒上から下へ
    go_straight
    Wait(720);
    Off(OUT_BC);
    turn_right //下の横棒へ
    go_straight
    Wait(180);
    Off(OUT_BC);
    turn_right //↓走の左下部分
    go_straight
    Wait(180);
    Off(OUT_BC);
    turn_left
    go_straight
    Wait(90);
    Off(OUT_BC);
    turn_left
    go_straight
    Wait(360);
    Off(OUT_BC);
    turn_left
    go_straight
    Wait(90);
    Off(OUT_BC);
    turn_left
    go_straight
    Wait(90);
    Off(OUT_BC); //↑ここまで
    arm_up //筆をあげて走の横棒までオレンジの移動
    go_straight
    Wait(450);
    Off(OUT_BC);
    turn_right //横棒のため向き転換
    arm_down
    go_straight
    Wait(450);
    Off(OUT_BC);
    turn_right
    go_straight
    Wait(90);
    Off(OUT_BC);
    turn_right
    go_straight
    Wait(450);
    Off(OUT_BC);
    turn_right
    go_straight
    Wait(90);
    Off(OUT_BC);//ここまで走の真ん中横棒
    arm_up
    go_straight //オレンジの移動
    Wait(90);
    Off(OUT_BC);
    turn_right //向き転換
    arm_down
    go_straight
    Wait(360);
    Off(OUT_BC);
    turn_left
    go_straight
    Wait(90);
    Off(OUT_BC);
    turn_left
    go_straight
    Wait(360);
    Off(OUT_BC);
    turn_left
    go_straight
    Wait(90);
    Off(OUT_BC);  //ここまで走の上横棒
    arm_up
    turn_left
    go_straight //ピンクの移動
    Wait(570);
    Off(OUT_BC);
    arm_down; //上下反転Lを形成
    go_straight
    Wait(420);
    Off(OUT_BC);
    turn_left
    go_straight
    Wait(90);
    Off(OUT_BC);
    turn_left
    go_straight
    Wait(510);
    Off(OUT_BC);
    turn_left
    go_straight
    Wait(600);
    Off(OUT_BC);
    turn_left
    go_straight
    Wait(90);
    Off(OUT_BC);
    turn_left
    go_straight
    Wait(510);
    Off(OUT_BC); //ここまで
    arm_up
    go_straight //オレンジの移動
    Wait(180);
    Off(OUT_BC);
    turn_right
    go_straight
    Wait(90);
    Off(OUT_BC);
    OnFwd(OUT_C,35); //斜めに回転
    OnRev(OUT_B,35);
    Wait(700);
    Off(OUT_BC);
    arm_down
    go_straight //斜めの棒
    Wait(600);
    Off(OUT_BC);
    turn_right //↓横切る棒
    go_straight
    Wait(90);
    Off(OUT_BC);
    turn_left
    go_straight
    Wait(90);
    Off(OUT_BC);
    turn_left
    go_straight
    Wait(90);
    Off(OUT_BC);
    turn_right //↑ここまで
    go_straight
    Wait(180);
    Off(OUT_BC);
    turn_left
    go_straight
    Wait(90);
    Off(OUT_BC);
    turn_left
    go_straight
    Wait(180);
    Off(OUT_BC);
    turn_right //↓また横切る棒
    go_straight
    Wait(90);
    Off(OUT_BC);
    turn_left
    go_straight
    Wait(90);
    Off(OUT_BC);
    turn_left
    go_straight
    Wait(90);
    Off(OUT_BC);
    turn_right //↑ここまで
    go_straight
    Wait(600);
    Off(OUT_BC);
    turn_left
    go_straight
    Wait(90);
    Off(OUT_BC); //斜め棒終わり
    arm_up
    turn_left
    turn_left //180°くらい回転
    go_straight //ピンク移動
    Wait(180);
    Off(OUT_BC);
    arm_down
    go_straight //最後の点を正方形の要領で形成
    Wait(90);
    Off(OUT_BC);
    turn_right
    go_straight
    Wait(90);
    Off(OUT_BC);
    turn_right
    go_straight
    Wait(90);
    Off(OUT_BC);
    turn_right
    go_straight
    Wait(90);
    Off(OUT_BC);
    arm_up

}

書けた文字

上越

一応読める感じ(漢字)

改善すべきだったところ

電池残量の変化にも対応できるロボットにすべき
出力が大きく,移動速度が速かったために電池の影響をより受けやすかったかもしれない
文字の枠をなぞるように書くのではなくこまめにアームの上げ下げをする一線の字を書くべきだった(結果としてプログラムが非常に長くなってしまった)


添付ファイル: fileS__47513650.jpg 134件 [詳細] filerobot1.jpg 142件 [詳細] fileframe.png 172件 [詳細]

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-08-12 (日) 17:59:38