m5StickVというマイコンにサーボを2つつけたキョロキョロVというマシンの作り方やプログラム等を公開しています。
元々固定型で首振りさせる想定で作っていたのですが、いざ動かしてみると振動で位置がだんだんずれていって「ひょっとするとこれは意図的に歩かせることができるのではないか」と思ったため今回試してみました。
目次
プログラム
最初の記事のサーボを動かすプログラムを少しいじって上下を早めに動かす様にし、値を調整してみました。
※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 import lcd import sensor import image import lcd lcd.init() lcd.rotation(2) #add sensor.reset() sensor.set_pixformat(sensor.RGB565) sensor.set_framesize(sensor.QVGA) sensor.set_windowing((224, 224)) #add sensor.run(1) tim0 = Timer(Timer.TIMER0, Timer.CHANNEL0, mode=Timer.MODE_PWM) tim1 = Timer(Timer.TIMER1, Timer.CHANNEL1, mode=Timer.MODE_PWM) ch0 = PWM(tim0, freq= 60, duty=10, pin=34) #f 80 straight ch1 = PWM(tim1, freq= 50, duty=10, pin=35) freqval = 70 #初期角度 val = 1.5 #角度変化量 max_freq = 110 min_freq = 60 while True: freqval = freqval + val if freqval > max_freq: val = -val if freqval < min_freq: val = -val ch1.freq(freqval) time.sleep(0.05)
調整したパラメータは主に以下の値です。
val = 1.5#角度変化量 max_freq = 100 #最大周波数 min_freq = 10 #最小周波数 freqval = 80 #初期角度
動作の様子
初回テスト動作
最初ストロークを小さめにしていた時です。確か以下の様な値だったと思います。前進しない時とする時が混ざってあまり良い動きとは言えないと思います。
前に進む動きの検討中ですが、まだ無駄が多くていまいちうまく進めていない感じですね #m5StickV #キョロキョロV pic.twitter.com/SfR04jLFUi
— パスコンパス (@pscmps) 2019年9月28日
val = 1#角度変化量 max_freq = 100 #最大周波数 min_freq = 65 #最小周波数 freqval = 80 #初期角度
数回試行錯誤後の動作
ストロークを伸ばすと良い感じになってきましたが重心の関係か、だんだん右に曲がって行ってしまいます。(下の動画です。)
パラメータは確かこんな値でした。ストロークと速度を調整したら、さっきまでよりだいぶ効率良い感じになってきました
— パスコンパス (@pscmps) 2019年9月28日
ただ、重心の関係か右に曲がりますね#m5StackV #キョロキョロV pic.twitter.com/PSLPTWkNA6
val = 1.5#角度変化量 max_freq = 80 #最大周波数 min_freq = 70 #最小周波数 freqval = 80 #初期角度
更に調整した動作
やっと画面の端から端まで行ける位はまっすぐ進める様になりました。左右のサーボの首を少し左に回した状態で固定することでバランスを取ってみました。(下の動画です。)
上の首を左に回したら画面を横断する位の距離はおおよそ直進できました!
— パスコンパス (@pscmps) 2019年9月28日
一旦この動きで固めようかなと思います#m5StickV #キョロキョロV #adventurer3 pic.twitter.com/3z01ZDMHJ8
パラメータはこんな感じでした*1。意図的に首を右に回しています。
val = 1.5 #角度変化量 max_freq = 110 min_freq = 60 freqval = 70 #初期角度
まとめ
今回は小ネタという感じでしたが、キョロキョロVを歩かせて(?)みました。移動できるとなると、コンセントのAC電源からの給電ではなく単体動作可能な様にバッテリからレギュレータで電圧落としてサーボに電源を供給したくなってきますね。次回は色々動かして見えてきた課題に対しての設計変更に関しての記事を書く予定です。
読んで下さり、ありがとうございました。
*1:初期取り付け角度やサーボの型番によってばらつきはあるかと思います