M5stack grayの特徴は9軸IMUが内蔵されていることなので、IMU機能を使ってみます。組み合わせるのはサーボモーターでこれも初めて使うパーツ。
<用意するもの>
M5stack gray以外に用意したのはサーボモーターですが、金属ギアで耐久性のありそうなものを選択。
型名:HiWonder LFD-01M(スイッチサイエンス推しのメーカーではないかと思います)
https://www.switch-science.com/catalog/7133/
トルクは1.5Kg*cm程度(Vcc @4.8V)などでそれほどパワーはありません。
<やってみたこと>
シャフトの先にサーボモーターを二軸で実装して、常にM5stackが同じ姿勢を保つようにする。シャフトにもセンサーつければ追従性は良くなりますが、M5だけで実現する場合には漸次的なアルゴリズムになるので速度は速くはなりません。
ロジックは、
① 最もあり得そうなシャフトを垂直にするようにサーボモーターの二軸を指定
② 以降はM5の加速度が0付近になるようにサーボモーターの角度を一度づつ調整
③ 以上を繰り返すことでM5は垂直位置にホールドできるようになる
<ハードウェア>
サーボモーターの駆動はPWM方式ですがその制御信号としては2, 5番ピンを使っています。
電源はM5からは供給できないのでmicro-Bで外部電源を使用というシンプル構成。
M5を固定するのはM3の20mmネジがちょうどとなる様に、アダプタの厚み(6mm)を調整。ちなみにアダプタ経由ではいかようにも調整できますが、M5単独で普通にネジ止めするのはM3の12mmネジですが、汎用では売ってないようです。
実際に動かしてみるとオーバーシュートするような動きをするので、重力加速度に普通の加速度が加算されている動きになってます。
<ソースコード>
ソースコードと3Dプリンタ用のstlファイルは、以下のGitHubに入れてあります。
https://github.com/chateight/servo
<次への展開>
これだけでも自撮り棒のような使い方はできますが、スマホでは重すぎて駆動できないのでM5 stackと整合するようなカメラと組み合わせたことをやってみようかと。