[Arduino World] 開門音樂盒:歡迎光臨-謝謝惠顧 Arduino & MP3的應用

    開門音樂盒是我摸索Arduino以來,首次為家居DIY的應用實

    家中客廳與玄關之間有扇拉門式的防蚊紗門,小孩進出客廳經常未能隨手將紗門緊閉,禮請蚊子"歡迎光臨",大大方方讓蚊子飛進門。

    為了避免紗門大開,於是動手在紗門上方安裝磁簧開關,再配合MP3喇叭播放器,只要紗門打開,就會自動播放音樂,提醒關門。

↑通電即開的MP3喇叭播放器。

    這只從網路買到的MP3喇叭播放器,附有音量調整鈕,內置記憶體可錄製約3分鐘長的MP3檔案,通電即播放。安裝後使用了半年,雖然達到預期的效果,可惜只有單一曲目,老調重彈久了難免讓人聽了奄奄一息。這時候Arduino就該勇於現身、當仁不讓了。決定了Arduino 的型號Nano、再搭配價廉又實用的DFPlayer mini,便著手採買相關材料,設計自己的開門音樂盒進階版。


材料

  • Arduino Nano
  • DFPlayer mini(MP3插卡播放器)
  • 2吋3W喇叭
  • 自復開關按鈕*2(音量調整按鈕)
  • 門窗磁簧開關
  • DS1307RTC
  • HC-06藍牙模組
  • 黑色萬用盒160*80*32mm
  • 線材

    原本的MP3喇叭,通電即播放,感覺不到任何延遲,但是DIY的版本,由於DFPlayer mini需要外插Micro SD卡,通電開機後會有3秒的準備時間才能聽得到聲音。為了避免延遲,不能再沿用原先的通電開機架構。主機必須開機待命,隨時接收來自門窗磁閥開關的觸發信號,管控音樂的播放。測量過主機的待機耗電約5伏46毫安,二十四小時常開仍在合理的接受範圍。

    我插了一片8GB SD卡,對我目前的應用而言,8GB實在是巨無霸的容量,但這已是我能找到最小容量的SD卡。我把收藏的西洋老歌與療癒音樂CD轉換成MP3檔案,十幾張CD占用不到1GB的容量。

    DFPlayer mini提供了簡單實用的程式庫,讓非軟體專業的使用者也能迅速上手。我的需求很簡單,開門時隨機播放任一曲目,關門時就停止播放,這些都難不倒Arduino與DFPlayer mini彼此的配合無間DFPlayer mini支援音量的調整,原本設計以電位器當作調整音量大小的旋鈕,但是測試結果發現電位器精確度不足,難以掌控旋鈕的調整幅度(也許該質疑我的軟體設計能力?),後來改採兩顆自動復歸式按鈕開關取代電位器,分別作為音量調升與調降的觸動元件。

小小心得:對DFPlayer mini下達指令到實際動作發生往往有幾個毫秒的延遲,若能掌握到這個時間差,不要一次連續餵太多指令讓它嗆到,就能對DFPlayer mini的操控揮灑自如。


量身訂做

        DIY的好處就是隨時能夠按照自己的需求量身訂做。我在音樂盒內設定了家人的生日資料,生日當天特別播放生日快樂歌慶賀,給家人一點意外的驚喜;聖誕節、元旦或農曆春節,就來首應景的節慶音樂湊熱鬧。這些特殊功能需借助即時時鐘模組DS1307 RTC的幫忙才能正確比對日期。

        音樂盒大多數時間都是安靜閒置的,為了不讓它太過無聊,我又加上整點報時,功能就像一台咕咕鐘,並且能在不同時段響起不同的咕咕音調。

        為了讓手機可以無線遙控音樂盒,藍牙模組是不能或缺的。有了藍牙功能,就可以利用手機調整音樂盒的音量、設定特定音樂的播放日期、調整RTC時間。


參考資料






開門時數百首音樂隨機播放,聽膩了再來轉錄其他的CD。

後記

        若沒有整點報時功能,儘管時間誤差再大,也不會發生特殊節日播放失效。畢竟新舊日子的交換在半夜,即使誤差一兩個鐘頭,大白天是不會感受到的。但是自從整點報時功能上線後才敏感意識到時鐘模組RTC是多麼不可牢靠。每天時間誤差愈來愈嚴重,根本跟生活脫節,報時功能變成了玩笑與玩具。

        我將RTC DS1307換成精確度較高的DS3231型號,實際使用結果也好不到哪裡去,既然要整點報時,就是要分秒不差,否則就失去報時的意義。

        幾經思量後動手大改版,將MCU由Nano換成ESP32,唯一的目的就是看中ESP32的WiFi連線能力,隨時可呼喚NTP(Network Time Protocol / 網路時間協定)來校正內部時鐘。雖然ESP32尺寸比Nano稍微大一點,但是可以省略時鐘與藍牙模組,音樂盒內部空間反而沒有之前的擁擠。不過我仍然保留時鐘模組,將時鐘模組與NTP列入音樂盒的功能設定選項之一。

↑ESP32版本

留言