モーターを回そう!!
同日に書くことになるとは思ってなかったモータ制御パート2!
秋月商店に行ってモータドライバを購入(2個入り300円)
このドライバと以前購入しておいた、ダブルギヤボックス を使い、
ついにホイールを回します。
大雑把に説明すると、前回のモノを2つ用意すればOKです。
計6つのGPIOピンを使うことになります。
ブレッドボードです。少々複雑になってきました。
横に並べたほうが左右が分かりやすいので、このような配置になりました。
ソースです。
import RPi.GPIO as GPIO from time import sleep p21 = 0 p13 = 0 IN_AL = 20 IN_BL = 26 IN_AR = 19 IN_BR = 16 GPIO.setmode(GPIO.BCM) GPIO.setup(21, GPIO.OUT) GPIO.setup(IN_AL, GPIO.OUT) GPIO.setup(IN_BL, GPIO.OUT) GPIO.setup(13, GPIO.OUT) GPIO.setup(IN_AR, GPIO.OUT) GPIO.setup(IN_BR, GPIO.OUT) p21 = GPIO.PWM(21, 50) p13 = GPIO.PWM(13, 50) p21.start(0) p13.start(0) try: while True: #straight p21.ChangeDutyCycle(100) p13.ChangeDutyCycle(100) GPIO.output(IN_AL, GPIO.HIGH) GPIO.output(IN_BL, GPIO.LOW) GPIO.output(IN_AR, GPIO.HIGH) GPIO.output(IN_BR, GPIO.LOW) sleep(3) #stop p21.ChangeDutyCycle(0) p13.ChangeDutyCycle(0) GPIO.output(IN_AL, GPIO.LOW) GPIO.output(IN_BL, GPIO.LOW) GPIO.output(IN_AR, GPIO.LOW) GPIO.output(IN_BR, GPIO.LOW) sleep(3) #back p21.ChangeDutyCycle(50) p13.ChangeDutyCycle(50) GPIO.output(IN_AL, GPIO.LOW) GPIO.output(IN_BL, GPIO.HIGH) GPIO.output(IN_AR, GPIO.LOW) GPIO.output(IN_BR, GPIO.HIGH) sleep(3) #stop p21.ChangeDutyCycle(0) p13.ChangeDutyCycle(0) GPIO.output(IN_AL, GPIO.LOW) GPIO.output(IN_BL, GPIO.LOW) GPIO.output(IN_AR, GPIO.LOW) GPIO.output(IN_BR, GPIO.LOW) sleep(3) #turn right p21.ChangeDutyCycle(100) p13.ChangeDutyCycle(50) GPIO.output(IN_AL, GPIO.HIGH) GPIO.output(IN_BL, GPIO.LOW) GPIO.output(IN_AR, GPIO.LOW) GPIO.output(IN_BR, GPIO.HIGH) sleep(3) #stop p21.ChangeDutyCycle(0) p13.ChangeDutyCycle(0) GPIO.output(IN_AL, GPIO.LOW) GPIO.output(IN_BL, GPIO.LOW) GPIO.output(IN_AR, GPIO.LOW) GPIO.output(IN_BR, GPIO.LOW) sleep(3) #turn left p21.ChangeDutyCycle(50) p13.ChangeDutyCycle(100) GPIO.output(IN_AL, GPIO.LOW) GPIO.output(IN_BL, GPIO.HIGH) GPIO.output(IN_AR, GPIO.HIGH) GPIO.output(IN_BR, GPIO.LOW) sleep(3) #stop p21.ChangeDutyCycle(0) p13.ChangeDutyCycle(0) GPIO.output(IN_AL, GPIO.LOW) GPIO.output(IN_BL, GPIO.LOW) GPIO.output(IN_AR, GPIO.LOW) GPIO.output(IN_BR, GPIO.LOW) sleep(3) except KeyboardInterrupt: pass GPIO.cleanup()
長ったらしいですが、モータが2つになったことで、
右左折が可能になっています。
右に曲がるときは、左を右より早く回転させ、
左に曲がるときは、右を左寄り早く回転させれば、
そちらの方向に曲がることが出来ます。
曲がりたい方向のモータを停止させれば信地旋回、
曲がりたい方向のモータを逆回転させれば、超信地旋回となります。
ダブルギアボックスを組み立て、プログラムを実行してみた結果がこちら!!
ギアのギシギシ音がしますのでご注意・・・。
ギアの音が気になりますが、どうにか回転しております。
前進->後退->右旋回->左旋回 となる想定です。
まとめ
これで履帯が動かせるようになったはず!!
車体を組み立ててて、動かしてみたいですね。
コメント