■周波数
PWMとは、Pulse Width Modulationの略で、波長のような制御を行います。
細かい部分で見ると、ONとOFFを一定間隔で繰り返しているだけです。
ここで周波数といった名前が登場しますが、ONの長さの事を指します。
ブザーにとっての周波数とは、ドレミの音階を指定することができることになります。
ESP32では、PWM制御の関数が用意されております。(ledcSetup、ledcAttachPin、ledcWriteTone)
■音階
音階は、「音を高低の順番に並べたもの」あり、音の高低は周波数で表します。
音は、周波数が半分になると1オクターブ低くなり、周波数が倍になると1オクターブ高くなります。
1オクターブには12の音があり(①ド、②ド#(レ♭)、③レ、④レ#(ミ♭)、⑤ミ、⑥ファ、⑦ファ#(ソ♭)、⑧ソ、⑨ソ#(ラ♭)、⑩ラ、⑪ラ#(シ♭)、⑫シ)、
その12の音は、隣り合う半音間での周波数の比率が同じです。(音階に対して等比数列的に増える)
音階と周波数の関係は下記サイトをご参照ください。
■配線図
■プログラム
#define BUZZER_PIN 2 // ブザーのピン番号#define BUZZER_CHANEL 0 // ブザーのチャネル番号#define BEAT 250 // 音の長さ(0.25秒間隔)#define G3 196 // ソ3#define C4 261.6 // ド4 1#define D4 293.665 // レ4 2#define E4 329.63 // ミ4 3#define F4 349.228 // ファ4 4#define G4 391.995 // ソ4 5#define A4 440 // ラ4 6#define B4 493.883 // シ4 7#define C5 523.251 // ド5 ivoid playTone(double tone, int num) {ledcWriteTone(BUZZER_CHANEL, tone);delay(BEAT * num);}void playTone(long tone) {playTone(tone, 2);}void playMusic() {// 1 2 3 1 | 1 2 3 1 | 3 4 5 - | 3 4 5 - |// 56543 1 | 56543 1 | 3 5 1 - | 3 5 1 -playTone(C4);playTone(D4);playTone(E4);playTone(C4);playTone(C4);playTone(D4);playTone(E4);playTone(C4);playTone(E4);playTone(F4);playTone(G4, 4);playTone(E4);playTone(F4);playTone(G4, 4);playTone(G4, 1);playTone(A4, 1);playTone(G4, 1);playTone(F4, 1);playTone(E4);playTone(C4);playTone(G4, 1);playTone(A4, 1);playTone(G4, 1);playTone(F4, 1);playTone(E4);playTone(C4);playTone(E4);playTone(G3);playTone(C4, 4);playTone(E4);playTone(G3);playTone(C4, 4);}void setup() {ledcSetup(BUZZER_CHANEL, 12000, 8);ledcAttachPin(BUZZER_PIN, BUZZER_CHANEL);}void loop() {playMusic();delay(1000);}










