第1步:WW2 Time Machine無線電部件列表
所需部件
舊收音機
法語波蘭語
SandPaper
Lexan撥打
Heatshrink
Raspberry Pi Zero
I2S放大器
開/關墊片
揚聲器
電源磚
MCP3002
電阻器270R
2x 10k電位器
推動開關
USB線
第2步:尋找舊收音機
第一步當然是找一個合適的舊收音機我設法在ebay上以15英鎊的價格找到了這個。有一種誘惑讓它一開始運行,但是當機箱出來并且顯示需要更換的全部電阻器和電容器陣列時,我并沒有覺得將它拆開是如此糟糕。雖然嚴格來說它不是一個1940年代的集合,但是那個時代的一些家用構建工具包肯定看起來很相似。
步驟3:刪除舊無線電并構建新機箱
將這些中的一個分開是相當簡單的,通常看起來機箱安裝在機箱上并且一切都安裝好了。因此,一旦松開并釋放旋鈕,它就會滑出。大多數都完全建立在子機箱上。我的初衷是使用一個撕開的藍牙音箱的揚聲器,但我想知道舊的揚聲器盒是否有效。令人驚喜的是,它不僅發揮了作用,而且聽起來也很棒。因此,下一步是繼續測量所有內容并在Tinkercad中構建新機箱。我重新定義了頻率撥號區域并將揚聲器保持在同一位置。此外,還添加了用于pi 0的安裝板。我把它打印在PETG中,我發現它對翹曲的抵抗力較小,所有部件的試驗似乎表明它會起作用。我必須在音量安裝方面稍微玩一下,以便新的音箱非常適合并且仍然可以通過音箱安裝。
第4步:翻新案例
當案件被剝離時,首先要做的就是決定如何處理完成。雖然情況并不太糟糕,但我最初還是想過給它一個很好的清潔,以保持磨損的銅綠外觀。通常用醋擦拭會使舊的情況變得清新,但是有一些地方清漆已經裂開,所以我決定把它剝掉。對于舊木箱,它們通常用薄木板覆蓋,但它不是那么薄,以至于你無法在它上面打磨。首先取下揚聲器格柵布,這是非常令人厭惡的,其中有大約50年的灰塵和污垢,并放在一邊。然后,幾件厚厚的Nitromors涂層,脫漆劑和舊清漆最終脫落。這必須做兩次,因為它可能在原始涂層的某些點上涂漆。為了清除一些劃痕并使其具有更好的光潔度,用一些100粗砂紙打磨,然后用中等打磨海綿進行最后打磨。將所有這些與谷物一致,然后用白酒擦拭,以清除灰塵。與此同時,盒子也用一些木膠固定,其中膠合板略微拉開。木格柵條也有一些分層,所以更多的木膠和盡可能地撬回碎片。一旦干了,我就用一把手術刀清理木頭的邊緣,用一些Tamiya丙烯酸漆涂成棕色。
我的第一個想法就是更換揚聲器布,但是看起來真實的材料的成本相當陡峭,因為它往往需要長時間銷售。經過一些老式的無線電論壇探索之后,看起來好像你可以把舊布帶回來。因此,使用冷水和大量洗滌液,我浸泡過夜,令人驚訝的是,一旦它再次變干,它就變得很干凈了。
現在我要去處理完成并最初決定給它一個清漆,然后考慮使用噴霧清漆,而在當地DIY商店的清漆/油漆島發現一瓶法國拋光。認為這將是一個很好的真實完成我決定試一試。因此,現在您需要知道法式拋光幾乎是一種藝術形式/技能,需要大量練習才能做到正確。您可以在YouTube上搜索說明,雖然看起來相當簡單但操作非常混亂。訣竅似乎是用浸在棉絨中的抹布擦亮,這樣你就可以在工作時擠出木頭上的拋光劑。如果你只是用抹布試一下,大約3/4的方式,當乙醇蒸發并且抹布開始拖動時,拋光開始變干。所以最后不是獲得高光澤度,我設法涂上幾層,用1500級紙輕輕擦拭,再涂一些,最后看起來還不錯。然而,我的指甲上仍然留有法國拋光劑污漬。
使用所有硬件進入超聲波清潔器并使用一些Silvo Polish拋光表盤時,清理其他部件變得更加容易。 Brasso可以選擇,但是Silvo和更多的肘部潤滑脂足以清潔表盤指示器。
最后,我有一個漂亮的木箱準備好時間機器本身。
本節中的步驟
1。剝去任何螺栓/表盤和布料。
2。木材用硝化物剝離案例
3。打磨單板
4。修復格柵
5.清潔揚聲器布
6.法蘭拋光外殼
7.超聲波清潔螺絲和旋鈕
8。拋光百分表
步驟5:Raspberry Pi Zero和放大器
使用普通的Raspberry PI音頻輸出非常簡單,因為它有一個音頻插孔輸出,但對于Pi Zero,沒有真正的原生選項。我嘗試了一些解決方案,你可以重新布線GPIO引腳,然后使用低通濾波器,但我從來沒有真正能夠得到一些聽起來不錯的東西,當然你也需要一個放大器來獲得可用的東西。有很多DAC帽子,但這些是為那些尋找真正好的音頻和過度殺戮這些項目的人。還有一些不錯的廉價音響帽子,內置揚聲器,但只是不夠響亮。所以我現在決定使用Adafruit的i2S放大器分線板,它可以一次性解決所有問題。請注意它是i2S而不是i2C。
你只需要幾根線就可以啟動并運行,并且有足夠的揚聲器,你可以得到一些偉大的,響亮的單聲道音頻。
第6步:進行新的撥號
這里的想法是當然是用一個顯示年份而不是頻率的表盤替換現有的表盤和玻璃。幸運的是,現有的只是一個印刷插頁,所以我把它放到掃描儀上并將其復制到Paint Shop Pro中,使用克隆工具擦掉舊數字,然后每年輸入一些新的數字。隨著玻璃,收音機中的一個被劃傷和破裂,結果也是塑料制成的。我打印出只是表圈環繞,使測試裝配變得容易,最初試圖用丙烯酸制作一個。我一般對丙烯酸沒有足夠的耐心,并在試圖鉆中心孔時最終破解它。所以我使用1.5毫米聚碳酸酯,這更容易鋼鋸和鉆孔。您可以根據您居住的地方找到它也稱為Lexan或Macrolon,它也需要一個文件,所以我很快就有一個適合的表圈和表盤。有趣的是,原始紙張上面都有輕微的金屬沉積物,我只能假設它是受原始黃銅指針影響的人,也許是一些老化過程?
第7步:音量和選擇器控件
Raspberry pi修補的一個缺點是它沒有任何原生模擬輸入。如果你添加一個簡單的ADC(模數轉換器)并且MPC3002符合這個要求并且它將模擬輸入轉換為可以在SPI總線上讀取的10位值,那么問題就不是太大了。
您發現的幾乎所有示例都適用于MPC3008,這是一個4通道設備,其代碼肯定不適用于MPC3002。似乎還有許多例子也不起作用,但有一個我可以確認作品,它的代碼可以在這里找到。
https://github.com/CaptainStouf/Adafruit-raspi-pyt.。.
使用此代碼,您可以輕松閱讀兩個頻道并使用結果。我的例子是使用一個用于卷,另一個用于日期選擇。我在某一點上也安裝了一個旋轉編碼器,但是單個轉動音量更合適,而且頻率選擇器也意味著我可以將它全部組裝起來,然后用一個很好的大案例聲明來調整年份標記的位置。當然pyhon不支持case語句所以if if else else語句將完成這項工作。
圖片顯示MCP3002位于小型原型板和10K電位器上
步驟8:電源和控制
Pi剛剛運行USB電源,因此非常容易上手,但如果只是猛拉電源,最終會破壞SD卡。有很多方法可以監控按下按鈕并啟動關機,但是您往往需要重新啟動電源才能將其重新啟動。為了解決這個問題并制作一個易于使用的項目,我使用了Pimoroni ON/OFF墊片。這可以讓你按下一次然后再打開電源然后長按它就可以完全關閉。為了使它有點便攜,我使用一個舊的電源組來處理電池充電。 Powerbanks足夠便宜,能夠在相當長的時間內運行Pi。
我按下按鈕使按鈕合適地放在舊主電源線從后面出來的位置。當Pi啟動時出現延遲時,我將一根LED硬接線連接到3v3導軌上,當PI接通電源并在表盤上提供真正的真實發光時。我把270R電阻放在一邊,另一端放到地上。如果你想提供額外的效果,如閃爍,你也可以在GPIO引腳上添加另一個效果,但是現在這足以顯示電源已打開。
步驟9:裝出案例
箱子和底盤都經過準備和測試,只需要幾個4毫米的螺栓和Nyloc螺母就可以使用。法蘭式自攻螺釘可以將后背固定到位。
電源按鈕也很好地安裝在舊電源引線孔中。
我也想重新使用舊的旋鈕,它們最初的設計似乎是用于黃銅棒,而且對于花盆來說有點太大了。由于這不會得到任何粗暴的處理,我只是在罐子上滑了一些熱縮,然后將旋鈕粘在那上面。它握得很好而且很緊,如果有必要你仍然可以分開。
第10步:下載聲音文件
我正在使用MP3文件,有很多精選的Archive.org,你可以找到分組廣播戰時廣播,主要有兩種選擇可供選擇。
我從主要的新聞選擇開始,然后將這些選擇復制到PI的目錄中。您還可以在以下鏈接中找到更大的選擇,稱為Big one。每年有數百個廣播,其數量和范圍相當驚人。
https://archive.org/details/1939RadioNews
https://archive.org/details/1940RadioNews
https://archive.org/details/1941RadioNews
https://archive.org/details/1942RadioNews
https://archive.org/details/1943RadioNews
https://archive.org/信息/1944RadioNews
https://archive.org/details/1945RadioNews
更大的收藏
https://archive.org/details/WWII_News_1939
https://archive.org/details/WWII_News_1940
https://archive.org/details/WWII_News_1941
https://archive.org/details/WWII_News_1942
https://archive.org/details/WWII_News_1943
https://archive.org/details/WWII_News_1944
https://archive.org/details/WWII_News_1945
我使用Filezilla作為一種簡單的方法將它們傳輸到Pi,因為它可以使用SSH登錄和傳輸,因此無需設置SAMBA驅動器或FTP服務器。
步驟11:播放文件的電路和軟件
放大器工作完畢后,您可以按照下面的設置鏈接進行操作需要安裝mpg123播放器,非常直接的谷歌搜索Python代碼如下。只需確保在Raspi配置中啟用了i2和SPI。我已將此文件放入目錄/home/pi/volume/中,以便我可以在以后啟動時運行它。
#!/usr/bin/env python
# WW2 Radio - software to read MCP3002 ADC and convert to volume and year adjustment
# Ouput via i2S amplifier 20/10/2018 - Ajax Jones
# Code fragments supplied from https://learn.adafruit.com/adafruit-max98357-i2s-class-d-mono-amp/raspberry-pi-usage
# MCP 3002 Python https://github.com/CaptainStouf/Adafruit-raspi-python/blob/master/Adafruit_MCP3002/MCP3002.py
import RPi.GPIO as GPIO, time, os
from os import listdir
import subprocess
from time import sleep
import random
GPIO.setmode(GPIO.BCM)
# read the SPI data from the MCP3002 chip, 2 possible adc‘s (0 and 1)
def readadc(adcnum, clockpin, mosipin, misopin, cspin):
if ((adcnum 》 1) or (adcnum 《 0)):
return -1
GPIO.output(cspin, True)
GPIO.output(clockpin, False) # start clock low
GPIO.output(cspin, False) # bring CS low
commandout = adcnum 《《 1;
commandout |= 0x0D # start bit + single-ended bit + MSBF bit
commandout 《《= 4 # we only need to send 4 bits here
for i in range(4):
if (commandout & 0x80):
GPIO.output(mosipin, True)
else:
GPIO.output(mosipin, False)
commandout 《《= 1
GPIO.output(clockpin, True)
GPIO.output(clockpin, False)
adcout = 0
# read in one null bit and 10 ADC bits
for i in range(11):
GPIO.output(clockpin, True)
GPIO.output(clockpin, False)
adcout 《《= 1
if (GPIO.input(misopin)):
adcout |= 0x1
GPIO.output(cspin, True)
adcout /= 2 # first bit is ’null‘ so drop it
return adcout
# Use these pinouts for the raspberry pi zero
SPICLK = 11
SPIMOSI = 10
SPIMISO = 9
SPICS = 8
# set up the SPI interface pins
GPIO.setup(SPIMOSI, GPIO.OUT)
GPIO.setup(SPIMISO, GPIO.IN)
GPIO.setup(SPICLK, GPIO.OUT)
GPIO.setup(SPICS, GPIO.OUT)
# Note that bitbanging SPI is incredibly slow on the Pi as its not
# a RTOS - reading the ADC takes about 30 ms (~30 samples per second)
# which is awful for a microcontroller but better-than-nothing for Linux
# list year , this retrieves a list of files from the specified directory and returns the list
def list_year(radio_year):
war_dir = ’/home/pi/radio/WWII_News_‘+radio_year
mp3_files = [ f for f in listdir(war_dir) if f[-4:] == ’.mp3‘ ]
if not (len(mp3_files) 》 0):
print “No mp3 files found!”
return mp3_files
print “--WW2 Radio ---------------------------------------------------------------”
last_read = 0 # store the last position of the volume pot
last_year = 0 # store the last position of the frequency pot
tolerance = 5 # allow a small tolerance so slight movement of the pots doesnt cause a change
while True:
trim_pot_changed = False
year_pot_changed = False
for adcnum in range(2):
ret = readadc(adcnum, SPICLK, SPIMOSI, SPIMISO, SPICS)
if (adcnum == 0): # read the pot for the year selector to see it has moved
year_adjust = abs(ret - last_year)
if ( year_adjust 》 tolerance+10):
year_pot_changed = True
if (year_pot_changed): # Values for the if then checks can be made after its built
subprocess.call([’killall‘, ’mpg123‘]) # kill any MP3 running
sleep(0.1);
if ret 《=50:
war_year=“1939”
elif (ret 》50 and ret 《150):
war_year=“1940”
elif (ret 》=150 and ret 《250):
war_year=“1941”
elif (ret 》=250 and ret 《350):
war_year=“1942”
elif (ret 》=350 and ret 《450):
war_year=“1943”
elif (ret 》=450 and ret 《550):
war_year=“1944”
elif (ret 》=550):
war_year=“1945”
# save the value of the pot for the next time around the loop
last_year = ret
print (“Playing from ”),
print (war_year),
print (“ number of files=”),
war_dir = ’/home/pi/radio/WWII_News_‘+war_year+’/‘
play_list = list_year(war_year)
num_of_files = len(play_list)
print num_of_files
play_file = random.randint(1,num_of_files) # randomly select one of the files to play
war_mp3 = war_dir + play_list[play_file]
subprocess.Popen([’mpg123‘, war_mp3]) # Use mpg123 as the player for the audio
sleep (0.1); # provide a slight pause before continuing
if (adcnum == 1): # read the volume pot
pot_adjust = abs(ret - last_read)
if ( pot_adjust 》 tolerance):
trim_pot_changed = True
if ( trim_pot_changed ):
set_volume = ret / 10.24 # convert 10bit adc0 (0-1024) pot value into a 0-100 volume level
set_volume = round(set_volume)# round out decimal value
set_volume = int(set_volume) # cast volume as integer
# Use the value from the pot to send a level to the amixer prog
print ’Volume = {volume}%‘ .format(volume = set_volume)
set_vol_cmd = ’sudo amixer cset numid=1 -- {volume}% 》 /dev/null‘ .format(volume = set_volume)
os.system(set_vol_cmd) # set volume
# save the potentiometer reading for the next loop
last_read = ret
# A pause after changing the volume so we dont act on too many changes if the pot changes fast
time.sleep(0.5)
步驟12:在加載時自動啟動軟件
有許多方法可以在啟動時在Pi上運行命令,但我發現這是最簡單的,打開Crontab
sudo crontab -e
現在只需添加此行
@reboot python /home/pi/volume/year.py &
這應該可以解決問題,下次重新啟動音頻控制時,編程將運行,您應該聽到第一次廣播。
-
收音機
+關注
關注
60文章
601瀏覽量
77587
發布評論請先 登錄
【開源獲獎案例】基于T5L智能屏的FM收音機

評論