🤖
【Raspberry Pi】 モーターを回そう。「DCモーター編」②
モーターを回そう!!
同日に書くことになるとは思ってなかったモータ制御パート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つになったことで、
右左折が可能になっています。
右に曲がるときは、左を右より早く回転させ、
左に曲がるときは、右を左寄り早く回転させれば、 そちらの方向に曲がることが出来ます。
曲がりたい方向のモータを停止させれば信地旋回、
曲がりたい方向のモータを逆回転させれば、超信地旋回となります。
ダブルギアボックスを組み立て、プログラムを実行してみた結果がこちら!!
ギアのギシギシ音がしますのでご注意・・・。
ギアの音が気になりますが、どうにか回転しております。
前進->後退->右旋回->左旋回 となる想定です。
まとめ
これで履帯が動かせるようになったはず!!
車体を組み立ててて、動かしてみたいですね。
Discussion