加入星計劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴散
  • 作品版權(quán)保護
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長期合作伙伴
立即加入

重力感應式藍牙 FM 收音機設(shè)計(源碼、詳細制作講解、視頻演示)

2016/12/21
19
服務(wù)支持:
技術(shù)交流群

完成交易后在“購買成功”頁面掃碼入群,即可與技術(shù)大咖們分享疑惑和經(jīng)驗、收獲成長和認同、領(lǐng)取優(yōu)惠和紅包等。

虛擬商品不可退

當前內(nèi)容為數(shù)字版權(quán)作品,購買后不支持退換且無法轉(zhuǎn)移使用。

加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論
  • 方案介紹
  • 相關(guān)文件
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請入駐 產(chǎn)業(yè)圖譜

先說說硬件環(huán)境,使用的是STM32F4DISCO(自帶加速度)+Si4703+LCD5110。軟件設(shè)計上,雖然應用的核心功能是收音機了,但是和大部分的應用相似,沒有良好的用戶交互界面,使用體驗是要大打折扣的。所以下面的文字大部分都集中在用戶交互設(shè)計上。

首先是控制部分,加速度計可以提供上下左右4個方向的控制,在應用中給音量增減和電臺下上切臺使用。由于敲擊功能沒有實現(xiàn),因此電臺的開關(guān)交給了開發(fā)板上的用戶按鍵。用戶按鍵原計劃使用callback來實現(xiàn)功能,但是測試木有成功啊。不過既然加速度值也是用polling的話,那不如按鍵也一起好了。掃描使用最原始的方式,掃描到以后,延時10ms,然后再判斷是否按下。加速度計在使用時,也存在類似的抖動,因此也使用了相同的邏輯來消抖。同時,通過測試,給定了一個加速度計傾轉(zhuǎn)的閾值:g=0.3,也就是說當某個方向(不含z)的g大于0.3,表示有用戶動作發(fā)生。

接下來就是顯示界面了。整個5110有6行高度為8的字符可用,每行84個點。應用要顯示的核心內(nèi)容是電臺頻率和音量,內(nèi)容不多,因此可以適當放大。最終頻率選擇了12*24的字體,占用3行,又不會把整行撐滿;音量做了以模擬的bar顯示,用豎條|||||||的多少表示音量的打下,占用兩行;這樣還多出一行,用來顯示一個固定字符串“PY FM Radio”。

整體界面如下圖所示:

事先用其他方式確定了若干個本地效果較好的電臺,放到了radiolist中。當發(fā)現(xiàn)有左右手勢的時候,取出radiolist中的下一個電臺頻率值,發(fā)送給Si4703,并更新顯示界面,電臺頻率是繞圈改變的,也就是說到了radiolist的最后一個,下一次就回到了第一個。當發(fā)現(xiàn)有上下手勢時,對volume進行響應的改變,并發(fā)送給Si4703,并更新顯示界面。音量最大15,最小0(表示靜音)。當發(fā)現(xiàn)有用戶按鍵動作時,在開關(guān)狀態(tài)之間切換。關(guān)閉時,清除屏幕,關(guān)閉Si4703;開機時,正常顯示,F(xiàn)M工作。

視頻演示:

說明:

        設(shè)計過程中發(fā)現(xiàn)了浮點數(shù)運算的精度問題。比如頻率99.6Mhz,在list當中是存成996的,顯示的時候,通過運算channel=str(996/10),將電臺轉(zhuǎn)為浮點字符串99.6。前期調(diào)試的時候,用的電臺較少,沒有問題。后面把所有電臺都加上時,發(fā)現(xiàn)有些電臺,比如890,做了除法運算以后,變成了89.0001,導致顯示行方向溢出。最后通過字符串截取的方式取到自己想要的長度。python似乎沒有printf?

目前還有一些小問題,比如加速度識別的抖動有時候還會出現(xiàn),音量有時候會有跳變等等。最后通過視頻看下具體效果吧。

詳細的制作講解和main.py見附件內(nèi)容。

  • bluepyradio_upload.zip
    描述:其他module和main一并附上
  • 詳細的制作詳見.txt
    描述:詳細的制作講解,請查看鏈接

相關(guān)推薦

電子產(chǎn)業(yè)圖譜