來土炮樹莓派音響吧

Kenny Chen
13 min readJun 7, 2020

--

先看成品:

一、針對樹莓派音響,還有哪些不滿意?

我的樹莓派音響(準確來說是播放器)就是用樹莓派主板加上DAC擴展板,再插上燒錄好 volumio(或其他播放軟體)的Micro SD卡,然後開機接上網路從NAS或網路電臺上抓歌來播放,看是直接上3.5孔徑的耳機還是接到擴大機進行播放…就是這麼簡單。

這裏現不去討論爲什麼要用樹莓派音響,也不去戰樹莓派音響的音質是否合格,這裏只單假設您已經接受樹莓派音響並已經實際將其納入您的音樂器材行列之中了。接下來我們要問的是:

針對目前組好的樹莓派音響,您覺得還有哪些需要改善的地方呢?

哦,請容許我暫時排除掉音質部分的改良(這部份日後有機會再來討論),我們暫時侷限在操作方面如何?

就最陽春的組合來看,讓我覺得還不滿意的地方大概有如下這些:

  1. 沒有漂亮的外殼
    雖然有些地方可以弄到狗骨頭或是緊湊型外殼,但一點也不漂亮,難入法眼!
  2. 沒有即時的顯示器
    要看播放資訊得連接好網路用手機才能看。而且預設上也沒有HDMI輸出,要安裝plug-in才可以接到電視或電腦熒幕。
  3. 沒有電源開關
    這點其實有點見仁見智,畢竟樹莓派的耗電量非常少,一般來說沒必要關機。但習慣了家電的使用特性,不能關機斷電總有點毛毛的。更討厭的是,如果已經關機又要重新插電才能開機,這一整個low到不行啊!
    如果有一個電源按鈕:按一下開機、再按一下關機,這樣才符合期待嘛…
  4. 沒有遙控器
    雖然我們可以用手機或電腦來操作樹莓派音響,但有時候只是想前進或後退一首歌曲或調整一下音量,手機的操作還是不及直接用遙控器按一下來得方便直接。況且,對於懶惰的人,每次開機接電還要屁股脫離沙發,實在是非常不情願的事情!

花些時間細想,應該還有很多其他地方無法讓人滿意… 不過,這篇文章的目的主要是解決以上這四個問題。

二、改良構思

2.1 外殼

看過網路上有人用不鏽鋼或是用木頭、亞克力材料 DIY 出自己喜歡的外殼,都比網路上買到的套餐外殼好看很多!

我的構思是弄一個高質感的音響機箱來打造外殼。找了網絡,發現淘寶有專門賣鋁材機箱外殼的,價格沒有很貴而且還說可以代客挖孔!這實在太棒了!

我用圖紙將量好的各個孔徑位置及尺寸先出來,再請朋友用CAD軟體畫出設計圖。然而當我把設計圖報給賣家之後都覺得太麻煩、要有一定量才願意打孔。後來我又在臺灣找了幾家專門作雷射切割的廠商,報價都很貴!最便宜的也要NT$2000一個(前後面板)… 比機箱本身還要貴幾倍!無法接受啦~

後來在一次偶然的機會跟廠商的業務聊天,他說有兄弟可以幫忙,而且可以免費支援!於是我就請託業務帶圖紙與面板過去加工,總算解決了我的難題!

下面是我畫的圖紙與面板:

爲求所有接頭的方向都處於同一塊面板上,所以我選擇了 X4000 這張DAC擴展板。

如果找其他DAC擴展板則有可能與樹莓派的插頭不同方向,要怎麼打孔就很傷腦筋了。我想到的是再用轉接線延伸到同一面板去,不管是轉接樹莓派或是DAC擴展板,只要集中在同一面板上挖孔就好。

2.2 顯示熒幕

細心的讀者或許發現我的前面板圖紙有變更了一個方孔,是因爲我臨時換掉了顯示器。在設計初期,我打算用很陽春的只能顯示英文與數字的16x2 LCD液晶顯示器:

等業務幫我把面板拿去給他朋友之後,我決定改用2.2寸TFT面板更好:

雖然這塊顯示器自帶四顆操作按鈕,但我暫時用不上。選用這塊是因爲它直接支援樹莓派,改動的地方不多。

2.3 電源開關

大家都知道樹莓派的電源直接吃5v DC,前三代都是micro USB插座,基本上不是Type-C的Android手機充電設備都可以給樹莓派就用。雖然我們可以選購帶開關的充電線,但實際上只能開機,關機的時候是不會切斷樹莓派的電力、也不能在待機的狀態下開機。

我的構思是另外裝一個變壓器進機箱裏面,我初步選擇的是明緯開關電源,功率沒很大,3A應該也夠了:

然後再裝一個自復位的按鈕開關(通常是給電腦用的那種,非自鎖型)來啓動或關閉電源:

在待機的情況下按一下就接通樹莓派電源、在開機的狀態下按一下就讓樹莓派進入關機程序(或是按3秒就立即切斷電源)。

2.4 遙控器

