今回は、mBotプログラミングシリーズ(Arduino編)の第8回です。
この回では、ライントレースセンサーを活用して、ラインに沿って自動運転するプログラムを作成します。
ライントレースの動きは、倉庫内の仕分けロボットや配送ロボットの仕組みにも似ており、実社会での応用例をイメージしながら学ぶことができます。
初心者でも無理なく取り組めるよう、具体的な手順をわかりやすく解説しますので、ぜひ最後までお付き合いください!
全講座の一覧はこちら
目標
- ライントレースセンサーの仕組みを理解する。
- ライントレースセンサーに関するAPIを学ぶ。
- ラインを検知して自動運転するプログラムを作成する。
Arduinoプログラムファイルの作成
ここでは、プログラムファイルをイチから作成していきます。
Arduino IDEを立ち上げ、ファイル -> 新規スケッチで真っ新なプロジェクトを用意しましょう。

mBotのライントレースセンサーの基本
ライントレースとは
ライントレースとは、地面に描かれたライン(通常は黒や白)をセンサーを使って検知し、そのラインに沿ってロボットを走らせる技術です。
mBotのような教育用ロボット、自動車の高速道路での自動運転や、物流システムの自動化などの分野で広く利用されています。
ライントレースセンサーとは
ライントレースセンサーは、地面の色の違いを検知するセンサーです。
mBotには、白と黒を識別できるセンサーが2つ搭載されており、ラインの左右位置を判定できます。

mBot左下に位置するセンサーが『sensor1』、右下が『sensor2』となります。
また、各センサーには素子が2つ付いています。
1つはLEDライト、もう一つがフォトダイオード(光センサー)です。
ライントレースセンサーの仕組みを次に示します。


