본문 바로가기

메이커 프로젝트/아두이노 +

[모듈 1-6] 아두이노 부저로 소리내기(feat. 전자 피아노 만들기)

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

 

 

 

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

 

- 회로 구성

 

 

- 소스 코드 : 직접 타이핑

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 소리를 직접 들어 보자.

 

 

 

 

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

 

- 주파수별 옥타브 음계

 

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

 

 

 

 

 

 

[★ 도전과제 2 ★]
배열의 구조를 활용하여 도레미파솔라시도 를 ritardando(리타르단토)로 출력하시오.

 

 

- 배열의 구조

출처 : C언어 코딩 도장

 

 메모리 구조

출처 : 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. 부저 악보 연주]

 - 학교종 악보

 

- 학교종 연주 소스코드

- 복붙 후 코드 실행

#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 ★]
구글에서 여러분이 좋아하는 노래의 악보 검색 후, 부저로 연주하는 코드를 작성해 보세요.

- 예시) 생일축하 노래

 

 

 

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

 

- 아두이노 회로 

 

 

- 소스코드

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

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);

}

}