프로젝트 02: 피에조 부저 미니 피아노 🎹

5개의 버튼을 눌러 아름다운 멜로디를 연주하는 나만의 악기를 제작합니다.

1. 프로젝트 원리: 소리는 어떻게 나나요?

우리가 사용할 피에조 부저(Piezo Buzzer)는 전기를 주면 내부의 판이 미세하게 떨리면서 소리를 냅니다. 1초에 판이 몇 번 떨리느냐(주파수)에 따라 우리가 듣는 음계가 달라집니다.

💡 아두이노의 마법사: tone() 함수

아두이노에는 복잡한 진동 계산 없이 소리를 내주는 tone(핀번호, 주파수) 함수가 내장되어 있습니다. 이 함수를 사용하면 단 한 줄로 피아노 소리를 낼 수 있습니다!

2. 회로 구성 (Wiring)

5개의 버튼을 디지털 2번부터 6번 핀까지 차례대로 연결하고, 피에조 부저는 디지털 8번 핀에 연결합니다.

D2 D3 D4 D5 D6 Piezo (D8) 모든 버튼과 부저의 한쪽 다리를 GND에 공통 연결하세요.
▲ 피아노 회로도: 버튼 5개와 피에조 부저 1개를 연결합니다.

📦 준비물

아두이노 우노 x 1 피에조 부저 x 1 푸시 버튼 x 5 점퍼 와이어 다수

3. 코드 작성하기: 멜로디 프로그래밍

버튼 5개에 각각 '도, 레, 미, 파, 솔'의 주파수를 매칭합니다. 버튼을 누르면 해당 소리가 나고, 떼면 소리가 멈추도록(noTone) 설계합니다.

// 1. 음계 주파수 정의 (도, 레, 미, 파, 솔)
int notes[] = {262, 294, 330, 349, 392};
int speakerPin = 8;

void setup() {
    // 2. 2번~6번 핀을 버튼 입력으로 설정 (내부 풀업 사용)
    for (int i = 2; i <= 6; i++) {
        pinMode(i, INPUT_PULLUP);
    }
}

void loop() {
    bool isPlayed = false; // 현재 소리가 나는 중인지 체크

    for (int i = 0; i < 5; i++) {
        // 버튼은 눌리면 LOW(0) 상태가 됩니다.
        if (digitalRead(i + 2) == LOW) {
            tone(speakerPin, notes[i]); // 해당 음계 소리 내기
            isPlayed = true;
        }
    }

    // 아무 버튼도 눌리지 않았다면 소리 끄기
    if (!isPlayed) {
        noTone(speakerPin);
    }
}

4. 코드 상세 설명

5. 🎯 심화 챌린지: 나만의 작곡가 모드

단순한 피아노를 넘어, 아두이노가 스스로 노래를 부르게 해볼까요? '작은 별'이나 '비행기'의 멜로디 주파수를 배열에 담고, 특정 버튼을 누르면 노래가 자동으로 재생되도록 기능을 추가해 보세요!

힌트: tone(핀, 주파수, 지속시간)을 사용하면 소리의 길이를 조절할 수 있습니다.