- 追加された行はこの色です。
- 削除された行はこの色です。
[[2018a/Member]]
*目次 [#n33904df]
#contents
書道ロボット
*課題 [#yf52e584]
**課題内容 [#x94a492d]
-これまで住んだことのある都道府県名、市町村名、地区名などの中から2文字以上のものを選び、それをA4の紙に書くロボットを製作する。
--ひとりにつき一つ以上のプログラムを作成すること。
--ペン以外はキットに含まれる部品を使うこと。
--キットに付属の高価な輪ゴムは切れやすいので切れないように細心の注意を払うこと。
--改良や調整をしやすくするため、ロボット本体だけでなく、プログラムについても可能な部分についてはサブルーチンや関数、マクロなどを使って部品に分けること。
**選んだ文字 [#m5d0bc95]
今回私が選んだ文字は、一度住んだことがあり、日本の象徴でもある、「富士」である。
*ロボットについて [#m1b0fb2c]
#ref(2018a/Member/yokouchi/Mission1/DSC_0183.jpg,80%,ロボット):
今回制作したロボットは、モータを3つ使用し、一つのモータには、ペンの上下運動を行わせ、もう一つのモータは、レールの上を走らせることで、主に字の横書きの左右運動をさせ、最後の一つは、主に字の縦書きとなる前後の動きをさせる。
#ref(2018a/Member/yokouchi/Mission1/DSC_0191.jpg,80%,ペン):
#ref(2018a/Member/yokouchi/Mission1/DSC_0185.jpg,80%,ペン2):
この3つのモータを利用した理由は、よくある一つのモータで動かすロボットとは違い、字が安定すると思ったからだ。
今回は、EV3には輪ゴムが入っておらず、どうやって固定するかに悩んだ。その結果、この赤い部分のように作り、ペンをしっかり固定することができた。
仕組みとしては単純で、モータの回転によりペンの固定部分が連動し、上へ動いたり、下に動いたりする。
#ref(2018a/Member/yokouchi/Mission1/DSC_0194.jpg,80%,レール):
レールについて、四つの足で固定し、尚且つ、タイヤのブレを抑えるため、ちょうど通る道幅にした。
*プログラムについて [#had18066]
**モジュールのインポートとインスタンスの作成部分 [#vcb587e9]
#!/usr/bin/env python3
from ev3dev. ev3 import *
from time import sleep #timeモジュールをインポート
m = LargeMotor('outB') #横書きするための横移動をメインとする
LIFT = MediumMotor('outC') #ペンの上下をメインとする
M = LargeMotor('outA') #縦書きするための縦移動をメインとする
**関数の作成部分 [#c89162de]
def motor_init(): #各モータをリセットする
m.reset()
LIFT.reset()
M.reset()
def lift_up(): #ペンを持ち上げる動作
LIFT.run_to_rel_pos(position_sp=180, speed_sp=250, stop_action='hold')
sleep(2)
def move_left(t): #文字に対し左に移動する
m.run_to_rel_pos(position_sp=t, speed_sp=150, stop_action='hold')
sleep(2)
def move_right(r): #文字に対し右に移動する
m.run_to_rel_pos(position_sp=r, speed_sp=150, stop_action='hold')
sleep(2)
def move_forward(f): #文字に対し上に移動する
M.run_to_rel_pos(position_sp=f, speed_sp=100, stop_action='hold')
sleep(2)
def move_back(b): #文字に対し下に移動する
M.run_to_rel_pos(position_sp=b, speed_sp=100, stop_action='hold')
sleep(2)
def lift_down(): #ペンを下ろす動作
LIFT.run_to_rel_pos(position_sp=-180, speed_sp=250, stop_action='hold')
sleep(2)
今回は、秒数でモータの回転を操作すると、多少の誤差が生じることがわかり、モータの回転した角度で制御することにした。
関数について、プログラミングを書くとき自分でも書きやすく見やすいよう、する動作の言葉を用いてみた。例えとして、【move_left】をあげる、これは、左方向に移動するときに使用する。
また、縦書きにしても、横書きにしてもそれぞれ長さが違うため、変数を置いてそれぞれの長さを調整した。
**「富」の部分 [#a59520b3]
#一画目
lift_down()
move_back(30)
lift_up()
move_left(90) →二画目の位置に移動
#二画目
lift_down()
move_back(20)
lift_up()
move_forward(-20) →三画目の位置に移動
#三画目
lift_down()
move_right(-180)
move_back(20)
lift_up()
move_forward(-8) →四画目の位置に移動
move_left(157.5)
#四画目
lift_down()
move_right(-130)
lift_up()
move_left(130) →五画目の位置に移動
move_back(15)
#五画目
lift_down()
move_back(15)
lift_up()
move_forward(-15) →六角目の位置に移動
#六画目
lift_down()
move_right(-130)
move_back(15)
lift_up()
move_left(130) →七画目の位置に移動
#七画目
lift_down()
move_right(-130)
lift_up()
move_left(135) →八画目の位置に移動
move_back(15)
#八画目
lift_down()
move_back(22)
lift_up()
move_forward(-22) →九画目の位置に移動
#九画目
lift_down()
move_right(90)
move_back(22)
lift_up()
move_forward(-22) →十画目の位置に移動
move_left(45)
#十画目
lift_down()
move_back(22)
lift_up()
move_forward(-22) →十一画目の位置に移動
move_left(45)
move_back(11)
#十一画目
lift_down()
move_right(-180)
lift_up()
move_left(180) →十二画目の位置に移動
move_back(11)
#十二画目
lift_down()
move_right(-180)
lift_up()
富の部分は、画数が多いため、とても長いプログラミングができてしまった。
また、頑張って書き順を意識して書いた。
**「士」の部分 [#t852ef18]
move_left(180) →「富」の十二画目から「士」と一画目に移動
move_back(25)
#一画目
lift_down()
move_right(-180)
lift_up()
move_left(90) →二画目の位置に移動
move_forward(-25)
#二画目
lift_down()
move_back(50)
lift_up()
move_left(70) →三画目の位置に移動
#三画目
lift_down()
move_right(-140)
lift_up()
富の部分が複雑な分、士の部分は画数が少なく短いプログラミングで書くことができた。
**今回書けた字 [#f00babd0]
#ref(2018a/Member/yokouchi/Mission1/DSC_0002_9.jpg,80%,字):
この写真のものが一番きれいに書けたと思うものだ。今回作成したロボットでは、字を大きく書いてしまったせいか、ずれが起きることがただあった。
また、一画一画の間隔の取り方も難しかった。
*反省 [#yeb92b83]
文字を書くロボットにタイヤを使ってしまったことだと思う。摩擦による影響で滑ってしまったりで、思うように動いてくれなかった。また、レールのところも微妙にずれていたりするので、そこも惜しいところ…
*感想 [#xd05137a]
初めての課題ということで、かなり試行錯誤したし、組み立てなどの時間、思うように動かすプログラミングを書くのが大変だった。また、ペンの圧力や、残り電池残量によっても、結果がかなり変わってくるのでそこの調整が大変だった。