#robotをもっと動かしやすくするサンプル
import board
import pwmio
import time
from adafruit_motor import motor
#DCモーターを初期化
m1a = pwmio.PWMOut(board.GP8, frequency=10000)
m1b = pwmio.PWMOut(board.GP9, frequency=10000)
motor1 = motor.DCMotor(m1a, m1b)
m2a = pwmio.PWMOut(board.GP10, frequency=10000)
m2b = pwmio.PWMOut(board.GP11, frequency=10000)
motor2 = motor.DCMotor(m2a, m2b)
#robotの動きを定義する関数
def forward(move_time): #前進(forward)はthrottle +0.7
motor1.throttle = 0.7
motor2.throttle = 0.7
time.sleep(move_time)
def forward_slow(move_time): #ゆっくり前進(forward_slow)は throttle +0.2
motor1.throttle = 0.2
motor2.throttle = 0.2
time.sleep(move_time)
def backward(move_time):
motor1.throttle = -0.5
motor2.throttle = -0.5
time.sleep(move_time)
def left_rotate(move_time): #左回転はその場で5秒で360度回転する
motor1.throttle = -0.5
motor2.throttle = 0.5
time.sleep(move_time)
def right_rotate(move_time): #右回転
motor1.throttle = 0.5
motor2.throttle = -0.5
time.sleep(move_time)
def left_turn(move_time): #左折
motor1.throttle = 0.2
motor2.throttle = 0.7
time.sleep(move_time)
def right_turn(move_time): #右折
motor1.throttle = 0.7
motor2.throttle = 0.2
time.sleep(move_time)
#実際にうごかすプログラム
forward_slow(2)
forward(2)
backward(1)
right_rotate(2)
left_rotate(2)
right_turn(2)
left_turn(2)
関数defの使い方
これですべての動きを定義できました。実際にうごかすプログラムは52行目からです。とてもシンプルで見やすいプログラムになりましたね。ロボットを動かしたい動作の秒数を書くだけで完結します。わずらわしいthrottle1とthrottle2の調整はpythonの関数defによってあらかじめ決められているからこんなシンプルなプログラムで制御できるようになるのです。
def 関数(引数):
def forward(move_time):の部分をみてみましょう。まずはforwardという関数を定義します。その際にmove_timeという引数を渡しますよという宣言もしています。コロンも忘れないようにしてください。そのあとインデント=スペース4つを空けてthrottle1,2の値が0.7に設定され、move_timeに入った値の時間だけtime.sleepするのです。インデントもスペース4つ分あけましょう。
なのでforward(3)とすると関数forwardが呼び出され、throttle1,2は0.7で3秒間動くということになります。
TAMIYA CAM ROBOTで遊ぶ
まず50cm x 50cmのタイルカーペットを用意してください。机の上やフローリングでもいいですけど、どうしても滑りやすいので正確な動きのためにはタイルカーペットが一番です。Maker Pi RP2040に単3×3本タイプの電池ボックスをセットしましょう。アルカリ電池よりもニッケル水素タイプの充電池にしましょう。充電池の方が電力低下が抑えられます。まずはタイルカーペットの端に沿って走行するプログラムを作ってみましょう。
52行目以下から書き換えてみます。
#実際にうごかすプログラム
forward(2.8)
right_rotate(1.7)
forward(2.8)
right_rotate(1.7)
forward(2.8)
right_rotate(1.7)
forward(2.8)
right_rotate(1.7)
こんな感じでしょうか?繰り返しの命令ですね。for文を使って書き換えてみましょう。
for i in range(4):
forward(2.8)
right_rotate(1.7)
たったの3行で終わってしまいます。プログラマーは手抜きが大好きです。なるべく少ないコード量で仕上げるのが腕の見せどころです。
二番目と三番目の課題は頑張ってみてください。