本文首发于DF创客社区,作者:robo027
原文链接:http://mc.dfrobot.com.cn/thread-296363-1-1.html
为什么是眼镜?
13世纪被发明,从当时成为贵族们的玩物到今天几乎人手至少一副,眼镜,不管是结构还是功能都没有什么大的变化.不过,随着现在的科技日新月异,VR,AR技术的出现,让我们多多少少也都嗅到了一丝"眼镜革命"马上要来了的气息.
我对于眼镜的改造欲就如同中学时期我们对待历史书上的人物画像一样,总觉得那时他们少了一副帅气的眼镜,之前我就做过一个"焊锡保镖"眼镜
现在又耐不住了,眼镜作为穿戴物,挂在脸上,作用如果还只是保护眼睛,校正视力是不是有点对不起咱这张脸.当你在骑车,驾驶,腾不开手的同时又需要获取来自手机上的信息,怎么办?这时"第二屏幕"的需求产生了,
它一定具备"不影响你正在执行工作,不剥夺你的正常视线范围,简单操作或不需要用手操作即可完成重要的交互"这样一些主要特性.
"HUD"和"AR"
这两个词我想大家都不陌生,我就按我的理解简单介绍一下,HUD原本是战斗机上把仪表盘数据投射到挡风玻璃上的技术,现在民用了就成了我们常说的"抬头显示",功能说白了就是把方便你开车的一些信息投射到前挡风上.
AR技术呢,俗称虚拟现实技术,目前它最有价值开发方向就是做AR眼镜,什么是"虚拟现实"?其实中间少了两个字"虚拟辅助现实"其中一个重要的功能就是能在真实的视觉画面中对指定的目标进行虚拟标识描述并只反映在你的镜片上,也就是说你从镜片中看到的画面是真实和虚拟并存的,比如下面这个应用场景
还有更多实用的功能推荐大家百科一下.所以讲了这么多,它除了基本类似HUD的投射功能外,还应该具备图像识别与物联网功能.
而下面我的作品充其量也只能算个HUD眼镜的半成品.因为说实话能力有限,手上的材料也有限.比赛时间也快到了,所以只能先这样了.
成像原理
人眼的焦距范围是25mm-50mm左右,我不可能把OLED直接放到自己的眼前,那样就跟把脸凑到电视前看一样,即便看的到上面的字,那也会挡住自己的视野,
所以最理想的方案就是参考谷歌眼镜的微型投影加半透棱镜的方法
要么和我一样直接拆掉一个VR盒子,取透镜.
至于近似眼的问题,我不是近视,我那副眼镜也是平光镜,所以效果不清楚,但是我想画面光通过你的眼镜校正的,最终看到的是校正后的成像,所以理论上应该没有问题.
定位
什么都要小
因为屏幕的大小直接决定眼镜旁边这个"家伙"的截面积.所以这个0.66的OLED肯定不行,好在发现DF商城有更小的屏幕,而且整个模块都不大.首选!
http://www.dfrobot.com.cn/goods-1188.html
电源:电池也是我拆了我娃的玩具寻到的小锂电池包
主控一定要能联手机(我轻描淡写了,事实上这涉及到太多专业知识)所以我根据能力最开始罗列了三种方案:
Arduino promini+hc06
Esp32或Esp8266(能玩)
nRF52(只是听说)
查资料,对比,发现nRF52系列的功耗有绝对优势.秉承"只选对的,不选会的"原则淘了两块,面对这两块陌生的超低功耗多协议SoC蓝牙单芯片(我认为大概就是,除了有蓝牙能力自己还能跑程序).只能默默啃资料了...
点亮屏幕
所需:开发工具: j-Link (用于对nrf52832的swclk swdio端口进行烧写程序,固定引脚号)
cp2104或CP2102(Tx,Rx串口下载,TX,RX,引脚号会因为协议栈的不同可能会变)如果有JLINK 这个基本可以不用
板子:nRF52832+Breakout板(方便你用杜邦线实验)
0.5英寸SPI接口(默认)OLED模块
接线方式:
- 启动Arduino IDE
- 进入首选项
- 添加https://sandeepmistry.github.io/ ... 5_boards_index.json为“附加开发板管理器网址”
- 从工具 - > 开发板菜单打开开发板管理器并安装“Nordic Semiconductor nRF5 Boards”
- 从工具 - > 开发板菜单中选择Generic nRF52
- 再到Arduino库管理器下载U8G2库https://github.com/olikraus/u8g2
- 下载协议栈S132 2.0 hex文件,文尾下载
- j-link驱动一般卖家会提供https://www.segger.com/downloads/jlink/#J-LinkSoftwareAndDocumentationPack
- 下载nrfconnect3.0http://www.nordicsemi.com/Software-and-Tools/Development-Tools/nRF-Connect-for-desktop
这里主要下载软件就是nrfconnect安装过程中也会安装一些支持包驱动什么的默认就好,打开软件,你会发现它其实是一个宿主软件,在里面可以直接下载所需要的小程序.
这里我们仅需要下载programmer程序
从图中我们可以看到一个完整的程序一般由引导程序+协议栈+应用程序(由下到上)三部分组成,
在拖入S132_2.0.HEX后我们发现完成了下面两层,还差一层应用程序,
这就要靠IDE编译了.打开ArduinoIDE选择示例程序u8g2--- page_buffer---helloworld,
别慌编译,要改改代码,里面有很多//U8g2_屏幕种类,我们的屏幕//U8g2_LD7032有两个,第一个SPI第二个i2C,I2C要改电路,直接用默认的SPI方式就好,也就是取消注释第一个//LD7032,然后把引脚改成你实际的连线就行了.
需要说明的是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);"引号中的内容插入到里面就好.
接下来不是点下载,我们是需要这个程序编译后的hex文件,所以先另存为到一个位置,然后在点Arduino的项目--导出已编译的二进制文件.这时候我们需要的应用层就做好了,接下来回到nrfconnect界面添加刚刚保存程序路径下刚编译好的hex文件,这个软件很好理解,左边框框里是现有固件,右边框框其实就像个沙盘,布置好了点右下角的erase&write过不了多久就烧写好了,这时OLED就显示出内容了,这个部分,仅仅只是为了调试OLED,大家不妨多试一下U8G2的其他例程.
制作
LD7032 0.5inchOLED
Nrf52832(重新买了个更小的)
1A充电板
AMS1117(降压3.3v输出)
锂电池包
小开关.按钮各一
4PIN杜邦母座(引出SWD编程接口,方便以后改程序)
废旧cd碟片一张,
菲涅尔透镜(或VR盒子拆下的透镜)
接线方式:
oled和Nrf52832接线上文有,仅加了一个按钮(po.20)
电源方案:
总体如下:
外壳部分:
功能的实现
目前还在研究,这里我用了一个开源项目micooke/arduino-nRF5-smartwatches目前暂时只能够实现传感器的数据读取,和时间显示.
步骤:1,ArduinoIDE添加第三方硬件[backcolor=rgba(27, 31, 35, 0.05)]https://micooke.github.io/package_nRF5_smartwatche...
2,开发板管理器打开,刷新后,搜索nrf5 smartwatchs下载安装
3,安装好后,在IDE上这样设置
[backcolor=rgba(27, 31, 35, 0.05)]
4选择示例程序并在第二栏LD107_OLED.h下注释原来的引脚设置添加U8G2_LD7032_60X32_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 17, /* data=*/ 18, /* cs=*/ 28, /* dc=*/ 30, /* reset=*/ 14);
另存为项目,然后导出编译后的hex文件.
接下来就和前面调试屏幕时的步骤,打开NRFconnect选择softdevice+刚刚编译好的hex,烧写.
后记
这个项目没完,因为软件方面远远没有达到我的预期:
1能够有APP的支持,能够推送手机上的消息,
2能够和手机上的导航对接显示简要的导航信息.
我不是工程师,很多东西缺乏技术与经验,采用这款我完全陌生的nrf52832作为主控,主要是保证续航能力,并且它支持蓝牙5.0,我预留了SWD接口也是为了未来能够有一些突破.
同时也希望有兴趣的朋友能够帮助我一起完善它.