資料介紹
描述
?
動機(jī)
在這段保持社交距離的時期,很難找到更積極和四處走動的方法。與我上學(xué)時相比,在線課程幾乎不需要在建筑物中走動和在儲物柜中交換學(xué)習(xí)材料。在社區(qū)外散步是保持活躍和每天鍛煉的好方法,但是,有些日子可能風(fēng)太大而不能在外面散步,或者可能會下雨。此外,在持續(xù)的 COVID-19 期間,留在室內(nèi)以降低傳播或感染病毒的風(fēng)險變得越來越重要。
這就是為什么我們有動力開發(fā)一種有趣的方式來讓人們在室內(nèi)保持活躍和健康!MuSticks 結(jié)合了音樂和棍子的理念,讓室內(nèi)鍛煉變得實用而有趣。在這些困難時期保持健康并保持活躍很重要,我們希望 MuSticks 能夠以這種小方式幫助人們。
材料
該項目使用 Raspberry Pi Zero W、Adafruit Stereo Speaker Bonnet 和 Surface Bone Conductive Transducer 揚聲器。我們決定使用換能器,因為它具有在硬表面上轉(zhuǎn)換音頻波信號的有趣特性。我們決定使用塑料瓶,但您可以嘗試不同的材料。
3D打印零件
我們決定把木棍分成三部分。
- 揚聲器支架
- 一個瓶架
- 板/電池座
為了制作完整的棍子,您需要打印兩個揚聲器支架和兩個瓶架。揚聲器支架緊貼瓶架,如下所示:
然后使用螺釘/螺母將板/電池連接到瓶架上,如下所示
邊框/電池座有兩個版本;“Battery and Board Holder.stl ”文件比BBH3.stl文件的比例略小。這種差異允許兩個持有人一起搶奪并滾動以關(guān)閉并保護(hù)內(nèi)容物。
將硬件放在一起
樹莓派零設(shè)置。
為了發(fā)布我們的 Web 界面,我們需要在我們的 RPi Zero W 中安裝 LDAP。您可以找到幾個網(wǎng)頁來指導(dǎo)您在 Raspberry Pi Zero W 中安裝 LDAP。
我們還使用以下命令安裝 mp3 實用程序 MPG123:
$ sudo apt-get install mpg123
然后按照此處的 Adafruit Speaker Bonnet for Raspberry Pi 輕松安裝中的說明進(jìn)行操作。
感謝 Adafruit 的說明,我們能夠找到 SomaFM
超過 30 個獨特的收聽者支持的、無商業(yè)廣告的、地下/替代無線電廣播頻道向世界傳播。
輕松測試揚聲器并提供多種選擇是理想之選。但是,從 Web 服務(wù)運行它并不容易。
現(xiàn)在我們準(zhǔn)備好創(chuàng)建我們的界面了。
網(wǎng)頁
安裝服務(wù)器和揚聲器后,我們使用“Bootstrap Studio”創(chuàng)建了一個簡單的 Web 界面。我們不確定是否可以上傳自動生成模板,但我們可以顯示我們對代碼所做的手動更改。
下圖是界面截圖:
每個按鈕圖像都會向服務(wù)器的主頁提交一個代碼,以指示所選電臺。代碼看起來像
="action" value="selEighties">src="assets/img/scenery/u80s-120.png" alt="DLS">
="action" value="selDeepSpace">src="assets/img/scenery/DeepSpaceOne.gif" alt="DLS">
="action" value="selPoptron">src="assets/img/scenery/poptron120.png" alt="DLS">
="action" value="selMissionC">src="assets/img/scenery/missioncontrol120.jpg" alt="DLS">
="action" value="selXmas">src="assets/img/scenery/xmasrocks120.png" alt="DLS">
="action" value="selStop">src="assets/img/scenery/image1.jpg" alt="DLS">
請注意,value 屬性具有在 GET 命令名稱操作中發(fā)送回服務(wù)器的值。
最初的想法是接收選臺,然后批處理一個進(jìn)程在后臺運行MPG123,但不可能。對于初學(xué)者,除非我們使用 sudo 命令運行 shell 進(jìn)程,否則程序不會啟動。
我們嘗試執(zhí)行以下命令,其中 exec 是生成進(jìn)程的 PHP 函數(shù):
exec("nohup mpg123 http://ice1.somafm.com/u80s-128-mp3 > /dev/null 2>&1 echo $!");
但它一開始進(jìn)程就崩潰了 mpg123 程序。
然后我們在命令行中使用 sudo 權(quán)限嘗試了 shell_exec,例如:
shell_exec('sudo mpg123 http://ice1.somafm.com/u80s-128-mp3 > /dev/null 2>&1 echo $!');
這有效,但需要注意的是該進(jìn)程永遠(yuǎn)不會返回到服務(wù)器,因此客戶端被卡住了,不允許它做出不同的選擇。
我們最終決定打破 Web 服務(wù)器和 MPG123 程序之間的依賴關(guān)系。
我們創(chuàng)建了一個循環(huán)運行的 bash 腳本,讀取文本命令文件的內(nèi)容并在主進(jìn)程級別提交批處理作業(yè)以運行 MPG123 程序。該腳本將在下一節(jié)中解釋。
Web 服務(wù)器的工作是獲取所選站并將相應(yīng)的命令代碼寫入命令文件,以便 bash 腳本可以讀取選擇并執(zhí)行該過程。
一個問題是文件訪問的并發(fā)性,我們是否可以打開它以寫入并同時讀取以執(zhí)行命令。是的,我們可以!!!
這是服務(wù)器 PHP 程序的一部分,它從客戶端獲取選擇并將命令代碼寫入命令文件:
//Check if there is a command
if (isset($_GET["action"]))
{
//Open file to write
$myfile = fopen("runSelection.txt", "w");
//Set command to stop current streaming
fwrite($myfile, "4\n");
//Make sure to flush buffer to file
fclose($myfile);
//Wait, maybe not that necessary
sleep(1);
//Select the next stream station
if ($_GET["action"] == "selEighties")
{
$myfile = fopen("runSelection.txt", "w");
fwrite($myfile, "3\n");
fclose($myfile);
}
.
.
.
注意,我們首先檢查客戶端是否通過action屬性發(fā)送了一個選擇,然后我們用PHP函數(shù)fopen打開文件進(jìn)行寫入,然后編寫命令代碼4,即停止當(dāng)前的MPG123作業(yè),然后我們關(guān)閉文件刷新緩沖區(qū)并允許 bash 腳本讀取和執(zhí)行此命令有一個小的延遲(可能不需要)。
接下來,如果選擇了一個站,則再次打開命令文件(fopen),寫入相應(yīng)的命令,關(guān)閉文件(刷新緩沖區(qū))并等待下一次客戶端選擇。
這個過程保證了客戶端/服務(wù)器執(zhí)行的流暢,并且沒有通過允許服務(wù)器訪問內(nèi)核進(jìn)程命令而暴露任何可能的安全性。
Bash 腳本
bash 腳本具有讓項目在 Web 界面上蓬勃發(fā)展的魔力。
該腳本掃描命令文件 runSelection.txt。當(dāng)客戶端請求站點時,PHP 服務(wù)器服務(wù)正在寫入此文件。
腳本循環(huán)運行,直到選擇退出命令 (2)
while [ $selection -ne 2 ]
do
.
.
.
done
該腳本通過以下循環(huán)命令讀取文件的每一行(僅一行)
while read line
do
selection="$line"
.
.
.
done < runSelection.txt
然后腳本檢查選擇,如果它與之前的選擇不同,它會提交批處理文件以執(zhí)行,例如
# if current selection is not the last read then execute
if [[ $selection -eq 3 ]] && [[ $lastSel -ne $selection ]]; then
# Prepare command to execute in the background
cmd="mpg123 http://ice1.somafm.com/u80s-128-mp3"
# Execute command and assign process id to variable.
nohup $cmd > /dev/null & PID=$!
echo "$PID"
# Remember last selection so it does not execute again.
lastSel=selection
exec4=0
fi
注意腳本保留了進(jìn)程id,所以當(dāng)停止命令(4)進(jìn)入命令文件時,它可以殺死它,如下所示:
cmd="kill $PID"
echo "$cmd"
# Kill last submitted process
nohup $cmd > /dev/null
就是這樣,bash 文件可以愉快地創(chuàng)建和刪除進(jìn)程,并且 Web 服務(wù)可以不間斷地工作。
我們花了一些心思才想出解決方法,但如果您有一個想要批處理的過程,這可能是一個可能的解決方案。
最后,請注意我們選擇使用 SomaFM 播放音樂,但您可以添加 MP3 歌曲庫并享受樂趣。
享受!!
?
- 電容隔離型±10V輸入高精度隔離放大器 ISOC124P
- 川土微隔離電流檢測放大器CA‐IS1300在PFC升壓系統(tǒng)的應(yīng)用
- iCoupler? 具有isoPower的產(chǎn)品?技術(shù):隔離期間的信號和功率傳輸使用微型變壓器的屏障
- 壓力應(yīng)變電橋信號隔離變送器(差分信號隔離變送器)
- 6個有趣的Linux命令案例講解 14次下載
- 6針DIP光電隔離器達(dá)林頓輸出4N29-4N33 2次下載
- 開關(guān)電源基礎(chǔ)知識(隔離式與非隔離式) 86次下載
- 四通道光學(xué)耦合隔離器芯片PS2801-4 39次下載
- 以您的方式隔離供電
- 使用數(shù)字隔離器簡化醫(yī)療和工業(yè)應(yīng)用中的USB隔離資料下載
- USB音頻設(shè)計的幾個有趣故障案例資料下載
- 結(jié)合多尺度邊緣保持分解與PCNN的圖像融合方法 16次下載
- 新型隔離變壓器及測量系統(tǒng)專利設(shè)計 54次下載
- 有趣的聲控延時燈電路圖
- 簡單有趣的下棋計時電路圖
- 隔離開關(guān)的作用 隔離開關(guān)和空氣開關(guān)的區(qū)別 5668次閱讀
- 光耦隔離 電容隔離 磁隔離這三種隔離方式各有什么優(yōu)缺點? 6299次閱讀
- 非隔離型開關(guān)電源的三種工作方式 870次閱讀
- 自耦變壓器加隔離變壓器方式 2730次閱讀
- 一些有趣的NE555電路 2590次閱讀
- 隔離器件在工業(yè)電機(jī)驅(qū)控的應(yīng)用研究 7389次閱讀
- 工業(yè)測量系統(tǒng)設(shè)計中不同隔離方式的技術(shù)實現(xiàn) 2567次閱讀
- 使用集成的門極驅(qū)動器實現(xiàn)電隔離有什么樣的優(yōu)勢 1902次閱讀
- 四個有趣的關(guān)于Python 3.9版本新特性 3102次閱讀
- 非隔離型開關(guān)電源的工作方式 3613次閱讀
- 各種超低功耗隔離技術(shù)的比較及應(yīng)用 3556次閱讀
- 淺談隔離與非隔離電路原理和接線方式的區(qū)別 1.1w次閱讀
- 展示Python機(jī)器學(xué)習(xí)開源項目以及在分析過程中發(fā)現(xiàn)的非常有趣的見解和趨勢 4202次閱讀
- 隔離電源有哪些應(yīng)用方案_隔離電源和非隔離電源區(qū)別 1.1w次閱讀
- 在非隔離應(yīng)用中將數(shù)字隔離器用作電平轉(zhuǎn)換器 2080次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數(shù)據(jù)手冊
- 1.06 MB | 532次下載 | 免費
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費
- 3TC358743XBG評估板參考手冊
- 1.36 MB | 330次下載 | 免費
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費
- 5元宇宙深度解析—未來的未來-風(fēng)口還是泡沫
- 6.40 MB | 227次下載 | 免費
- 6迪文DGUS開發(fā)指南
- 31.67 MB | 194次下載 | 免費
- 7元宇宙底層硬件系列報告
- 13.42 MB | 182次下載 | 免費
- 8FP5207XR-G1中文應(yīng)用手冊
- 1.09 MB | 178次下載 | 免費
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 2555集成電路應(yīng)用800例(新編版)
- 0.00 MB | 33566次下載 | 免費
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費
- 4開關(guān)電源設(shè)計實例指南
- 未知 | 21549次下載 | 免費
- 5電氣工程師手冊免費下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費
- 6數(shù)字電路基礎(chǔ)pdf(下載)
- 未知 | 13750次下載 | 免費
- 7電子制作實例集錦 下載
- 未知 | 8113次下載 | 免費
- 8《LED驅(qū)動電路設(shè)計》 溫德爾著
- 0.00 MB | 6656次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 78.1 MB | 537798次下載 | 免費
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費
- 6電路仿真軟件multisim 10.0免費下載
- 340992 | 191187次下載 | 免費
- 7十天學(xué)會AVR單片機(jī)與C語言視頻教程 下載
- 158M | 183279次下載 | 免費
- 8proe5.0野火版下載(中文版免費下載)
- 未知 | 138040次下載 | 免費
評論
查看更多