LoginSignup
1
2

More than 3 years have passed since last update.

Raspberry Pi で秋月電子の4WD車 FT-MC-004 を使う

Posted at

秋月電子の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

FT-MC-004のキット構成は4個のモーターとモータドライバボード、シャーシとマイコンボード用のステーのセットになります。
兄弟機のFT-MC-002は2個のモーターとモータドライバボード、シャーシとマイコンボード用のステーのセットになります。
モーターの数の違いで2種類に分かれています。
ただし、そのままでは使えません。

Raspberry Pi用のステーを作る

RaspberryPiとバッテリを置こうとすると厳しいです。
このため、タミヤ 楽しい工作シリーズ No.157 ユニバーサルプレート 2枚セット (70157)を使用します。
DSC_0092 (2).JPG
DSC_0095 (2).JPG
RaspberryPiを取り付るイメージ
これをFT-MC-004の上に載せます。

FT-MC-004に載せる

今回は、直接載せず、ケースに入れたRaspberryPiを使用しました。
DSC_0402 (2).JPG
DSC_0404 (2).JPG
電源は、USBバッテリからにしました。
RaspberryPiの5Vを使うと、配線が焼き切れてしまう可能性があるのでお勧めしません。
DSC_0413 (2).JPG

モータドライバを動かす

それでは、動かしましょう。
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()
1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2