2018a/Member/Cho/Mission1
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[2018a/Member]]
#contents
*課題 [#ec94f6fb]
**これまで住んだことのある都道府県名、市町村名、地区名などの中から2文字以上のものを選び、それをA4の紙を書くロボットを製作せよ。 [#me44623e]
子供のころ住んでいた仙台を選んだ。
*ロボット [#lb9616e4]
**説明 [#mb8b9556]
x軸、y軸のレールを作り、その交差点に腕をペンを設置する。そして、それぞれのレールを直角に並べたキャタピラの上に固定して、キャタピラを動かすことで文字を書く。ペンは単純にモーターにペンを固定させることで上下させる。
ペンの上下と、二つのキャタピラの動きだけを制御することで、プログラミングの難易度を可能な限り下げることを目的としている。
**詳細 [#nf45bab6]
*** [#i4ebd8f8]
*プログラミング [#eefa7eef]
ペンが左上に来るような状態を初期位置とする。初期位置から右方向を正のX軸、下方向を正のY軸と設定する。
モーターの回転角を変数tとし、X,Yそれぞれの方向へtの分動くようにプログラムを書く。X方向の動き、Y方向の動き、ペンの上げ、下げを組み合わせ、文字を書く。
**注意事項 [#tab02b89]
筆ペンが傾いているため、負のX方向に線を引くことを可能な限り避ける。
**X方向の動きに関するプログラム [#tfd82e80]
def move_X(t):
mX.run_to_rel_pos(position_sp=t, speed_sp=100, stop_action='hold')
**Y方向の動きに関するプログラム [#r4a8a98f]
def move_Y(t):
mY.run_to_rel_pos(position_sp=t, speed_sp=100, stop_action='hold')
**ペンを上げる動きに関するプログラム [#z228cdfe]
def up():
mZ.run_to_rel_pos(position_sp=80, speed_sp=100, stop_action='hold')
**ペンを下げる動きに関するプログラム [#f1e318bb]
def down():
mZ.run_to_rel_pos(position_sp=-80, speed_sp=100, stop_action='hold')
**本プログラミング [#s583856d]
最初は大まかな動きをプログラミングし、実際に動かしながらプログラムを修正する。
#!/usr/bin/env python3
from ev3dev.ev3 import *
from time import sleep
mX = LargeMotor('outA')
mY = LargeMotor('outB')
mZ = MediumMotor('outD')
def move_X(t):
mX.run_to_rel_pos(position_sp=t, speed_sp=100, stop_action='hold')
def move_Y(t):
mY.run_to_rel_pos(position_sp=t, speed_sp=100, stop_action='hold')
def up():
mZ.run_to_rel_pos(position_sp=80, speed_sp=100, stop_action='hold')
def down():
mZ.run_to_rel_pos(position_sp=-80, speed_sp=100, stop_action='hold')
def mreset():
mX.reset()
mY.reset()
mZ.reset()
down()
sleep(1)
move_X(-80)
move_Y(70)
sleep(1)
up()
sleep(1)
move_X(65)
move_Y(-45)
sleep(1)
down()
sleep(1)
move_Y(105)
sleep(1)
up()
sleep(1)
move_Y(-145)
sleep(3)
move_X(70)
sleep(1)
down()
sleep(1)
move_Y(125)
sleep(1)
up()
sleep(1)
move_Y(-100)
sleep(1)
move_X(-55)
sleep(1)
down()
sleep(1)
move_Y(80)
sleep(1)
move_X(80)
move_Y(-30)
sleep(1)
up()
sleep(1)
move_Y(-80)
sleep(1)
down()
sleep(1)
move_Y(80)
sleep(1)
up()
sleep(1)
move_Y(-130)
sleep(1)
move_X(65)
sleep(1)
down()
sleep(1)
move_X(-50)
move_Y(50)
sleep(1)
move_X(100)
move_Y(-30)
sleep(1)
up()
sleep(1)
move_Y(-45)
sleep(1)
move_X(-45)
sleep(1)
down()
sleep(1)
move_Y(60)
move_X(60)
sleep(1)
up()
sleep(1)
move_X(-100)
sleep(1)
move_Y(75)
sleep(1)
down()
sleep(1)
move_Y(45)
sleep(1)
move_X(90)
move_Y(-30)
sleep(1)
up()
sleep(1)
move_Y(-45)
sleep(1)
move_X(-90)
sleep(1)
down()
sleep(1)
move_X(90)
move_Y(-30)
sleep(1)
move_Y(55)
sleep(1)
up()
sleep(1)
*結果 [#f2095aa0]
**書いた字 [#g9b9f0a6]
とてもではないが「仙台」には見えない。辛うじて文字であるとは理解できるが、成功したとは言えないだろう。
**失敗の原因 [#g19bb275]
‐まず何より、部品たちがきっちりかみ合っていないことを挙げられる。かみ合わないことによって生じる隙間によって、安定感を失うことになった。
‐次に、筆ペンが傾いていることも、原因であると考えられる。これにより必要以上に接触面積が大きくなり、望まない線を引いてしまった。
**結論 [#g08dc676]
上記の問題を踏まえ
終了行:
[[2018a/Member]]
#contents
*課題 [#ec94f6fb]
**これまで住んだことのある都道府県名、市町村名、地区名などの中から2文字以上のものを選び、それをA4の紙を書くロボットを製作せよ。 [#me44623e]
子供のころ住んでいた仙台を選んだ。
*ロボット [#lb9616e4]
**説明 [#mb8b9556]
x軸、y軸のレールを作り、その交差点に腕をペンを設置する。そして、それぞれのレールを直角に並べたキャタピラの上に固定して、キャタピラを動かすことで文字を書く。ペンは単純にモーターにペンを固定させることで上下させる。
ペンの上下と、二つのキャタピラの動きだけを制御することで、プログラミングの難易度を可能な限り下げることを目的としている。
**詳細 [#nf45bab6]
*** [#i4ebd8f8]
*プログラミング [#eefa7eef]
ペンが左上に来るような状態を初期位置とする。初期位置から右方向を正のX軸、下方向を正のY軸と設定する。
モーターの回転角を変数tとし、X,Yそれぞれの方向へtの分動くようにプログラムを書く。X方向の動き、Y方向の動き、ペンの上げ、下げを組み合わせ、文字を書く。
**注意事項 [#tab02b89]
筆ペンが傾いているため、負のX方向に線を引くことを可能な限り避ける。
**X方向の動きに関するプログラム [#tfd82e80]
def move_X(t):
mX.run_to_rel_pos(position_sp=t, speed_sp=100, stop_action='hold')
**Y方向の動きに関するプログラム [#r4a8a98f]
def move_Y(t):
mY.run_to_rel_pos(position_sp=t, speed_sp=100, stop_action='hold')
**ペンを上げる動きに関するプログラム [#z228cdfe]
def up():
mZ.run_to_rel_pos(position_sp=80, speed_sp=100, stop_action='hold')
**ペンを下げる動きに関するプログラム [#f1e318bb]
def down():
mZ.run_to_rel_pos(position_sp=-80, speed_sp=100, stop_action='hold')
**本プログラミング [#s583856d]
最初は大まかな動きをプログラミングし、実際に動かしながらプログラムを修正する。
#!/usr/bin/env python3
from ev3dev.ev3 import *
from time import sleep
mX = LargeMotor('outA')
mY = LargeMotor('outB')
mZ = MediumMotor('outD')
def move_X(t):
mX.run_to_rel_pos(position_sp=t, speed_sp=100, stop_action='hold')
def move_Y(t):
mY.run_to_rel_pos(position_sp=t, speed_sp=100, stop_action='hold')
def up():
mZ.run_to_rel_pos(position_sp=80, speed_sp=100, stop_action='hold')
def down():
mZ.run_to_rel_pos(position_sp=-80, speed_sp=100, stop_action='hold')
def mreset():
mX.reset()
mY.reset()
mZ.reset()
down()
sleep(1)
move_X(-80)
move_Y(70)
sleep(1)
up()
sleep(1)
move_X(65)
move_Y(-45)
sleep(1)
down()
sleep(1)
move_Y(105)
sleep(1)
up()
sleep(1)
move_Y(-145)
sleep(3)
move_X(70)
sleep(1)
down()
sleep(1)
move_Y(125)
sleep(1)
up()
sleep(1)
move_Y(-100)
sleep(1)
move_X(-55)
sleep(1)
down()
sleep(1)
move_Y(80)
sleep(1)
move_X(80)
move_Y(-30)
sleep(1)
up()
sleep(1)
move_Y(-80)
sleep(1)
down()
sleep(1)
move_Y(80)
sleep(1)
up()
sleep(1)
move_Y(-130)
sleep(1)
move_X(65)
sleep(1)
down()
sleep(1)
move_X(-50)
move_Y(50)
sleep(1)
move_X(100)
move_Y(-30)
sleep(1)
up()
sleep(1)
move_Y(-45)
sleep(1)
move_X(-45)
sleep(1)
down()
sleep(1)
move_Y(60)
move_X(60)
sleep(1)
up()
sleep(1)
move_X(-100)
sleep(1)
move_Y(75)
sleep(1)
down()
sleep(1)
move_Y(45)
sleep(1)
move_X(90)
move_Y(-30)
sleep(1)
up()
sleep(1)
move_Y(-45)
sleep(1)
move_X(-90)
sleep(1)
down()
sleep(1)
move_X(90)
move_Y(-30)
sleep(1)
move_Y(55)
sleep(1)
up()
sleep(1)
*結果 [#f2095aa0]
**書いた字 [#g9b9f0a6]
とてもではないが「仙台」には見えない。辛うじて文字であるとは理解できるが、成功したとは言えないだろう。
**失敗の原因 [#g19bb275]
‐まず何より、部品たちがきっちりかみ合っていないことを挙げられる。かみ合わないことによって生じる隙間によって、安定感を失うことになった。
‐次に、筆ペンが傾いていることも、原因であると考えられる。これにより必要以上に接触面積が大きくなり、望まない線を引いてしまった。
**結論 [#g08dc676]
上記の問題を踏まえ
ページ名: