上周日晚上终于把一个烂尾一年多的弱鸡项目收尾完结了……现在来总结一下踩的坑,实际上是自己给自己挖的大坑……关于用VEML6070测量紫外线强度并显示一条自动刻度的曲线的事情。
首先硬件主控用的是ESP8266,ESP-07S模块,因为想嫖arduino上的开源库,又正好手上有以前白嫖来的ESP-07S模块,这次项目也没用到wifi,没天线的ESP-07S正好够用。传感器是很久以前买的VEML6070模块。当时开坑是在夏天晒得要死的时候,当时想着做一个东西可以显示紫外线强度的。只显示一个数字又太简单了,干脆加强一点显示一个历史紫外线强度曲线吧,屏幕用OLED12864,分辨率不太高,所以再加上自动垂直标尺。
自动标尺这里,程序上本来一头雾水没有思路的,但后来看见模拟菌大佬做的能谱仪的程序,茅塞顿开有了思路。
最开始是用8266的开发板分别连了6070和oled试了这两者的程序,验证了程序没有问题,能读出6070的紫外强度,也能正常让oled显示,但是这俩都是iic总线的,计划是两个东西挂在一根总线上,用模块的话不太好接线,就打算等到第一版硬件出来了再直接在硬件上调试程序。
没想到等第一版焊好之后,串口烧录怎么也烧不进去……当时还以为是因为用了新的自动下载三极管接错了什么地方导致的。当时已经开始犯懒,一看见这个bug就头疼,也没去仔细排查,就暂时搁置了。
之前有一次嘉立创搞开源活动,发开源项目有奖,于是掏出这个烂尾项目打算迁移到立创eda上去。在1:1抄图的时候发现,第一版硬件串口没反应的原因竟然是tmd串口芯片的txd和rxd没跟8266串口连起来……太弱智了,弱智到我不敢相信这是我能犯的错误……
然后画了第二版硬件,把ldo更换成了一个超小的dcdc模块,希望能以此降低一点点功耗吧大概。然后走了嘉立创的SMT,回来焊上元件插上usb线通电测试,arduino还是烧不进程序,换用乐鑫的py下载工具却能下进去了。但是上电之后没有动作,只有一开始串口输出的一串74880波特率的上电调试信息,后边的部分无论烧什么程序都不执行了,烧了AT固件也没反应。但是在串口助手上改变DTS状态能触发模块重置,使模块重新输出上电信息。此时我判断自动下载电路应该没有问题。
我又崩溃了,现在以为是ESP07的模块有问题,认为可能是我之前多次拆装导致模块内部焊接出现问题,决定换新的试试,拖了好长时间之后买了新的模块,此时省钱的初衷已经破灭了。换上去之后故障现象依旧,我十分崩溃又开始扔下不管。
直到周日的时候,我觉得不行,得再研究一下。最开始我以为是设置模式的那些引脚上下拉有问题,导致模块上电之后没进入运行模式。于是飞了个10k电阻上拉。飞完之后还是没有改善,开始挨个脚测电压上下拉状态,这时候发现3.3V电压不正常,还以为是dcdc那边有什么问题,试了一下通过DTS复位模块,发现在模块复位未释放的时候3.3V电压正常,释放之后电压就被拉低了。此时才发现应该是供电有问题,前后测量之后猜是不是模块上电复位之后电流太大,供不动,加了两个100uF电容上去,没有改善。回去研究原理图。
这个项目供电逻辑很简单,5v进来经过充电ic给电池,电池直接到dcdc降压给8266,没有路径管理。在没有电池的情况下就是由充电ic直接给后边电路供电,我终于发现问题了。
设计的时候考虑到电池容量不会很大,为了避免电池过冲鼓包损坏,特意改小了充电ic的输出电流,第一版硬件充电ic输出电流才50ma,8266至少要个100ma吧,当然就寄了……然后赶尽换了个设置电阻,把充电电流加大到600ma,再上电,终于能正常启动了,oled屏也亮了。后边就是调程序的部分了。
之前的程序本身思路都没什么问题,就是调整一下细节,改了一些外观,写进去就ok了。现在已经没有什么要调整的部分了,如果不改动硬件的话。
下一步工作内容是重画外壳并打样调整。现在这个外壳给我带来了第二大的头疼,画起来好难,要开孔准确,要考虑配合固定,哦干,不想调了就这样吧。对了还有个电源开关,设计上其实完全没考虑人手开关的便利性,对不起因为我太懒了也太菜,不想去折腾那个开关的小零件,所以就先这样吧……
补充一个,其实还想用VEML6075再做一个,6070输出的紫外线强度是没有单位的参考数值,而且只对UVA有效。VEML6075则能输出校正后的紫外线指数,这一数值是有实际意义的,并且能测量UVA和UVB,但是这玩意太tm贵了,所以还是以后再说吧,告辞。