🚕
ラズパイ - DC775モータを使って、蛇口を制御する
💡やること
モータドライブモジュール(BTS7960)を使って、DC775モータを制御します。
3Dプリンタで印刷したギアボックスと連動させて、蛇口のハンドルを回します。
📌作ったもの
🏁デモ
🔧パーツ一覧
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)
ラズベリーパイの設定
特になし
モジュールのインストール
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を使用 |
さいごに
物理空間を動かすことができてよかったです。
この記事も含め、ラズパイの活用方法を
としてまとめ中です。
Discussion