🚕

ラズパイ - DC775モータを使って、蛇口を制御する

6 min read

💡やること

モータドライブモジュール(BTS7960)を使って、DC775モータを制御します。
3Dプリンタで印刷したギアボックスと連動させて、蛇口のハンドルを回します。

3Dプリンタの部分は割愛しています

📌作ったもの

dc775

🏁デモ

jaguti

🔧パーツ一覧

no 部品名 個数 備考
1 ラズベリーパイ 1 今回は4Bで確認
2 DC775モータ 1 Amazon
3 BTS7960 43A HブリッジPWM駆動ドライブモジュール 1 Amazon
4 ACアダプタ - 12V 10A 1 Amazon
5 ジャンパー線 適量 -
6 ギアボックス 1 3Dプリンタで印刷。本記事では割愛しています

接続図

モータの駆動は、電流が多く流れるため外部電源から取りましょう。
ラズパイ自体が壊れる恐れがあります。

ピンの接続

ラズパイ側

Pin ドライブモジュール 備考
3.3V VCC -
GND GND -
GND R_IS -
GND L_IS -
BCM20 R_EN 黄土色ケーブル
BCM21 L_EN 黄色ケーブル
BCM18 R_PWM 緑色ケーブル
BCM19 L_PWM 青色ケーブル

ドライブモジュール側

ドライブモジュール 接続先 備考
B- ACアダプタ 0V -
B+ ACアダプタ 12V 24Vでも可能
M+ DCモータ 極性なし
M- DCモータ 極性なし

💻環境

開発環境

  • ラズベリーパイ
    • Linux rpi 5.10.17-v7l+ #1403 SMP Mon Feb 22 11:33:35 GMT 2021 armv7l GNU/Linux
  • Python
    • Python 3.7.3 (default, Jan 22 2021, 20:04:44)

ラズベリーパイの設定

特になし

モジュールのインストール

OSのクリーンインストールした前提で記載しています。

apt

pigpioライブラリは、Raspberry PiのGPIOを制御するためのライブラリです。
以下のコマンドは、はじめてインストールする場合のみ必要です。

$ sudo apt install pigpio
$ sudo service pigpiod start
$ sudo systemctl enable pigpiod.service

pip

Pythonに関するモジュールをインストールします。

$ python3 -m venv env
$ source env/bin/activate
(env) $ pip install pigpio
(env) $ pip install gpiozero

📝手順

1秒ごとに正転→反転します。
徐々に回転数が速くなっていきます。

コード

bts7960.py
from gpiozero import Motor
import time
from gpiozero import OutputDevice
from gpiozero.pins.pigpio import PiGPIOFactory

# PWM Channel 0 : GPIO12、GPIO18
# PWM Channel 1 : GPIO13、GPIO19
PIN_R_EN = 20   # orange
PIN_L_EN = 21   # yellow
PIN_R_PWM = 18  # green
PIN_L_PWM = 19  # blue

class Bts7960():
    def __init__(self,
                 pin_r_en, pin_l_en, pin_r_pwm, pin_l_pwm):
        print("__init__ : run")

        factory = PiGPIOFactory()
        self._r_en = OutputDevice(pin_r_en, pin_factory=factory)
        self._l_en = OutputDevice(pin_l_en, pin_factory=factory)
        self._motor = Motor( forward=pin_r_pwm,
                            backward=pin_l_pwm,
                            pin_factory=factory)
        return

    def set_neutral(self):
        ''' neutral - (R_EN, L_EN, RPWM, LPWM)=(0,0,X,X)
        '''
        print("set_neutral : run")
        self._r_en.off()
        self._l_en.off()
        return

    def set_brake(self):
        ''' brake - (R_EN, L_EN, RPWM, LPWM)=(1,1,0,0)
        '''
        print("set_brake : run")
        self._r_en.on()
        self._l_en.on()
        self._motor.value = 0.0
        return

    def set_forward(self, speed=0.5):
        ''' forward - (R_EN, L_EN, RPWM, LPWM)=(1,1,1,0)
        '''
        print("set_forward : run")
        self._r_en.on()
        self._l_en.on()
        self._motor.value = speed
        return

    def set_back(self, speed=0.5):
        ''' back - (R_EN, L_EN, RPWM, LPWM)=(1,1,0,1)
        '''
        print("set_back : run")
        self._r_en.on()
        self._l_en.on()
        self._motor.value = (-1) * speed
        return


def main():

    bts7960 = Bts7960(PIN_R_EN, PIN_L_EN, PIN_R_PWM, PIN_L_PWM)

    # ハンドルをひねる
    bts7960.set_forward(1.0)
    time.sleep(0.2)

    # モータをとめる
    bts7960.set_neutral()

    # 水が出ている
    time.sleep(2.0)


    # ハンドルを閉める
    bts7960.set_back(1.0)
    time.sleep(0.3)
    bts7960.set_neutral()

    return

if __name__ == "__main__":
    main()

実行手順

(env) $ python bts7960.py

デモの結果になります。

🔎ポイント

775モータ

775モータは直流モータで大きなトルクを備えています。
通常6〜36 Vで動作します。購入するものによって異なり、範囲は異なり、最大10Aを消費する可能性があるため、接続する場所に注意してください。

BTS7960

モータ動作と各ピンとの関係は以下の通りです。

モータ動作 R_EN L_EN R_PWM LPWM
ニュートラル 0 0 X X
ブレーキ 1 1 0 0
正転 1 1 1 0
反転 1 1 0 1

また、PWMピンにて、回転速度を制御することができます。
PWMピンの値(value)が小さすぎると、回転できないので注意してください。

ラズベリーパイPWMピン

ラズベリーパイは、ハードウェアPWMを2系統持っています。

hardware pwm Pin Pin 備考
Channel 0 12 18 今回は、18を使用
Channel 1 13 19 今回は、19を使用

さいごに

物理空間を動かすことができてよかったです。

この記事も含め、ラズパイの活用方法を

https://zenn.dev/kotaproj/books/raspberrypi-tips

としてまとめ中です。

GitHubで編集を提案

Discussion

ログインするとコメントできます