音を出してみる ~ 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

Your email address will not be published.

*



(Spamcheck Enabled)