自激式與他激式蜂鳴器的差別

依照驅動信號的不同,蜂鳴器分為自激式及他激式二類,有很多不同說法,但指的都是這二種分類,如:內含(不含)線路,直流DC/交流AC Type, 有源(無源)等。

自激式的蜂鳴器是將驅動線路直接設計到蜂鳴器中,故只需給予直流電壓,內含的驅動線路,就會產生設計好的頻率及電壓給蜂鳴器發聲,所以自激式的頻率是固定的。

而他激式的蜂鳴器,需由外部線路給予1/2方波V 0-p(電磁式),或方波Vp-p(壓電式)的信號,才會發聲。

以下的電路示意與程式碼,示範情境為:以 Push Button 按壓後,使蜂鳴器發聲。

電路示意圖

Buzzer Circuit

範例程式

#define KEY 3
#define Buzzer 2

void setup()
{
Serial.begin(9600);
pinMode(KEY, INPUT_PULLUP); // 按鍵 INPUT_PULLUP
pinMode(Buzzer, OUTPUT); // 蜂鳴器 OUTPUT
digitalWrite(Buzzer, LOW); // 蜂鳴器初始不鳴叫
}


void loop()
{
Serial.println(digitalRead(KEY));
if (digitalRead(KEY) == LOW) { // When Push Button Press
BuzzerDi(10);
}
}

void BuzzerDi(int delayTime)
{
digitalWrite(Buzzer,HIGH); // Buzzer on
delay(delayTime); // delay
digitalWrite(Buzzer,LOW); // Buzzer off
}

來玩玩摩斯電碼

簡介: 劃一般是三個點的長度;點劃之間的間隔是一個點的長度;字元之間的間隔是三個點的長度;單詞之間的間隔是七個點的長度。 From: wiki

範例程式二 摩斯電碼(LED)

// From http://arduino.cc/forum/index.php/topic,43903.0.html#10

byte text[] = "Hello World"; // Transmittet text

// Morse code generator for the Arduino
// Transmitted text is placed in the first line
// Tempo sets the speed of a dot etc.
// Morde code was tanken from http://en.wikipedia.org/wiki/Morse_code
// Text is looping and prior to transmitting the active pin blinks rapidly
// Version 1.0, made by Fletcher Chr

int ledPin = 13; // Active led pin
int tempo = 500; // timing of one dot


void setup () {
pinMode(ledPin, OUTPUT);
}

void start(){ // rapid blink at startup
for(int i = 0; i < 50; i++){
digitalWrite(ledPin, HIGH);
delay(25);
digitalWrite(ledPin, LOW);
delay(25);
}
delay(7 * tempo);
}

void dot() { // we need more dots
digitalWrite(ledPin, HIGH);
delay(1 * tempo);
digitalWrite(ledPin, LOW);
delay(1 * tempo);
}

void dash() { // a dash and a splash
digitalWrite(ledPin, HIGH);
delay(3 * tempo);
digitalWrite(ledPin, LOW);
delay(1 * tempo);
}

void morse(byte letter) { // time to transmit
// Serial.println(letter, DEC);
if (letter == 'a' or letter == 'A') {dot(); dash();}
if (letter == 'b' or letter == 'B') {dash(); dot(); dot(); dot();}
if (letter == 'c' or letter == 'C') {dash(); dot(); dash(); dot();}
if (letter == 'd' or letter == 'D') {dash(); dot(); dot();}
if (letter == 'e' or letter == 'E') {dot();}
if (letter == 'f' or letter == 'F') {dot(); dot(); dash(); dot();}
if (letter == 'g' or letter == 'G') {dash(); dash(); dot();}
if (letter == 'h' or letter == 'H') {dot(); dot(); dot(); dot();}
if (letter == 'i' or letter == 'I') {dot(); dot();}
if (letter == 'j' or letter == 'J') {dot(); dash(); dash(); dash();}
if (letter == 'k' or letter == 'K') {dash(); dot(); dash();}
if (letter == 'l' or letter == 'L') {dot(); dash(); dot(); dot();}
if (letter == 'm' or letter == 'M') {dash(); dash();}
if (letter == 'n' or letter == 'N') {dash(); dot();}
if (letter == 'o' or letter == 'O') {dash(); dash(); dash();}
if (letter == 'p' or letter == 'P') {dot(); dash(); dash(); dot();}
if (letter == 'q' or letter == 'Q') {dash(); dash(); dot(); dash();}
if (letter == 'r' or letter == 'R') {dot(); dash(); dot();}
if (letter == 's' or letter == 'S') {dot(); dot(); dot();}
if (letter == 't' or letter == 'T') {dash();}
if (letter == 'u' or letter == 'U') {dot(); dot(); dash();}
if (letter == 'v' or letter == 'V') {dot(); dot(); dot(); dash();}
if (letter == 'w' or letter == 'W') {dot(); dash(); dash();}
if (letter == 'x' or letter == 'X') {dash(); dot(); dot(); dash();}
if (letter == 'y' or letter == 'Y') {dash(); dot(); dash(); dash();}
if (letter == 'z' or letter == 'Z') {dash(); dash(); dot(); dot();}
if (letter == '1') {dot(); dash(); dash(); dash(); dash();}
if (letter == '2') {dot(); dot(); dash(); dash(); dash();}
if (letter == '3') {dot(); dot(); dot(); dash(); dash();}
if (letter == '4') {dot(); dot(); dot(); dot(); dash();}
if (letter == '5') {dot(); dot(); dot(); dot(); dot();}
if (letter == '6') {dash(); dot(); dot(); dot(); dot();}
if (letter == '7') {dash(); dash(); dot(); dot(); dot();}
if (letter == '8') {dash(); dash(); dash(); dot(); dot();}
if (letter == '9') {dash(); dash(); dash(); dash(); dot();}
if (letter == '0') {dash(); dash(); dash(); dash(); dash();}
if (letter == ' ') {delay(5 * tempo);} // This makes 7 * tempo for space

// and now for some national/special letters
// values were foundt with Serial.print(letter, DEC)

if (letter == 166 or letter == 134) {dot(); dash(); dot(); dash();} // æ/Æ is recognized as 166/134
if (letter == 184 or letter == 152) {dash(); dash();dash();dot();} // ø/Ø is recognized as 184/152
if (letter == 165 or letter == 133) {dot();dash();dash();dot();dash();} // å/Å is recognized as 165/133

delay(2 * tempo); // this makes 3 * tempo for letter end, and 7 * tempo for space
}


void loop () {
start();
for (int i = 0; i < sizeof(text); i++) {
morse(text[i]);
}
}

思考練習