今回は、mBotプログラミングシリーズ(Arduino編)の第2回です。
mBotにはブザーが搭載されており、プログラムを使ってさまざまな音を鳴らすことができます。
今回は、Arduino IDEを使ってmBotのブザーを制御し、簡単なメロディを演奏する方法を学びます
全講座の一覧はこちら
目標
- 音階の設定方法を理解する
 - mBotで音楽を演奏するプログラムを作成する。
 
Arduinoプログラムファイルの作成
ここでは、プログラムファイルをイチから作成していきます。
Arduino IDEを立ち上げ、ファイル -> 新規スケッチで真っ新なプロジェクトを用意しましょう。

mBotのブザー制御の基本
ブザーを鳴らすAPI
API(Application Programming Interface)は、ソフトウェアやハードウェアが外部のプログラムとやり取りをするためのインターフェース(接点)です。
簡単に言うと、『決められたルールに従って機能を利用するための仕組み』です。
mBotのArduinoライブラリを使用すると、mBotのモーター、LED、ブザー、センサーなどの各機能を簡単に利用できます。
Arduino IDEでは、以下の関数を使用することでmBotのブザーを制御できます。
MeBuzzer buzzer;        // ブザー制御用のインスタンス(オブジェクト)を作成する
buzzer.tone(300, 1000); // 指定した周波数と時間でブザーを鳴らすAPIを利用した簡単なプログラム
APIを用いて、次のような簡単なプログラムが作成できます。
ブザー音の周波数と時間を指定して音を鳴らします。
#include <MeMCore.h>
MeBuzzer buzzer;
void setup() {}
void loop() {
    buzzer.tone(261.6, 500); // ド (C4) を 500ms 再生
    delay(600);              // 600ms待つ
}クラスとインスタンス(オブジェクト)について
このコードを理解するためには、「クラス」と「インスタンス(オブジェクト)」の概念を知ることが重要です。
クラスとインスタンス(オブジェクト)については、こちらで説明しています。
MeBuzzerとは?
MeBuzzerは、mBotのブザーを制御するためのクラスです。
このクラスは、Makeblockのライブラリ(MeBuzzer.h)に含まれており、mBotのブザーを簡単に操作することができます。
class MeBuzzer : public MePort
{
public:
  MeBuzzer();
  MeBuzzer(uint8_t port);
  MeBuzzer(uint8_t port, uint8_t slot);
  void setpin(int pin);
  void tone(int pin, uint16_t frequency, uint32_t duration);
  void tone(uint16_t frequency, uint32_t duration = 0);
  void noTone(int pin);
  void noTone();
};buzzerとは?
MeBuzzer buzzer;このコードは、mBotのブザーを制御するためのインスタンス(オブジェクト)を作成しています。
MeBuzzerはクラス(設計図)buzzerはそのクラスから作られたインスタンス(オブジェクト)
MeBuzzer buzzer;            // ブザーを制御するオブジェクトを作成
buzzer.tone(261.6, 500);    // ド (C4) を 500ms 再生つまり、このコードを書くことで mBot のブザーを制御できるオブジェクトが生成され、tone() メソッドを使ってブザーを鳴らすことができます。
tone() メソッドは、第一引数がブザー音の周波数、第二引数がブザー音の出力時間(ms)です。
先述のコードの場合、周波数261.6Hz(=ド)の音階を500ms鳴らすプログラムとなります。
音階と周波数の関係
tone() 関数に渡す数値(周波数)を変更することで、異なる音階を鳴らすことができます。
例えば、以下のような周波数が一般的な音階に対応しています。
| 鍵盤の音 | 国際式表記 | 周波数 | 
|---|---|---|
| シ | B3 | 246.9 | 
| ド | C4 | 261.6 | 
| ド# | C#4 | 277.2 | 
| ㇾ | D4 | 293.7 | 
| ㇾ# | D#4 | 311.2 | 
| ミ | E4 | 329.7 | 
| ファ | F4 | 349.2 | 
| ファ# | F#4 | 370 | 
| ソ | G4 | 392 | 
| ソ# | G#4 | 415.4 | 
| ラ | A4 | 440 | 
| ラ# | A#4 | 466.2 | 
| シ | B4 | 493.9 | 
| ド | C5 | 523.3 | 
mBotの基本的なブザー制御プログラム
以下のコードは、『ドレミファソラシド』を鳴らす基本プログラムです。
#include <MeMCore.h>
MeBuzzer buzzer;
void setup() {
    buzzer.tone(261.6, 500); // ド (C4) を 500ms 再生
    buzzer.tone(293.7, 500); // レ (D4) を 500ms 再生
    buzzer.tone(329.7, 500); // ミ (E4) を 500ms 再生
    buzzer.tone(349.2, 500); // ファ (F4) を 500ms 再生
    buzzer.tone(392.0, 500); // ソ (G4) を 500ms 再生
    buzzer.tone(440.0, 500); // ラ (A4) を 500ms 再生
    buzzer.tone(493.9, 500); // シ (B4) を 500ms 再生
    buzzer.tone(523.3, 500); // ド (C5) を 500ms 再生
}
void loop() {
    // ループ処理は不要
}まとめ
今回は、mBotのブザーを使って音を鳴らす方法を学びました。
Arduinoのtone()関数を活用することで、自由に周波数を指定し、さまざまな音を出力できます。
今回の基本的なコードを応用し、独自のメロディを作ることにも挑戦してみましょう!
次回は、LEDライトを制御する方法について学びます。
mBotのLEDを使って、点灯や点滅をプログラムしてみましょう。
mBlockを使ったmBotのプログラミング方法を丁寧に解説していておススメです。
mBotを使用した拡張的な遊びは『mBotでものづくりをはじめよう』が参考になります。mBotのパーツを段ボールと組み合わせてオリジナルのロボットを作るといったような拡張的な遊びが楽しめます。

  
  
  
  


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