步驟1:獲得您想要實(shí)現(xiàn)的概述
在我們的案例中,我們決定購(gòu)買此收音機(jī),因此我們只需要專注于內(nèi)部-
由于我們將無線電功能與推子和揚(yáng)聲器保持在一起,因此它們是引起困惑的關(guān)鍵。
但是我們將無線電中的按鈕功能更改為輸入鍵。為謎語。因?yàn)槲覀冋J(rèn)為兩個(gè)按鈕以前的背景燈很無聊,所以我們將它們更改為RGB,從而為謎語提供了額外的支持。
作為收音機(jī)的核心,我們選擇了由ATMega328支持的Raspberry Pi B +,它應(yīng)該負(fù)責(zé)按鈕,LED,伺服(用于密碼箱)和謎語的一些關(guān)鍵功能。
Raspberry具有強(qiáng)大的處理能力,但體積很小,無法在表殼中占據(jù)一席之地。
基于這些輸入和輸出的可能性,我們創(chuàng)建了一些謎語,每個(gè)謎語都有其獨(dú)特之處解決方法。這些可以在其他PDF“謎語”中找到。
步驟2:打開無線電并刪除不必要的部分
我們已經(jīng)知道哪些部分是必需的,讓我們擺脫那些不再有用的部分。
其中很多。實(shí)際上,除了揚(yáng)聲器,顯示屏,按鈕(實(shí)際上是您所看到的),電位器以及螺絲以外的所有東西。而且由于我們需要的電流比變壓器提供的電流還要多,因此我們也可以卸下0.6 A的小型變壓器。
無線電現(xiàn)在將非常空,這將導(dǎo)致下一部分:
第3步:獲取新零件
如前所述,我們得到了:
-Raspberry Pi B +
-ATMega328 (有時(shí)稱為AVR)
-RGB LEDs
-TDA2005作為放大器
-MCP3002(模擬數(shù)字轉(zhuǎn)換器)
另外:
以下是我們決定使用每個(gè)組件的原因:
步驟4:第一個(gè)(較小的)電路板
舊的電路板無法用于進(jìn)一步的工作,我們必須設(shè)計(jì)自己的電路板以滿足我們的要求。您應(yīng)注意螺釘和LED的斑點(diǎn),因?yàn)樗鼈儜?yīng)與舊零件和外殼兼容。我們需要在按鈕上鉆一些孔,因?yàn)镽GB LED比以前的LED稍大。由于按鈕的三個(gè)RGB LED以及另外一個(gè)作為顯示屏背光的第四個(gè)LED,應(yīng)該能夠以所有可能的組合和顏色發(fā)光,因此我們決定使用微控制器來獲取有關(guān)按鈕的所有信息以及一些按鍵功能謎語之謎,控制所有LED并控制伺服機(jī)構(gòu)的位置,伺服機(jī)構(gòu)負(fù)責(zé)密碼箱的關(guān)閉機(jī)構(gòu)。由于伺服只能由PWM控制,而Raspberrys的PWM功能已經(jīng)用于內(nèi)置聲音,因此這是微控制器的另一個(gè)動(dòng)機(jī)。所有這些組件都可以通過“串行外設(shè)接口”(SPI)進(jìn)行訪問,其中AVR處于從模式,而Raspberry處于主模式,方法是同時(shí)向AVR發(fā)送兩個(gè)字節(jié),同時(shí)向Raspberry交換一個(gè)字節(jié)。由于有多個(gè)端口,中斷以及PWM和SPI接口,因此ATMega328可以正常工作。您可能會(huì)隨意使用自己的代碼,但是我們決定使用兩個(gè)字節(jié)的第一個(gè)半字節(jié)(四位)指定不同的功能,并使用其他三個(gè)半字節(jié)作為參數(shù):
?0x0:保持當(dāng)前狀態(tài)進(jìn)程,將忽略參數(shù),僅用于更新按鈕和標(biāo)志
?0x1:靜態(tài)LED燈,每三位控制一個(gè)LED(RGB),從LSB開始
?0x2:前行燈,參數(shù)控制起始位置
?0x3:后行燈,參數(shù)控制起始位置
?0x4:旋轉(zhuǎn)燈,參數(shù)控制起始位置,但更改僅在相同的LED上發(fā)生(三步后重復(fù))
?0x5:向后旋轉(zhuǎn)光
?0x6:自動(dòng):參數(shù)是所有LED的遮罩,按下負(fù)責(zé)按鈕時(shí)亮起
?0x7-0xE:反應(yīng)測(cè)試:參數(shù)將被忽略;可能會(huì)分為不同但尚未實(shí)現(xiàn)的功能
?0xF:通過參數(shù)
設(shè)置伺服位置
您將收到的字節(jié)的結(jié)構(gòu)如下:
第一個(gè)半字節(jié)(從MSB開始的前四個(gè)字節(jié))用于反應(yīng)測(cè)試的以下標(biāo)志(在Raspberry上的軟件中尚未完全實(shí)現(xiàn)):
?位7:1,如果所有LED均為相同顏色,則為0否則
?位6:1,如果按任意鍵直到所有LED均以相同顏色點(diǎn)亮,否則為0
?位5:1,如果在所有LED均以相同顏色點(diǎn)亮?xí)r按下任何鍵,則為0,否則
?位4:1(如果已啟動(dòng)并正在運(yùn)行反應(yīng)測(cè)試,否則為0)
進(jìn)一步的半字節(jié)給出有關(guān)所按下按鈕狀態(tài)的信息:
?位3:如果按下了按鈕4(為Internet廣播功能的開關(guān)預(yù)定義,尚未實(shí)現(xiàn)),則為1,否則為0/p》
?位2:如果按下了按鈕3(最右邊的那個(gè)),則為1,否則為0
?位1:如果按下了按鈕2,則1:1(mi ddle 1),否則0
0位0:如果按下了按鈕1(最左邊的那個(gè)),則0:否則0
我們用pcb-mill制作了電路板。我們使用的文件也已上傳。為了更輕松地更新微控制器的軟件,我們?cè)陔娐钒迳系摹跋到y(tǒng)內(nèi)編程器”(ISP)接口中內(nèi)置了該控制器。像所有按鈕的下拉電阻和LED的串聯(lián)電阻一樣,將伺服器,第四按鈕和第四LED的針頭放置在其上。
步驟5:第二(主)電路板
第二個(gè)電路板采用了舊主板的功能,其中包括一個(gè)放大器。覆盆子的聲音輸出,可通過具有打開/關(guān)閉功能的對(duì)數(shù)電位器(之前也用于音量控制)進(jìn)行控制。我們決定只為放大器使用此開關(guān)功能,以避免樹莓的長(zhǎng)啟動(dòng)延遲,但在關(guān)閉時(shí)使無線電無噪聲。
次級(jí)電位器負(fù)責(zé)設(shè)置頻率。由于Raspberry沒有內(nèi)置的模數(shù)轉(zhuǎn)換器(ADC),我們使用了MCP3002,這是一個(gè)10位分辨率的兩通道ADC,也可以通過SPI訪問。因?yàn)槲覀冎恍枰粋€(gè)通道,所以我們實(shí)現(xiàn)了它來兼顧兩個(gè)通道的差異,但是可以將第二個(gè)通道用于帶有針頭和跳線的將來用途,該跳線將第二個(gè)通道接地。
請(qǐng)注意電位計(jì)的位置!我們決定重用舊的,并測(cè)量它們的舊位置和螺釘?shù)奈恢谩?/p>
由于舊的0.6 A電源不足以為所有設(shè)備供電,因此我們決定使用2 A電源。但是在為這些電源準(zhǔn)備了一些草案之后,我們決定使用舊的2A開關(guān)電源,該電源可提供1A的5V電源(用于為Raspberry,ADC,AVR和LED供電)和1A的12V電源(用于放大器)。 )。測(cè)量所有零件并將它們繪制到PCB軟件中需要花費(fèi)大量時(shí)間。但是,如果您繪制了組件和電路,則電路板的布線非常快!
由于我們的放大器提供的功率遠(yuǎn)遠(yuǎn)超過內(nèi)置揚(yáng)聲器所能提供的功率,因此我們決定使用微調(diào),以限制輸出,以免損壞揚(yáng)聲器。研磨電路板后,您必須將零件焊接到電路板上,這需要一段時(shí)間。一旦一切準(zhǔn)備就緒,您可以將其放回盒中,連接由插頭連接準(zhǔn)備的所有連接。
步驟6:構(gòu)建秘密箱
密碼箱位于收音機(jī)的背面。因?yàn)楹凶討?yīng)該自己打開,所以我們?cè)谄渲蟹胖昧艘粋€(gè)帶有伺服電機(jī)的接頭。我們用3毫米厚的MDF板對(duì)盒子以及接頭進(jìn)行了激光切割。將盒子粘上,然后擰緊伺服電機(jī)和關(guān)節(jié)。盒子和關(guān)節(jié)的矢量圖形已粘貼,因此您可以自己進(jìn)行激光切割。
盒子的側(cè)面(從外面可以看到)是剪掉收音機(jī)的前面板,所以它隱藏的時(shí)間更長(zhǎng)。
步驟7:軟件
AVR用C編程,并用編程器閃爍。請(qǐng)注意對(duì)負(fù)責(zé)的拒絕位進(jìn)行編程,以避免微控制器的預(yù)分頻器將8 MHz預(yù)先縮放為1 MHz,因?yàn)檫@會(huì)使Raspberry與AVR通信時(shí)出現(xiàn)問題。不幸的是,這不是通過代碼行而是通過IDE的接口(在我們的例子中是AtmelStudio)來完成。我們建議您閱讀二手微處理器的數(shù)據(jù)表中的負(fù)責(zé)部分!
由于我們用Java編寫了謎語代碼,因此最困難的部分是開發(fā)用于在Raspberry之間進(jìn)行通信的軟件/驅(qū)動(dòng)程序。 Pi和ATMega可以獲取按鈕和電位計(jì)的信息以及點(diǎn)亮LED。
使用庫(kù)connectionpi用C語言編寫驅(qū)動(dòng)程序非常容易。這就是為什么我們首先在C中構(gòu)建用于測(cè)試的工具的原因。我們上載了軟件,因此您將了解如何自己完成操作或僅獲取文件。使用Java,即使Java與平臺(tái)無關(guān),也可以通過Java訪問驅(qū)動(dòng)程序。圍繞它構(gòu)造一個(gè)面向?qū)ο蟮慕涌冢覀兛梢酝瑫r(shí)實(shí)現(xiàn)所有功能。
盡管如此,我們還是實(shí)現(xiàn)了這些東西:
-首先有噪音,就像在真實(shí)的收音機(jī)中一樣
-如果玩家在六個(gè)頻率中的一個(gè)附近移動(dòng),他將首先聽到背景噪音,然后變成聲音,問他一個(gè)謎或只是給他提示
-如果當(dāng)前頻率有問題,則玩家可以使用前面的按鈕來回答。
-當(dāng)所有不同頻率的問題都得到回答時(shí)正確地打開背面的盒子,玩家將獲得鑰匙或餅干之類的獎(jiǎng)勵(lì)。如您所愿。
軟件完成后,將其放在Raspberry Pi和微控制器上,關(guān)閉收音機(jī),然后開始困惑!
步驟8:記錄音頻文件。..
為使我們的代碼簡(jiǎn)單,我們使用Java的標(biāo)準(zhǔn)庫(kù)來處理音頻輸入文件。這就是為什么我們以音頻/波形格式記錄謎語的原因。由于原始謎語僅以德語錄制,因此我們只能提供所附的德語示例。另外,我們使用了一些背景。我們添加了電子管放大器的聲音效果,以使其聽起來更真實(shí),但是Raspberry內(nèi)置的“聲卡”的不良音質(zhì)已經(jīng)為我們的復(fù)古收音機(jī)帶來了良好的噪音。隨意使用自己的背景聲音。也許一些老式音樂也可以做到!或錄音機(jī)/錄音帶的聲音。為了在沒有任何輸入的情況下以某種頻率聆聽謎語之后渡過漫長(zhǎng)的橋梁,我們錄制了一些隨機(jī)注釋(ZIP中的r1.wav-r10.wav),如果匹配,則可以針對(duì)每個(gè)頻率播放。
責(zé)任編輯:wv
-
收音機(jī)
+關(guān)注
關(guān)注
58文章
596瀏覽量
76051
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論