LoginSignup
2
1

More than 1 year has passed since last update.

驚くほど簡単なラズパイでの格安モーターコントロール(IoT)

Posted at

1.はじめに

IoTでは必須の「アクチュエーター」の基礎としてのモーターコントロールです。格安ステッピングモーターを前から持っていましたが、あまり使っていなかったところ、ラズパイで動かしてみようと思いたちました。ライブラリを探してみたところ、とても簡単なpythonコードで動かせることがわかりました。
ラズパイをお持ちの方は、モーターが使えると「できること」が大きく広がってくると思いますのでぜひトライしてみてください。面白いですよ。以下の内容の実践は自己責任でお願いします。

2.今回使うモーター

ユニポーラ ステッピングモーター 28BYJ-48という数百円で売られているモーターを使います。

あと、モータドライバモジュールとしては、ZC-A0591を使います。(アマゾンなどでは、セットで販売されているようです)

3.Pythonのモジュール

ステッピングモータの理論的なところ、原理は、Youtubeなどでわかりやすく解説されているので、もし時間があれば、一度みておくことをお勧めします。(例えば以下。英語です)

その上で、今回はRpiMotorLibというモジュール(Python)を使いたいと思います。以下のGitHubサイトに丁寧な解説があります。(英語)

それでは、このライブラリをRasberryPiにインストールしておきましょう。


$ pip3 install RpiMotorLib

4.ステッピングモータとRasberry Piの結線

ラズパイのGPIOとモータードライバーのIN1~IN4をつなぐとともに、モータードライバーに電源を供給します。

以下、結線の例です。

image.png

実際に結線した時の画像がこちら↓

IMG_1084.jpg

5.Pythonコード

モータを動かすプログラムをPythonで書いて実行します。コード例を以下に示します。

import time 
import RPi.GPIO as GPIO
from RpiMotorLib import RpiMotorLib  

# 先ほど結線した際に使ったGPIOピンの番号をIN1〜In4まで順にリスト形式で定義しておきます。
GpioPins = [17, 18, 27, 22]  

f = 3  # 回転速度 [Hz]
Rev = 1  # 1回転に設定します
s_angle = 5.625  # ステップ角 [deg]を設定します。これはモーターによって異なります
wait = (1/f)*(s_angle/360)/2  # パルス間の時間を定義しておきます

# モーターの名前をつけて、モーターの型式を指定します。(ここでは、28BYJですね。).
mymotortest = RpiMotorLib.BYJMotor('Mymotor', '28BYJ') 

# 引数は、①GPIOピン,②wait,③ステップ数,④回転方向,⑤実行中の各PINの動作表示の要否,⑥ステップモード,⑦最初の遅延時間の設定 [ms]
mymotortest.motor_run(GpioPins, wait, Rev*512, True, False, 'half', 0.05)

# 上記が終了するとPINをクリーンアップして終えます。
GPIO.cleanup()

6.終わりに

どうでしたか?たったこれだけのプログラムでモーターが1回転してくれましたね。ぜひ、プログラムのパラメーターを変えてみて、いろいろ試していただければと思います。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1