ラズパイとモータードライバを使って、モーターを回してみる。

 モータードライバを使うのは初めてだ・・・と言っても、モーター制御が初めて、というわけじゃない。ロボットの時に使ったMaplesyrupは立派なモータードライバユニットだし、何よりもすでにトランジスタでモーターを回した経験がある。だから、「モータードライバ?いまさら・・・」といった感が、ないとは言えない。

 とはいえ今回は、ラズパイではじめてモーターを回してみる。ちょっぴりドキドキだ。これまでLEDが限界だったもんね。もしこれでモーター回せたら、ラズパイのスキルがかなり上がったと実感できると思う。

 手元には、モータードライバが2つある。TA7291SGという石と、TB66P15Gというやつ。

イメージ 2
TA7291SG

イメージ 1
TB66P15G

 TA7291SGはDCモーター用の定番ICのよう。一方でTB66P15Gはまだ詳しく調べていないが、どうやらステッピングモーターと言う、今まで使ってきたものとはちょっと違うものを動かすものらしい。こっちは後日使うとして、今回はTA7291SGを使おう。

 早速、TA7291SGのデータシートを手に入れる。こちらが秋月電子に載っているデータシート。

 ・・・どうやら、このドライバひとつでモーターをひとつ動かすことができるよう。これはSN754410NEのモーターふたつ制御可能であったのと比べると、ロースペックと言うことになる。パワーも大したことないらしい。ただ、754410と同様、逆回転はできるみたい。

 さて、データシートとラズパイのピン配置を元に、配線する。参考までに、配線するときにメモったものも載せておく。

イメージ 3
イメージ 4

イメージ 5

 配線ができたら、次にPythonでプログラムを組む。Pythonのコードは以下。エディターnanoで出力した。
import RPi.GPIO as GPIO
from time import sleep

#GPIOのポートを設定
R_VREF=13
R_IN1=19
R_IN2=26

GPIO.setmode(GPIO.BCM)
GPIO.setup([R_VREF,R_IN1,R_IN2],GPIO.OUT)

#モーターを回す
#回転速度を指定
pwm_r = GPIO.PWM(R_VREF,50)
pwm_r.start(100)
try:
    while True:
        #モーターを停止する
        GPIO.output(R_IN1,GPIO.LOW)
        GPIO.output(R_IN2,GPIO.LOW)
        sleep(3)

        #時計回りにモーターを回す
        GPIO.output(R_IN1,GPIO.HIGH)
        GPIO.output(R_IN2,GPIO.LOW)
        sleep(3)

except KeyboardInterrupt:
    pass

GPIO.cleanup()


 ターミナルのCATコマンドを使って出力したものは以下。
イメージ 6

・・・やっぱり3秒休んで3秒回転のループなのね^^;。

 では、いよいよ回してみよっか、モーター。


 ・・・うん、うまくいった。配線後1発でOKだった。さすがモータードライバ(ただし、撮影は6回目・・・)。トランジスタのようにややこしくない!

 ところで、気づいたかも知れないが、今回はWindowsのコマンドプロンプトからSSHで接続した後、pyファイルを走らせている。SSHはリモート接続の一種だが、VNCにしてもSSHにしても、こういうラズパイのモニターを使わずにラズパイを動かすことをヘッドレス、と言うようだ。モッサリした動きがなくて、最近はすっかりこっちばかり使っている。CUIばかりだが、否が応でもコマンドを覚えられそうだ。

 ラズパイ、おもしろい。もっと使いこなしたい。ラズパイ編では、もう少しマイコン染みたこと(例えばセンサー関連の制御とか)をやろうと思っている。そうすれば、そのワザはロボットにも活かせそうだ。あと、パソコン染みたこと(例えばネットワーク関連)もいずれやる予定。こっちはサーバー系のことに活かせそうだ。どうぞ、お楽しみに。

 でわでは~。