아두이노 악보 코드 - adu-ino agbo kodeu

 아두이노로 반짝반짝 작은별 멜로디 연주하는 방법.

전자 회로 구성은 아주 간단합니다.

아래 그림처럼 부저의 양(+)단자를 디지털 핀9번

음(-)단자를 접지(GND)에 각각 연결하면 됩니다.

이제부터 아두이노에 작은별 멜로디 스케치를

업로드하기만 하면 된답니다.

부저(Buzzer)가 동작하는 함수가 tone() 함수랍니다.

tone() 함수에서 주파수 값을 바꾸기만 하면

다양한 음계의 소리음을 아두이노가 만들어 낼수 있답니다.~~~

가장 간단하게 도~레~미~파~솔~라~시~도~를 자작 연주해볼 수도 있답니다.

각 음계의 주파수 값을 쉽게 아두이노 스케치 코드에 적용할 수 있어요!

위의 그림에 표시된 값들을 사용하세요~~

동영상의 작은별 멜로디 연주에 사용된

아두이노 업로드 스케치 프로그래밍 코드입니다.

복사하시려면 스크랩하면 된답니다.

 int BuzzerPin = 9;

 char noteNames[] = {'C','D','E','F','G','a','b','c'};

 int frequency[] = {1047,1175,1319,1397,1568,1760,1976,2093}; 

 byte noteCount = sizeof(noteNames);

 char score[] = "CCGGaaGFFEEDDC  GGFFEEDGGFFEED  CCGGaaGFFEEDDC";

 byte scoreLen = sizeof(score);

 void setup(){

 }

 void loop(){

    for (int i=0 ; i<scoreLen ; i++)

    {

         int duration = 333;

         playNote(score[i], duration);

     }

     delay(5000);

 }

 void playNote(char note, int duration){

    for (int i=0 ; i<noteCount ; i++)

    {

         if (noteNames[i] == note)

             tone(BuzzerPin, frequency[i], duration);

     }

     delay(duration);

 }

참고로 위 아두이노 스케치 코드에서

char score[] = "CCGGaaGFFEEDDC  GGFFEEDGGFFEED  CCGGaaGFFEEDDC" ;

의 공란(빈칸)의 숫자는 아두이노로 연주되는 음악의 쉼표 길이를 나타냅니다.

관련글 : 아델 hello LED 막대그래프 불빛으로 표시하기

https://youtu.be/IzXwBBxzRwA

아두이노 악보 코드 - adu-ino agbo kodeu

아두이노 악보 코드 - adu-ino agbo kodeu

다리 2개 - (+) 핀과 (-) 핀.

▶ [실습 1. 부저 기본 소리 제어]

- 회로 구성

아두이노 악보 코드 - adu-ino agbo kodeu

- 소스 코드 : 직접 타이핑

int speakerpin =8; //스피커가 연결된 디지털핀 설정
int note = 1000; // 소리의 주파수
int note_time = 500; // 소리 출력 시간
 
void setup() {
 /* setup 에는 코드 읍따 */
}
 
void loop() {
    tone(speakerpin,note,note_time);
    delay(750);
}

 -> note : 소리의 주파수 ex) 1000 -> 1000 HZ 소리

 -> note_time : 소리 출력 시간(밀리 세컨드) ex) 500 -> 0.5초

1000 hz 소리를 직접 들어 보자.

아두이노 악보 코드 - adu-ino agbo kodeu
[★도전과제 1 ★]
주파수별 옥타브별 음계와 음악기호를 보고 accel.(아첼레탄도)로 도레미파솔라시도를 tone() 함수를 활용하여 부저로 소리 출력을 해보세요.

- 주파수별 옥타브 음계

아두이노 악보 코드 - adu-ino agbo kodeu

- 빠르게를 나타내는 음악 기호

아두이노 악보 코드 - adu-ino agbo kodeu
[★ 도전과제 2 ★]
배열의 구조를 활용하여 도레미파솔라시도 를 ritardando(리타르단토)로 출력하시오.

- 배열의 구조

아두이노 악보 코드 - adu-ino agbo kodeu
출처 : C언어 코딩 도장

 메모리 구조

아두이노 악보 코드 - adu-ino agbo kodeu
출처 : TCP 스쿨

- 소스 코드 : 아래 코드를 복붙 한뒤, int note_time[] 을 생성하여 음의 길이를 조절하는 코드를 작성하시오.

