圧電スピーカーでオルゴールを作ろう

0
3122

関数“tone”を使うと圧電スピーカーから音を出すことができるので、オルゴールを作ってみました。

圧電スピーカーの周波数特性には色々なものがあるので、事前に確認しておきましょう。

今回必要な部品

  • Arduino × 1
  • USBケーブル( Aコネクタ – Bコネクタ )× 1
  • ミニブレットボード × 1
  • 圧電スピーカー × 1
  • ジャンプワイヤー × 2

回路図

取りあえず、関数“tone”を使って圧電スピーカーを鳴らしてみます。関数“tone”は、引数として「出力ピン番号」,「出力周波数」,「出力時間(ミリ秒)」を指定できます。出力は、2 ~ 12番ピンに接続してください。

スケッチ(その1)

void setup() {
    tone(12, 440, 3000) ;
}

void loop() {

}

音を出すのは書き込み後とArduinoのリセットボタンを押したときだけでいいので、処理はsetupに記述し、loopは空のままにしました。音は、調律に用いる音叉と同じ440Hzで、四分音符=80の場合の全音符と同じ60秒 ÷ 80 × 4= 3000ミリ秒で出力しました。

それでは、オルゴールを作ってみましょう。

スケッチ(その2)

void setup() {
    tone(12, 330) ; // 12番ピンにミ(330Hz)を出力する
    delay(750) ; // 四分音符(750ミリ秒)
    tone(12, 392) ;
    delay(750) ;
    tone(12, 440) ;
    delay(750) ;
    tone(12, 392) ;
    delay(750) ;
    tone(12, 330) ;
    delay(750) ;
    tone(12, 392) ;
    delay(750) ;
    tone(12, 523) ;
    delay(730) ;
    noTone(12) ; // 12番ピンの出力を停止する
    delay(20) ; // そのまま20ミリ秒待機する
    tone(12, 523) ;
    delay(750) ;
    tone(12, 440) ;
    delay(730) ;
    noTone(12) ;
    delay(20) ;
    tone(12, 440) ;
    delay(750) ;
    tone(12, 392) ;
    delay(750) ;
    tone(12, 330) ;
    delay(750) ;
    tone(12, 262) ;
    delay(750) ;
    tone(12, 294) ;
    delay(750) ;
    tone(12, 330) ;
    delay(750) ;
    noTone(12) ;
}

void loop() {

}

「春の小川」の楽譜通りに関数“tone”の引数で音程を記述しました。出力時間を“tone”の引数として記述すると後に続く音が重なってメロディーにならなかったので、出力時間は関数“delay”を使いました。それと同じ音程の音符が続くときは、間に関数“noTone”を挟んで20ミリ秒出力を止めるのと併せて、その前の音符を20ミリ秒短くし、テンポがずれないようにしています。

このスケッチを書き込んだ後は、リセットボタンを押す度にこのメロディーが流れます。