実験室

ESP32とステッピングモーターでメーター的なものを作ってみよう(28BYJ-48・ULN2003)


今夜のスラニュー実験室では、ステッピングモーターを使ってアナログメーター的なものを作ってみます。

いつものM5StickCではなく、今回はESPr32 Developerを使っていますが特に理由はなく、気まぐれです。基本的にはM5StickCでも同じように動作するはずです。

用意したもの

まずは配線しましょう

ESPr32とULN2003の間の接続

  • IN1 – IO13
  • IN2 – IO12
  • IN3 – IO14
  • IN4 – IO15

ESPr32側のポートは他の場所でも大丈夫ですが、一部使えないポート(6〜11・34・35)があるので注意が必要です。詳しくはこちらのサイトに掲載されています。

ULN2003への給電

また、ステッピングモーターの駆動にはある程度の電流値が必要なので、開発ボードからではなく、5V電源から給電します。上記の配線例ではMB102 電源ユニットから、ULN2003に別途直接5V給電しています。

メーターらしきものを作ってみよう

このメーターのフレームやニードルは、Ender-3 Pro 3Dプリンターで作成しました。元データはThingiverseからダウンロードさせていただきました。

裏側はこのような感じ

文字盤はまだ作っていませんが、とりあえずCDラベル用のシールを丸く切り抜いて貼り付けてあります。

プログラムを書いてみよう

まずはULN2003ボード用のライブラリをインストールします。

Arduino IDEの、スケッチライブラリをインクルードライブラリを管理 から、「CheapStepper」をインストールします。ULN2003用のライブラリは他にもありますが、アップデートされていそうなものを選択しました。

#include <CheapStepper.h>

CheapStepper stepper(13,15,12,14); // IN1,IN2,IN3,IN4 ①
boolean clockwise = true;

void setup() {
    stepper.setRpm(10); //②
}

void loop() {
    // モーターの全Steps = 4096
    clockwise = true; //③
    stepper.moveTo (clockwise, 0); //④
    delay(1000);
    stepper.moveDegrees (clockwise, 360); //⑤
    delay(1000);
    stepper.moveDegrees (clockwise, 90); //⑥
    delay(1000);
    stepper.moveDegrees (clockwise, 90);
    delay(1000);
    stepper.moveDegrees (clockwise, 90);
    delay(1000);
    stepper.moveDegrees (clockwise, 90);
    delay(3000);
}

① 開発ボードのIOを指定します

配線した通りに、IN1,IN2,IN3,IN4の順番でコンストラクタに引数を渡します。

② モーターの動作速度を指定します

CheapStepperのチュートリアルには以下のように書かれています。

Note: CheapStepper library assumes you are powering your 28BYJ-48 stepper.using an external 5V power supply (>100mA) for RPM calculations.don’t try to power the stepper directly from the Arduino.accepted RPM range: 6RPM (may overheat) – 24RPM (may skip).ideal range: 10RPM (safe, high torque) – 22RPM (fast, low torque)

これによると

  • 5V電源は100mA以上必要だから、開発ボードからはとらないで
  • RPMの範囲は6RPM(過熱するかも)-24RPM(動作が飛ぶかも)
  • 普通は10RPM(無難・トルクあり)-22RPM(速いけどトルクなし)

ということなので、無難に10RPMを指定しています。

③ 回転方向を指定

moveDegrees()メソッドには回転方向をBOOLで渡します。Trueが時計回りです。この例では時計回り方向に回転させています。

④ まずは0ステップの位置に移動

基本的に電源を入れた状態の位置が0ステップ(このモータードライバーは全部で4096ステップなので、0-4096のポジションがある)のはずですが、一応0ステップに動かしています。

⑤ 360°針を回転

まずは360°ぐるっと時計回りに針を回転させてみます。

⑥ 90°ずつ回転

1,000msecのインターバルをはさんで、次は90°ずつ4回動かします。

さあ、動かしてみよう。

このように動作しました。ちゃんとプログラムした通りの動作が確認できると思います。

今回できなかったこと

ステッピングモーターの原理を勉強しながら組んでみましたが、ステッピングモーターというのは、サーボと違って絶対的な開始位置をもっていないということがわかりました。

つまり、メーターのゼロ位置が合わせられないということです。これは、例えばセンサーを使って位置合わせをする方法があるようなので、次回は実用的なメーターの制作を目指して、そのあたりトライしてみようと思います。

関連記事

     
  1. 実験室

    さあ、M5StickCの6軸IMUで加速度を検知して、画面を光らせたりしてみよう。

    さて、昨日の記事でM5StickCのセットアップとArduino I…

  2. 実験室

    こんなに簡単にできちゃうの?っていうWordPressレコメンドプラグイン「Kindred Post…

    時代はパーソナライズですよ、機械学習ですよ。でも、先日TensorF…

  3. 実験室

    3Dプリンターとステッピングモーターで、動画撮影用のターンテーブルをつくろう!

    動画をかっこよく撮影するための、撮影用ターンテーブルをつくります。3D…

  4. 実験室

    M5StickC+GPSモジュールで、LCDにロケーションを表示してみましょう。

    さて、こないだの実験ではM5StickCの加速度センサーを使ってみま…

  5. 実験室

    AlexaでM5StickCを操作しちゃおう!

    今日のレシピは「Amazon Echo(アレクサ)で、M5S…

  6. 実験室

    [IoT実験室] M5StickCで、7セグメントLED(TM1637)に何か表示してみよう!

    M5StickCで、7セグメントLED(TM1637)に何か表示してみ…

コメント

  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

最新の記事

スラニューについて

PAGE TOP