- LEDライトの光が地面に当たる
- 光が反射する量は、「白い地面=多い」「黒い地面=少ない」
- 光センサーで検出する光の量に応じて、『白』または『黒』と判断する
ライントレースセンサーに関するAPI
API(Application Programming Interface)は、ソフトウェアやハードウェアが外部のプログラムとやり取りをするためのインターフェース(接点)です。
簡単に言うと、『決められたルールに従って機能を利用するための仕組み』です。
mBotのArduinoライブラリを使用すると、mBotのモーター、LED、ブザー、センサーなどの各機能を簡単に利用できます。
mBotのライントレースセンサーを使用するためには、MeLineFollower
クラスを利用します。
このクラスを使うことで、ライントレースセンサーの値を簡単に取得できます。
ライントレースセンサーの値の読み出しには、以下の関数を使用します。
MeLineFollower line(PORT_2); // ライントレースセンサー用のインスタンス(オブジェクト)を作成する
uint8_t val = line.readSensors(); // ライントレースセンサーの値を取得
読み出し値の意味は次の通りです。
センサー値 | 左センサー値 | 右センサー値 | 意味 |
---|---|---|---|
0 | 0 | 0 | 両方とも黒 |
1 | 0 | 1 | 左:黒 右:白 |
2 | 1 | 0 | 左:白 右:黒 |
3 | 1 | 1 | 両方とも白 |
各センサーの値は、黒の認識で『0』、白の認識で『1』です。
左右のセンサー値を0,1で並べて、2進数としてみた時の値が0~3となります。
2進数とは、0と1の2つの数字だけを使って数を表現する方法のことです。
コンピュータやデジタルシステムで使われる数値表現であり、非常に重要な概念です。
ここでは簡単に10進数と2進数の対応表を示します。
10進数 | 2進数 |
---|---|
0 | 000 |
1 | 001 |
2 | 010 |
3 | 011 |
4 | 100 |
5 | 101 |
APIを利用した簡単なプログラム
APIを用いて、次のような簡単なプログラムが作成できます。
ライントレースセンサーの値を読み出して、読み出し値に応じてLEDライトの色を変化させます。
#include <MeMCore.h>
MeLineFollower line(PORT_2); // ライントレースセンサーのオブジェクトを作成
MeRGBLed rgb(7,2); // LED制御用のオブジェクトを作成する
uint8_t val; // ライントレースセンサー読み出し値格納用変数
void setup() {}
void loop() {
val = line.readSensors(); // ライントレースセンサーの値をvalに格納する
if(val == 0){
rgb.setColor(0, 255, 0, 0); // 赤
rgb.show(); // 設定した色を反映する
}
else if(val == 1){
rgb.setColor(0, 0, 255, 0); // 緑
rgb.show(); // 設定した色を反映する
}
else if(val == 2){
rgb.setColor(0, 0, 0, 255); // 青
rgb.show(); // 設定した色を反映する
}
else{
rgb.setColor(0, 255, 255, 255); // 白
rgb.show(); // 設定した色を反映する
}
}
クラスとインスタンス(オブジェクト)について
このコードを理解するためには、「クラス」と「インスタンス(オブジェクト)」の概念を知ることが重要です。
クラスとインスタンス(オブジェクト)については、こちらで説明しています。
MeLineFollowerとは?
は、mBotのライントレースセンサーを制御するためのクラスです。MeLineFollower
このクラスは、Makeblockのライブラリ(MeLineFollower.h
)に含まれており、mBotのライントレースセンサーの値を読み出すことができます。
class MeLineFollower : public MePort
{
public:
MeLineFollower(void);
MeLineFollower(uint8_t port);
void setpin(uint8_t Sensor1,uint8_t Sensor2);
uint8_t readSensors(void);
bool readSensor1(void);
bool readSensor2(void);
private:
volatile uint8_t _Sensor1;
volatile uint8_t _Sensor2;
};
line(PORT_2)とは?
MeLineFollower line(PORT_2);
このコードは、mBotのライントレースセンサーを制御するためのインスタンス(オブジェクト)を作成しています。
MeLineFollower
はクラス(設計図)line(PORT_2)
はそのクラスから作られたインスタンス(オブジェクト)
はmBotのライントレースセンサーが接続されるポートPORT_2
MeLineFollower line(PORT_2); // ライントレースセンサーを制御するインスタンス(オブジェクト)を作成
uint8_t val = line.readSensors(); // ライントレースセンサーの値を読み出して変数に格納
このコードを書くことで、
①mBotのライントレースセンサーを制御できるオブジェクトが生成され、
②readSensors()
メソッドを使ってライントレースセンサーの値(0,1,2,3)を読み出すことができます。
mBotのライントレースセンサーを使った自動走行プログラム
以下のコードは、『ライントレースセンサーを使って自動走行させる』プログラムです。
#include <MeMCore.h>
MeLineFollower line(PORT_2); // ライントレースセンサーのオブジェクトを作成
MeDCMotor MoterL(M1);
MeDCMotor MoterR(M2);
uint8_t val; // ライントレースセンサー読み出し値格納用変数
int speed = 150;
void setup() {}
void loop() {
val = line.readSensors(); // ライントレースセンサーの値をvalに格納する
if(val == 0){ // 両方とも黒
MoterL.run(-speed); // 前進
MoterR.run(speed);
}
else if(val == 1){ // 左が黒、右が白
MoterL.run(speed); // 左回転
MoterR.run(speed);
}
else if(val == 2){ // 左が白、右が黒
MoterL.run(-speed); // 右回転
MoterR.run(-speed);
}
else{ // 両方とも白
MoterL.run(speed); // 後退
MoterR.run(-speed);
}
}
黒色のライン上を走行するようプログラムしています。
ライントレースセンサーの読み取り値から、現在の状態が「ライン上」「右に外れている」「左に外れている」「両方外れている」のどれであるかを確認して、mBotの動作を切り替えています。
まとめ
ライントレースセンサーを使った自動運転プログラムを作成することで、センサーとモーターの連携について深く学ぶことができます。
このような知識は、単なるロボットの操作にとどまらず、現実世界の様々な場面で応用する力となります。
さらに、今回学んだ技術は他のセンサーや新しいロジックとの組み合わせで、より複雑なプログラムを作成する土台になります。
次回は、赤外線センサーを使った協調制御プログラムを作成します。

mBlockを使ったmBotのプログラミング方法を丁寧に解説していておススメです。
mBotを使用した拡張的な遊びは『mBotでものづくりをはじめよう』が参考になります。mBotのパーツを段ボールと組み合わせてオリジナルのロボットを作るといったような拡張的な遊びが楽しめます。
Arduino IDEからmBotへ書き込みして、動作を確認してみましょう。