本文首發(fā)于DF創(chuàng)客社區(qū),作者:robo027
原文鏈接:http://mc.dfrobot.com.cn/thread-296363-1-1.html
為什么是眼鏡?
13世紀(jì)被發(fā)明,從當(dāng)時(shí)成為貴族們的玩物到今天幾乎人手至少一副,眼鏡,不管是結(jié)構(gòu)還是功能都沒(méi)有什么大的變化.不過(guò),隨著現(xiàn)在的科技日新月異,VR,AR技術(shù)的出現(xiàn),讓我們多多少少也都嗅到了一絲"眼鏡革命"馬上要來(lái)了的氣息.
我對(duì)于眼鏡的改造欲就如同中學(xué)時(shí)期我們對(duì)待歷史書(shū)上的人物畫(huà)像一樣,總覺(jué)得那時(shí)他們少了一副帥氣的眼鏡,之前我就做過(guò)一個(gè)"焊錫保鏢"眼鏡
現(xiàn)在又耐不住了,眼鏡作為穿戴物,掛在臉上,作用如果還只是保護(hù)眼睛,校正視力是不是有點(diǎn)對(duì)不起咱這張臉.當(dāng)你在騎車,駕駛,騰不開(kāi)手的同時(shí)又需要獲取來(lái)自手機(jī)上的信息,怎么辦?這時(shí)"第二屏幕"的需求產(chǎn)生了,
它一定具備"不影響你正在執(zhí)行工作,不剝奪你的正常視線范圍,簡(jiǎn)單操作或不需要用手操作即可完成重要的交互"這樣一些主要特性.
"HUD"和"AR"
這兩個(gè)詞我想大家都不陌生,我就按我的理解簡(jiǎn)單介紹一下,HUD原本是戰(zhàn)斗機(jī)上把儀表盤(pán)數(shù)據(jù)投射到擋風(fēng)玻璃上的技術(shù),現(xiàn)在民用了就成了我們常說(shuō)的"抬頭顯示",功能說(shuō)白了就是把方便你開(kāi)車的一些信息投射到前擋風(fēng)上.
AR技術(shù)呢,俗稱虛擬現(xiàn)實(shí)技術(shù),目前它最有價(jià)值開(kāi)發(fā)方向就是做AR眼鏡,什么是"虛擬現(xiàn)實(shí)"?其實(shí)中間少了兩個(gè)字"虛擬輔助現(xiàn)實(shí)"其中一個(gè)重要的功能就是能在真實(shí)的視覺(jué)畫(huà)面中對(duì)指定的目標(biāo)進(jìn)行虛擬標(biāo)識(shí)描述并只反映在你的鏡片上,也就是說(shuō)你從鏡片中看到的畫(huà)面是真實(shí)和虛擬并存的,比如下面這個(gè)應(yīng)用場(chǎng)景
還有更多實(shí)用的功能推薦大家百科一下.所以講了這么多,它除了基本類似HUD的投射功能外,還應(yīng)該具備圖像識(shí)別與物聯(lián)網(wǎng)功能.
而下面我的作品充其量也只能算個(gè)HUD眼鏡的半成品.因?yàn)檎f(shuō)實(shí)話能力有限,手上的材料也有限.比賽時(shí)間也快到了,所以只能先這樣了.
成像原理
人眼的焦距范圍是25mm-50mm左右,我不可能把OLED直接放到自己的眼前,那樣就跟把臉湊到電視前看一樣,即便看的到上面的字,那也會(huì)擋住自己的視野,
所以最理想的方案就是參考谷歌眼鏡的微型投影加半透棱鏡的方法
要么和我一樣直接拆掉一個(gè)VR盒子,取透鏡.
至于近似眼的問(wèn)題,我不是近視,我那副眼鏡也是平光鏡,所以效果不清楚,但是我想畫(huà)面光通過(guò)你的眼鏡校正的,最終看到的是校正后的成像,所以理論上應(yīng)該沒(méi)有問(wèn)題.
定位
什么都要小
因?yàn)槠聊坏拇笮≈苯記Q定眼鏡旁邊這個(gè)"家伙"的截面積.所以這個(gè)0.66的OLED肯定不行,好在發(fā)現(xiàn)DF商城有更小的屏幕,而且整個(gè)模塊都不大.首選!
http://www.dfrobot.com.cn/goods-1188.html
電源:電池也是我拆了我娃的玩具尋到的小鋰電池包
主控一定要能聯(lián)手機(jī)(我輕描淡寫(xiě)了,事實(shí)上這涉及到太多專業(yè)知識(shí))所以我根據(jù)能力最開(kāi)始羅列了三種方案:
Arduino promini+hc06
Esp32或Esp8266(能玩)
nRF52(只是聽(tīng)說(shuō))
查資料,對(duì)比,發(fā)現(xiàn)nRF52系列的功耗有絕對(duì)優(yōu)勢(shì).秉承"只選對(duì)的,不選會(huì)的"原則淘了兩塊,面對(duì)這兩塊陌生的超低功耗多協(xié)議SoC藍(lán)牙單芯片(我認(rèn)為大概就是,除了有藍(lán)牙能力自己還能跑程序).只能默默啃資料了...
點(diǎn)亮屏幕
所需:開(kāi)發(fā)工具: j-Link (用于對(duì)nrf52832的swclk swdio端口進(jìn)行燒寫(xiě)程序,固定引腳號(hào))
cp2104或CP2102(Tx,Rx串口下載,TX,RX,引腳號(hào)會(huì)因?yàn)閰f(xié)議棧的不同可能會(huì)變)如果有JLINK 這個(gè)基本可以不用
板子:nRF52832+Breakout板(方便你用杜邦線實(shí)驗(yàn))
0.5英寸SPI接口(默認(rèn))OLED模塊
接線方式:
- 啟動(dòng)Arduino IDE
- 進(jìn)入首選項(xiàng)
- 添加https://sandeepmistry.github.io/ ... 5_boards_index.json為“附加開(kāi)發(fā)板管理器網(wǎng)址”
- 從工具 - > 開(kāi)發(fā)板菜單打開(kāi)開(kāi)發(fā)板管理器并安裝“Nordic Semiconductor nRF5 Boards”
- 從工具 - > 開(kāi)發(fā)板菜單中選擇Generic nRF52
- 再到Arduino庫(kù)管理器下載U8G2庫(kù)https://github.com/olikraus/u8g2
- 下載協(xié)議棧S132 2.0 hex文件,文尾下載
- j-link驅(qū)動(dòng)一般賣家會(huì)提供https://www.segger.com/downloads/jlink/#J-LinkSoftwareAndDocumentationPack
- 下載nrfconnect3.0http://www.nordicsemi.com/Software-and-Tools/Development-Tools/nRF-Connect-for-desktop
這里主要下載軟件就是nrfconnect安裝過(guò)程中也會(huì)安裝一些支持包驅(qū)動(dòng)什么的默認(rèn)就好,打開(kāi)軟件,你會(huì)發(fā)現(xiàn)它其實(shí)是一個(gè)宿主軟件,在里面可以直接下載所需要的小程序.
這里我們僅需要下載programmer程序
從圖中我們可以看到一個(gè)完整的程序一般由引導(dǎo)程序+協(xié)議棧+應(yīng)用程序(由下到上)三部分組成,
在拖入S132_2.0.HEX后我們發(fā)現(xiàn)完成了下面兩層,還差一層應(yīng)用程序,
這就要靠IDE編譯了.打開(kāi)ArduinoIDE選擇示例程序u8g2--- page_buffer---helloworld,
別慌編譯,要改改代碼,里面有很多//U8g2_屏幕種類,我們的屏幕//U8g2_LD7032有兩個(gè),第一個(gè)SPI第二個(gè)i2C,I2C要改電路,直接用默認(rèn)的SPI方式就好,也就是取消注釋第一個(gè)//LD7032,然后把引腳改成你實(shí)際的連線就行了.
需要說(shuō)明的是OLED可以選擇連NRF52832硬件SPI(HW)或軟件SPI(SW),如果選軟的,在選擇引腳上就自由一些.這里選SW.
嫌麻煩直接Copy "U8G2_LD7032_60X32_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 17, /* data=*/ 18, /* cs=*/ 28, /* dc=*/ 30, /* reset=*/ 14);"引號(hào)中的內(nèi)容插入到里面就好.
接下來(lái)不是點(diǎn)下載,我們是需要這個(gè)程序編譯后的hex文件,所以先另存為到一個(gè)位置,然后在點(diǎn)Arduino的項(xiàng)目--導(dǎo)出已編譯的二進(jìn)制文件.這時(shí)候我們需要的應(yīng)用層就做好了,接下來(lái)回到nrfconnect界面添加剛剛保存程序路徑下剛編譯好的hex文件,這個(gè)軟件很好理解,左邊框框里是現(xiàn)有固件,右邊框框其實(shí)就像個(gè)沙盤(pán),布置好了點(diǎn)右下角的erase&write過(guò)不了多久就燒寫(xiě)好了,這時(shí)OLED就顯示出內(nèi)容了,這個(gè)部分,僅僅只是為了調(diào)試OLED,大家不妨多試一下U8G2的其他例程.
制作
LD7032 0.5inchOLED
Nrf52832(重新買了個(gè)更小的)
1A充電板
AMS1117(降壓3.3v輸出)
鋰電池包
小開(kāi)關(guān).按鈕各一
4PIN杜邦母座(引出SWD編程接口,方便以后改程序)
廢舊cd碟片一張,
菲涅爾透鏡(或VR盒子拆下的透鏡)
接線方式:
oled和Nrf52832接線上文有,僅加了一個(gè)按鈕(po.20)
電源方案:
總體如下:
外殼部分:
功能的實(shí)現(xiàn)
目前還在研究,這里我用了一個(gè)開(kāi)源項(xiàng)目micooke/arduino-nRF5-smartwatches目前暫時(shí)只能夠?qū)崿F(xiàn)傳感器的數(shù)據(jù)讀取,和時(shí)間顯示.
步驟:1,ArduinoIDE添加第三方硬件[backcolor=rgba(27, 31, 35, 0.05)]https://micooke.github.io/package_nRF5_smartwatche...
2,開(kāi)發(fā)板管理器打開(kāi),刷新后,搜索nrf5 smartwatchs下載安裝
3,安裝好后,在IDE上這樣設(shè)置
[backcolor=rgba(27, 31, 35, 0.05)]
4選擇示例程序并在第二欄LD107_OLED.h下注釋原來(lái)的引腳設(shè)置添加U8G2_LD7032_60X32_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 17, /* data=*/ 18, /* cs=*/ 28, /* dc=*/ 30, /* reset=*/ 14);
另存為項(xiàng)目,然后導(dǎo)出編譯后的hex文件.
接下來(lái)就和前面調(diào)試屏幕時(shí)的步驟,打開(kāi)NRFconnect選擇softdevice+剛剛編譯好的hex,燒寫(xiě).
后記
這個(gè)項(xiàng)目沒(méi)完,因?yàn)檐浖矫孢h(yuǎn)遠(yuǎn)沒(méi)有達(dá)到我的預(yù)期:
1能夠有APP的支持,能夠推送手機(jī)上的消息,
2能夠和手機(jī)上的導(dǎo)航對(duì)接顯示簡(jiǎn)要的導(dǎo)航信息.
我不是工程師,很多東西缺乏技術(shù)與經(jīng)驗(yàn),采用這款我完全陌生的nrf52832作為主控,主要是保證續(xù)航能力,并且它支持藍(lán)牙5.0,我預(yù)留了SWD接口也是為了未來(lái)能夠有一些突破.
同時(shí)也希望有興趣的朋友能夠幫助我一起完善它.