數字制造講義01-成為數字世界的建造者
數字制造講義02-Arduino入門
數字制造講義03-電路基礎
數字制造講義04-負責輸入和輸出的智能元件
數字制造講義05-軟硬件數據通信
數字制造講義06-MIDI 和 OSC 數據傳輸練習
回顧
上一節課,我們練習如何在不同軟硬件設備(手機、Max、Arduino、Ableton Live)中傳輸 MIDI 和 OSC 數據。這些都是用軟件發出聲音。
這周我們繼續通過實際的例子,學習如何用硬件發出聲音。
挑戰1:讓蜂鳴器發聲
蜂鳴器是啥?
簡單來說,它是一種一體化結構的電子訊響器,廣泛應用于計算機、打印機、復印機、報警器、電子玩具、汽車電子設備、電話機、定時器等電子產品中,作發聲器件。
蜂鳴器又可以分為有源蜂鳴器和無源蜂鳴器兩種。
它們的區別是什么?要如何區分呢?
- 有源蜂鳴器內部集成有震蕩源,只要提供直流電源就可以發聲。無源蜂鳴器沒有集成震蕩源,需要接在音頻輸出電路中才可以發聲。
- 無源蜂鳴器通的電路板通常是裸露的(如上圖右),有源蜂鳴器的電路通常被黑膠覆蓋
- 更精確的判斷方法,用萬用表電阻檔 Rxl 檔測試:用黑表筆接蜂鳴器 “+”引腳,紅表筆在另一引腳上來回碰觸,如果觸發出咔、咔聲的且電阻只有8Ω(或16Ω)的是無源蜂鳴器;如果能發出持續聲音的,且電阻在幾百歐以上的,是有源蜂鳴器。
下面我們用到的是無源蜂鳴器。
在電路中連接蜂鳴器不需要增加額外的電阻,所以接線十分簡單。在 Arduino 程序中,使用 tone
函數來指定蜂鳴器的頻率和持續時間:
int buzzerPin = 9;
void setup() {
pinMode(buzzerPin, OUTPUT);
}
void loop() {
tone(buzzerPin, 440, 500);
delay(1000);
}
挑戰2:蜂鳴器發出交替的報警聲
完成挑戰 1,我們已經基本理解蜂鳴器和 tone()
函數如何工作了。
在修改代碼之前,建議在官方文檔中查看 tone()
和 noTone()
的詳細說明。
Syntax
tone(pin, frequency)
tone(pin, frequency, duration)
Parameters
pin: the pin on which to generate the tone
frequency: the frequency of the tone in hertz - unsigned int
duration: the duration of the tone in milliseconds (optional) - unsigned long
這個挑戰只需要在代碼上做一些調整,就可以實現雙音高交替的報警器效果。
int buzzerPin = 9;
void setup() {
pinMode(buzzerPin, OUTPUT);
}
void loop() {
tone(buzzerPin, 440, 500);
delay(1000);
tone(buzzerPin, 880, 500);
delay(1000);
}
tone() 的第二個參數是音高的頻率,我們把第一個音高設為 440,第二個音高設為 880,它們各持續 500 毫秒,中間有 1 秒的間隔。這樣就形成了雙音高的警報聲。
挑戰3:用按鍵觸發聲音
現在我們有了可以發出不同音高的蜂鳴器。接著我們做一個按鈕控制發聲的小應用。
接線中使用的元件包括:蜂鳴器,按鈕,220Ω 和 10kΩ 電阻。
代碼如下:
int button_pin = A0;
int buzzer_pin = 8;
void setup() {
Serial.begin(9600);
pinMode(button_pin, INPUT);
pinMode(buzzer_pin, OUTPUT);
}
void loop() {
int buttonState = digitalRead(button_pin);
Serial.println(buttonState);
if (buttonState == HIGH) {
tone(8, 440, 200);
}
delay(50);
}
在上面的練習中,建議大家一定要動手畫電路圖、從 0 開始寫代碼,并且對代碼加上必要的注釋。這些訓練能幫助我們更快熟悉和應用所學的知識。越早練習,才可以越早簡化一些步驟。
在練習中一定會越到這樣那樣的錯誤,比如元件正負極一不小心就接反了,比如 Arduino 上傳程序時總是出錯,甚至有時候不正確的接線燒壞了元件。
錯誤是學習中最寶貴的機會,它提醒我們「此處有知識薄弱點」或者「步驟可完善的地方」。詳細記錄步驟,本身就是發現和解決問題很好的方法。把錯誤們儲蓄起來,時不時拿出來復習,就能減少錯誤發生,提高熟練程度和準確度。
所以,多動手,早犯錯,樂于在錯誤中尋找成長的路徑,是可以伴隨我們一路的好方法。