2022年8月11日木曜日

PWMの理解ーーその2:ブザーで音楽

■周波数

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     i
void 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);
}

0 件のコメント:

コメントを投稿

シンプルロボットカーセットの使い方

■ マイコン :ESP3266-CH340  シンプルの案として、マイコンは安いESP8266-CH340開発ボードを選びました。該当マイコンもWIFI機能があります。  ドライバーダウンロード場所:    https://sparks.gogo.co.nz/ch340.html...