Did you know that you can navigate the posts by swiping left and right?

buzzer장착

01 Mar 2018 . category: tech . Comments
#mechatronics #atmega128 #buzzer

버저(buzzer)는 소리 신호 알림 장치이며, 기계, 전자기계, 압전 방식으로 되어 있다. 우리가 일반적으로 보는 부저는 피에조 부저(piezo buzzer)인데 전압을 걸어주면 그에 따라 떨림이 발생하면서 그 원리로 소리가 나게되는되 반대로 피에조에 압력을 주게되면 전압이 발생한다. 여기서 나는 전압을 걸어주어 소리가 나게 하는 방식을 사용하였다. 피에조 부저는 2가지 종류가 있는데 일반적인 부저는 전압만 넣으면 아무소리도 나지 않고 떨림을 만들어 줘야한다 그래서 우리는 입력으로 주파수를 넣어준다. 다른 하나는 내부에 발진회로가 들어가 있는 부저인데 이 부저의 경우는 전압만 넣어주어도 소리가 나게 된다.

PWM을 사용하는 부저는 원하는 음계의 소리를 낼 수 있고 제어가 불편한 반면 회로 내장형은 전원만 넣어주면 소리가 나지 못하고 대신 PWM으로 음량 조절은 가능해진다.

PORTB의 4번핀을 연결해주어 OCR0값을 받아 PWM을 조절하여 코드를 짜보았다. motor_on으로 잠금이 풀리는 동시에 소리가 나도록 코드를 짜주었고 풀리는 시간을 쪼개서 소리의 음을 PWM으로 변형해 평소에 우리가 쓰는 도어락 소리와 비슷하게 내보려 하였다. motor_on 내부 함수에 넣어주었고 코드를 보면

void motor_on(void)
{
    tim0_cnt =0;
    change=0;
    TIMSK = 0x40;   //TOIE2 = 1
    TCCR2 = 0x02;   //일반모드, 프리스케일 = CK/8
    TCNT2 = 238;
    TCCR0 = 0x62;
    TCNT0 = 0x00;
    OCR0 = 0x00;
    SREG = 0x80;
    
    tim0_cnt=0;
    PORTC = 0xFF;
    
    while(1)
    {
        if(tim0_cnt >= 2000)
        {   
            tim0_cnt=0;
            PORTC = 0xFF;
            change++;
            if(change == 1)
            {
                OCR0 = 17; // 부저 PWM 조절
                PORTB = 0x10; // 부저 출력
            }
            else if(change == 30)
            {
                OCR0 = 24;
                PORTB = 0x10;
            }
            else if(change == 60)
            {
                OCR0 = 51;
                PORTB = 0x10;
            }
            if(change == 100)
            {
                mot_pos = (mot_pos + 1) % 2;
                change = 0;  
                Motor_off;
                motor_off();
            }
        }
        if(tim0_cnt >= rc_time[0])
        {
            PORTC = 0x00;
        }
    }
}

대략 이런식으로 코드를 짜보았고 하지만 아쉽게도 부저가 내부에 발진회로가 있는 부저여서 음계는 정확히 맞추지 못하였다. 하지만 눌릴때마다의 소리와 열릴때의 소리를 넣어준 것으로 만족하였다. 다음에 소리를 넣는 작품을 만들때 이 경험이 많은 도움이 될 것 같다.

자료지식은 http://maduinos.blogspot.kr/2015/12/07multi-function-shield-buzzer.html 에서 배울 수 있었습니다.


Me

github를 이용해 만들어본 블로그입니다.