雖然樹莓派板子本身沒有紅外線接受器,但很多款DAC擴展板都自帶了紅外線接受器,偏偏我挑選的X4000這塊板子卻沒有~~~ Orz

因此我需要另外購買紅外線接收器,同時帶一顆LED顯示待機電源以及紅外線的訊號接收狀態:

然後,再找一隻沒有太多按鈕的硬殼遙控器:

基本上,任何一款紅外線遙控器都可以的。如果家裏有淘汰的家電其實可以將遙控器留下來使用。遙控器的操作功能不多,基本上就是播放、暫停、上一首、下一首、提高音量、降低音量、靜音等這些基本的操作。我曾經試過用它來操作滑鼠的功能,但發現不是很順暢,而且在2.2寸的顯示器裏面也不容易安排畫面,於是就放棄了滑鼠的操作。複雜的操作還是交給手機跟電腦吧。

但值得一提的是:我的設計除了用按鈕來開關樹莓派電源外,紅外線遙控器也是可以做同樣的操作,而且不會衝突。也就是我可以隨時用其中一個來操作開機或關機,只是紅外線遙控器無有做到長按數秒強制關機而已。

三、設計

3.1 先畫電路圖

由於本人並非電子/電機出身,所謂的電路圖其實對我來說是一竅不通的!大致上是畫給自己懂就好,至於符號標識什麼的完全是亂來的啦!(接受過正規訓練的大大千萬要忍住不要打我哦,如果可以幫我重新畫一張就更好了!呵呵…)

下面這張圖是我參考了好幾個不同來源的設計,然後一邊實作一邊修改而成的:

連接的單元依次排列是:

  • 最上面的LCD液晶顯示器(因爲後來換成TFT顯示器了,請忽略之)
  • 再下來是樹莓派
  • 中間是ARDUINO (UNO 3)
  • 再下面是RELAY-1
  • 最下面是自復位5線開關
  • 右上是RELAY-2
  • 右下紅外線接收器

3.1.1 樹莓派的GPIO腳位

我這裏畫得很簡單。完整的可以參考下圖:

我會用到的腳位大致有如下這些:

  • PIN02 (5v):連接到RELAY-1的NO
  • PIN06 (GND):接地
  • PIN08 (GIOP14):連接到ARDUINO的A0腳位
  • PIN15 (GPIO22):連接到RELAY-2的NO
  • PIN17 (3.3v):連接到RELAY-2的COM
  • PIN37 (GPIO26):並聯到ARDUINO的11腳位與IR接收器的S(Out)
  • PIN39 (GND):先接一顆47K電阻再並聯到ARDUINO的GND、IR接收器及自復位開關的負腳(-),再透過220歐姆電阻接到自復位開關的NO與ARDUINO的2號腳位

3.1.2 ARDUINO 的腳位

詳細腳位參考下圖:

會用到的腳位大致如下:

  • A0:連接到樹莓派PIN8(GPIO14)
  • GND:並聯RELAY-1與RELAY-2的負腳(-)
  • 5V:並聯到RELAY-1、RELAY-2、IR與自復位開關的正腳(+)與自復位開關的COM
  • 2號腳位:連接自復位開關的NO再透過220歐姆並聯到自復位開關與IR接收器的負腳(-)再接到ARDUINO的GND、及透過4.7K電阻接到樹莓派的PIN39(GND)
  • 5號腳位:連接到RELAY-1的IN
  • 6號腳位:連接到RELAY-2的IN
  • 11號腳位:並聯到IR接收器的S(Out)與樹莓派的PIN37(GPIO26)
  • 5V:接5v電源供電
  • GND:接地

3.1.3 RELAY-1 的腳位

  • NO:接到樹莓派的5V
  • COM:接5V電源
  • IN:接到ARDUINO的5號腳位
  • 負(-):並聯RELAY-2的負腳(-)及接到ARDUINO的GND
  • 正(+):並聯RELAY-2的正腳(+)及接到按鈕的正(+)及COM、以及ARDUINO的5V與IR接收器的正(+)

3.1.4 按鈕開關的腳位

  • NO:接到ARDUINO的2號腳位、再透過200歐姆電阻接回負(-)腳與IR的負(-)腳與ARDUINO的GND,然後再透過4.7K電阻接到樹莓派的GND
  • COM:接回正(+)腳還有RELAY-1與IR的正(+)腳、再接到ARDUINO的5V

3.1.5 RELAY-2 的腳位

  • NO:接到樹莓派PIN15 (GPIO22)
  • COM:接到樹莓派的PIN17 (3.3v)
  • IN:接到ARDUINO的6號腳位

3.1.6 IR接收器的腳位

  • S:接到ARDUINO的11號腳位與樹莓派PIN37 (GPIO26)

3.2 運作原理

3.2.1 待機

待機時只有ARDUINO維持供電狀態,同時供電給如下組件:

  • RELAY-1
  • RELAY-2
  • IR接收器
  • 按鈕開關

