버저(Buzzer)를 이용한 작은별 동요 실행 > IoT 유무선제어

본문 바로가기

[실습] 버저(Buzzer)를 이용한 작은별 동요 실행

필기자
2025-04-02 11:44 86 0

본문

버저(Buzzer)를 이용한 작은별 동요 실행

목 적
  • 라즈베리파이에 버저(Buzzer) 액추레이터 사용법을 이해한다.
  • 버저(Buzzer) 액추레이터를 응용하여 단음 작은별 동요를 실행한다.
목 차
1. 버저(Buzzer) 액츄레이터 모듈 설치
2. 버저(Buzzer) 액츄레이터 구동 및 응용

1. 버저(Buzzer) 액츄레이터 모듈 설치
  • 액티브 버저 모듈
    • 액티브 버저 모듈은 전기 신호를 받았을 때 소리를 내는 장치임.
    • 내장된 발진 회로를 가지고 있어서 단순히 전원을 공급하면 특정 주파수로 소리를 낼 수 있음.
    • 액티브 버저는 로봇, 알람 시스템, 사용자 인터페이스 피드백 등 다양한 응용 프로그램에 사용됨.
  • 기본 사양
    • 전원 공급: 일반적으로 3.3V 또는 5V DC
    • 소비 전류: 약 30mA
    • 작동 주파수: 주로 2kHz 내외
    • 소리 크기: 약 85 dB 정도
  • GPIO 연결
    • VCC : 3.3V 또는 5V Power(핀 1 또는 2)
    • GND : Ground 접지(핀 2)
    • IN : 입력 핀으로 LOW 또는 HIGH 신호에 따라 버저가 활성화됨
      • GPIO 17(핀 11)
3529946166_8PCOm1pa_5d8affe2195fdd53549e518e59bd14fd99262e09.png

3529946166_JlFcRPyd_d10a832bc71ba401508f1ba35e0d8b63c30628dc.png

2. 버저(Buzzer) 액츄레이터 구동 및 응용
  • 기본 구동 프로그램 : 라즈베리파이 가상환경에서 파이썬 코딩
    • VSCode에서 buzzer.py 파일 생성
    • GPIO 17핀(핀 11)을 출력 모드로 설정
    • GPIO 17핀을 순회하면 On/Off 코딩

3529946166_0yF45qR8_fdba6b7fd6bf3d9f2595edbf6903aa7aa05b64c1.png


import RPi.GPIO as GPIO
import time

# GPIO 모드 설정
GPIO.setmode(GPIO.BCM)

# 사용할 GPIO 핀의 번호를 설정한다. 여기서는 17번 핀을 사용한다.
BUZZER_PIN = 17
GPIO.setup(BUZZER_PIN, GPIO.OUT)

try:
    while True:
        # 부저를 켠다.
        GPIO.output(BUZZER_PIN, GPIO.HIGH)
        print("Buzzer on")
        time.sleep(1) # 1초 동안 대기

        # 부저를 끈다.
        GPIO.output(BUZZER_PIN, GPIO.LOW)
        print("Buzzer off")
        time.sleep(1) # 1초 동안 대기

except KeyboardInterrupt:
    # 프로그램 종료 시 GPIO 핀 상태를 초기화한다.
    GPIO.cleanup()

 
  • 계이름 응용 구동 프로그램 : 라즈베리파이 가상환경에서 파이썬 코딩
    • VSCode에서 buzzer_melody.py 파일 생성
    • 주파수 대역과 음 지속 시간을 이용하여 계이름(도레미파...시도) 소리 출력

import RPi.GPIO as GPIO
import time
# GPIO 모드 설정
GPIO.setmode(GPIO.BCM)
# Buzzer 핀 설정
BUZZER_PIN = 17
GPIO.setup(BUZZER_PIN, GPIO.OUT)
pwm = None
# PWM 인스턴스 생성 및 초기 주파수 설정
pwm = GPIO.PWM(BUZZER_PIN, 100) #부저의 경우 MAX 2000(2kHz), 출력 범위(약 1Hz ~ 10kHz)
pwm.start(0)  
# 주요 음표의 주파수 (단위: Hz)
notes = {
    'C4': 261.63,
    'D4': 293.66,
    'E4': 329.63,
    'F4': 349.23,
    'G4': 392.00,
    'A4': 440.00,
    'B4': 493.88,
    'C5': 523.25  # 추가된 높은 도 음표
}
# 간단한 멜로디 (음표와 지속 시간)
melody = [('C4', 0.5), ('D4', 0.5), ('E4', 0.5), ('F4', 0.5),
          ('G4', 0.5), ('A4', 0.5), ('B4', 0.5), ('C5', 0.5)]  # 마지막 음을 높은 도로 변경
def play(note, duration):
    pwm.ChangeFrequency(notes[note])
    pwm.ChangeDutyCycle(50)  # 켜짐
    time.sleep(duration)  # 음표 지속 시간
    pwm.ChangeDutyCycle(0)  # 꺼짐
try:  
    for note, duration in melody:
        play(note, duration)
        time.sleep(0.1)  # 음표 사이의 간격
finally:
    if pwm is not None:
        try:
            pwm.stop()
        except:
            pass
        del pwm  # __del__ 호출 시 오류 방지
    GPIO.cleanup()
  • PWM(Pulse Width Modulation) 이론
용어 설명
PWM (펄스폭 변조) 디지털 핀에서 출력 신호의 ON/OFF 비율을 조절하여 아날로그처럼 동작하게 하는 방식
DutyCycle(듀티 사이클) 하나의 주기 내에서 ON(신호 High) 상태가 차지하는 비율(%)
예: 50%면 ON/OFF 비율이 1:1 (음색이 변함, 예: 10%는 얇고 날카로운 소리, 90%는 두껍고 탁한 소리)
Frequency(주파수) 1초당 반복되는 PWM 신호의 횟수(Hz)
응용 분야 모터 속도 조절, LED 밝기 조절, 부저(Buzzer) 음정 제어 등

3529946166_XDLBweS1_55a98cab7dab1c8f1a1351eff3a1c810a8943fb8.png
  • 소리의 원리
항목 설명
진동수(Hz) 초당 공기의 압력이 몇 번 변화하는가
주파수 ↑ 음의 높이가 높아짐 (예: 도 → 미 → 솔)
주파수 ↓ 음의 높이가 낮아짐
부저(PWM) 전기적 ON/OFF로 진동을 만들어 공기를 흔듦
공기 진동(파동)을 받아 음높이로 인식
가청 주파수 약 20Hz ~ 20,000Hz
 
[문제: 부저를 이용한 동요 재생 실습]
  • 다음 작은별 악보를 보고 부저 프로그램을 완성하여라.

3529946166_0fu6HqVX_925f464add2af0a2519419b735131f8703ea1d28.png

 

댓글목록0

등록된 댓글이 없습니다.
게시판 전체검색