[실습] 버저(Buzzer)를 이용한 작은별 동요 실행
필기자
2024-04-29 12:27
2,294
0
본문
버저(Buzzer)를 이용한 작은별 동요 실행
목 적
1. 버저(Buzzer) 액츄레이터 모듈 설치
2. 버저(Buzzer) 액츄레이터 구동 및 응용
목 적
- 라즈베리파이에 버저(Buzzer) 액추레이터 사용법을 이해한다.
- 버저(Buzzer) 액추레이터를 응용하여 단음 작은별 동요를 실행한다.
1. 버저(Buzzer) 액츄레이터 모듈 설치
2. 버저(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)
2. 버저(Buzzer) 액츄레이터 구동 및 응용
- 기본 구동 프로그램 : 라즈베리파이 가상환경에서 파이썬 코딩
- VSCode에서 buzzer.py 파일 생성
- GPIO 17핀(핀 11)을 출력 모드로 설정
- GPIO 17핀을 순회하면 On/Off 코딩
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 인스턴스 생성 및 초기 주파수 설정
pwm = GPIO.PWM(BUZZER_PIN, 100)
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:
pwm.stop()
GPIO.cleanup()
- 다음 작은별 악보를 보고 부저 프로그램을 완성하여라.
댓글목록0