mBlock & Arduino(27)Me 音量感應器實作特效燈


Makeblock 有提供 Me 音量感應器,可以感測聲音強度,很簡單的一個電路模組:

Me 聲音感應器

音量感應器,一般常見的應用是聲控開關,像是拍兩下手來打開電視開關之類,如果有個 LED 陣列,也可以依強度來製作音量顯示器,這邊的話,就來作個特效燈,當音量高於設定值時,會 讓 Me RGB LED 模組隨機顯示顏色,然後亮度逐漸衰退,你可以在 LED 模組上放上個半透明壓克力,或者是將它放到鼓裏頭,就可以隨著音聲播放或打擊,展現些視覺效果。

影片示範

實作特效燈

特效燈的實作會用到七段顯示器、RGB LED 模組與音量感應器,RGB LED 模組接至連接埠 3,七段顯示器模組接至連接埠 4,音量感應器接至連接埠 6,七段顯示器是用來顯示目前音量大小。

我首先處理的是亮度逐漸衰退的 LED 特效,問題在於亮度逐漸衰退的過程中,如果又收到的音量又高於設定值,LED 必須再度根據新的 RGB 隨機值亮起,在 mBlock 中,可以使用廣播事件,這會讓程式比較容易處理一些:

實作特效燈

每次收到指定的廣播訊息時,就會進入迴圈,衰退的速度我選擇每次亮度減 5,迴圈會持續至 RGB 值都為 0為止。

RGB 值的產生則是在另一個迴圈中進行:

實作特效燈

這樣程式就完成了,你可以試著執行程式,然後試著製造些聲音,來看看 LED 的效果如何!

修改、上傳至 Arduino

如果想要能將程式上傳至 Arduino,由於廣播事件是 mBlock 中提供的功能,因此執行「Arduino mode」時,它會告訴你不支援廣播元件:

實作特效燈

之前的文章使用到廣播元件時,其實也都無法直接轉換為可上傳至 Arduino 的程式,當廣播訊息到來時,其底下指定的流程就會被執行,這就好比你可以指定多個同時執行的流程,然而Arduino 本身無法同時執行多個指定的程式流程,你必須適當地根據條件來自行切換流程。

就我們這個簡單的程式來說,可以如下修改:

實作特效燈

processLED 只是個自定義積木程式,也就是說,它是主程式流程的一部份:

實作特效燈

因為 processLED 就是在迴圈中呼叫,所以,processLED 自定義方塊中就不用迴圈了,只要判斷何時要執行 LED 特效就可以了,這麼一來,你就可以順利地將程式進行轉換了:

實作特效燈

由於上傳至 Arduino 執行速度較快,實際上效果會比透過 mBlock 執行來得好!