Arduino電子工作Arduino電子工作

Arduinoで簡易電子ピアノを作ってみた

Arduinoで簡易的な電子ピアノ

前回は、Arduinoで音階に合わせてLEDを光らせてみました。
今回は、スイッチとスピーカーを使って簡易的な電子ピアノぽいのを作ってみます。

Arduinoで簡易的な電子ピアノを作る

スイッチを押すとピアノの白鍵の音程が鳴る簡易的な電子ピアノを作ります。

また、左端の白いスイッチを押すと1オクターブ高く鳴り、
1オクターブ上に鳴る状態の時は、LEDが点灯しているものを作りたいと思います。

使用した部品

  • Arduino本体
  • ブレッドボード
  • 圧電スピーカー(パッシブブザー)
  • スイッチ
  • 抵抗 10kΩ
  • LED

スイッチは今回は8個使います。
Amazon等でセットでまとめて買うとお得です。

回路図

回路図

スイッチはプルアップ抵抗で接続し、抵抗は10kΩを使用しました。

上の回路図では、ブレッドボードが1つだけですが、自分はブレッドボードが1つだけだと足りなかったのでもう1つ小さいブレッドボードを用意し、小さいブレッドボードにオクターブ上にするスイッチとLEDを接続しました。

サンプルコード 簡易的な電子ピアノ

スイッチを押すと白鍵の音程が鳴るサンプルコードです。

//***************************************/
// Arduinoで簡易的な電子ピアノ
//***************************************/

//音程を定義する
#define C4 262 //ド
#define D4 294 //レ
#define E4 330 //ミ 
#define F4 349 //ファ
#define G4 393 //ソ
#define A4 440 //ラ
#define B4 494 //シ

const int Speaker = 2; //スピーカーが接続されているピン
const int LED = 4; //LEDが接続されているピン
const int OctSw = 12; //オクターブスイッチが接続されているピン

int val = 0; //Octスイッチの状態を記憶する変数
int old_val = 0; //valの前の値を保存する変数
int state = 0; //LEDの状態orオクターブ上か(0ならオフ、1ならオンでオクターブ上)

void setup() {
  pinMode(LED, OUTPUT);
  pinMode(Speaker, OUTPUT);
  for (int i = 5; i <= 12; i++) {
    pinMode(i, INPUT);
    digitalWrite(i, HIGH);
  }
}

void loop() {
  int t = 0; //音程の初期化
  val = digitalRead(OctSw); //OctSwの入力を読み取り、valに新鮮な値を保存

  if ((val == LOW)  && (old_val == HIGH)) {
    state = 1 - state;
    delay(10);
  }
  old_val = val; //valは古くなったので、保管しておく

  //スイッチを押すとピアノの白鍵の音程が鳴る条件式
  if (digitalRead(11) == LOW) {
    if (state == 1) {
      t = C4 * 2;
    } else {
      t = C4;
    }
  }

  if (digitalRead(10) == LOW) {
    if (state == 1) {
      t = D4 * 2;
    } else {
      t = D4;
    }
  }

  if (digitalRead(9) == LOW) {
    if (state == 1) {
      t = E4 * 2;
    } else {
      t = E4;
    }
  }

  if (digitalRead(8) == LOW) {
    if (state == 1) {
      t = F4 * 2;
    } else {
      t = F4;
    }
  }

  if (digitalRead(7) == LOW) {
    if (state == 1) {
      t = G4 * 2;
    } else {
      t = G4;
    }
  }

  if (digitalRead(6) == LOW) {
    if (state == 1) {
      t = A4 * 2;
    } else {
      t = A4;
    }
  }

  if (digitalRead(5) == LOW) {
    if (state == 1) {
      t = B4 * 2;
    } else {
      t = B4;
    }
  }

  if (state == 1) {
    digitalWrite(LED, HIGH);
  } else {
    digitalWrite(LED, LOW);
  }

  if (t != 0) {
    tone(Speaker, t, 500);
  } else {
    noTone(10);
  }
}

stateが1のときには、LEDが光り、オクターブ上の音が鳴ります。
また、定義したC4~B4のオクターブ上の音は、下の音階と周波数の関係の表よりC4~B4を2倍すればオクターブ上の音になります。

octCC#DD#EFF#GG#AA#B
3131139147156165175185196208220233247
4262277294311330349370392415440466494
5523554587622659698740784831880932988

動作確認

Arduinoで簡易的な電子ピアノを作ってみた

動画よりスイッチを押すとピアノの白鍵の音程が鳴るのが分かると思います。

後半は、ビートルズのLet it beを弾いてみたつもりだったんですが、スマホを片手にして撮影してたので難しかったですw

まとめ

今回は、Arduinoで簡易的な電子ピアノを作ってみました。
白鍵だけの音程ですが自分で作ってみると楽しかったので、皆さんも是非作ってみてください。

参考にしたサイト

コメント

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