int speakerpin =8; //스피커가 연결된 디지털핀 설정
int note[] = {2093,2349,2637,2793,3136,3520,3951,4186}; //도레미파솔라시도
 
void setup() {

}
 
void loop() {
    int elementCount = sizeof(note) / sizeof(int);
  for (int i=0; i < elementCount; i++)    //note를 play
  {
    tone(speakerpin,note[i],500);
    delay(750);
  }
}

▶ [실습 2. 부저 악보 연주]

 - 학교종 악보

아두이노 악보 코드 - adu-ino agbo kodeu

- 학교종 연주 소스코드

- 복붙 후 코드 실행

#define C 262 // 도 
#define D 294 // 레 
#define E 330 // 미 
#define F 349 // 파 
#define G 392 // 솔 
#define A 440 // 라 
#define B 494 // 시 

int piezoPin = 8; // 부저의 ⊕극을 아두이노 8번에 연결 
int tempo[] = {200, 300, 200, 300, 200, 300, 200, 300, 200, 300, 200, 300, 200, 300, 200, 300, 200, 300, 200, 300, 200, 300, 200, 300}; // duration 옵션 값 설정 
int notes[] = { G, G, A, A, G, G, E, G, G, E, E, D, G, G, A, A, G, G, E, G, E, D, E, C }; 

void setup() { 
  pinMode (piezoPin, OUTPUT); 
} 

void loop() { 
  for (int i = 0; i < 12; i++) { 
    tone (piezoPin, notes[ i ], tempo[ i ]); 
    delay (tempo[ i ]); 
  } 
  delay(100); // 멜로디 중간에 짧게 멈추는 용도 

  for (int i = 12; i < 25; i++) { 
    tone (piezoPin, notes[ i ], tempo[ i ]); 
    delay(tempo[ i ]); 
  } 
}
[★ 도전과제 3 ★]
구글에서 여러분이 좋아하는 노래의 악보 검색 후, 부저로 연주하는 코드를 작성해 보세요.

- 예시) 생일축하 노래

아두이노 악보 코드 - adu-ino agbo kodeu

▶ [실습 3. 전자 피아노 만들기]

- 아두이노 회로 

아두이노 악보 코드 - adu-ino agbo kodeu

- 소스코드

- 코드 복붙후 /* 직접 코드를 작성해 주세요 */ 부분 직접 코딩 후 동작.

void setup() {   

pinMode(3, OUTPUT);  // 디지털 3번핀을 출력모드로 설정.                   
pinMode(6, INPUT);  // 디지털 6번핀을 입력모드로 설정.
pinMode(7, INPUT);  // 디지털 7번핀을 입력모드로 설정. 
pinMode(8, INPUT);  // 디지털 8번핀을 입력모드로 설정. 
/* 직접 코드를 작성해 주세요 */  // 디지털 9번핀을 입력모드로 설정. 
/* 직접 코드를 작성해 주세요 */  // 디지털 10번핀을 입력모드로 설정. 
/* 직접 코드를 작성해 주세요 */ // 디지털 11번핀을 입력모드로 설정. 
/* 직접 코드를 작성해 주세요 */ // 디지털 12번핀을 입력모드로 설정. 
/* 직접 코드를 작성해 주세요 */  // 디지털 13번핀을 입력모드로 설정. 

} 

 

void loop() {

if (digitalRead(13) == HIGH) {    // 만약 13번핀에 HIGH신호가 입력되면

tone (3, 262);             // 3번핀에 주파수 신호 361.6을 출력

}

/* 직접 코드를 작성해 주세요 */   // 그게아니라 12번에 HIGH 신호가 입력되면

/* 직접 코드를 작성해 주세요 */            // 3번핀에 주파수 신호 393.7을 출력

}

else if (digitalRead(11) == HIGH) {      // 이하 생략

tone (3, 329.6);

}

else if (digitalRead(10) == HIGH) {

tone (3, 349.2);

}

else if (digitalRead(9) == HIGH) {

tone (3, 392.0);

}

else if (digitalRead(8) == HIGH) {

tone (3, 440.0);

}

else if (digitalRead(7) == HIGH) {

tone (3, 493.9);

}

else if (digitalRead(6) == HIGH) {

tone (3, 523.0);

}

else{

noTone(3);

}

}
아두이노 악보 코드 - adu-ino agbo kodeu