先月のメイカーフェア東京に行って運よくm5stickVを買えたのでサーボを足して少し遊んでみました。
目次
m5StickVとサーボ
m5stickV:ディスプレイ、スピーカ、6軸センサ等が載って画像認識や機械学習もできる3000円の最近話題のマイコンです。マイコン向けのpythonで書けるところも面白いです。
サーボモータ:安価に手に入るモータでパルス信号の周波数を変更することで指定の角度へヘッドを動かすことができます。
※今回サーボの電源はm5stickVからではなく別途USBから供給しています。m5stickVのgroveコネクタからサーボ2個分の電源を取ると電流が流れすぎてピンが死んでしまう可能性があるのでご注意ください。次回以降の記事でそちらの方法もご紹介予定です*1。
メカ設計に関して
メカはFusion360という趣味での利用が無料のCADを使って設計しました*2。 設計したデータはadventurer3 という家庭用3Dプリンタで出力しています。 プリント用のデータは次回以降公開しようかなと思います*3。
プログラムに関して
micro pythonでのサーボの動かし方がよく分からなかった*4ので勉強も兼ねて自分で書いてみました。
調べたところ1周期が20msec前後で動くようだったので
50HzをPWMで設定し、様子を見ながら周波数を変えて探ってみました。
40~130Hzで約180deg動くようでしたが今回はメカ的な限界もあるため60~100にしています。
※2020/04/03追記
SG-90 PDFデータシート
http://akizukidenshi.com/download/ds/towerpro/SG90_a.pdf
上記データシートの様にサーボは本来50Hz固定でduty比を変えることで角度を変えるのですが、この記事では周波数を変えてしまっていました。
それでも動いてはいたのですが、dutyを0.025~0.12に変更する方が良さそうです。
動かすところを抜粋するとこんな形になります。
from machine import Timer,PWM tim0 = Timer(Timer.TIMER0, Timer.CHANNEL0, mode=Timer.MODE_PWM) ch0 = PWM(tim0, freq = 50, duty = 5, pin = 6) d0_count = 10 #if文などでここを変える duty0 =ChangeDuty(d0_count)
この方法でMaixBitを動かしている記事です。
※追記終わり
from machine import Timer,PWM import time # タイマーの設定 tim0 = Timer(Timer.TIMER0, Timer.CHANNEL0, mode=Timer.MODE_PWM) tim1 = Timer(Timer.TIMER1, Timer.CHANNEL1, mode=Timer.MODE_PWM) # PWMの設定 ch0 = PWM(tim0, freq= 50, duty=10, pin=34) ch1 = PWM(tim1, freq= 50, duty=10, pin=35) freqval = 70 #初期角度 val = 1 #角度変化量 while True: freqval = freqval + val # 前回の角度に変化量を足す # 100より大きい、または60より小さい場合 if freqval >100 or freqval < 60: val = -val # 変化量を反転 ch0.freq(freqval) # サーボ1の周波数を変更 ch1.freq(freqval) # サーボ2の周波数を変更 time.sleep(0.05) #いらないかもしれません
動作の様子
MaixPy IDEから接続してスクリプトを実行して動かしています。
m5stickVでサーボ2個を動かしている動画です #m5StickV pic.twitter.com/6Ltl6LGZtb
— パスコンパス (@pscmps) 2019年9月9日
読んでくださりありがとうございました。
関連記事
参考サイト
- RCサーボを操る
http://maicommon.ciao.jp/ss/Pic/media/Servo/index.htm
- SiPEED MaixPy machine.PWM