今回私が選んだ文字は、一度住んだことがあり、日本の象徴でもある、「富士」である。
今回制作したロボットは、モータを3つ使用し、一つのモータには、ペンの上下運動を行わせ、もう一つのモータは、レールの上を走らせることで、主に字の横書きの左右運動をさせ、最後の一つは、主に字の縦書きとなる前後の動きをさせる。
この3つのモータを利用した理由は、よくある一つのモータで動かすロボットとは違い、字が安定すると思ったからだ。
今回は、EV3には輪ゴムが入っておらず、どうやって固定するかに悩んだ。その結果、この赤い部分のように作り、ペンをしっかり固定することができた。 仕組みとしては単純で、モータの回転によりペンの固定部分が連動し、上へ動いたり、下に動いたりする。
レールについて、四つの足で固定し、尚且つ、タイヤのブレを抑えるため、ちょうど通る道幅にした。
#!/usr/bin/env python3 from ev3dev. ev3 import * from time import sleep #timeモジュールをインポート m = LargeMotor('outB') #横書きするための横移動をメインとする LIFT = MediumMotor('outC') #ペンの上下をメインとする M = LargeMotor('outA') #縦書きするための縦移動をメインとする
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】をあげる、これは、左方向に移動するときに使用する。 また、縦書きにしても、横書きにしてもそれぞれ長さが違うため、変数を置いてそれぞれの長さを調整した。
#一画目 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()
富の部分は、画数が多いため、とても長いプログラミングができてしまった。 また、頑張って書き順を意識して書いた。
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()
富の部分が複雑な分、士の部分は画数が少なく短いプログラミングで書くことができた。
この写真のものが一番きれいに書けたと思うものだ。今回作成したロボットでは、字を大きく書いてしまったせいか、ずれが起きることがただあった。 また、一画一画の間隔の取り方も難しかった。
文字を書くロボットにタイヤを使ってしまったことだと思う。摩擦による影響で滑ってしまったりで、思うように動いてくれなかった。また、レールのところも微妙にずれていたりするので、そこも惜しいところ…
初めての課題ということで、かなり試行錯誤したし、組み立てなどの時間、思うように動かすプログラミングを書くのが大変だった。また、ペンの圧力や、残り電池残量によっても、結果がかなり変わってくるのでそこの調整が大変だった。