페이지

2025년 12월 19일 금요일

2.4.2. 학교종 연주하기

아두이노로 '학교종' 연주하기: 피에조 부저 사용법

안녕하세요! 여러분의 AI-IT 멘토, '파이컴'입니다. 😊

지난 시간에는 3색 LED로 다채로운 빛을 만들어봤죠? 눈이 즐거운 시간이었다면, 이번에는 귀를 즐겁게 해줄 프로젝트를 준비했어요. 바로 전기를 흘려주면 '삐~' 소리를 내는 피에조 부저(Piezo Buzzer)를 사용해서 우리에게 아주 익숙한 동요, '학교 종'을 연주해 볼 거예요!

아두이노로 나만의 작은 오케스트라를 만드는 첫걸음, 지금 바로 시작해 볼까요?


Slide 1: 강의 소개

강의 소개

이번 시간에는 2장 기본 부품과 C언어 체험하기의 네 번째 절, 피에조 부저에 대해 알아볼 거예요. 그중에서도 두 번째 예제인 '학교종 연주하기'를 함께 만들어 보겠습니다. 이 프로젝트를 통해 아두이노로 소리를 제어하는 기본 원리를 확실하게 익힐 수 있을 거예요.

Slide 2: 학교종 연주하기 - 회로 구성

학교종 연주 회로 구성

가장 먼저 연주를 위한 악기, 즉 회로를 만들어야겠죠?

준비물

  • 아두이노 우노
  • 피에조 부저
  • 브레드보드
  • 점퍼선

회로 구성

피에조 부저는 LED처럼 극성(+, -)이 있는 부품이라 연결할 때 방향에 꼭 주의해야 해요.

  1. (+)극 연결: 부저 윗면에 (+) 표시가 있거나, 두 다리 중 긴 다리가 (+)극이에요. 이 (+)극을 아두이노의 디지털 11번 핀에 연결해 주세요.
  2. (-)극 연결: 반대쪽 짧은 다리인 (-)극은 아두이노의 GND(그라운드) 핀에 연결하면 회로 구성은 끝이에요. 정말 간단하죠?
멘토's Tip
부저의 다리 길이가 애매해서 헷갈린다면, 부저 윗면의 + 표시를 확인하는 것이 가장 확실한 방법이랍니다!

Slide 3: 틴커캐드 꿀팁! - 구성요소 대칭

틴커캐드 구성요소 대칭 기능

틴커캐드로 회로를 꾸미다 보면 이런 경험, 꼭 한 번쯤 하게 되죠.
"어? 부저의 (+)극이 반대쪽에 있어서 전선이 X자로 꼬여버리네..."

이럴 때 억지로 선을 꼬아서 연결하면 회로가 지저분해 보이고 복잡해져요. 이럴 때 아주 유용한 기능이 바로 '구성요소 대칭' 기능이에요!

  • 위치: 틴커캐드 작업 화면 왼쪽 상단에 있는 아이콘 (거울 모양 아이콘)
  • 단축키: 부품을 선택하고 키보드 'M' 누르기
  • 기능: 선택한 부품을 거울에 비춘 것처럼 좌우를 반전시켜 줘요.

이 기능을 사용하면 부저의 (+)극과 (-)극 위치를 손쉽게 바꿔서 전선 꼬임 없이 아주 깔끔한 회로를 구성할 수 있답니다.

Slide 4: 학교종 연주 - 악보와 주파수

음계별 주파수 표

자, 이제 연주할 악보를 살펴볼까요? '솔솔라라 솔솔미' 우리에게 아주 익숙한 멜로디죠.

그런데 한 가지 중요한 점이 있어요. 아두이노는 똑똑하지만 아쉽게도 '솔'이나 '라' 같은 계이름을 직접 알아듣지는 못해요. 대신 소리의 높낮이를 나타내는 고유한 숫자 값, 바로 '주파수(Hz)'로 소리를 인식한답니다.

그래서 우리는 악보의 계이름에 맞는 주파수 값을 위 표에서 찾아서 코드로 입력해 줘야 해요. 이번 '학교종' 연주에서는 4옥타브를 기준으로 소리를 만들어 볼 거예요. 예를 들어 '솔' 음을 내고 싶다면, 표에서 4옥타브 'G'에 해당하는 392라는 숫자를 사용하면 되는 거죠!

Slide 5: 학교종 연주 - 코드 구조 분석

학교종 연주 아두이노 코드

이제 본격적으로 코드를 살펴볼게요. 이번 코드의 핵심은 소리를 만드는 tone() 함수예요.

