2018b/Member目次

課題

今回の課題は書道ロボット。

これまで住んだことのある都道府県名、市町村名、地区名などの中から2文字以上、かつ合計10画以上のものを選び、それをA4の紙を書くロボットを製作する。ただし、以下の注意点に気を付ける。

・ひとりにつき一つ以上のプログラムを作成すること。

・ペン以外はキットに含まれる部品を使うこと。

・キットに付属の高価な輪ゴムは切れやすいので切れないように細心の注意を払うこと。

・ 改良や調整をしやすくするため、ロボット本体だけでなく、プログラムについても可能な部分についてはサブルーチンや関数、マクロなどを使って部品に分けること。

今回の課題で僕は「若松」という漢字を選んだ

ロボットの説明

IMG_0741-min (1).JPG

今回作ったロボットは簡単な自走機能とペンを上げ下げするだけのシンプルな形にした.

ペンが動かないように輪ゴムとパーツで固定できるようにした

プログラムの説明

今回はpythonを用いてプログラムを作った  

#!/usr/bin/env python3
from ev3dev.ev3 import *
from time import sleep 
mL = LargeMotor('outA')
mR = LargeMotor('outB')
mm = MediumMotor('outC')

関数を定義して

def move_f(t):
 mL.run_timed(time_sp=t,speed_sp=100,stop_action='coast')
 mR.run_timed(time_sp=t,speed_sp=100,stop_action='coast')
 sleep(2)

def move_b(t):
 mL.run_timed(time_sp=t,speed_sp=-100,stop_action='coast')
 mR.run_timed(time_sp=t,speed_sp=-100,stop_action='coast')
 sleep(2)

def pu():
 mm.run_to_rel_pos(position_sp=-45,speed_sp=25,stop_action='coast')
 sleep(2)
def pd():
  mm.run_to_rel_pos(position_sp=-45,speed_sp=25,stop_action='coast')
 sleep(2)
def turn_l(x):
 mR.run_to_rel_pos(position_sp=2*x,duty_cycle_sp=50)
 mL.run_to_rel_pos(position_sp=-2*x,duty_cycle_sp=50)
def turn_r(x):
 mR.run_to_rel_pos(position_sp=-2*x,duty_cycle_sp=50)
 mL.run_to_rel_pos(position_sp=2*x,duty_cycle_sp=50) 
def sp():
 sleep()

(なぜか関数と関数の間にsleepを挟まないとうまく動作しなかったのでsleep用の関数を作成した)

以上を作る際の関数とし以下に文字自体のプログラムを作る

まず文字の各パーツごとのプログラムを作る

草冠

def kusakanmuri()
 pd()
 sp() 
 move_f(3000)
 sp()
 pu()
 sp()
 move_b(300)
 sp()
 turn_l(88)
 sp()
 move_b(1500)
 sp()
 pd()
 sp()
 move_b(1000)
 sp()
 pu()
 sp()
 turn_r(88)
 sp()
 move_f(1500)
 sp()
 turn_l(88)
 sp()
 pd()
 sp()
 move_f(1000)
 sp()
 pu()
 sp()
 

def_migi()
 pd()
 sp()
 move_f(2000)
 sp()
 pu()
 sp()
 move_f(1000)
 sp()
 turn_l(45)
 sp()
 move_b(1500)
 sp()
 pd()
 sp()
 move_b(2000)
 sp()
 pu()
 sp()
 move_f(3000)
 sp()
 turn_r(45)
 sp()
 move_b(2100)
 pd()
 sp()
 move_f(1000)
 sp()
 pu()
 sp()
 move_f(2100)
 sp()
 turn_l(85)
 sp()
 move_b(2100)
 sp()
 pd()
 sp()
 move_b(700)
 sp()
 pu()
 sp()
 turn_l(85)
 sp()
 move_f(1000)
 sp()
 turn_r(85)
 sp()
 pd()
 sp()
 move_f(700)
 sp()
 pu()
 sp()
 move_f(1500)
 sp()
 turn_r(85) 
 sp()
 move_b(1050)
 sp()
 pd()
 sp()
 move_b(1000)
 sp()
 pu()

草冠と右の間の移動

def waka_ido():
 move_f(800)
 sp()
 turn_r(85)
 sp()
 move_b(4000)

以上のプログラムを組み合わせた「若」を書くプログラム

def waka():
 kusakanmuri()
 waka_ido()
 migi()

木偏 

kihen():
 pd()
 sp()
 move_f(1000)
 sp()
 pu()
 sp()
 move_b(1500
 sp()
 turn_l(85)
 sp()
 move_b(1500)
 sp()
 pd()
 sp()
 move_b(2000)
 sp()
 pu()
 sp()
 move_f(2000)
 sp()
 move_f(1500)
 sp()
 turn_r(30)
 sp()
 move_b(2100)
 sp()
 pd()
 sp()
 move_b(1000)
 sp()
 pu()
 sp()
 move_f(3000)
 sp()
 move_f(200)
 sp()
 turn_l(60)
 sp()
 move_b(2100)
 sp()
 pd()
 sp()
 move_b(1000)
 sp()
 pu()
 

公  

def kou():
 pd()
 sp()
 move_f(1000)
 sp()
 pu()
 sp()
 move_f(2500)
 sp()
 turn_l(60)
 sp()
 move_b(2500)
 sp()
 pd()
 sp()
 move_b(1000)
 sp()
 pu()
 sp()
 move_f(3000)
 sp()
 turn_l(140)
 sp()
 move_b(1500)
 sp()
 pd()
 sp()
 move_f(750)
 sp()
 pu()
 sp()
 move_f(2100)
 sp()
 turn_r(50)
 sp()
 move_b(2100)
 sp()
 pd()
 sp()
 move_b(800)
 sp()
 pu()
 sp()
 move_f(2100)
 sp()
 turn_r(45)
 sp()
 move_b(1800)
 sp()
 pd()
 sp()
 move_b(500)
 sp()
 pu()
 

木偏と公の間の移動

def matu_ido():
 move_b(500)
 sp()
 turn_l(85)
 sp()
 move_b(800)
 sp()
 turn_l(65)
 sp()
 move_b(2000)

以上のプログラムを組み合わせた「松」を書くプログラム

def matu():
 kihen()
 matu_ido() 
 kou()
 

若と松の間の移動

def wakamatu_ido()
 move_b(500)
 sp()
 turn_l(85)
 sp()
 move_b(800)
 sp()
 turn_r(85)

若松を書くプログラム

if __name__=='__main__':
 waka()
 wakamatu_ido()
 matu()

感想

実際にやってみないとわからないことが多くかなり苦労し複雑なプログラムを組むこととなった sleep関数のようなところはもっと工夫すれば省略することができたと思う 今回は関数を多く分けてパーツごとに文字を書いていったのが上手くいき細かく調整をしながらプログラムを組んでいくことができた.調整をするときは必ずプログラムを書き換えながら,プログラムを動かさないといけないので,チャートなどを組んでプログラムと照らし合わせながら動かすとよいと思った.


添付ファイル: fileIMG_0741-min (1).JPG 2件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-12-14 (金) 16:34:04 (1d)