🔊

圧電スピーカーの使い方(ライブラリ未使用編)

2022/12/31に公開

これまで

圧電スピーカーを繋いでライブラリが用意してくれている tone() を使ったらすぐ音が出た。正直なところ何の達成感もない。そこで、より物理的な方法で、音が出る仕組みと発振するとはどういうことなのかを学ぶ。

単に 1 を出力してみる

void setup() {
  pinMode(9, OUTPUT);
}

void loop() {
  digitalWrite(9, HIGH);
}

これで起動時にノイズ(雑音)が一瞬聞こえる。スピーカー内の薄い鉄板の面が一方向に反ったときのノイズと思われる。一方向に反ったあと同じ方向には反れないので HIGH を出力し続けてもノイズはでない。もし逆方向に反らせれば再びノイズがでるんだろうか?

1 と 0 を交互に出力してみる

digitalWrite(9, HIGH);
delay(1000);

digitalWrite(9, LOW);
delay(1000);

繰り返しノイズを出し続けることに成功。1秒毎に聞こえるようになった。シンセサイザーなどに内蔵されているクリック音としてそのまま使えそう。ここで間隔を縮めてみるとどうなるだろう?

短い間隔で 1 と 0 を交互に出力してみる

digitalWrite(9, HIGH);
delay(1);

digitalWrite(9, LOW);
delay(1);

1ms 毎に繰り返すとノイズから音色になった。言葉で書くと「ブー」に近い。もっと短くするとどうなるだろう?

もっと短い間隔で 1 と 0 を交互に出力してみる

digitalWrite(9, HIGH);
delayMicroseconds(500);

digitalWrite(9, LOW);
delayMicroseconds(500);

「ブー」が「ピー」になった。ここまでくると元がノイズの連続だったとは想像つかない。

まとめ

  • 発振
    • 0 から 1 のタイミングでノイズが出る
    • 1 から 0 のタイミングでノイズが出る
    • 発振とはその 1 と 0 を交互に出力し続けるだけの話だった
  • 音色と音程
    • 圧電スピーカーは下敷きみたいなもの
    • ぺっこんぺっこんをゆっくり行うとそれは定期的に繰り返されるノイズでしかないが、超高速で繰り返すと人間は音程のある音色として認識するようになる
    • 1 0 の間隔で音程が変わる

Discussion