エンジニア ろっきーの探究ノート

"不"を"したい"にひっくり返すモノ/コトづくり(H/W, S/W, IoTシステム, アイデア発想)技術を探究します。

ラズパイ× tensorflowでプラレール自動運転(1) モータドライバを準備する

AIで自動運転!わーい、この響きを実行したかった。

tensorflowで駅の写真を学習・推論させ、プラレールをラズパイで自動運転するまでを3回に分けて書いていきます。 今回はH/W編、「Raspberry Pi用 MAX14870搭載 デュアルモータードライバ」を動かします。

1.接続の様子

以下のように6ピン余るようにGPIOピンに挿します。ラズパイは「Raspberry Pi 3 Model B+」です。

f:id:rockhack_design:20220403172736j:plain
MAX14870の付け方

MAX14870は4.5V以上の電圧が必要なので、単三電池4本をモータ駆動用の電源とします。3本だと電池が新品の時しか動きませんでした。このMotor Driver Output端子とプラレールの電池ボックス端子を配線します。

1.サンプルプログラム

ライブラリも公開されていますが、接続確認のために2秒だけモータを回す簡単なプログラムを載せておきます。

import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BOARD)

# 使用するピン番号を設定
DIR_1 = 18
DIR_2 = 22
EN_N = 29
PWM1 = 32
PWM2 = 33

# 各ピンを出力ピンに設定
GPIO.setup(DIR_1, GPIO.OUT, initial=GPIO.LOW)  # LOW:forward
GPIO.setup(DIR_2, GPIO.OUT, initial=GPIO.LOW)
GPIO.setup(EN_N, GPIO.OUT, initial=GPIO.LOW) # Low active
GPIO.setup(PWM1, GPIO.OUT, initial=GPIO.LOW)
GPIO.setup(PWM2, GPIO.OUT, initial=GPIO.LOW)

# PWM オブジェクトのインスタンスを作成、周波数:3000Hz
p1 = GPIO.PWM(PWM1, 3000)
p2 = GPIO.PWM(PWM2, 3000)

# PWM信号を出力
p1.start(0)
p2.start(0)

p1.ChangeDutyCycle(50)
p2.ChangeDutyCycle(50)

# 2.0秒待つ
time.sleep(2.0)

# PWM を停止
p1.stop()
p2.stop()

GPIO.cleanup()

さあ次は学習用の写真をとりまくるぞー!