パスコンパスの日記

何か色々作るのが好きです

【キョロキョロV①】m5stickVにサーボ2つを繋いで動かしてみました

 先月のメイカーフェア東京に行って運よくm5stickVを買えたのでサーボを足して少し遊んでみました。

目次

m5StickVとサーボ

  • m5stickV:ディスプレイ、スピーカ、6軸センサ等が載って画像認識や機械学習もできる3000円の最近話題のマイコンです。マイコン向けのpythonで書けるところも面白いです。

  • サーボモータ:安価に手に入るモータでパルス信号の周波数を変更することで指定の角度へヘッドを動かすことができます。

www.switch-science.com

akizukidenshi.com

※今回サーボの電源はm5stickVからではなく別途USBから供給しています。m5stickVのgroveコネクタからサーボ2個分の電源を取ると電流が流れすぎてピンが死んでしまう可能性があるのでご注意ください。次回以降の記事でそちらの方法もご紹介予定です*1

メカ設計に関して

 メカはFusion360という趣味での利用が無料のCADを使って設計しました*2。 設計したデータはadventurer3 という家庭用3Dプリンタで出力しています。 プリント用のデータは次回以降公開しようかなと思います*3

f:id:yoichi_41:20190908235231p:plain

プログラムに関して

 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を動かしている記事です。

yoichi-41.hatenablog.com

※追記終わり

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から接続してスクリプトを実行して動かしています。

読んでくださりありがとうございました。

関連記事

yoichi-41.hatenablog.com

yoichi-41.hatenablog.com

参考サイト

  • RCサーボを操る

http://maicommon.ciao.jp/ss/Pic/media/Servo/index.htm

  • SiPEED MaixPy machine.PWM

https://maixpy.sipeed.com/zh/libs/machine/pwm.html?h=pwm

*1:記事を書きました。関連記事の項に載せています。2019/09/12追記

*2:年間10万ドル以上の売上がなければ大丈夫の様です

*3:記事を書きました。関連記事の項に載せています。2019/09/14追記

*4:esp32用やpyboard用のサンプルを試してみましたがエラーを吐いてしまいました。