본문 바로가기
라즈베리파이_피코_피코 W/마이크로파이썬

04. 라즈베리파이 피코 부져제어

by 땜블리 2023. 2. 26.
728x90
반응형
SMALL

안녕하세요 땜블리 입니다.

라즈베리파이 피코 베이직 트레이닝 보드를 이용한 부져 제어를 진행 하겠습니다.

베이직 트레이닝 보드는 아래에서 확인이 가능합니다.

https://ttcw.tistory.com/4

 

라즈베리파이 피코 베이직 트레이닝보드 구성

라즈베리파이 피코 보드의 펌웨어실습을 위한 베이직 트레이닝보드를 소개 합니다. 현재 네이버 스마트스토어에서 판매가 진행되고 있습니다. 라즈베리파이 피코 베이직 트레이닝 보드 라즈베

ttcw.tistory.com

1) 부져 제어 구동 원리

(1) 동작설명

일반적으로 우리가 알고 있는 부저(Buzzer)는 피에조 부저(Piezo Buzzer)라고 하는 것입니다.

피에조 부저는 피에조 효과를 이용한 부저인데, 피에조 효과란 수정, 세라믹과 같은 물체에 전기적인 신호를 주면 물질이 수축, 신장을 하는 효과를 말합니다. 이러한 물체 위에 얇은 판을 붙여주면 소리가 나는 소자, 이것을 피에조 부저라고 합니다.

하지만 전기적인 신호만 준다고 해서 피에조 부저가 울리지 않습니다. 판을 떨리게 하는 신호를 만들어주어야 합니다. 주로 PWM 신호를 사용합니다. PWM 신호를 사용하여 각 음계에 맞는 주파수를 생성하여 판을 떨리게 함으로써 다양한 소리를 낼 수 있습니다.

2) 부져 구동 제어

(1) 동작설명

음계 주파수를 미리 등록 하여 PWM 출력으로 부저신호를 주어 소리를 출력합니다.

buzzer.duty_u16(30000) // pwm 신호를 발생합니다.

buzzer.freq(frequency) // 신호의 주기를 설정합니다.

playsong(mysong): // 음계 주파수 출력하여 소리를 출력합니다.

while True: 실제 동작되는 코드입니다, (무한루프)

 

(2) 코드작성

main.py

import buzzer

buzzer.py

from machine import UART, Pin,PWM
from time import sleep
led1 = Pin(2,Pin.OUT)
led2 = Pin(3,Pin.OUT)
buzzer = PWM(Pin(6))
tones = {
"B0": 31,"C1": 33,"CS1": 35,"D1": 37,"DS1": 39,"E1": 41,"F1": 44,"FS1": 46,
"G1": 49,"GS1": 52,"A1": 55,"AS1": 58,"B1": 62,"C2": 65,
"CS2": 69,"D2": 73,"DS2": 78,"E2": 82,"F2": 87,"FS2": 93,"G2": 98,
"GS2": 104,"A2": 110,"AS2": 117,"B2": 123,"C3": 131,"CS3": 139,
"D3": 147,"DS3": 156,"E3": 165,"F3": 175,"FS3": 185,
"G3": 196,"GS3": 208,"A3": 220,"AS3": 233,"B3": 247,"C4": 262,"CS4": 277,"D4": 294,"DS4": 311,
"E4": 330,"F4": 349,"FS4": 370,"G4": 392,"GS4": 415,"A4": 440,"AS4": 466,"B4": 494,"C5": 523,
"CS5": 554,"D5": 587,"DS5": 622,"E5": 659,"F5": 698,
"FS5": 740,"G5": 784,"GS5": 831,"A5": 880,"AS5": 932,"B5": 988,"C6": 1047,"CS6": 1109,"D6": 1175,
"DS6": 1245,"E6": 1319,"F6": 1397,"FS6": 1480,"G6": 1568,"GS6": 1661,
"A6": 1760,"AS6": 1865,"B6": 1976,"C7": 2093,"CS7": 2217,"D7": 2349,"DS7": 2489,"E7": 2637,
"F7": 2794,"FS7": 2960,"G7": 3136,"GS7": 3322,"A7": 3520,
"AS7": 3729,"B7": 3951,"C8": 4186,"CS8": 4435,"D8": 4699,"DS8": 4978
}
song = ["E5","G5","A5","P","E5","G5","B5","A5","P","E5","G5","A5","P","G5","E5"]
mario = ["E7", "E7", 0, "E7", 0, "C7", "E7", 0, "G7", 0, 0, 0, "G6", 0, 0, 0, "C7", 0, 0, "G6",
         0, 0, "E6", 0, 0, "A6", 0, "B6", 0, "AS6", "A6", 0, "G6", "E7", 0, "G7", "A7", 0, "F7", "G7",
         0, "E7", 0,"C7", "D7", "B6", 0, 0, "C7", 0, 0, "G6", 0, 0, "E6", 0, 0, "A6", 0, "B6", 0,
         "AS6", "A6", 0, "G6", "E7", 0, "G7", "A7", 0, "F7", "G7", 0, "E7", 0,"C7", "D7", "B6", 0, 0]
def playtone(frequency):
    buzzer.duty_u16(30000)
    buzzer.freq(frequency)
def bequiet():
    buzzer.duty_u16(0)
def playsong(mysong):
    for i inrange(len(mysong)):
        if swCount ==1:
            if (mysong[i] =="P"or mysong[i] ==0 ):
                bequiet()
            else:
                playtone(tones[mysong[i]])
        else: break
        sleep(0.2)
    bequiet()
swCount=1    
while True:
    led1.value(0)
    playsong(mario)
    led1.value(1)
    sleep(1)
반응형

 

728x90
반응형
LIST

댓글