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

04. Circuit 파이썬 라즈베리파이 피코 W 부저 제어

by 커피하는조이 2023. 3. 13.
728x90
반응형
SMALL

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

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

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

https://ttcw.tistory.com/4

 

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

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

ttcw.tistory.com

1) 부져 제어 구동 원리

(1) 동작설명

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

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

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

2) 부져 구동 제어

 

(1) 동작설명

 

버튼을 누르면 부저가 울립니다.

 

import pwmio       # 부저 사용을 하기위한 pwm 함수 가져오기

buzzer = pwmio.PWMOut(board.GP6, frequency=660, duty_cycle=0,
                      variable_frequency=True) # pwm 핀 설정 및 주파수 설정

buzzer.duty_cycle = 2 ** 15 # 부저 객체에 듀티비 사이클 출력 

buzzer.duty_cycle = 0  # 부저 출력 0 (OFF)

반응형

(2) 소스코드

code.py

import time
import board
import digitalio
import pwmio

button = digitalio.DigitalInOut(board.GP22)
button.switch_to_input(pull=digitalio.Pull.UP)
buzzer = pwmio.PWMOut(board.GP6, frequency=660, duty_cycle=0,
                      variable_frequency=True)

while True:
   
    
    if button.value == False:
       print("You pressed the button!")
       buzzer.duty_cycle = 2 ** 15 
       time.sleep(0.5)
       buzzer.duty_cycle = 0

 

 

(3) 동작 결과

 

 

3) 멜로디 출력하기

(1) 동작설명

 

음계를 등록 하여 멜로디를 출력해보겠습니다.

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_music(melody_list): # 출력 함수

SMALL

(2) 소스 코드

code.py

import time
import board
import digitalio
import pwmio

   # 음계 주파수 값 정의
C4 = 261
D4 = 294
E4 = 329
F4 = 349
G4 = 392
A4 = 440
B4 = 493
C5 = 523

button = digitalio.DigitalInOut(board.GP22)
button.switch_to_input(pull=digitalio.Pull.UP)
buzzer = pwmio.PWMOut(board.GP6, frequency=660, duty_cycle=0,
                      variable_frequency=True)


# 음악 데이터 정의
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_music(melody_list):
    for note, duration in melody_list:
        # 해당 음계를 지정된 시간 동안 출력
        buzzer.frequency = note
        buzzer.duty_cycle = 65535 // 2  # 50% duty cycle
        time.sleep(duration)
        # 부저 출력 정지
        buzzer.duty_cycle = 0
        time.sleep(0.1)
        
while True:
    
     if button.value == False:
         # 음악 출력
         play_music(melody)

 

(3) 동작 결과

 

 

728x90
반응형
LIST

댓글