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
반응형
'아두이노' 카테고리의 다른 글
Arduino 기반 스네이크 게임 프로젝트 (2) | 2025.05.20 |
---|---|
초음파 센서를 이용한 음계 변환 회로 설계 (0) | 2025.05.20 |
🚀 Arduino I2C LCD를 활용한 자동 이동 캐릭터 (0) | 2025.05.15 |
🚀 Arduino LCD에서 커스텀 문자 출력하기 (0) | 2025.05.15 |
Arduino와 LiquidCrystal 라이브러리를 활용한 LCD 출력 제어 (0) | 2025.05.15 |