今回は、mBotプログラミングシリーズ(Arduino編)の第6回です。
この回では、mBotの光センサーを活用する方法を学びます。
mBotには光センサーが搭載されており、周囲の明るさを測定することができます。
今回は、この光センサーを使って環境の明るさを取得し、条件に応じた動作をプログラムする方法を学びます。
全講座の一覧はこちら
目標
- 光センサーの動作原理を理解する
- 光センサーを用いたプログラムを作成する
Arduinoプログラムファイルの作成
ここでは、プログラムファイルをイチから作成していきます。
Arduino IDEを立ち上げ、ファイル -> 新規スケッチで真っ新なプロジェクトを用意しましょう。

mBotの光センサーの基本
光センサーとは
mBotのカバーを外すと、基板上に『Light Sensor』と書かれたところがあります。
これが光センサーです。

光センサーは、明るさを測定することができます。
明るさを0~1023の範囲で測定します。(0が暗く、1023が明るい)
光センサーに関するAPI
API(Application Programming Interface)は、ソフトウェアやハードウェアが外部のプログラムとやり取りをするためのインターフェース(接点)です。
簡単に言うと、『決められたルールに従って機能を利用するための仕組み』です。
mBotのArduinoライブラリを使用すると、mBotのモーター、LED、ブザー、センサーなどの各機能を簡単に利用できます。
mBotの光センサーは MeLightSensor
クラスを使って制御します。MeLightSensor
はmBotの光センサーを制御するためのクラスで、read()
メソッドを使用して光センサーの値を取得します。
光センサー値の読み出しには、以下の関数を使用します。
MeLightSensor lightSensor(PORT_6); // 光センサー用のインスタンス(オブジェクト)を作成する
int lightValue = lightSensor.read(); // 光センサーの値を取得
APIを利用した簡単なプログラム
APIを用いて、次のような簡単なプログラムが作成できます。
光センサーの値を読み出して、明るさに応じたブザー音を出します。
#include <MeMCore.h>
MeLightSensor lightSensor(PORT_6); // 光センサーのオブジェクトを作成
MeBuzzer buzzer; // ブザーのオブジェクトを作成
void setup() {
int lightValue = lightSensor.read(); // 光センサーの値をlightValueに格納する
buzzer.tone(lightValue , 500); // 光センサーの値の周波数を 500ms 再生
}
void loop() {
// ループ処理は不要
}
クラスとインスタンス(オブジェクト)について
このコードを理解するためには、「クラス」と「インスタンス(オブジェクト)」の概念を知ることが重要です。
クラスとインスタンス(オブジェクト)については、こちらで説明しています。
MeLightSensorとは?
は、mBotの光センサーを制御するためのクラスです。MeLightSensor
このクラスは、Makeblockのライブラリ(MeLightSensor.h
)に含まれており、mBotの光センサーの値を読み出すことができます。
class MeLightSensor : public MePort
{
public:
MeLightSensor(void);
MeLightSensor(uint8_t port);
void setpin(uint8_t ledPin, uint8_t sensorPin);
int16_t read(void);
void lightOn(void);
void lightOff(void);
private:
uint8_t _ledPin;
uint8_t _sensorPin;
};
lightSensor(PORT_6)とは?
MeLightSensor lightSensor(PORT_6);
このコードは、mBotの光センサーを制御するためのインスタンス(オブジェクト)を作成しています。
MeLightSensor
はクラス(設計図)lightSensor(PORT_6)
はそのクラスから作られたインスタンス(オブジェクト)PORT_6
はmBotの光センサーが接続されるポート
MeLightSensor lightSensor(PORT_6); // 光センサーを制御するインスタンス(オブジェクト)を作成
int lightValue = lightSensor.read(); // 光センサーの値を読み出して変数に格納
このコードを書くことで、
①mBotの光センサーを制御できるオブジェクトが生成され、
②read()
メソッドを使って光センサーの値を読み出すことができます。
mBotの基本的な光センサー制御プログラム
以下のコードは、『周囲の明るさに応じてmBotを動作させる』プログラムです。
#include <MeMCore.h>
MeLightSensor lightSensor(PORT_6);
MeDCMotor MoterL(M1);
MeDCMotor MoterR(M2);
int lightValue;
int speed = 150;
void setup() {}
void loop() {
lightValue = lightSensor.read(); // 光センサーの値を取得
if(lightValue >= 400){ // 明るい場合はmBot前進
MoterL.run(-speed);
MoterR.run(speed);
}
else{ // 暗い場合はmBot停止
MoterL.stop();
MoterR.stop();
}
}
光センサーの値を読み出し、400以上(明るい)場合はmBotを前進、400未満(暗い)場合はmBotを停止させます。
mBotにライトを当てると前進する、面白い動作をするはずです。
まとめ
今回は、光センサーを使ったmBotの基本的なプログラムを学びました。
光センサーを応用することで、環境に応じたmBotの動作をプログラムすることが可能になります。
次回は、超音波センサーを使って障害物を回避する方法を学びます。
mBlockを使ったmBotのプログラミング方法を丁寧に解説していておススメです。
mBotを使用した拡張的な遊びは『mBotでものづくりをはじめよう』が参考になります。mBotのパーツを段ボールと組み合わせてオリジナルのロボットを作るといったような拡張的な遊びが楽しめます。
Arduino IDEからmBotへ書き込みして、動作を確認してみましょう。