えれェ小さなモータードライバーを使ってモーターを制御してみた

1.プラレールコントロールに際して

60爺は、プラレールをラズパイでコントロールしてみたいと考えています。

サイトをググると先人は必ずいて、何名かの方がプラレールをラズパイでコントロールされています。

これらのサイトを見てみると、やはり、どう小型化するのかが肝だと思います。

60爺は、戦車とカムプログラムロボットで、リモコン化を実現していますが、そこで使用したブレッドボードやモバイル電源では余りにも大きすぎて、プラレールのコントロールには向かないようです。

ですので、再度列挙しますが、以下の二つの小型化をどうするかですね。

  • ブレッドボード
  • モバイル電源

2.モーターコントロール

上記でブレッドボードと記しましたが、要はモーターのコントロールをどうするかと言うことです。

プラレールは、戦車やカムプログラムロボットと比べるとはるかに小さいため、ブレッドボードを小型化してもプラレールに搭載するのは至難の業のように思えます。

そこで気が付いたのが、このページにあるモータードライバー、L9110S モータードライバーです。

上記の写真のように、えれェ小さいものです。

この小さいドライバーで、何とモーターを2個制御できます。

そこで、早々 amazon で購入してみました。並行輸入品なんですね。60爺が注文した時は、1ヶ月かかると出ていましたが、今、見てみたら「通常4~5日以内に発送します」となっていました。

60爺の場合、このドライバが手元に届くまで3週間ほどかかりましたが、無事、到着しました。

何と台湾からの輸入ものですね!

3.稼働テスト

さて、ドライバが届いたのはいいのですが、取扱説明書などはなく使い方がわかりません。

そこで、こちらの記事を参考にして、ラズパイに接続する前に動かしてみました。

Arduino + モータドライバ + DCモーター

60爺の購入したモータドライバとはちょっとピンの並びと色が違うのですが、品番?は同じなので参考になると考えて実施しました。

接続は次の通りです。

モーターからの配線は、ここに接続します。

接続しにくい場合は、この部分のビスをプラスドライバで緩めると簡単に接続できるようになります。

始めに、モータ駆動用の電源(9V電池)をモータードライバのプラス、マイナスをモータードライバの VCC,GND へつなぐと、モータードライバの LED が朱く点灯します。

そして、MOTOR-B と記載された一方へ GND へ電源からのマイナスのコードを繋ぐとモーターが回転します。

4.前後左右に動かしてみる

稼働テストが終了したので、前進、後退、右折、左折するプログラムを書いてモータドライバーが動くか確認してみましょう。

紆余曲折がありましたが、何とか無事に動かすことが出来ました。

配線図とプログラムを載せておきます。

【配線図】

【プログラム】

#!/usr/bin/python
# coding: UTF-8

import time
import RPi.GPIO as GPIO

MOTOR_L1 = 18
MOTOR_L2 = 23
MOTOR_R1 = 24
MOTOR_R2 = 25

GPIO.setmode( GPIO.BCM )
GPIO.setup( MOTOR_L1, GPIO.OUT )
GPIO.setup( MOTOR_L2, GPIO.OUT )
GPIO.setup( MOTOR_R1, GPIO.OUT )
GPIO.setup( MOTOR_R2, GPIO.OUT )

print("Foward")

GPIO.output( MOTOR_L1, GPIO.HIGH )
GPIO.output( MOTOR_L2, GPIO.LOW )
GPIO.output( MOTOR_R1, GPIO.HIGH )
GPIO.output( MOTOR_R2, GPIO.LOW )

time.sleep(2)
print("Back")

GPIO.output( MOTOR_L1, GPIO.LOW )
GPIO.output( MOTOR_L2, GPIO.HIGH )
GPIO.output( MOTOR_R1, GPIO.LOW )
GPIO.output( MOTOR_R2, GPIO.HIGH )

time.sleep(2)
print("Right")

GPIO.output( MOTOR_L1, GPIO.HIGH )
GPIO.output( MOTOR_L2, GPIO.LOW )
GPIO.output( MOTOR_R1, GPIO.LOW )
GPIO.output( MOTOR_R2, GPIO.HIGH )

time.sleep(2)
print("Left")

GPIO.output( MOTOR_L1, GPIO.LOW )
GPIO.output( MOTOR_L2, GPIO.HIGH )
GPIO.output( MOTOR_R1, GPIO.HIGH )
GPIO.output( MOTOR_R2, GPIO.LOW )

time.sleep(2)
print("End")
GPIO.cleanup()

5.紆余曲折とは

最後に、4.の中で述べた紆余曲折について記しておきます。

モータドライバーが思った通りの動きをしてくれないため、半日以上粘っていたら、突然、raspberrypi zero WH が突然シャットダウンしました。

そして、二度と電源が入らなくなってしまったのです。

原因がわかりません。

思い当たる節と言えば、突然のシャットダウン前に、何度か tera term 接続が突然切れる現象が続いたことぐらいですね。

ひょっとすると、9Vの電源を用いたことが RaspberryPi zero WH に悪い影響を与えたと考えています。

どうしようもないので、その後は、このところ使用していなかった Raspberry Pi 3B を引っ張り出してテストしたところ全く問題なく動きました。