秋月電子の4輪車FT-MC-004をRaspberryPiで動かしましょう。
##FT-MC-004とは?
FT-MC-004は秋月電子のArduinoベースの4WD車のキットです。
価格は¥2,610です。
###4WD Mobile Robot Platform Kits for Education FT-MC-004
http://akizukidenshi.com/catalog/g/gK-13652/
FT-MC-004のキット構成は4個のモーターとモータドライバボード、シャーシとマイコンボード用のステーのセットになります。
兄弟機のFT-MC-002は2個のモーターとモータドライバボード、シャーシとマイコンボード用のステーのセットになります。
モーターの数の違いで2種類に分かれています。
ただし、そのままでは使えません。
##Raspberry Pi用のステーを作る
RaspberryPiとバッテリを置こうとすると厳しいです。
このため、タミヤ 楽しい工作シリーズ No.157 ユニバーサルプレート 2枚セット (70157)を使用します。
RaspberryPiを取り付るイメージ
これをFT-MC-004の上に載せます。
##FT-MC-004に載せる
今回は、直接載せず、ケースに入れたRaspberryPiを使用しました。
電源は、USBバッテリからにしました。
RaspberryPiの5Vを使うと、配線が焼き切れてしまう可能性があるのでお勧めしません。
##モータドライバを動かす
それでは、動かしましょう。
FT-MC-004はモータドライバへPWM周波数を入れることで制御します。
###秋月電子の資料から
【質問】 付属の基板に入力するパルス幅は何msですか。
【回答】 メーカー資料が無いため実測値を下記に示します。
正転:1.2~1.4(これ以下は目視での変化なし)
静止:1.5(前後に若干の不感帯あり)
逆転:1.6~1.8(これ以上は目視での変化なし)
単位(ms)
(C)http://akizukidenshi.com/catalog/faq/goodsfaq.aspx?goods=K-13652
GPIOの4ピンと17ピンにPWMを出力することで制御します。
**なお、別の資料によれば、1ms~2ms 中心は1.5msとなっています。
##プログラム
プログラムはこんな感じです。
私は静止状態を
servoX.ChangeDutyCycle(7.2)
としました。
6.5~8.5で前進後進を制御できるようになっています。
(前後のバランスが悪いですね)
これをPythonで実行すればとりあえず、タイヤが回ると思います。
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
lp_out = 4
rp_out = 17
GPIO.setup(lp_out, GPIO.OUT)
GPIO.setup(rp_out, GPIO.OUT)
servol = GPIO.PWM(lp_out, 50)
servor = GPIO.PWM(rp_out, 50)
servol.start(0)
servor.start(0)
for i in range(1):
print("Stop")
servol.ChangeDutyCycle(7.2)
servor.ChangeDutyCycle(7.2)
time.sleep(1.5)
print("Start")
servol.ChangeDutyCycle(6.5)
servor.ChangeDutyCycle(8.0)
time.sleep(1.5)
print("Stop")
servol.ChangeDutyCycle(7.2)
servor.ChangeDutyCycle(7.2)
time.sleep(1.5)
servol.stop()
servor.stop()
GPIO.cleanup()
##長くしたプログラム
ちょっと長く回してみましょう。
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
lp_out = 4
rp_out = 17
GPIO.setup(lp_out, GPIO.OUT)
GPIO.setup(rp_out, GPIO.OUT)
servol = GPIO.PWM(lp_out, 50)
servor = GPIO.PWM(rp_out, 50)
servol.start(0)
servor.start(0)
for i in range(1):
print("Stop")
servol.ChangeDutyCycle(7.2)
servor.ChangeDutyCycle(7.2)
time.sleep(1.5)
print("Start")
servol.ChangeDutyCycle(6.5)
servor.ChangeDutyCycle(8.0)
time.sleep(1.5)
print("Stop")
servol.ChangeDutyCycle(7.2)
servor.ChangeDutyCycle(7.2)
time.sleep(1.5)
print("R")
servol.ChangeDutyCycle(7.2)
servor.ChangeDutyCycle(8.0)
time.sleep(1.5)
print("L")
servol.ChangeDutyCycle(5.0)
servor.ChangeDutyCycle(7.2)
time.sleep(1.5)
print("BR")
servol.ChangeDutyCycle(7.2)
servor.ChangeDutyCycle(5.0)
time.sleep(1.5)
print("BL")
servol.ChangeDutyCycle(10.0)
servor.ChangeDutyCycle(7.2)
time.sleep(1.5)
servol.stop()
servor.stop()
GPIO.cleanup()