🤖

【Raspberry Pi】 モーターを回そう。「DCモーター編」②

2022/07/31に公開

モーターを回そう!!

同日に書くことになるとは思ってなかったモータ制御パート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つになったことで、
右左折が可能になっています。
右に曲がるときは、左を右より早く回転させ、
左に曲がるときは、右を左寄り早く回転させれば、 そちらの方向に曲がることが出来ます。
曲がりたい方向のモータを停止させれば信地旋回、
曲がりたい方向のモータを逆回転させれば、超信地旋回となります。

ダブルギアボックスを組み立て、プログラムを実行してみた結果がこちら!!
DC

ギアのギシギシ音がしますのでご注意・・・。

ギアの音が気になりますが、どうにか回転しております。
前進->後退->右旋回->左旋回 となる想定です。

まとめ

これで履帯が動かせるようになったはず!!
車体を組み立ててて、動かしてみたいですね。

GitHubで編集を提案

Discussion