PR

【mBotプログラミング例①】mBotを制御しよう(Arduino編)|C言語

Arduino(C/C++)
この記事は約8分で読めます。

今回は、mBotプログラミングシリーズ(Arduino編)の第1回です。

この回では、mBotを実際に動かすための簡単なプログラムを作成します。
Arduino IDEを使って、mBotに「前進」「停止」「回転」といった基本的な動作を指示する方法を学びましょう。

目標

  • mBotのモーターを制御する方法を理解する
  • 前進後退左右旋回のプログラムを作成する

Arduinoプログラムファイルの作成

ここでは、プログラムファイルをイチから作成していきます。
Arduino IDEを立ち上げ、ファイル -> 新規スケッチで真っ新なプロジェクトを用意しましょう。

事前にmBotのArduinoライブラリを導入しておいてください。
ライブラリの導入に関しては、次の記事を参考にしてください。

mBotのモーター制御の基本

モーターを動かすAPI

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モーターを前進
}

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

クラスとインスタンス(オブジェクト)について

このコードを理解するためには、「クラス」と「インスタンス(オブジェクト)」の概念を知ることが重要です。

クラスとは?

クラスは 「設計図」 のようなものです。
たとえば、「車」というクラスを作ったとします。
車には「色」「速度」「メーカー」などの属性があり、「走る」「止まる」といった機能(メソッド)を持つことができます。

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);
}

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

まとめ

今回は、mBotのモーターを制御する基本を学びました。
また、クラスとインスタンスの概念についても説明し、MeDCMotor leftMotor(M1); の意味を解説しました。

モーターの制御は、mBotを自在に動かすための基礎となる重要な技術です。
これを理解することで、より複雑な動作や応用的なプログラムにも対応できるようになります。

次回は、mBotに搭載されたブザーを使い、音楽を流す方法を学びます。

mBlockを使ったmBotのプログラミング方法を丁寧に解説していておススメです。

mBotを使用した拡張的な遊びは『mBotでものづくりをはじめよう』が参考になります。mBotのパーツを段ボールと組み合わせてオリジナルのロボットを作るといったような拡張的な遊びが楽しめます。

タイトルとURLをコピーしました