マイクロビットを使ってみる 〜サーボモーターの回転の仕方を制御する

マイクロビットでサーボモーターの動作を制御したいと思います。


MakeCode for micro:bitのブロックエディタを使ってサーボモーターの動作を制御する場合は、「入出力端子」>「サーボ 出力する 端子 XXX 角度 XXX」ブロックなどを使用することになります。

このブロックを、以下のように単純に使ってサーボモーターを動作させると、設定した角度に一気に動きます。

また、用途によってはサーボモーターをゆっくり動かしたいケースもあります。
サーボモーターをゆっくり動かしたい場合は、例えば以下のように、角度を少しずつ変化させながら繰り返し処理を行います。

ただ、この方法では、サーボモーターは常に一定の速度で動作します。ゆっくり動かすことはできますが、動き始めや停止間際まで一定の速度で動いており、あまりなめらかではありません。

今回は、サーボモーターをゆっくり動かしたい場合に、最初や最後の動きをよりゆっくりにして、全体の動作をなめらかにする方法について調査しました。

方法1:三角関数補間

三角関数を使ってサーボモーターの角度変動量を計算します。
最初と最後は変動量が小さく、真ん中の変動量が最も大きくなります。
変動量の時間変化は、なめらかなサイン波の形状になります。

方法2:二次関数補間

二次関数を使ってサーボモーターの角度変動量を計算します。
こちらも、最初と最後は変動量が小さく、真ん中の変動量が最も大きくなります。
変動量の時間変化は直線になります。

「方法1」よりは単純なやり方ですが、実際に動かしてみると両者の差は分かりませんでした。

方法3:一次遅れ追従

「目標とする角度」と「現在の角度」から角度変動量を計算します。
最初の変動量が最も大きく、最後の変動量が最も小さくなります。時間を経過すると変動量は指数関数的に減少します。

いずれの方法でも、サーボモーターをなめらかに停止させることができました。


なお、私がマイクロビットの使い方を習得するのにあたっては、以下の書籍を参考にさせていただきました。


初心者向けから、比較的高度なものまで、さまざまな情報が記載されているだけでなく、子供向けの作例も多数掲載されていますので、「プログラミング教育」のための題材さがしなどにもおすすめです。


このサイトで書いている、マイクロビットに関するブログ記事を、「さとやまノート」という別のブログページに、あらためて整理してまとめました。

他のマイクロビット記事にも興味のある方は「さとやまノート」をご覧ください。