본문 바로가기
Coding/Raspberry pi - node.js

Buzzer 제어하기

by hyun-am 2019. 10. 6.

Buzzer란?

 

먼저 Buzzer 모듈은 Piezo Speaker이랑 같은말입니다.

 

이것은 압전물질(수정, 세라믹)에 전압을 가하면 떨림이 발생하는데, 이 떨림으로 얇은 판을 대면 판과 부딪혀 소리가 발생합니다.

압력을 주게되면 전압이 발생하는 센서라고도 할 수 있습니다.

 

Buzzer에는 대표적으로 두가지 종류가 있는데 Passive buzzer모듈과 Active buzzer 모듈이 있습니다.

 

passive buzzer 모듈

 

전기 신호를 공급하더라도 짧은 시간만 소리를 냅니다.

주파수(1.5kHz ~ 2.5kHz)를 달리하면 각각 다른 Tone을 생성합니다.

PWM(Pulse Width Modulation)기법이나 Delay를 이용하여 코딩을 합니다.

다양한 소리가 가능합니다(음계연주 가능)

 

Active buzzer 모듈

 

전기신호를 공급하면 소리를 지속적으로 냅니다.

신호를 약 2.5kHz 주파수로 소리를 생성하므로 소리 변화가 다양하지 못합니다.

소리가 Passive에 비해서 매우 큽니다.(85db / 10cm)

 

Buzzer 소리 제어 자바스크립트

 

먼저 Buzzer의 구조는 아래와 같습니다. 

 

 

Buzzer가 1초 울리고 꺼지고 반복하는 코드를 작성하겠습니다.

이때 Buzzer의 wpi번호는 29번으로 하겠습니다.

 

const gpio = requre('node-wiring-pi');
const BUZZER = 29;

const TurnOn = function(){
    gpio.digitalWrite(BUZZER,1);
    console.log("BUZZER On");
    setTimeout(TurnOff,1000);
}

const TurnOff = function(){
    gpio.digitalWrite(BUZZER,0);
    console.log("BUZZER OFF");
    setTimeout(TurnOn,1000);
}

process.on('SIGINT',function(){
    gpio.digitalWrite(BUZZER,0);
    console.log("exit");
    process.exit();
    });
    
gpio.setup('wpi');
gpio.pinMode(BUZZER,gpio.OUTPUT);
setImmediate(TurnOn);

 

LED와 BUZZER제어하기

 

빨간색 LED를 1초 동안 켜고 난 뒤에, LED를 끄고 바로 100ms 동안 Buzzer소리가 울리는 코드

 

BUZZER의 wpi 번호는 24, LED의 wpi 번호는 29로 설정하였습니다.

 

코드는 아래와 같습니다.

 

const gpio = require('node-wiring-pi');
const LED = 29;
const BUZZER = 24;

const TurnOnLed = function(){
    gpio.digitalWrite(LED,1);
    gpio.digitalWrite(BUZZER,0);
    console.log("LED On");
    setTimeout(TurnOffLed,1000);
}

const TurnOffLed = function(){
    gpio.digitalWrite(LED,0);
    gpio.digitalWrite(BUZZER,1);
    console.log("LED Off");
    setTimeout(TurnOnLed,100);
}

process.on('SIGINT',function(){
    gpio.digitalWrite(LED,0);
    gpio.digitalWrite(BUZZER,0);
    console.log("exit...");
    process.exit();
});
gpio.setup('wpi');
gpio.pinMode(LED,gpio.OUTPUT);
gpio.pinMode(BUZZER,gpio.OUTPUT);
setTimeout(TurnOnLed,100);

 

 

댓글