Processor

【라즈베리파이】 wiringPi Python : 부저 멜로디 연주하기

작성자 임베디드코리아 작성일26-02-20 00:18 조회85회 댓글0건
◆ 작은별 연주
--->>>  little_star.py  <<<-------------------------------
#-*- coding:utf-8 -*-
import RPi.GPIO as GPIO
import time
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
buzzer = 17
sw = 1
scale = [ 261, 294, 329, 349, 392, 440, 493, 523 ]
#도  레  미  파    솔  라  시  도
GPIO.setup(buzzer, GPIO.OUT) # 출력 설정
#GPIO.setup(sw, GPIO.IN) # 입력 설정
p = GPIO.PWM(buzzer, 100)

list = [0,0,4,4,5,5,4,3,3,2,2,1,1,0] #작은별 노래
try:
  while 1: # 무한 반복
#    if GPIO.input(sw) == 1: #스위치가 눌리면
      p.start(100) # pwm 시작 100
      p.ChangeDutyCycle(10) # dutycycle 변경 90
      for i in range(len(list)): #len() => 길이 추출
        p.ChangeFrequency(scale[list[i]]) #주파수 변경
        if (i+1)%7 == 0: # 7번째 음 박자 변경
          time.sleep(1)
        else :
          time.sleep(0.5)
      p.stop() #pwm 종료
except KeyboardInterrupt: #ctrl+c->종료
    GPIO.cleanup()

◆ 반짝 반짝 작은별 연주하기
--->>>  twinkle_little-star.py  <<<------------------------------------------
import RPi.GPIO as GPIO
import time
 
buzzer = 18
GPIO.setmode(GPIO.BCM)
GPIO.setup(buzzer, GPIO.OUT)
 
pwm = GPIO.PWM(buzzer, 1.0) # 초기 주파수를 1Hz로 설정
pwm.start(90.0) # 듀티비를 90%로 높여 설정함(음 구분이 더 잘되고 조금 더 부드럽게 들림)
 
# == 동요 : 반짝 반짝 작은별 계이름 ==
#도도솔솔라라솔파파미미레레도 솔솔파파미미레 솔솔파파미미레 도도솔솔라라솔파파미미레레도
 
# 4옥타브:도(1)/ 레(2)/ 미(3)/ 파(4)/ 솔(5)/ 라(6) / 시(7) 
scale = [ 262 , 294  , 330 ,  349 , 392 ,  440 ,  494 ]
twinkle = [ 1, 1, 5, 5, 6, 6, 5, 4, 4, 3, 3, 2, 2, 1, \
            5, 5, 4, 4, 3, 3, 2, 5, 5, 4, 4, 3, 3, 2, \
            1, 1, 5, 5, 6, 6, 5, 4, 4, 3, 3, 2, 2, 1 ]
try :
    for i in range(0,42):
        pwm.ChangeFrequency(scale[twinkle[i]])
        if i==6 or i==13 or i==20 or i==27 or i==34 or i==41:
            time.sleep(1.0)  # 2분음표 부분을 모두 1초로 출력
        else :
            time.sleep(0.5)  # 기타 4분음표는 모두 0.5초로 출력함
    pwm.stop()
 
finally :
    GPIO.cleanup()

◆ 학교종 연주하기
--->>>    school-bell.py  <<<------------------------------------------------
import RPi.GPIO as GPIO
import time
 
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
 
hz={                            # 각 음을 딕셔너리형태로 저장
        "C":261.6256,
        "D":293.6648,
        "E":329.6276,
        "F":349.2282,
        "G":391.9954,
        "A":440.0000,
        "B":493.8833,
        "C_1":523.2511
}                              # 학교종 멜로디를 멜로디로 표현
school_song=("G","G","A","A","G","G","E","G","G",
            "E","E","D","G","G","A","A","G","G",
            "E","G","E","D","E","C")
 
piezo_buzzer = 13                  # piezo 핀 번호
 
GPIO.setup(piezo_buzzer, GPIO.OUT)  # piezo 출력으로 설정
p = GPIO.PWM(piezo_buzzer,1.1)      # PWM객체 생성 및 1.1Hz 설정
p.start(50)                        # dutycycle 50%
                                    # piezo는 frequency를 수정함
 
for freq in school_song:            # 각음계에 해당하는 문자를 freq에 담아 반복
        p.ChangeFrequency(hz[freq]) # hz딕셔너리에 키값으로 사용하여 주파수반환받아서 해당값으로 변
        time.sleep(0.3)           
 
p.stop
GPIO.cleanup()