プロジェクト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
  }
}