본문 바로가기
아두이노

🎹 아두이노로 1옥타브 피아노 만들기!

by 모빌리티키즈 2025. 5. 17.
728x90
반응형

아두이노를 활용하여 1옥타브 피아노를 구현해보세요! 이 프로젝트에서는 메가 2560, 피에조 부저, 그리고 8개의 스위치를 사용하여 간단한 피아노를 제작합니다.

1. 회로 구성

🎛️ 필요한 부품

아두이노 메가 2560 (1개)

피에조 부저 (1개)

푸시 버튼 스위치 (8개)

저항 (10kΩ) (8개, 풀다운 저항)

점퍼 와이어

브레드보드

🔌 회로 연결 방법

1) 스위치 연결

  • 각 스위치의 한쪽 단자를 아두이노의 디지털 입력 핀(2~9)에 연결합니다.
  • 다른 단자GND에 연결하며, 풀다운 저항(10kΩ)을 함께 연결하여 안정적인 신호를 유지합니다.

2) 피에조 부저 연결

  • 피에조 부저의 + 단자디지털 핀 11번에 연결합니다.
  • GND 단자아두이노 GND에 연결합니다.

📌 : 스위치 입력이 흔들릴 경우 풀다운 저항을 추가하여 더욱 안정적인 신호를 확보하세요!

2. 각 소자 설명

🎵 1) 아두이노 메가 2560

  • 마이크로컨트롤러로 다양한 센서 및 액추에이터를 제어할 수 있습니다.
  • 일반적인 UNO보다 더 많은 디지털 및 아날로그 핀을 제공합니다.

🎼 2) 피에조 부저

  • 주파수에 따라 다양한 음을 출력할 수 있는 작은 스피커입니다.
  • tone() 함수를 이용해 원하는 주파수의 소리를 발생시킵니다.

⏺️ 3) 푸시 버튼 스위치

  • 누르면 아두이노의 입력 값이 HIGH(1)가 되고, 손을 떼면 LOW(0)로 변합니다.

🔧 4) 풀다운 저항 (10kΩ)

  • 스위치가 눌리지 않았을 때 안정적인 LOW(0) 상태를 유지하도록 도와줍니다.

 

3. 코드 구현

 
const int piezo = 11;
int sw[8] = {2, 3, 4, 5, 6, 7, 8, 9};  // 8개의 스위치 핀  
int freq[8] = {262, 294, 330, 349, 392, 440, 494, 524}; // 1옥타브 주파수  
int val = 0;

void setup() {
  pinMode(piezo, OUTPUT);  // 피에조 부저 출력 설정
  for (int k = 0; k < 8; k++) {
    pinMode(sw[k], INPUT);  // 스위치 입력 설정
  }
}

void loop() {
  for (int k = 0; k < 8; k++) {
    val = digitalRead(sw[k]);  // 스위치 값 읽기
    if (val) {
      tone(piezo, freq[k]);  // 해당하는 음 출력
      while (digitalRead(sw[k]));  // 스위치가 눌린 상태 유지
      noTone(piezo);  // 손을 떼면 음 멈추기
    }
  }
}

4. 코드 설명

✅ sw[] 배열: 8개의 스위치를 관리합니다.

✅ freq[] 배열: 각 스위치가 해당하는 음의 주파수를 저장합니다.

✅ digitalRead()로 스위치 상태를 읽고, tone()으로 음을 출력합니다.

✅ while(digitalRead(sw[k]));: 스위치가 눌린 동안만 해당 음이 출력되며, 손을 떼면 noTone()이 호출됩니다.

5. 확장 가능성

🎹 옥타브 확장: 스위치를 추가하여 더 많은 음을 구현할 수 있습니다!

💡 LED 추가: 연주 중인 음을 LED로 표시하면 더욱 직관적인 피드백을 얻을 수 있습니다!

🎶 자동 멜로디 연주: 특정 버튼을 누르면 미리 저장된 멜로디가 자동으로 재생되도록 구현해보세요!

이제 직접 회로를 구성하고 나만의 피아노를 만들어볼 시간입니다!

🎵 추가로 개선하고 싶은 기능이 있다면 댓글로 알려주세요. 🚀

728x90
반응형