プロジェクト8 音楽演奏者
1. 説明
このプロジェクトでは、パワーアンプスピーカーを使って音楽を再生します。このスピーカーは単純な曲を演奏するだけでなく、あなたの望む演奏も可能です。したがって、プロジェクト内で他の面白いコードをプログラムして、素晴らしい学習成果を達成できます。
2. 動作原理

電気信号はRP1のピン1から入力されます(信号の強度を調整し、音量にもなります)。
C4でカップリングされ、R5を通過した後、信号は8002BのIN-ピンに到達し、そこで演算増幅されてBEE1スピーカーに出力されます。
Cにおける周波数比較表
音符 |
周波数(Hz) |
音符 |
周波数(Hz) |
音符 |
周波数(Hz) |
|---|---|---|---|---|---|
フラット 1 ド |
262 |
ナチュラル 1 ド |
523 |
シャープ 1 ド |
1047 |
フラット 2 レ |
294 |
ナチュラル 2 レ |
587 |
シャープ 2 レ |
1175 |
フラット 3 ミ |
330 |
ナチュラル 3 ミ |
659 |
シャープ 3 ミ |
1319 |
フラット 4 ファ |
349 |
ナチュラル 4 ファ |
698 |
シャープ 4 ファ |
1397 |
フラット 5 ソ |
392 |
ナチュラル 5 ソ |
784 |
シャープ 5 ソ |
1568 |
フラット 6 ラ |
440 |
ナチュラル 6 ラ |
880 |
シャープ 6 ラ |
1760 |
フラット 7 シ |
494 |
ナチュラル 7 シ |
988 |
シャープ 7 シ |
1967 |
3. 配線図

4. テストコード
/*
keyestudio ESP32 Inventor Learning Kit
Project 8.1 Music Performer
http://www.keyestudio.com
*/
int beeppin = 5; //Define the speaker pin to IO5
void setup()
{
pinMode(beeppin, OUTPUT);//Define the IO5 port to output mode
}
void loop()
{
tone(beeppin, 262);//Flat DO plays 500ms
delay(500);
tone(beeppin, 294);//Flat Re plays 500ms
delay(500);
tone(beeppin, 330);//Flat Mi plays 500ms
delay(500);
tone(beeppin, 349);//Flat Fa plays 500ms
delay(500);
tone(beeppin, 392);//Flat So plays 500ms
delay(500);
tone(beeppin, 440);//Flat La plays 500ms
delay(500);
tone(beeppin, 494);//Flat Si plays 500ms
delay(500);
noTone(beeppin);//Stop for 1s
delay(1000);
}
5. テスト結果
コードをアップロードして電源を入れると、アンプは対応する周波数の音階:ド、レ、ミ、ファ、ソ、ラ、シを繰り返し演奏します。
パワーアンプの音量調整:
スピーカーの隣にポテンショメーターがあります。これを回すことでスピーカーの音量を調整できます。(注意:ポテンショメーターを壊さないように適切な力で調整してください)

6. 知識拡張
誕生日の歌を演奏してみましょう。配線は変更しません。
数字譜:

フラット、ナチュラル、シャープの比較図

/*
keyestudio ESP32 Inventor Learning Kit
Project 8.2 Music Performer
http://www.keyestudio.com
*/
int beeppin = 5; //Define the speaker pin to IO5
// do、re、mi、fa、so、la、si
int doremi[] = {262, 294, 330, 370, 392, 440, 494, //Falt 0-6
523, 587, 659, 698, 784, 880, 988, //Natural 7-13
1047,1175,1319,1397,1568,1760,1967}; //Sharp 14-20
int happybirthday[] = {5,5,6,5,8,7,5,5,6,5,9,8,5,5,12,10,8,7,6,11,11,10,8,9,8}; //Find the number in arrey doremi[] according to the numbered musical notation
int meter[] = {1,1,2,2,2,4, 1,1,2,2,2,4, 1,1,2,2,2,2,2, 1,1,2,2,2,4}; // Beats
void setup()
{
pinMode(beeppin, OUTPUT); //Set IO5 pin to output mode
}
void loop()
{
for( int i = 0 ; i <= 24 ;i++)
{ //i<=24, because there are only 24 tones in this song
//Use tone()function to generate a waveform in "frequency"
tone(beeppin, doremi[happybirthday[i] - 1]);
delay(meter[i] * 200); //Wait for 1000ms
noTone(beeppin);//Stop singing
}
}