산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

아두이노로 음악 톤 만들기: 88키 피아노 음계 구현 가이드

부품 및 소모품

부품수량비고
Arduino UNO1메인 컨트롤러
스피커 0.25W, 8Ω1소리 출력용
저항 150~220Ω (220Ω 권장)1스피커 직렬 연결로 전류 제한

소프트웨어

프로젝트 소개

아두이노와 스피커, 저항만으로 피아노 88건반 전 음역대의 음을 생성하는 방법입니다. 일반적인 `tone()` 함수는 31Hz 미만 주파수를 낼 수 없지만, 피아노 최저음(A0)은 27.5Hz입니다. 이 프로젝트는 룩업 테이블 없이 수식으로 주파수 계산하고, `delayMicroseconds()`로 구형파를 직접 생성해 88키 전 음역을 커버합니다.

핵심 기술 포인트

  1. 수식 기반 주파수 계산: 1~88번 키 번호를 받아 `freq = 440 * 2^((n-49)/12)` 공식으로 주파수 산출
  2. 마이크로초 단위 제어: `delayMicroseconds()`로 반주기 지연 생성 → 구형파 출력
  3. 긴 지연 처리: `delayMicroseconds()`는 수천 마이크로초 이상 불안정하므로, 루프로 분할해 긴 주파수도 정확하게 생성
  4. 컴팩트한 코드: 주석 제외하면 한 화면에 들어갈 정도로 간결

회로 연결

스피커 한 쪽 → GND, 다른 쪽 → 220Ω 저항 → 디지털 핀 12

소스 코드

전체 코드(주석 포함)는 GitHub Gist에서 확인 가능합니다.

핵심 로직 요약


// 키 번호(1~88)로 주파수 계산
float freq = 440.0 * pow(2.0, (key - 49) / 12.0);
unsigned long halfPeriod = 1000000.0 / freq / 2;  // 반주기(마이크로초)

// 구형파 생성 (긴 지연은 루프로 분할)
void playTone(int key, int durationMs) {
  float freq = 440.0 * pow(2.0, (key - 49) / 12.0);
  unsigned long halfPeriod = 1000000.0 / freq / 2;
  unsigned long cycles = freq * durationMs / 1000;
  
  for (unsigned long i = 0; i < cycles; i++) {
    digitalWrite(12, HIGH);
    delayMicroseconds(halfPeriod);
    digitalWrite(12, LOW);
    delayMicroseconds(halfPeriod);
  }
}

회로도

스피커를 GND와 핀 12 사이에 저항을 거쳐 연결합니다. (프로젝트 페이지 'Schematics' 섹션 참조)

응용 아이디어

제조공정

  1. 아두이노로 모니터 앰비라이트(Ambilight) 시스템 직접 만들기
  2. 아두이노로 범용 IR 리모컨 만들기: 단계별 가이드
  3. 아두이노로 만드는 맞춤형 '펀처블' 키보드 버튼: 단계별 가이드
  4. 아두이노 메가와 NEO-6M GPS 모듈 연결하기: 단계별 가이드
  5. 아두이노 틱택토 게임 - MAX7219 LED 매트릭스와 골판지 케이스
  6. 아두이노와 노키아 5110 LCD로 만드는 DIY 전압계 - 단계별 가이드
  7. 구글 어시스턴트와 블루투스로 음성 제어하는 홈 IoT: 아두이노 우노와 4채널 릴레이
  8. 아두이노를 NMEA-0183에 연결하기: 단계별 가이드
  9. 초음파 센서로 아두이노 자동문 만들기
  10. 블루투스 조종 아두이노 자동차 만들기 – 완전 DIY 가이드 (아두이노 나노)