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倍すればオクターブ上の音になります。

oct C C# D D# E F F# G G# A A# B
3 131 139 147 156 165 175 185 196 208 220 233 247
4 262 277 294 311 330 349 370 392 415 440 466 494
5 523 554 587 622 659 698 740 784 831 880 932 988

動作確認

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

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

まとめ

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

Arduinoのおすすめ本はこちら↓

電子工作のおすすめ本はこちら↓

参考にしたサイト

コメント

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