音を出してみる ~ Arduino LV8 ~
圧電スピーカー(または圧電サウンダーとも呼ぶ)を使って音を出してみる。
ArduinoのどれかのデジタルピンとGNDの間に圧電スピーカーを接続するだけの簡単な回路。
ピーと音が鳴るだけだが、圧電スピーカーを使用すると簡単に音を出せる。
GNDと9番ピンの間に圧電スピーカーを配置するだけ。
【 必要な部品 】
- 圧電スピーカー
- ジャンパワイヤー 2本
- Arduino Uno
【 スケッチ 】
#define PIEZO 9
// 遅延時間
#define DELAY_TIME 1
void setup() {
pinMode(PIEZO, OUTPUT);
}
void loop() {
digitalWrite(PIEZO, HIGH);
delay(DELAY_TIME);
digitalWrite(PIEZO, LOW);
delay(DELAY_TIME);
}
音=振動 なのですばやくON、OFFを繰り返すと圧電スピーカーを使って振動を作り出すことが出来るのだ。
1Loop中にdelay(1)が2回繰り返されているので、波形は以下のようになっている。

2ミリ秒の周期の波形だ。これを周波数に直すと以下になる。f=1/T (f:周波数、T:周期)
f = 1 / 0.002 = 500(HZ)
delay()による時間はあまり正確ではないので、このスケッチだと約500HZの音が出ている事になる。(delay(2)にすると半分の250HZになる)
先の例では、delay()を使っていたため、いちばん高い周波数でも500HZまでしか作れなかった。より高い周波数を出すには、delayMicrosecondsを使えば良い。
先のスケッチの数値を少し変更&delay()をdelayMicrosecondsにしただけだ。
#define PIEZO 9
// 遅延時間
#define DELAY_TIME 500
void setup() {
pinMode(PIEZO, OUTPUT);
}
void loop() {
digitalWrite(PIEZO, HIGH);
delayMicroseconds(DELAY_TIME);
digitalWrite(PIEZO, LOW);
delayMicroseconds(DELAY_TIME);
}
1Loop中にdelayMicroseconds(500)が2回繰り返されている。計算方法は、f=1/T (f:周波数、T:周期) なので以下のようになる。
f = 1 / 0.001 = 1000(HZ)
1000HZ = 1KHZ の周波数を出している事になる。
ちょっと工夫してみる。
ループ処理で何回か処理を繰り返し音を変えてみる。
#define PIEZO 9
// 遅延時間
#define DELAY_TIME1 400
#define DELAY_TIME2 500
void setup() {
pinMode(PIEZO, OUTPUT);
}
void loop() {
int i;
for (i=0; i<400; i++) {
digitalWrite(PIEZO, HIGH);
delayMicroseconds(DELAY_TIME1);
digitalWrite(PIEZO, LOW);
delayMicroseconds(DELAY_TIME1);
}
for (i=0; i<200; i++) {
digitalWrite(PIEZO, HIGH);
delayMicroseconds(DELAY_TIME2);
digitalWrite(PIEZO, LOW);
delayMicroseconds(DELAY_TIME2);
}
}


Leave a comment