今回は、mBotプログラミングシリーズ(Arduino編)の第1回です。
この回では、mBotを実際に動かすための簡単なプログラムを作成します。
Arduino IDEを使って、mBotに「前進」「停止」「回転」といった基本的な動作を指示する方法を学びましょう。
全講座の一覧はこちら
目標
- mBotのモーターを制御する方法を理解する
 - 前進、後退、左右旋回のプログラムを作成する
 
Arduinoプログラムファイルの作成
ここでは、プログラムファイルをイチから作成していきます。
Arduino IDEを立ち上げ、ファイル -> 新規スケッチで真っ新なプロジェクトを用意しましょう。

mBotのモーター制御の基本
モーターを動かすAPI
API(Application Programming Interface)は、ソフトウェアやハードウェアが外部のプログラムとやり取りをするためのインターフェース(接点)です。
簡単に言うと、『決められたルールに従って機能を利用するための仕組み』です。
mBotのArduinoライブラリを使用すると、mBotのモーター、LED、ブザー、センサーなどの各機能を簡単に利用できます。
mBotには左右に2つのモーターが搭載されており、それぞれを制御することでロボットを動かします。
Arduino IDEでは、以下の関数を使用してモーターを制御できます。
MeDCMotor MotorL(M1);  // M1(左)モーター制御用のインスタンス(オブジェクト)を作成する
MotorL.run(100);       // 指定した速度でM1(左)モーターを回転させるAPIを利用した簡単なプログラム
APIを用いて、次のような簡単なプログラムが作成できます。
#include <MeMCore.h>
MeDCMotor MotorL(M1);
MeDCMotor MotorR(M2);
void setup() {}
void loop() {
    MotorL.run(-100);  // M1モーターを前進
    MotorR.run(100);   // M2モーターを前進
}クラスとインスタンス(オブジェクト)について
このコードを理解するためには、「クラス」と「インスタンス(オブジェクト)」の概念を知ることが重要です。
クラスとは?
クラスは 「設計図」 のようなものです。
たとえば、「車」というクラスを作ったとします。
車には「色」「速度」「メーカー」などの属性があり、「走る」「止まる」といった機能(メソッド)を持つことができます。
class Car {
public:
    String color;
    int speed;
    
    void run() {
        Serial.println("車が走ります");
    }
    
    void stop() {
        Serial.println("車が止まります");
    }
};この Car クラスは、まだ「車の設計図」にすぎません。
インスタンス(オブジェクト)とは?
クラスをもとにして、実際に使える「実体」を作ったものがインスタンス(オブジェクト) です。
たとえば、「赤い車」と「青い車」を作るには、クラスをもとにインスタンスを生成します。
Car myCar;  // インスタンス(オブジェクト)を作成
myCar.color = "赤";  // 色を設定
myCar.run();  // 走るこのように、クラスをもとにオブジェクトを作ることで、実際にデータを扱ったり、機能を利用できます。
メソッドとは?
クラスのインスタンスに関連する関数のことをメソッドと呼びます。
たとえば、上記のコードでは、Car クラスのインスタンスに関連する関数run()がメソッドです。
MeDCMotorとは?
MeDCMotorは、mBotのDCモーターを制御するためのクラスです。
このクラスは、Makeblockのライブラリ(MeDCMotor.h)に含まれており、mBotに搭載された2つのDCモーターを簡単に操作することができます。
class MeDCMotor : public MePort
{
public:
  MeDCMotor(void);
  MeDCMotor(uint8_t port);
  void setpin(uint8_t dir_pin,uint8_t pwm_pin);
  void reset(uint8_t port);
  void reset(uint8_t port, uint8_t slot);
  void run(int16_t speed);
  void stop(void);
private:
  volatile uint8_t dc_dir_pin;
  volatile uint8_t dc_pwm_pin;
  int16_t  last_speed;
};MotorL(M1)とは?
MeDCMotor MotorL(M1);このコードは、mBotの左側のモーター(M1)を制御するためのインスタンス(オブジェクト)を作成しています。
MeDCMoterはクラス(設計図)MoterLはそのクラスから作られたインスタンス(オブジェクト)M1はmBotの左側モーターのポート番号(引数)
MeDCMotor MotorL(M1);  // 左モーターを制御するオブジェクトを作成
MotorL.run(100);       // 左モーターを100の速度で回転つまり、このコードを書くことで mBot の左モーターを制御できるオブジェクトが生成され、run() メソッドを使って動かせるようになるというわけです。
また、速度の設定は、-255 ~ 255が設定可能で、回転速度と方向を制御することができます。
例えば、以下のコードでは、左モーターを最大速度で回転させています。
MoterL.run(255);  // 最大速度で回転逆に、負の値を指定すると、モーターが逆回転します。
MoterL.run(-255);  // 最大速度で逆転左右のモーターで考慮すべきこと
mBot には2つのモーターがあり、mBotを前進させる際は、それぞれ次のように設定します。
MotorL.run(-100);  // M1モーターを前進
MotorR.run(100);   // M2モーターを前進mBotの左右のモーターは、左右対称に取り付けられているため、モーターを同一方向に回転させると、タイヤの回転はそれぞれ逆方向に回転することになります。

そのため、mBotを前進させる場合は、左モーターにマイナスの速度設定、右モーターにプラスの速度設定をする必要があります。
mBotの基本的なモーター制御プログラム
以下のコードは、mBotを前進・後退・左旋回・右旋回・停止させる基本プログラムです。
#include <MeMCore.h>
MeDCMotor MoterL(M1);
MeDCMotor MoterR(M2);
void setup() {
}
void loop() {
    // 前進
    MoterL.run(-100);
    MoterR.run(100);
    delay(2000);
    
    // 後退
    MoterL.run(100);
    MoterR.run(-100);
    delay(2000);
    
    // 左旋回
    MoterL.run(-100);
    MoterR.run(-100);
    delay(1000);
    
    // 右旋回
    MoterL.run(100);
    MoterR.run(100);
    delay(1000);
    
    // 停止
    MoterL.run(0);
    MoterR.run(0);
    delay(2000);
}まとめ
今回は、mBotのモーターを制御する基本を学びました。
また、クラスとインスタンスの概念についても説明し、MeDCMotor leftMotor(M1); の意味を解説しました。
モーターの制御は、mBotを自在に動かすための基礎となる重要な技術です。
これを理解することで、より複雑な動作や応用的なプログラムにも対応できるようになります。
次回は、mBotに搭載されたブザーを使い、音楽を流す方法を学びます。
mBlockを使ったmBotのプログラミング方法を丁寧に解説していておススメです。
mBotを使用した拡張的な遊びは『mBotでものづくりをはじめよう』が参考になります。mBotのパーツを段ボールと組み合わせてオリジナルのロボットを作るといったような拡張的な遊びが楽しめます。

  
  
  
  


					
					

Arduino IDEからmBotへ書き込みして、動作を確認してみましょう。