どんどん増えていく「積み基板」。次から次へと魅力的な商品が出てくるのでつい買ってしまいます。あればいつか使うだろう。将来必要になったとき、すぐに使えないと不便だから買っておこう。そうやってどんどん増えていきます。今回はそんな積み基板を消化していきたいと思います。

今回作るもの

AliExpressのセールでRoller485 UnitというBLDCモーターを衝動買いしてしまったので、それをコントロールするためのデバイスを繋げて使用してみたいと思います。

使用したもの

Roller485

Roller485 UnitはBLDCモーターとコントローラーがセットになったもので、簡単なコマンドを送信するだけでモーターを制御する事ができます。私のようなモーター制御初心者には嬉しいデバイスです。ポジションモード、スピードモード、定電流モード、エンコーダーモードの4つのモードがあります。

ポジションモードは指定した角度へ動かし、その角度を維持します。サーボモーターのような感じです。スピードモードは指定した速度で回転するもの。定電流モードは指定した電流値で動かす(?)…ちょと用途がわかりません。エンコーダーモードはロータリーエンコーダーのように回転して値をカウントします。

爆速すぎる!?

今回はポジションモードで遊んでいたのですが、滅茶苦茶速く回転するんですよ。物を取り付けたら吹き飛ばされるんじゃないかってくらいに。ところがライブラリ(M5Unit-Roller)を見ても、ポジションモードにはスピードを制御する関数は見当たりません。データシートにもそれっぽいものは見当たりませんでした。

じゃあ作ろう

爆速で回転するモーターをゆっくり動かすために、ちょっと回転させて待機→ちょっと回転させて待機、を繰り返してゆっくり動かすようにしてみました。速度と角度の操作をするためにいいデバイスはないかと、積みM5Stack箱(未整理ものがまとめて入っている箱)を漁っていたところ、フェーダーユニットとポテンショメーターユニットがあったので、それを活用することにしました。

フェーダーユニット

フェーダーユニットにはスライド型の可変抵抗器が入っていて、OUT端子から出力される電圧をM5StackのADCで読み取って使用します。Core2の場合ADCは10bitなので0~4095の値が取得できます。これをmap()関数で速度の値に変換しています。

rawadc_fades += 4095 - analogRead(GPIO_FADE_OUT);
uint32_t speed = map(rawadc_fade, 0, 4095, 360*0.5*100, 360*5*100);

このデバイスの面白いのが、両サイドに14個のフルカラーLEDが付いているところです。ただのボリュームだと思ってたので光ったときは驚きました。せっかくなので光らせることにします。FastLEDライブラリを使えば簡単です。

  // LEDを光らせる
  uint8_t fade_pos = map(rawadc_fade, 0, 4095, 0, 6);
  uint8_t fade_color = map(rawadc_fade, 0, 4095, 0, 255);
  for (int i=0; i<14; i++) {
    leds[i] = CRGB(255-fade_color, fade_color, 0);
  }
  leds[fade_pos] = CRGB::Blue;
  leds[13-fade_pos] = CRGB::Blue;
  FastLED.show();

スピードが遅いときは”赤”、速い時は”緑”にしてみました。またツマミの位置に合わせてLEDが動くようにしました。ツマミの位置に”青”を光らせます。基板上の配置が1→7、14→8のように上と下で向きが違うので要注意です。

ポテンショメータ

こちらも同じく可変抵抗器が入っていて、OUT端子の電圧を測ります。詳しい原因は調べてないのですが、ツマミを回してなくても取得した値がブレる現象が起こりました。このままRoller485に値を与えてしまうと、モーターがブルブルと震えてしまいます。今回はそこまで正確な制御をすることは目的ではないので、45度単位で回転させる方針にしました。

また、ツマミを回している最中にモーターが動かないように、250ms以上値の変化が止まった状態が続いたらモーターを動かすようにしました。LEDも赤くチカチカと光らせて、「コマンドを受け付けました」的な表現にしました。

Core2用ポート拡張モジュール

Core2のPort AにはI2CのRoller485が接続されているので、フェーダーとポテンショメータは別のアナログ用のGPIOポートに接続しなくてはなりません。M5Stack箱を漁ると、いつ買ったのかも何のために買ったのかも覚えていない拡張モジュールが出てきました。まさにぴったり!

必要なものが買わなくても家にある。素晴らしいことです。「積む」というのは使わないのに買うことではなく、将来使うことを予測して備えているだけなのです。

今回作成したプログラム

GitHub にアップしました。

最後に

ということで、積み基板消化企画、第1回では3個のデバイスを消化しました。最初はちょっと使って終わらせるつもりでしたが、M5Stackの製品には+αの部分があって面白いですね。たとえばフェーダーユニット。14個のフルカラーLEDが付いているので、これで様々な表現ができます。今回はRoller485を動かすのが目的だったのに、新たな発見もあり、UIを作ったりもして楽しめました。

LINEで送る
Pocket