こんにちは、けいです。
今回は,M5stickVでPWM信号を出力して,サーボモータを制御する方法について解説していきます.
まだ今までの記事を読んでいない方は,ぜひ読んでみてください.
目次
ハード構成
使ったもの
スイッチサイエンスでM5stickVを買うのがたぶん一番安いと思うが、よく売り切れているのでアマゾンから買う手もある。
Groveコネクタ
M5stickVの唯一のピンである、Groveコネクタを使う。
M5stickVにある下部のピンのことだ。
ピンはGroveの独自規格なので、専用のコネクタケーブルを使う。
Groveはこのようなピン配置となっている。
ケーブルをつけるとこのようになる。
Groveピンで使うのは、groundと35番の二つのピンだけである。
M5stickVからサーボに電源供給するのは少し怖いので、外部電源を用いた。
35番のピンがPWM信号を出力する。
もちろん、34番のピンでも同様に行うことが可能だ。
回路図
回路はいたってシンプル。
サーボモータは家にあったsg90を使ったので、電池を3本つないだ。
コード解説
コード
Machineモジュール
from machine import Timer,PWM
PWMを使うのにあたって、MachineモジュールからTimerクラスとPWMクラスをインポートする。
tim = Timer(Timer.TIMER0, Timer.CHANNEL0, mode=Timer.MODE_PWM)
ch = PWM(tim, freq=50, duty=2.5, pin=35)
TimerクラスとPWMクラスのインスタンスを生成。
Timerクラスによってハードウェアタイマーを生成し、PWMクラスでTimerオブジェクトを引数として与えて、周波数やデューティー比、ピン番号を割り当てる。
sg90のデータシートより、周波数は50Hzと設定した。
arg = {-90:2.5, 0:7.25, 90:12} # arg:duty
PWMのデューティー比で角度を制御するが、コードを書くときいちいち確認するのが面倒くさいので、辞書を使った。
サーボの可動域が-90° ~+90° なので、今回は3つの角度を設定した。
ch.duty(arg[0])
chはPWMクラスのインスタンスで、PWM.duty関数を使うことで、PWMのデューティー比を変化させる。
arg[0] = 7.25 で、デューティー比を7.25にする関数である。
動作
今回は、PWM制御の使い方の解説なので、込み入った関数を使わずに順番に角度を変えていくコードを書いた。
実際の挙動はこのようになる。
参考にさせて頂いたサイト
パスコンパスさん
パスコンパスさんが、サーボモータを使ってM5stickVを動かしているのを知って、初めてPWM制御が使えることを知った。
最後まで読んでくださりありがとうございました。
他にも色々な事を紹介していますので、読んでくれたら嬉しいです。
コメントを残す