PR

【mBotプログラミング例⑥】光センサーを使ってみよう(Arduino編)

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

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

この回では、mBotの光センサーを活用する方法を学びます。
mBotには光センサーが搭載されており、周囲の明るさを測定することができます。
今回は、この光センサーを使って環境の明るさを取得し、条件に応じた動作をプログラムする方法を学びます。

目標

  • 光センサーの動作原理を理解する
  • 光センサーを用いたプログラムを作成する

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

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

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

mBotの光センサーの基本

光センサーとは

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

光センサーは、明るさを測定することができます。
明るさを0~1023の範囲で測定します。(0が暗く、1023が明るい)

光センサーに関するAPI

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() {
  // ループ処理は不要
}

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

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

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

クラスとインスタンス(オブジェクト)については、こちらで説明しています。

MeLightSensorとは?

MeLightSensorは、mBotの光センサーを制御するためのクラスです。
このクラスは、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();
  }
}

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

光センサーの値を読み出し、400以上(明るい)場合はmBotを前進、400未満(暗い)場合はmBotを停止させます。

mBotにライトを当てると前進する、面白い動作をするはずです。

まとめ

今回は、光センサーを使ったmBotの基本的なプログラムを学びました。
光センサーを応用することで、環境に応じたmBotの動作をプログラムすることが可能になります。

次回は、超音波センサーを使って障害物を回避する方法を学びます。

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

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

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