今後色々使い道のあるステッピングモーターを扱ってみます。3DプリンタやNC加工などでは位置決めできるモーターが必需品だから。
<ステッピングモーターの動作原理>
以下が分かりやすい。
https://dotstud.io/blog/stepper-motor-nefrybt-control/
1-2相駆動が合理的(トルクも適正で、1相あるいは2相駆動に比べて細かな制御ができる、つまり8パルスで一回転だから2倍の精度)というとことなのでULN2003 driverでもこれを使います。
回転させるためのサンプルプログラムは、
http://www.yam-web.net/raspberry-pi/steppermotor.html
のリンクから取得。
モーターは大電流なので、ラズパイの電源とは別系統で接続します。
ULN2003はトランジスタアレイで、GPIOでは直接モーターは駆動できないので電流増幅しています。全部で7チャネルありますが、使うのは4チャンネルです。以下の接続図も同じurlからです。
ピンヘッダーの配列は公式ドキュメントから、
モーターの減速比は64のようです。
<気づき>
① モーターは結構熱くなります、従って処理の最後は電流をカット(無用な電流を流さない)するようにすべき。
② モーターの回転速度は時間待ちなしで一回転が13~14秒ぐらい、減速ギア(減速比64)が入ってトルク増大しているからこんなものか。
動作させている動画は、
になります。
<コントローラーの処理>
回転制御はサンプルコードを流用して、外部のコントロールパッドで回転方法の制御と電源シャットダウンの割り当てを行いますが、そのGPIOピンの割り当てです。
# shutdown and rotate direction pins
SHUTDOWN = 16 — pin 36
r_left = 25 — pin 22
r_right = 26 — pin 37
・call back処理について
GPIOのGPIO.add_event_callback(self.r_left, self.dir_sw_callback)メソッドは引数を明示的に設定していないが、実は二つの引数が暗黙で指定されています。一つはself(クラス内関数:メソッドでは)でもう一つはGPIOのピン番号なのでcallback処理側ではこれらの引数を使って処理します。
〜〜〜〜〜〜〜該当部分抜き出したコード
GPIO.add_event_callback(self.r_left, self.dir_sw_callback)
GPIO.add_event_callback(self.r_right, self.dir_sw_callback)
def dir_sw_callback(self, i_pin):
# if both bottons are pushed, stop rotation
# check the sw level and continue rotation if it is pushed
if i_pin == self.r_left:
while GPIO.input(self.r_left) == 0:
if GPIO.input(self.r_right) != 0:
self.rotate(-1) # ccw
time.sleep(0.03)
else:
while GPIO.input(self.r_right) == 0:
if GPIO.input(self.r_left) != 0:
self.rotate(1) # cw
time.sleep(0.03)
〜〜〜〜〜〜〜
現在のコードは、https://github.com/chateight/s_motor
に置いてあります。あとで使い回しができるように、オリジナルのコードはクラス化してあります。
<raspberry piのソフト設定>
・ssh key のリセット
以前に別のラズパイでログオンしているとそのキーをリセットしないと新たなラズパイへのssh接続ができないから。
$ ssh-keygen -R raspberrypi.local
・afpの事前設定(macとのファイルやり取りのため)
インストールに失敗したので、ハズレじゃないと思ったので、
$ sudo apt-get update –allow-releaseinfo-change
を実行したら解決してインストール完了。設定ファイルをいじって(Homeディレクトリ指定)おきます。
・gpibライブラリ
RPi.GPIOを使いますが、これはimageにインストール済みです。
・Python3を使う
インストール済ですが、デフォルトは2.7になっているので切り替えます。
・ステッピングモーターの動作確認
http://www.yam-web.net/raspberry-pi/steppermotor.html
から作成したpythonファイルをhomeディレクトリに置いて、 $ python motor_drv.py(保存名)にパラメータは0(時間待ちなし)で実行。