M5Stackでモータドライバを使う
第1回:小型Arduino互換機(M5Stack)で電子工作を楽しむ
こんにちは、ヨシケンです!
小型Arduino互換機のM5Stackを使ってリモコンカーを作る本連載。第2回は、M5Stackとモータドライバをつないで、DCモータを動かせるようにします。Groveという標準的な端子を使っているので、複雑そうなモータドライバ設定もかなり簡単にできますよ。

M5Stackシリーズを使ってリモコンカー作り
今回の記事の流れ
今回の記事で必要な物一覧
M5Stack Core
ESP32を搭載し、ディスプレイ、センサなども入ったArduino互換機

Grove I2C モータドライバ
I2Cという通信方式で、Grove端子で接続して使えるモータドライバ

9V電池と電池ボックス

小型モーター、車輪など

1. モータドライバの設定
ミニリモコンカーを作るにあたり、DCモータの駆動、回転速度の制御などをするためにモータードライバというIC機器が必要です。モータドライバとArduinoの接続、プログラミングは少し複雑ですが、M5StackにはGrove端子というものが付いていて、Grove接続できるモータドライバを使うと簡単にモータを制御することができます。
今回は、Grove端子が付いたI2C制御方式のこのモータドライバを使用します。

このモータドライバを開発しているSEEED社のプロダクトページに行って、ライブラリを取得します。以下、ページ中でGrove I2C Motor Driverというところをクリックして、パソコン上にダウンロードしてください。
https://wiki.seeedstudio.com/Grove-I2C_Motor_Driver_V1.3/

そのライブラリを、メニュー上の スケッチ > ライブラリのインクルード > .ZIP形式のライブラリをインストール から、先程のファイルを選んで適用します。

これでライブラリとサンプル・スケッチがインストールできました。スケッチ例メニューの所にdcmotor_test というサンプルがありますので、それを選んでM5Stackに書き込みをしてみましょう。

パソコンとM5Stack、モータドライバをつないで書き込みをおこないます。画面のようなメッセージが出たら、モータドライバのスケッチが書き込みできました。

2. M5Stackとモータの接続
M5Stack、モータドライバに、DCモータをつないでいきます。
駆動部分には、とても小さいモータに車輪がそのまま付くギヤモータを使っています。このギヤモーターを電池ボックスにネジ留めすると、一体化できてミニリモコンカーにしやすいです。

モータと車輪を設置

モータと電池ボックスをネジ留めする
モータから2対、電池ボックスから1対のケーブルが出ているので、それぞれモータドライバに接続します。

モータをつなぐ側の端子

電源をつなぐ側の端子
モータドライバと車輪、電池ボックスはこのようになりました。

M5Stack側にも小さな車輪を付けます。Groveケーブルを使って、モータドライバとM5Stackをつなぎます。

全体はこのようになりました。

3. M5Stackを動かすプログラム
最後にM5Stackを動かすプログラムを作ります。M5Stackには画面があるので、画面に表示しながら動くものにします。サンプルプログラムM5_Motor.inoはこのようになっています。
#include "Grove_I2C_Motor_Driver.h"
#include <M5Stack.h>
#define I2C_ADDRESS 0x0f
void setup() {
Serial.begin(9600);
Motor.begin(I2C_ADDRESS);
M5.begin();
M5.Lcd.setTextSize(4);
M5.lcd.print("GO M5!");
}
void loop() {
// Set speed of MOTOR1, Clockwise, speed: -100~100
Motor.speed(MOTOR1, 100);
// Set speed of MOTOR2, Anticlockwise
Motor.speed(MOTOR2, -100);
M5.lcd.clear();
M5.Lcd.setCursor(10,0);
M5.lcd.print("GO M5!");
M5.Lcd.setCursor(10,60);
M5.lcd.print("Forward!");
delay(2000);
// Change speed and direction of MOTOR1
Motor.speed(MOTOR1, -100);
// Change speed and direction of MOTOR2
Motor.speed(MOTOR2, 100);
M5.Lcd.setCursor(10,60);
M5.lcd.print("Backward!");
delay(2000);
// Stop MOTOR1 and MOTOR2
Motor.stop(MOTOR1);
Motor.stop(MOTOR2);
M5.lcd.clear();
M5.Lcd.setCursor(10,60);
M5.lcd.print("Stop!");
delay(2000);
}
プログラムができたらこれをM5Stackに流し込みます。電源を入れると車輪が回り始めると思います。

前転して前に進む時はForward、後転する時はBackwordと表示されます。


4. まとめ
今回は、小さなギヤモータを二つ使って、前後左右に動かせるようになりました。ArduinoとDCモータの制御には、モータドライバが必要ですが、Grove端子でつなぐだけで簡単に使い始められるようになることが分かったと思います。
M5StackのGrove端子には、様々なドライバやセンサなどを接続することができるので、他のセンサを試してみるのもいいでしょう。
次回は距離センサなどを付けて、壁を回避したり、机から落ちないようにします。これにより自動運転ができるようになりますので、お楽しみに!
今回の連載の流れ
第1回:小型Arduino互換機(M5Stack)で電子工作を楽しむ
第2回:M5Stackでモータドライバを使う(今回)
第3回:M5Stackでセンサを使って自動運転と自動回避機能を搭載
第4回:M5Stackをスマホと連動させてコントロールする
