TPTブログ

テックポート株式会社のブログです。 技術情報や製品・サービス情報、 また未経験社員がデータサイエンティストを 目指す奮闘記など、更新していきます。

M5Stackでモーターを回してみよう

こんにちは。えーちゃんです。
M5Stackでミニカーを作る過程紹介企画第3弾ということで、今回はモーターを回していきましょう。

注意ですが、私は電子工作について全くの初心者のため、私の作ったミニカーはあまり参考にならないと思います。
あくまでモーターを回すプログラムのご紹介、ということで読んでいただければと思います。

環境

M5Stackの種類はM5GO、開発環境はPlatformIO IDEです。

DCモーターを回そう!

今回はミニカーを動かすのに欠かせないモーターをM5Stackを使って制御しましょう。
DCモーターという最も基本となるモーターを使います。
DCモーターは理科の授業などで扱うことがあるシンプルなモーターで、単体では速度や回る向きを調整できません。
しかしモータードライバに接続することにより、速度や回転の向きを制御できるようになります。

必要なもの

●モータードライバ
M5StackとGroveコネクタで接続できる以下のものを使います。
他のものでも問題なく使用できると思います。
https://www.switch-science.com/products/827/


●DCモーター
今回私が使用ものの品番を覚えていなくて申し訳ないのですが、
上のモータードライバを使う場合5V程度で動作するものを使うのがいいと思います。
モータードライバの供給できる電圧が決まっていますので、それに合わせたものを選択しましょう。

●外部電源
今回は1個しかモーターを回さないので不要ですが、
モーターを早く回したかったり、2個モーターを扱う時は電圧が足りないので外部電源が必要になります。
6~15Vの電源を用意しましょう。amazonなどで売っている電池ボックスが初心者にとって扱いやすいと思います。
たとえば以下のような単三4個の電池ボックスは、6V電源として使うことができます。
Amazon:単三4本電池ボックス

配線

はじめに必要なものを繋いでいきましょう。
安全のため、電池ボックスの電池を抜いてM5Stackの電源を落とした状態で行いましょう。
電池の入った状態で電池ボックスのコード同士が触れ合うと大変危険です!
モータードライバーとモーターを繋ぎます。
モーターから伸びるコードの剥き出しの部分をモータードライバの穴に差し込み、ネジを締めて固定します。
使う場合はモータードライバと外部電源もつなぎましょう。
M5StackのPortAとモータードライバをGroveコネクタで繋いで完成です。
完成図はこんな感じです!

また、モーターを繋いだチャンネルの番号はプログラムで使うので覚えておきましょう。
横に小さくチャンネル番号がかいてあります。

モータードライバを動かすライブラリ

私が紹介したモータードライバを買うと説明書もなにもない状態で届くので、どうやって使うのだろう・・・?と不安になります。
でもご安心ください!メーカーの公式ページから使い方や、動かすためのライブラリについて知ることができます。
今回買った「Grove I2C motor driver」と検索すると以下のページが出てきます。
Grove - I2C Motor Driver V1.3 | Seeed Studio Wiki
読み進めていくと、「Grove_I2C_Motor_Driver_v1_3 Library」なるライブラリを使ってモータードライバを動かせると書いてあります。
リンクをクリックするとzipファイルがダウンロードされました。
こちらのライブラリ、PlatformIOのライブラリ管理機能からは使えないようです。
「Grove_I2C_Motor_Driver_v1_3 Library」で検索してみたらGitHubのページも見つかりました。
github.com

プロジェクトの準備をしよう

今回も前回と同じく、モーターを動かす用のプロジェクトを新しく作りましょう。
そしてライブラリ管理機能から「M5Stack」ライブラリを追加します。

さらに、先ほどダウンロード+解凍した「Grove_I2C_Motor_Driver_v1_3 Library」の中にある、
Grove_I2C_Motor_Driver.cppとGrove_I2C_Motor_Driver.hをプロジェクト内のlibディレクトリに適当なフォルダを作って入れましょう。
図のような感じになっていればOKです。これでライブラリの準備が整いました。


公式にサンプルコードがありますが、M5Stackで使う想定のものでないので私の方で少し変更しました。
以下をまるっとmain.cppにコピペして、ビルド+アップロードしましょう。
ボタンAを押すと順回転、ボタンBを押すと逆回転、ボタンCで停止します。
速度は変数SPEEDの値を変えることで調整できます。
動かすときはモーターが暴れないよう注意しましょう。

#include <Grove_I2C_Motor_Driver.h>    // モータードライバを操作するプログラムを読み込みます
#include <M5Stack.h>

#define I2C_ADDRESS 0x0f                      // モータードライバの通信用の番号です
#define MOTOR_ID 1                                  // モーターの繋がれているチャンネル番号です
#define SPEED 50                                      // モーターの回転速度です

void setup() {
  M5.begin();
  Motor.begin(I2C_ADDRESS);                 // モータードライバの初期化をします
  M5.Lcd.setBrightness(30);
  M5.Lcd.clear();
  M5.Lcd.print("Motor Test");
}

void loop() {
  M5.update();
  if(M5.BtnA.wasPressed()){                    // ボタンAが押されたとき
    Motor.speed(MOTOR_ID, SPEED);     // モーターを速度SPEEDで回します
  }
  if(M5.BtnB.wasPressed()){                    // ボタンBが押されたとき
    Motor.speed(MOTOR_ID, -SPEED);   // モーターを逆向きに速度SPEEDで回します
  }
  if(M5.BtnC.wasPressed()){                    // ボタンCが押されたとき
    Motor.stop(MOTOR_ID);                      // モーターを止めます
  }
}

タイヤが回るしくみ

モーターには歯車がついていて、タイヤの軸についた別の歯車とかみあっています。
モーターが回ると歯車を通して回転がタイヤに伝わります。
ミニカーってこんな仕組みになってたんだ〜と私も初めて知りました。

おまけ:私のミニカーの構造

ミニカーを組み立てるのにあたり最大の障壁は、車部分の作り方を私が知らないことでした。
部品をどこから調達してどのように組み立てよう・・・と困っている最中救世主を見つけました。
それがこのFlying Tigerで売っていた「DIY ソーラーレーシングカー」です。
blog.jp.flyingtiger.com

Flying Tigerはかわいい北欧風の雑貨を取り扱うお店です。
子供向けの知育玩具として売られていたこのソーラーカーを見て、
ソーラーパネルを外してモータードライバをつけたらいい感じになりそう!とひらめき即購入しました。
Flying Tigerの商品は値段が安いことでも有名で、ソーラーカーはお値段たったの800円でした。
外したソーラーパネルはまたなにかに再利用できるといいですね。
また、このソーラーカーと似たような実際に動かせるタイプの商品がいくつかあったので他にもなにか作れるかもしれません。

今回の記事はここまでです。ここまでお読みいただきありがとうございました。
次回はいよいよ最終回です。
今回ボタンで制御していたモーターを、スマホアプリからできるようにします!お楽しみに!!

宣伝!

弊社で開催しているデータサイエンティスト養成講座第七期が現在受講生募集中です。
こちらはAIってなんなの?使ってみたいけどよくわからないよ??という方向けの半年間の講座です。
わたしも前職まではAIよくわからん!って感じだったのですがこちらの講座を受けてなんとか仕事ができています。

機械学習やAIの基礎を勉強し、最終的には受講生のグループに分かれた開発演習を行います。
AIって何?という全くの初心者でも、自分でデータを集めてモデルを組めるようになれたと好評の講座です。
もし気になる!という方がいらっしゃいましたら下記講座HPからを詳しい内容を見てみてください!

www.tbtech.co.jp