Raspberry pi 2 + モータードライバTA7291P
さて、前回までのサーボモータに続き、今回はRaspberry pi 2で普通のモーターを制御します。モーターを回すだけなら電池とモーターを繋げてスイッチをつけるだけでラズパイの出番はないわけですが、モーターの回転速度、回転方向も含めて制御したいと思います。
モーターはアナログ回路です。例えば小さい電力ならゆっくり、大きな電力なら速く回転します。ラズパイは基本的にデジタル(5Vと0Vで1と0を表す)で動いているわけですが、サーボモーターでも使ったPWMの仕組みがあり、アナログに似た操作ができます。また、モータードライバと呼ばれるICを使えば、速度や回転方向のほか、モーターを使った時に発生するノイズによる影響も避けることができるようです。
というわけで、秋月電子からモータードライバ TA7291Pを買いました。2個セットで300円。これだけだと送料のほうが高いので他にも買い物をしたのですが、それはまた別の機会に書こうと思います。
これを含めた回路は以下のFritzingで作った図の通りです。モーターの電源は前回までのブログでも紹介したモバイルバッテリーのUSBポートから線を引っ張って取得しています。図では適当なリチウム電池の絵になっています。モーター1個くらいならRaspberry piから直接取っても大丈夫かもしれませんが、この後サーボモーターも追加でつないで自動車にしたいという野望があり、安定動作のため別電源としています。
さて、配線ができたらいつもの通りPythonプログラムを書きます。ta7291クラスは文字通りモータードライバーを簡単に扱うためのクラスです。使い方はコメントに書いてありますので見てください。
pi@raspberrypi:~/work$ cat ta7291.py #!/usr/bin/python # -*- coding: utf-8 -*- import RPi.GPIO as GPIO import time import sys class ta7291: ''' Motor driver TA7291 class ''' def __init__(self, pwm, in1, in2): # GPIOセットアップ GPIO.setmode(GPIO.BCM) GPIO.setup(pwm, GPIO.OUT) GPIO.setup(in1, GPIO.OUT) GPIO.setup(in2, GPIO.OUT) # ピンを保存 self.in1 = in1 self.in2 = in2 self.p = GPIO.PWM(18, 50) def drive(self, speed): ''' モーターを回転させる。 speed : -100から100の数値。正の数なら正回転、負の数なら逆回転。 ''' if speed > 0: GPIO.output(self.in1, 1) GPIO.output(self.in2, 0) self.p.start(speed) if speed < 0: GPIO.output(self.in1, 0) GPIO.output(self.in2, 1) self.p.start(-speed) if speed == 0: GPIO.output(self.in1, 0) GPIO.output(self.in2, 0) def brake(self): GPIO.output(self.in1, 1) GPIO.output(self.in2, 1) time.sleep(0.5) def cleanup(self): ''' 最後は正面に戻して終了する ''' self.brake() GPIO.cleanup() if __name__ == "__main__": pass pi@raspberrypi:~/work$
それから、ta7291pクラスを使用するメインプログラムの方を作ります。例えば下のようなシンプルなものになります。
pi@raspberrypi:~/work$ cat motor_test.py #!/usr/bin/python # -*- coding: utf-8 -*- import RPi.GPIO as GPIO import time import sys import ta7291 if __name__ == "__main__": d = ta7291.ta7291(18, 24, 25) print "Normal Powerup/down..." for power in range(0, 100, 10): d.drive(power) time.sleep(0.3) for power in range(100, 0, -10): d.drive(power) time.sleep(0.3) print "Stop 3 seconds..." d.drive(0) time.sleep(3) print "Max speed 3 seconds, and stop..." d.drive(100) time.sleep(3) d.drive(0) time.sleep(3) print "Max speed 3 seconds, and brake..." d.drive(100) time.sleep(3) d.brake() time.sleep(3) d.cleanup()
さて、ここまでくれば動作可能です。モーターを動かしているところは動画にしましたので載せておきます。上でも書いたようにサーボモータを追加して、自動車のような姿にして走らせる事を目標にしていますが、ラジコンの経験もない私ですので無事走るかどうか…… 慣れないタミヤモーターをいじっていますので、動いた時にまた記事にしようと思います。
タミヤ 楽しい工作シリーズ No.189 ミニモーター低速ギヤボックス 4速 70189
- 出版社/メーカー: タミヤ
- 発売日: 2009/11/30
- メディア: おもちゃ&ホビー
- 購入: 3人 クリック: 11回
- この商品を含むブログ (2件) を見る