2017b/Member/ibu/Mission1
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
目次
#contents
//image 640*480or320*240
*課題 [#p9ce8aa0]
課題説明ページ:[[2017b/Mission1]]
今回の課題は、"これまで住んだことのある都道府県名、市町村...
生まれ育った観光地「斑尾((長野県北部と新潟県に跨る山。山...
*「EV3 Printer」設計について[#fc0f19d2]
使用機:LEGO MINDSTORMS EV3
**設計思想 [#j6bceab7]
デフォルトの車輌にペンと昇降機を付けるだけでは、コーディ...
印字するための機械と言えば何を思い浮かべるだろうか?代表...
我々は、プリンターの概形をモチーフに設計を行った。~
また各部の改良等や持ち運びしやすくするため、役割ごとモジ...
**迷走した試作機 [#e4abd49e]
#ref(./proto.jpg,100%,試作機)
これが苦しみ悶えながら、なんとか生み出した試作機1号であ...
ラージモーター1つで左右に振り分けられたタイヤを回し、間...
ミディアムモーターでX軸を制御し、ここにペンを装着。~
残りのラージモーター1つでX軸の制御機構全体を持ち上げ、ペ...
かっこいい見た目に仕上がったが、色々と問題を抱えている。~
各モジュールの詳細については後述。
***問題点 [#t7374638]
-何かしらのパーツに引っかかって紙の進行が妨げられることが...
-紙の進行方向がずれることがある。タイヤの下の接地面に使用...
-X軸制御機構を上下させるモーターの負担が大きい。昇降モー...
**完成機 [#ta958c6a]
#ref(./comp_machine_ver2.jpg,100%,完成機)
こちらが改良を重ね、試作機の問題点をすべて克服した完成品...
試作機に比べシンプルな見た目になった。やはりかっこいい。
***Y軸制御機構 [#f724a610]
#ref(./y_module.jpg,100%,Y機構)
ラージモーターを1つ用い、軸1つにタイヤ2つを振り分けて...
まず、タイヤが下で接する部品を変更した。黒パネルの湾曲が...
配線を考え、モーターの位置は反対側に移動。するとX軸制御モ...
紙を正面から真っすぐ入れると他のパーツの角で詰まることが...
両端でタイヤの軸を支えているビームはあえて固定せず、可動...
他、無駄をなるべく削ぎ落して紙の進行をスムーズにできるよ...
これらの工夫により紙は安定して進行し、Y軸の誤差も少なくな...
***色彩センサー [#n9a2e4e5]
写真左側で下を向いているのは色彩センサーである。直下には...
試行錯誤段階の誤作動でペン直下のビームが汚れてしまったた...
これで紙の位置も把握することができ、どの位置から紙をセッ...
***X軸制御機構 [#b22f294e]
#ref(./x_control.jpg,100%,x機構)
可動域は約8センチ。
ギアと小タイヤでペンを取り付けたビームを挟み、そのビーム...
動力は小タイヤに繋がるミディアムモーター。~
この機構は当初から安定して動いてくれた。
***昇降機構 [#k6dd226a]
#ref(./x_module.jpg,100%,x機構)
ここがおそらく最も苦労した点である。~
当初はラージモーター1つにビームで接続してX軸制御機構全体...
前述の通り問題を多く抱えていたため、思い切って新設計を決...
昇降させるのではなく、X軸制御機構に回転運動を伝えてペンの...
これにより安定してペンの上げ下げが可能となった。~
ただし最初にペンをぶら下げる位置には非常に繊細な調整が必...
*プログラム [#w1b6b50f]
**オリジナルEV3ドロー用ソフトウェア「Printhon」 [#lb15aeaf]
プリンターとしての機能を果たすための、大部分を関数にして...
後の座標記述段階を極力楽にするため、随所までこだわった堅...
試作段階の他のバージョンも存在。相方のページに載っている...
[[2017b/Member/Koyo/Mission1]]
#!/usr/bin/env python3
from ev3dev.ev3 import *
from time import sleep
print("Printhon ver 0.4\n"
"Please connect\n"
"\tmy\tto\toutA\n"
"\tarm\tto\toutC\n"
"\tmx\tto\toutD\n"
"\tcs\tto\tin1")
input("Please press the enter key after connecting.")
my = LargeMotor('outA')
arm = LargeMotor('outC')
mx = MediumMotor('outD')
cs = ColorSensor('in1')
# constants
mxcm = 38.095238 #x軸移動距離をcmに変換するための定数
mycm = 20.050125313 #Y軸移動距離をcmに変換するための定数
n = 56.25 #sleep時間用定数
vxy_ratio = 5/3 # x:y=5:3 XとYを同時に等距離動く際の速...
# *position_sp
mxcm_print = mxcm
mycm_print = mycm*-1
mycm_paper = mycm
# *distance(cm)/speed
#距離にこれを掛け、速さで割ることで丁度よいsleepに与える...
sleep_x = n
sleep_y = vxy_ratio*n #
# speed
# common
my_speed = 100
arm_speed = 30
# x only
mx_speed = 500
# paper
paper_set_d = 4 #用紙をセットする際のセンサーからの移動...
paper_out_d = 4 #用紙を排出する際のセンサーからの移動距離
def pu(): #ペン上げ
arm.run_to_abs_pos(position_sp=-40)
sleep(1)
def pd(): #ペン下げ
if cs.color != 6: # nonwhite
input("The paper could not be detected. Press En...
arm.run_to_abs_pos(position_sp=0)
sleep(2)
def x(x): #X軸移動、移動相対座標を引数に入れる
mx.run_to_rel_pos(position_sp=x*mxcm_print, speed_sp...
sleep(abs(x)*sleep_x/mx_speed)
def y(y): #Y軸移動、移動相対座標を引数に入れる
my.run_to_rel_pos(position_sp=y*mycm_print)
sleep(abs(y)*sleep_y/my_speed)
def xy(x, y): #斜め移動用、X軸とY軸の移動相対座標を引数...
if y == 0:
x(x)
else:
a = (vxy_ratio)*(x/y)
mx.run_to_rel_pos(position_sp=x*mxcm_print, spee...
my.run_to_rel_pos(position_sp=y*mycm_print)
sleep(abs(y)*sleep_y/my_speed)
def paper_set(): #紙をセットする
pu()
input("I move the paper, is it OK?\n"
"\tPress Enter to continue.")
if cs.color == 4: # yellow
my.run_forever(speed_sp=my_speed)
color = 6 # white
else:
my.run_forever(speed_sp=-my_speed)
color = 4 # yellow
while 1:
if cs.color == color:
my.stop()
my.run_to_rel_pos(position_sp=paper_set_d*my...
speed_sp=my_speed,
stop_action='hold')
sleep(paper_set_d*sleep_y/my_speed)
print("Paper loaded.")
break
def paper_out(): #紙を排出する
pu()
if cs.color == 6: # white
my.run_forever(speed_sp=-my_speed)
while 1:
if cs.color == 4: # yellow
my.stop()
my.run_to_rel_pos(position_sp=-paper_out_d*m...
sleep(paper_out_d*sleep_y/my_speed)
break
def mx_init(): #X軸機構の起動時セット用
mx.reset()
mx.run_to_rel_pos(speed_sp=mx_speed,
position_sp=-8.8*mxcm_print,
stop_action='brake')
sleep(8.8*sleep_x/mx_speed)
mx.reset()
mx.run_to_abs_pos(speed_sp=mx_speed, stop_action='ho...
mx.run_to_rel_pos(speed_sp=mx_speed, stop_action='ho...
def my_init(): #Y軸機構の起動時セット用
my.reset()
my.run_to_abs_pos(speed_sp=my_speed, stop_action='ho...
my.run_to_rel_pos(speed_sp=my_speed, stop_action='ho...
def arm_init(): #昇降機構の起動時セット用
arm.reset()
input("Please press the enter key after setting the ...
arm.reset()
arm.run_to_abs_pos(speed_sp=arm_speed, stop_action='...
def init_all(): #全モーターをリセット
arm_init()
paper_set()
mx_init()
my_init()
print("Initialization of all motors has been complet...
%%文字を4文字書くためだけなら正直無駄な努力のような%%
**課題プログラム [#m45bcbe5]
この飯山プログラムは[[Printhon 0.4>2017b/Member/Koyo/Miss...
ここで記述しているのは、”飯山”をプリントするための相対座...
#!/usr/bin/env python3
from printhon_ver0_4 import *
init_all()
print("I`ll print \"iiyama\"")
#ii
x(3)
pd() # 1
xy(-1,-1)
pu()
xy(1,1)
pd() # 2
xy(0.8,-0.8)
pu()
xy(-0.8,-0.2)
pd() # 3
xy(0.3,-0.3)
pu()
x(-0.8)
y(0.2)
pd() # 4
x(1)
y(-1)
pu()
xy(-1,0.7)
pd() # 5
x(1)
pu()
xy(-1,-0.5)
pd() # 6
x(1)
pu()
xy(-1,1)
pd()# 7
y(-2.5)
xy(0.6,0.6)
pu()
y(0.5)
pd() # 8
xy(1,-1)
pu()
# ii migi
xy(0.5,3)
pd() # 9
x(1.5)
pu()
x(-1.5)
pd() # 10
xy(-0.5,-3)
pu()
x(0.5)
y(2)
pd() # 11
x(1.5)
xy(-1.5,-2)
pu()
y(2)
pd() # 12
xy(1.5,-2.2)
pu()
xy(-2,-1)
#yama
pd() #1
y(-3)
pu()
xy(-1.5,1.5)
pd() #2
y(-1.5)
x(3)
pu()
y(1.5)
pd() #3
y(-1.5)
paper_out()
*プリント結果 [#m6fb8427]
#ref(./reS__24272898.jpg,100%,達筆飯山)
動作時の映像:https://youtu.be/GwFpGWd1D14
おいしそうな飯だ。
//*感想など [#h8cf5b9d]
//発表会も無事に成功し、ここまでの苦労の甲斐があったと満...
&br;
来客数カウンター &color(white,black){&counter;};
&br;
終了行:
目次
#contents
//image 640*480or320*240
*課題 [#p9ce8aa0]
課題説明ページ:[[2017b/Mission1]]
今回の課題は、"これまで住んだことのある都道府県名、市町村...
生まれ育った観光地「斑尾((長野県北部と新潟県に跨る山。山...
*「EV3 Printer」設計について[#fc0f19d2]
使用機:LEGO MINDSTORMS EV3
**設計思想 [#j6bceab7]
デフォルトの車輌にペンと昇降機を付けるだけでは、コーディ...
印字するための機械と言えば何を思い浮かべるだろうか?代表...
我々は、プリンターの概形をモチーフに設計を行った。~
また各部の改良等や持ち運びしやすくするため、役割ごとモジ...
**迷走した試作機 [#e4abd49e]
#ref(./proto.jpg,100%,試作機)
これが苦しみ悶えながら、なんとか生み出した試作機1号であ...
ラージモーター1つで左右に振り分けられたタイヤを回し、間...
ミディアムモーターでX軸を制御し、ここにペンを装着。~
残りのラージモーター1つでX軸の制御機構全体を持ち上げ、ペ...
かっこいい見た目に仕上がったが、色々と問題を抱えている。~
各モジュールの詳細については後述。
***問題点 [#t7374638]
-何かしらのパーツに引っかかって紙の進行が妨げられることが...
-紙の進行方向がずれることがある。タイヤの下の接地面に使用...
-X軸制御機構を上下させるモーターの負担が大きい。昇降モー...
**完成機 [#ta958c6a]
#ref(./comp_machine_ver2.jpg,100%,完成機)
こちらが改良を重ね、試作機の問題点をすべて克服した完成品...
試作機に比べシンプルな見た目になった。やはりかっこいい。
***Y軸制御機構 [#f724a610]
#ref(./y_module.jpg,100%,Y機構)
ラージモーターを1つ用い、軸1つにタイヤ2つを振り分けて...
まず、タイヤが下で接する部品を変更した。黒パネルの湾曲が...
配線を考え、モーターの位置は反対側に移動。するとX軸制御モ...
紙を正面から真っすぐ入れると他のパーツの角で詰まることが...
両端でタイヤの軸を支えているビームはあえて固定せず、可動...
他、無駄をなるべく削ぎ落して紙の進行をスムーズにできるよ...
これらの工夫により紙は安定して進行し、Y軸の誤差も少なくな...
***色彩センサー [#n9a2e4e5]
写真左側で下を向いているのは色彩センサーである。直下には...
試行錯誤段階の誤作動でペン直下のビームが汚れてしまったた...
これで紙の位置も把握することができ、どの位置から紙をセッ...
***X軸制御機構 [#b22f294e]
#ref(./x_control.jpg,100%,x機構)
可動域は約8センチ。
ギアと小タイヤでペンを取り付けたビームを挟み、そのビーム...
動力は小タイヤに繋がるミディアムモーター。~
この機構は当初から安定して動いてくれた。
***昇降機構 [#k6dd226a]
#ref(./x_module.jpg,100%,x機構)
ここがおそらく最も苦労した点である。~
当初はラージモーター1つにビームで接続してX軸制御機構全体...
前述の通り問題を多く抱えていたため、思い切って新設計を決...
昇降させるのではなく、X軸制御機構に回転運動を伝えてペンの...
これにより安定してペンの上げ下げが可能となった。~
ただし最初にペンをぶら下げる位置には非常に繊細な調整が必...
*プログラム [#w1b6b50f]
**オリジナルEV3ドロー用ソフトウェア「Printhon」 [#lb15aeaf]
プリンターとしての機能を果たすための、大部分を関数にして...
後の座標記述段階を極力楽にするため、随所までこだわった堅...
試作段階の他のバージョンも存在。相方のページに載っている...
[[2017b/Member/Koyo/Mission1]]
#!/usr/bin/env python3
from ev3dev.ev3 import *
from time import sleep
print("Printhon ver 0.4\n"
"Please connect\n"
"\tmy\tto\toutA\n"
"\tarm\tto\toutC\n"
"\tmx\tto\toutD\n"
"\tcs\tto\tin1")
input("Please press the enter key after connecting.")
my = LargeMotor('outA')
arm = LargeMotor('outC')
mx = MediumMotor('outD')
cs = ColorSensor('in1')
# constants
mxcm = 38.095238 #x軸移動距離をcmに変換するための定数
mycm = 20.050125313 #Y軸移動距離をcmに変換するための定数
n = 56.25 #sleep時間用定数
vxy_ratio = 5/3 # x:y=5:3 XとYを同時に等距離動く際の速...
# *position_sp
mxcm_print = mxcm
mycm_print = mycm*-1
mycm_paper = mycm
# *distance(cm)/speed
#距離にこれを掛け、速さで割ることで丁度よいsleepに与える...
sleep_x = n
sleep_y = vxy_ratio*n #
# speed
# common
my_speed = 100
arm_speed = 30
# x only
mx_speed = 500
# paper
paper_set_d = 4 #用紙をセットする際のセンサーからの移動...
paper_out_d = 4 #用紙を排出する際のセンサーからの移動距離
def pu(): #ペン上げ
arm.run_to_abs_pos(position_sp=-40)
sleep(1)
def pd(): #ペン下げ
if cs.color != 6: # nonwhite
input("The paper could not be detected. Press En...
arm.run_to_abs_pos(position_sp=0)
sleep(2)
def x(x): #X軸移動、移動相対座標を引数に入れる
mx.run_to_rel_pos(position_sp=x*mxcm_print, speed_sp...
sleep(abs(x)*sleep_x/mx_speed)
def y(y): #Y軸移動、移動相対座標を引数に入れる
my.run_to_rel_pos(position_sp=y*mycm_print)
sleep(abs(y)*sleep_y/my_speed)
def xy(x, y): #斜め移動用、X軸とY軸の移動相対座標を引数...
if y == 0:
x(x)
else:
a = (vxy_ratio)*(x/y)
mx.run_to_rel_pos(position_sp=x*mxcm_print, spee...
my.run_to_rel_pos(position_sp=y*mycm_print)
sleep(abs(y)*sleep_y/my_speed)
def paper_set(): #紙をセットする
pu()
input("I move the paper, is it OK?\n"
"\tPress Enter to continue.")
if cs.color == 4: # yellow
my.run_forever(speed_sp=my_speed)
color = 6 # white
else:
my.run_forever(speed_sp=-my_speed)
color = 4 # yellow
while 1:
if cs.color == color:
my.stop()
my.run_to_rel_pos(position_sp=paper_set_d*my...
speed_sp=my_speed,
stop_action='hold')
sleep(paper_set_d*sleep_y/my_speed)
print("Paper loaded.")
break
def paper_out(): #紙を排出する
pu()
if cs.color == 6: # white
my.run_forever(speed_sp=-my_speed)
while 1:
if cs.color == 4: # yellow
my.stop()
my.run_to_rel_pos(position_sp=-paper_out_d*m...
sleep(paper_out_d*sleep_y/my_speed)
break
def mx_init(): #X軸機構の起動時セット用
mx.reset()
mx.run_to_rel_pos(speed_sp=mx_speed,
position_sp=-8.8*mxcm_print,
stop_action='brake')
sleep(8.8*sleep_x/mx_speed)
mx.reset()
mx.run_to_abs_pos(speed_sp=mx_speed, stop_action='ho...
mx.run_to_rel_pos(speed_sp=mx_speed, stop_action='ho...
def my_init(): #Y軸機構の起動時セット用
my.reset()
my.run_to_abs_pos(speed_sp=my_speed, stop_action='ho...
my.run_to_rel_pos(speed_sp=my_speed, stop_action='ho...
def arm_init(): #昇降機構の起動時セット用
arm.reset()
input("Please press the enter key after setting the ...
arm.reset()
arm.run_to_abs_pos(speed_sp=arm_speed, stop_action='...
def init_all(): #全モーターをリセット
arm_init()
paper_set()
mx_init()
my_init()
print("Initialization of all motors has been complet...
%%文字を4文字書くためだけなら正直無駄な努力のような%%
**課題プログラム [#m45bcbe5]
この飯山プログラムは[[Printhon 0.4>2017b/Member/Koyo/Miss...
ここで記述しているのは、”飯山”をプリントするための相対座...
#!/usr/bin/env python3
from printhon_ver0_4 import *
init_all()
print("I`ll print \"iiyama\"")
#ii
x(3)
pd() # 1
xy(-1,-1)
pu()
xy(1,1)
pd() # 2
xy(0.8,-0.8)
pu()
xy(-0.8,-0.2)
pd() # 3
xy(0.3,-0.3)
pu()
x(-0.8)
y(0.2)
pd() # 4
x(1)
y(-1)
pu()
xy(-1,0.7)
pd() # 5
x(1)
pu()
xy(-1,-0.5)
pd() # 6
x(1)
pu()
xy(-1,1)
pd()# 7
y(-2.5)
xy(0.6,0.6)
pu()
y(0.5)
pd() # 8
xy(1,-1)
pu()
# ii migi
xy(0.5,3)
pd() # 9
x(1.5)
pu()
x(-1.5)
pd() # 10
xy(-0.5,-3)
pu()
x(0.5)
y(2)
pd() # 11
x(1.5)
xy(-1.5,-2)
pu()
y(2)
pd() # 12
xy(1.5,-2.2)
pu()
xy(-2,-1)
#yama
pd() #1
y(-3)
pu()
xy(-1.5,1.5)
pd() #2
y(-1.5)
x(3)
pu()
y(1.5)
pd() #3
y(-1.5)
paper_out()
*プリント結果 [#m6fb8427]
#ref(./reS__24272898.jpg,100%,達筆飯山)
動作時の映像:https://youtu.be/GwFpGWd1D14
おいしそうな飯だ。
//*感想など [#h8cf5b9d]
//発表会も無事に成功し、ここまでの苦労の甲斐があったと満...
&br;
来客数カウンター &color(white,black){&counter;};
&br;
ページ名: