import RPi.GPIO as GPIO
import time
# GPIO 핀 번호 설정
BUZZER_PIN = 22
GPIO.setmode(GPIO.BCM)
GPIO.setup(BUZZER_PIN, GPIO.OUT)
# PWM 설정 (핀번호, 주파수)
pwm = GPIO.PWM(BUZZER_PIN, 440) # 440Hz로 초기 설정
# 음계 주파수
notes = {
'DO3': 130.81, # 3옥타브 도
'RE3': 146.83, # 3옥타브 레
'MI3': 164.81, # 3옥타브 미
'FA3': 174.61, # 3옥타브 파
'SOL3': 196, # 3옥타브 솔
'LA3': 220, # 3옥타브 라
'SI3': 246.94, # 3옥타브 시
'DO4': 261.63, # 4옥타브 도
'RE4': 293.66, # 4옥타브 레
'MI4': 329.63, # 4옥타브 미
'FA4': 349.23, # 4옥타브 파
'SOL4': 392, # 4옥타브 솔
'LA4': 440, # 4옥타브 라
'SI4': 493.88, # 4옥타브 시
'DO5': 523.25, # 5옥타브 도
'DO6': 1046.50 # 6옥타브 도
}
def play_sound(note, duration):
pwm.ChangeFrequency(notes[note]) # 음계에 따른 주파수 변경
pwm.start(50) # 시작 (50% duty cycle)
time.sleep(duration / 6) # 2배 빠르게 재생
pwm.stop() # 소리 정지
time.sleep(0.25) # 음 사이의 간격
try:
# 기존의 음계 재생
play_sound('SOL4', 1)
play_sound('SOL4', 1)
play_sound('LA4', 1)
play_sound('LA4', 1)
play_sound('SOL4', 1)
play_sound('SOL4', 1)
play_sound('MI4', 2)
play_sound('SOL4', 1)
play_sound('SOL4', 1)
play_sound('MI4', 1)
play_sound('MI4', 1)
play_sound('RE4', 2)
finally:
GPIO.cleanup()
import RPi.GPIO as GPIO
import time
# GPIO 핀 번호 설정
BUZZER_PIN = 22
LED_PIN = 12 # LED 연결 핀
GPIO.setmode(GPIO.BCM)
GPIO.setup(BUZZER_PIN, GPIO.OUT)
GPIO.setup(LED_PIN, GPIO.OUT) # LED 핀을 출력 모드로 설정
# PWM 설정 (핀번호, 주파수)
pwm = GPIO.PWM(BUZZER_PIN, 440) # 440Hz로 초기 설정
# 음계 주파수
notes = {
'DO3': 130.81, # 3옥타브 도
'RE3': 146.83, # 3옥타브 레
'MI3': 164.81, # 3옥타브 미
'FA3': 174.61, # 3옥타브 파
'SOL3': 196, # 3옥타브 솔
'LA3': 220, # 3옥타브 라
'SI3': 246.94, # 3옥타브 시
'DO4': 261.63, # 4옥타브 도
'RE4': 293.66, # 4옥타브 레
'MI4': 329.63, # 4옥타브 미
'FA4': 349.23, # 4옥타브 파
'SOL4': 392, # 4옥타브 솔
'LA4': 440, # 4옥타브 라
'SI4': 493.88, # 4옥타브 시
'DO5': 523.25, # 5옥타브 도
'DO6': 1046.50 # 6옥타브 도
}
def play_sound(note, duration):
pwm.ChangeFrequency(notes[note]) # 음계에 따른 주파수 변경
# 솔 또는 레 음계일 경우 LED 켜기 (4옥타브 기준으로 했습니다. 원하시는 옥타브에 따라 수정해주세요)
if note in ['SOL4', 'RE4']:
GPIO.output(LED_PIN, True)
pwm.start(50) # 시작 (50% duty cycle)
time.sleep(duration / 2) # 2배 빠르게 재생
pwm.stop() # 소리 정지
# 솔 또는 레 음계일 경우 LED 끄기 (4옥타브 기준으로 했습니다. 원하시는 옥타브에 따라 수정해주세요)
if note in ['SOL4', 'RE4']:
GPIO.output(LED_PIN, False)
time.sleep(0.25) # 음 사이의 간격
try:
play_sound('SOL4', 1)
play_sound('SOL4', 1)
play_sound('LA4', 1)
play_sound('LA4', 1)
play_sound('SOL4', 1)
play_sound('SOL4', 1)
play_sound('MI4', 2)
play_sound('SOL4', 1)
play_sound('SOL4', 1)
play_sound('MI4', 1)
play_sound('MI4', 1)
play_sound('RE4', 2)
finally:
GPIO.cleanup()
import RPi.GPIO as GPIO
import time
# GPIO 핀 번호 설정
BUZZER_PIN = 22
LED_PIN = 12 # LED 연결 핀
GPIO.setmode(GPIO.BCM)
GPIO.setup(BUZZER_PIN, GPIO.OUT)
GPIO.setup(LED_PIN, GPIO.OUT) # LED 핀을 출력 모드로 설정
# PWM 설정 (핀번호, 주파수)
buzzer_pwm = GPIO.PWM(BUZZER_PIN, 440) # 440Hz로 초기 설정
led_pwm = GPIO.PWM(LED_PIN, 100) # LED PWM 설정, 주파수는 100Hz로 설정
led_pwm.start(0) # PWM 시작, 초기 duty cycle은 0%로 설정
# 음계 주파수
notes = {
'DO' : 261,
'SOL': 392,
'LA': 440,
'MI': 330,
'RE': 294
}
def play_sound(note, duration):
buzzer_pwm.ChangeFrequency(notes[note]) # 음계에 따른 주파수 변경
# 음계에 따라 LED 밝기 조절
if note == 'LA':
led_pwm.ChangeDutyCycle(100) # 가장 밝게
elif note == 'SOL':
led_pwm.ChangeDutyCycle(60) # 미보다 밝게
elif note == 'MI':
led_pwm.ChangeDutyCycle(30) # 레보다 밝게
elif note == 'RE':
led_pwm.ChangeDutyCycle(15) # 가장 어둡게
elif note == 'DO':
led_pwm.ChangeDutyCycle(5) # 가장 어둡게
buzzer_pwm.start(50) # 시작 (50% duty cycle)
time.sleep(duration / 4) # 2배 빠르게 재생
buzzer_pwm.stop() # 소리 정지
time.sleep(0.25) # 음 사이의 간격
try:
play_sound('SOL', 1)
play_sound('SOL', 1)
play_sound('LA', 1)
play_sound('LA', 1)
play_sound('SOL', 1)
play_sound('SOL', 1)
play_sound('MI', 2)
play_sound('SOL', 1)
play_sound('SOL', 1)
play_sound('MI', 1)
play_sound('MI', 1)
play_sound('RE', 2)
play_sound('SOL', 1)
play_sound('SOL', 1)
play_sound('LA', 1)
play_sound('LA', 1)
play_sound('SOL', 1)
play_sound('SOL', 1)
play_sound('MI', 2)
play_sound('SOL', 1)
play_sound('MI', 1)
play_sound('RE', 1)
play_sound('MI', 1)
play_sound('DO', 2)
finally:
led_pwm.stop() # LED PWM 정지
GPIO.cleanup()
Copyright ⓒ TECH79 All right reserved