코드 핵심 포인트

  1. tone() 함수 사용: tone(핀번호, 주파수, 시간) 형식으로 "솔-솔-라-라-솔-솔-미" 멜로디를 연주해요.
  2. 박자 조절: 각 음은 1초(1000ms)씩 연주하고, 마지막 '미' 음은 악보처럼 2초(2000ms) 동안 길게 연주해요.
  3. setup() 함수: 코드가 setup() 함수 안에 작성되어 있죠? 이건 아두이노에 전원이 들어왔을 때 딱 한 번만 연주하고 멈추게 하려는 의도예요. 만약 loop() 함수에 넣었다면 '학교종'이 무한 반복으로 연주될 거예요!

코드 흐름

  • tone(11, 392, 1000); : 11번 핀에서 392Hz('솔') 소리를 1초간 내라!
  • delay(1000); : 1초간 기다려라. (이게 없으면 다음 소리가 바로 덮어써서 소리가 안 들려요!)
  • ...이런 식으로 '솔솔라라솔솔'을 반복해요.
  • tone(11, 330, 2000); : 마지막 '미'(330Hz) 음은 2초간 길게 연주해요.
  • noTone(11); : 연주가 끝난 후 혹시 모를 잡음을 막기 위해 11번 핀의 소리를 완전히 꺼줘요.

Slide 6 & 7: 아두이노 문법 - tone() 함수 (1), (2)

tone 함수 설명 1 tone 함수 설명 2

멜로디 연주의 핵심, tone() 함수에 대해 좀 더 자세히 알아볼까요?

형식

tone(핀번호, 주파수, 시간);

매개변수 (괄호 안의 재료들)

  • 핀번호: 피에조 부저의 (+)극이 연결된 핀 번호예요. (우리 예제에서는 11)
  • 주파수(Hz): 소리의 높낮이를 결정해요. 숫자가 클수록 높은 음이 나요.
  • 시간(ms): 소리를 얼마나 길게 연주할지, 즉 음의 길이를 정해요. 단위는 밀리초(ms)라서 1초를 원하면 1000이라고 적어야 해요.

⚠️ 가장 중요한 주의사항!

tone() 함수를 사용한 후에는 반드시 delay() 함수를 함께 써줘야 해요.
tone()은 "소리 켜!"라는 명령만 내리고 바로 다음 코드로 넘어가 버리는 성격 급한 친구예요. 그래서 delay()로 연주 시간만큼 기다려주지 않으면, 첫 번째 음이 채 들리기도 전에 두 번째 음이 덮어 써버려서 결국 아무 소리도 제대로 들리지 않게 된답니다. 꼭 기억해 주세요!

tone()delay()는 한 세트다!

Slide 8: 아두이노 문법 - noTone() 함수

noTone 함수 설명

연주를 시작하는 함수가 있다면, 멈추는 함수도 있어야겠죠? 바로 noTone() 함수입니다.

형식

noTone(핀번호);

기능

  • 이름 그대로, 해당 핀에서 나고 있는 모든 소리를 강제로 정지시켜요.
  • 주로 멜로디 연주가 모두 끝난 뒤에 호출해서, 혹시 남아있을지 모를 미세한 소리(잡음)까지 깔끔하게 없애주는 역할을 해요.

마치 오케스트라 연주가 끝난 뒤 지휘자가 손짓으로 완벽한 정적을 만드는 것과 같다고 생각하면 쉬워요.

Slide 9: 악보의 쉼표는 어떻게 구현할까?

쉼표 구현 방법 설명

"선생님, 그럼 악보에 쉼표가 있으면 어떻게 코딩해야 하나요?"
아주 좋은 질문이에요! 방법은 놀랄 만큼 간단해요.

쉼표는 '소리 없이 일정 시간 동안 기다리는 것'을 의미하죠?
이걸 코드로 그대로 옮기면 돼요.

  • 소리를 내는 tone() 함수는 사용하지 않고,
  • 시간을 기다리는 delay() 함수만 단독으로 사용하면 끝!

예를 들어, 1초짜리 쉼표가 있다면 코드에 이렇게 한 줄만 추가하면 된답니다.

CODE 9.1 | 쉼표 구현 예제
01 delay(1000); // 아무 소리도 내지 않고 1초 동안 기다리기 (쉼표 효과)

나만의 멜로디를 연주해 보세요!

오늘은 피에조 부저를 이용해 '학교종' 멜로디를 연주해 봤어요. tone() 함수로 음의 높이와 길이를 조절하고, delay()로 박자를 맞추는 원리를 이해하셨나요? 이제 여러분이 좋아하는 다른 동요나 간단한 가요 멜로디에 도전해 보세요! 주파수 표만 있다면 어떤 곡이든 아두이노로 연주할 수 있을 거예요.

다음 시간에는 더 재미있는 프로젝트로 돌아오겠습니다. 궁금한 점은 언제든 댓글로 남겨주세요! 😄

이 포스팅의 내용은 교재 [주니어 공학교실 아두이노의 기초] **-** 페이지에 수록된 내용입니다.

댓글 없음:

댓글 쓰기