3.2.2 開機

  • 紅外線開機
  1. 紅外線接收器會將訊號傳到ARDUINO的11號腳位(樹莓派無感)
  2. ARDUINO判斷是否爲開/關碼,如果是:
    - 從5號腳位送出高位訊號到RELAY-1
    - 從6號腳位送出高位訊號到RELAY-2
  3. RELAY-1將樹莓派的5V電源接通、
    RELAY-2則接通樹莓派PIN15 (GPIO22)與PIN17 (3.3v)
  4. 樹莓派進入開機程序;並接通PIN08 (GIOP14)到ARDUINO的A0的電壓
  5. 樹莓派開機完畢
  • 按鈕開機
  1. 當開關按鈕按下時,會短暫接通ARDUINO的2號腳位
  2. 然後ARDUINO將會:
    - 從5號腳位送出高位訊號到RELAY-1
    - 從6號腳位送出高位訊號到RELAY-2
  3. RELAY-1將樹莓派的5V電源接通、
    RELAY-2則接通樹莓派PIN15 (GPIO22)與PIN17 (3.3v)
  4. 樹莓派進入開機程序;並接通PIN08 (GIOP14)到ARDUINO的A0的電壓
  5. 樹莓派開機完畢

3.2.3 關機

  • 按鈕關機
  1. 當開關按鈕按下時,會短暫接通ARDUINO的2號腳位
  2. 然後ARDUINO從6號腳位送出低位訊號給RELAY-2
  3. RELAY-2斷開樹莓派PIN15 (GPIO22)與PIN17 (3.3v)的連線
  4. 樹莓派偵測到連線中斷會進入關機程序
  5. 樹莓派關機完畢

* 如果按鈕持續接通3秒

  1. 從5號腳位送出低位訊號到RELAY-1
  2. RELAY-1將樹莓派的5V電源切斷
  3. 強制開機完畢
  • 紅外線關機
  1. 紅外線會將訊號傳到樹莓派PIN37(GPIO26);ARDUINO會忽略這個訊號
  2. 樹莓派判斷訊號是否爲開/關碼,然則會進入關機程序
  3. 樹莓派關機完畢
  • 樹莓派關機後
  1. ARDUINO偵測到A0的電壓消失超過2秒後
  2. 透過5號腳位傳送低位訊號到RELAY-1
  3. 透過6號腳位傳送低位訊號到RELAY-2
  4. RELAY-1將樹莓派的5V電源切斷
  5. 恢復待機狀態

四、驗證概念(POC)

4.1 準備一些工具

當設計有了之後,我們需要驗證概念(POC),這階段很難一次就能順利通過的!一般來說,我們需要準備一些工具材料來反覆測試驗證:

  • 一塊麪包
  • 一條樹莓派GPIO排插
  • 一些杜邦線

這些材料在網路上一般都有套餐可以選購,也都很便宜。我使用的是如下這樣的:

爲了方便接線,我還買了一塊樹莓派GPIO延伸座:

隨着任務展開,可能需要的工具會越來越多:

4.2 用麪包板來跳線

麪包板是驗證設計的基本工具,主要是把設計中的各組件腳位進行連線:

跳線的時候要很謹慎,一不小心可能會將你的零件燒掉!這個階段基本上不需要插上DAC擴展板,因爲也是怕不留神就把板子弄懷…

有時候,測試到一半會發現更好的設計,這時候有麪包板就真的很方便!等到所有功能都測試驗證過,就可以將設計圖重新畫一個版本出來了。

4.3 製作洞洞板

洞洞板有很多個孔讓我們把一些電子零件焊接上去,同時用焊接方式將連線接通。一般來說,我們不太希望上面再用跳接線來連接(迫不得已還是會啦),所以要花些時間來進行線路的設計。

在我的設計裏,其實需要焊接的零件很少,基本上是用來集線用的:

(正面)

(背面)

最後就是透過洞洞板將各個組件串接起來:

五、組裝

當設計概念通過驗證之後,最後就是將所有組件塞進機箱裏面了。

最難的部分是開孔,因爲我自己沒有工具(圓孔還好,方孔比較難),我只有量好各個開孔的位置與尺寸,其他就是請別人幫忙了。不過,我會將個部件先鎖在一塊亞克力板上,然後再鎖到機箱底板去。因此,在量孔位的時候,要預留一些高度給亞克力板與銅腳就是了。

當各組件固定位置後,就可以接線了:

對了,這裏補充一下:由於後來我改用2.2吋的TFF顯示器,用40pin延伸排線來連接的。需要特別注意的是這種延伸排線不好找,要確定排線兩端是一公一母才能用哦~ 此外,因爲我已經使用了GIPO26來接收紅外線訊號,因此需要將PIN37這條線剪斷,要不然會干擾到紅外線的傳輸:

最後的成品:

六、後序

到此,基本的硬體部分算是完成了。至於軟體的設定、以及程式碼部分,請參考 Part-II 文章

老實說,對於音響與電子小弟真的是門外漢,設計與做法應該還有不少值得改良的地方。歡迎各位同好與前輩指教!

— — END — -

2020/06/07

--

--