- 追加された行はこの色です。
- 削除された行はこの色です。
[[2018a/Member]]
*目次 [#n33904df]
#contents
書道ロボット
*課題 [#yf52e584]
**課題内容 [#x94a492d]
-これまで住んだことのある都道府県名、市町村名、地区名などの中から2文字以上のものを選び、それをA4の紙に書くロボットを製作する。
--ひとりにつき一つ以上のプログラムを作成すること。
--ペン以外はキットに含まれる部品を使うこと。
--キットに付属の高価な輪ゴムは切れやすいので切れないように細心の注意を払うこと。
--改良や調整をしやすくするため、ロボット本体だけでなく、プログラムについても可能な部分についてはサブルーチンや関数、マクロなどを使って部品に分けること。
**選んだ文字 [#m5d0bc95]
今回私が選んだ文字は、一度住んだことがあり、日本の象徴でもある、「富士」である。
*ロボットについて [#m1b0fb2c]
#ref(./DSC_0183.JPG,50%,)
今回制作したロボットは、モータを3つ使用し、一つのモータには、ペンの上下運動を行わせ、もう一つのモータは、レールの上を走らせ、主に字の横書きの左右運動をさせ、最後の一つは、主に字の縦書きとなる前後の動きをさせる。この3つのモータを利用した理由は、よくある一つのモータで動かすロボットとは違い、字が安定すると思ったからだ。
今回は、EV3には輪ゴムが入っておらず、どうやって固定するかに悩んだ。その結果、この赤い部分のように作り、ペンをしっかり固定することができた。
仕組みとしては、単純で、モータの回転によりペンの固定部分が連動し、上へ動いたり、下に動いたりする。
レールについて、四つの足で固定し、尚且つ、タイヤのブレを抑えるため、ちょうど通る道幅にした。
*プログラムについて [#had18066]
**モジュールのインポートとインスタンスの作成部分 [#vcb587e9]
#!/usr/bin/env python3
from ev3dev. ev3 import *
from time import sleep
m = LargeMotor('outB')
LIFT = MediumMotor('outC')
M = LargeMotor('outA')
横書をメインとするモータをm、縦書きをメインとするモータをM、ペンを上下させるモータをLIFTと命名する。また、timeモジュールをインポートしている。
**関数の作成部分 [#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)
move_left(90)
lift_down()
move_back(22)
lift_up()
move_forward(-22)
move_left(90)
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]
今回作成したロボットでは、字を大きく書いてしまったせいか、ずれが起きることがただあった。