找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4285|回复: 1
打印 上一主题 下一主题
收起左侧

迷你气压温湿度表制作

[复制链接]
跳转到指定楼层
楼主
ID:71235 发表于 2014-12-27 22:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
先看成品图
  
    掌心大小,这是我目前做的有完备功能的、最小的DIY了。
    再看功能:1、可以显示实时气压、温度、湿度,可以选择显示或者3项轮流显示;2、自带锂电,具有电池保护、充电控制电路;

    一、渊源:
    做这个DIY起源于一年前的一个设想:那就是做一个无线的气象站,采用成熟的传感器芯片,有一个室外采集终端和室内采集、显示终端,通过无线连接,后期又补充了网络推送数据和GSM数据查询功能,并已经选好了具体的芯片型号,只差下决心去做了,只是发现工程对自己来说还是有点浩大了,要做两套不同的程序、要两套程序统调、要考虑外壳的设计安装,还有室外终端的供电问题,无线信号强度问题,这又涉及到无线模块选择的问题,最终设想暂时中止,这一停就是一年多时间。

    二、启动:
    动力来自于多方面:1、拜淘宝所赐,发现淘宝上有一种4位段式液晶显示器,个头很小,价格比此前长沙太阳人的模块便宜,也是三线式接口;2、单位里有不少没人要的迷你磁带盒,透明度很高,很适合做小东西的外壳;3、空闲得很,闲着也是闲着。

    三、电路设想:显示用4位的HTB8832A段式液晶显示器,气压采集用博世的BMP0805,温湿度用盛世瑞恩的SHT10,精度是湿度4.5%,温度0.5度,锂电用600mah的,加一块保护板和充电管理板,主控芯片用ATTINY24,2K容量,因为BMP0805最高工作电压是3.6v,而锂电充满电后是4.2v,为了安全决定采用3.3v的供电电压,本来如果没这个限制的话,整个系统都可以不用稳压了,直接用电池。

    四、模块测试:
    共有四个模块要测试:1、LCD 显示模块;2;SHT10温湿度模块;3、BMP0805气压模块;4、充电管理模块。

    (一)、LCD模块:采用的是HT1621驱动芯片,以前用的是长沙太阳人的模块,两线或者三线,段码要么是正码要么反码,跟LED数码管相差不大,刚开始测试时也是按照普通数码管编制的段码表,发现显示的数字无论如何都不对,而店主提供的数据表也看得一头雾水,研究了半天的HT1621数据手册,基本搞清了原来,却和现实的显示效果对不上号,最后采用一个笔画一个笔画显示,这才搞定了段码表,但是还是发现了一个问题,就是供电电压是5v,而不是店主说的3.3v,模块上也没有调整元件,这样电路的供电要修改了,修改成了:主控、气压、温湿度模块仍旧用3.3v,LCD另外加一5v个升压模块,因为是单向的通讯,所以不必考虑电平转换的问题;临时又测试了模块的电流,不加升压是500ua左右,加了升压是1.8ma,离我的想法有差距了,我计划中的整机耗电电流应该稍小于1ma,做到真正的低耗电电池设备。花了一个晚上搞定。

    (二)、BMP0805模块:先上网找例程,找来找去,找到了一个arduino的演示程序,正好手头有arduino板,可以测试一下模块是否损坏。arduino程序编译后是6K左右,这也难怪了,例程里有大量的浮点运算,只是当初我是认为只要从模块中把数据读出来就可以的,没想到还需要大量的校正运算,看来attiny24的2k容量有点危险了。没有相应的avr的c源程序怎么办呢,那就直接移植arduino吧,基本不用改什么东西的,只是跟attiny接口上遇到了很大的问题,模块跟avr用的是I2C接口,究竟是用avr内置接口还是用模拟i2c接口呢,考虑到自己做单面板的布线比较困难,决定采用模拟I2c,这样可以根据布线要求,选择合适的端口,而不局限于固定的端口,套用了以前做收音机搞的一段I2c例程,调试起来真的很困难,总是无法知道程序错在i2c接口还是运算程序,最后再才接到arduino,读出正确的校正参数,然后比对avr上的读数,确定是I2C的问题,当1002的气压值出现在显示器上的时候,心情无疑是很激动的。BMP0805测试程序编译后已经差不多是2k了,这样使用attiny24的计划泡汤了,接下来改用m16开发板继续测试SHT10。

    (三)、SHT10模块:SHT10采用的是两线的接口,但是并不兼容I2C,这样也不用在是否使用主控接口上纠结了。网上例程很多,有自己写的,但大部分改写自官方的例程,有51的也有avr的,但是真要用的话就没这么简单了,实际上当貌似正确的数据出现在显示器上的时候,还是发现有问题,别人的演示视频里湿度数据会跳动,而我的似乎总在那么几个数字上变动,而且变动得相当缓慢,别的湿度表早就动了10%了,我这里还是纹丝不动,但是哈口气它还是能动的,说明还是从模块里读出了些什么,那么究竟是模块本身问题还是接口的时序问题呢,单凭简陋的手段似乎不太容易了。于是想到以前在淘宝上看到的一种便宜的逻辑分析仪,可以用它分析时序,花了180大元买了一个,大概熟悉了用法后,实测模块时序,果然从波形上发现读取的数据的LSB字节全是FF,而MSB是正常的,这绝对是时序问题了,对比官方例程,发现每次通讯结束后都必须拉高一下DATA,否则后续字节就会读取失败,看来这180元花得真值。

    (四)、充电模块:很简单,计算充电电流,在计算充电时间,再看充满是否自停,就可以知道好坏了。

    五、整合:
    最终要用的主控选定是Mega8L,最低电压2.7v,容量8k,装我的程序足够,体积小巧,只有小指甲盖大小,只是是QFN封装,不过其他几块模块也都要求用贴片焊接,再加上上次做过的电池电压显示器用的也是贴片,而且磁带盒剩余空间只够选用贴片了。设计电路板有点麻烦,因为没有现成的SHT10和BMP0805的封装,所以要自己画,然后再根据安装要求调整元件的位置,整来整去又去掉用MINIUSB充电的念头,最后板子做好后,发现漏掉了3.3v稳压芯片的位置,头疼!


     接下来是焊接调试,出现异常情况,发现端口调试小程序不能点亮端口,或者只有1.6v的输出电压,要命的很,怎么修改程序都不行,最后半夜12点起床,冒着破坏PCB的危险,搞掉了M8L,换上了一个新的,刚开始测试时正常,甚至都能显示正确的数据,只是把功能切换程序加上去的时候,又出现了跟上次一模一样的毛病,真的抓狂了,是5V升压板破坏了M8L的端口了么,不像啊,程序能正常LOADED的,也能运行,I2C所在接口也能输出3.3V电平,而且在M8的开发板上都是这样用的,只是无法点亮LCD,因为电平是在太低了,PCB已经经不起第二次折腾了,要么就是重做一块,要么就此放弃本次DIY,不过这一冷藏,可能就是一年半载的时间。最后挣扎了一下,在LCD所在端口强制确定了数据方向为输出,没想到成了!原来一直以为上电后默认是输出的,所以没有另外加DDR命令。
    最后是总装:理想总是美好的,到总装的时候才知道,要把一堆东西装进一个不能变的外壳有多困难,最后去掉了用连接器连接电池的做法,改用插针连接,剪短了SIP插针和按钮的高度,缩短了电池和充电板的电线,磨掉了一点LCD上的黑膏,总算能把所有东西都塞进去了~~~。

    最后成品的数据准确度由我的卡西欧登山表和一个温湿度表开共同确定。气压的准确性卡西欧可以保证,应该BMP0805刚测试好的时候就发现两者的数据非常接近,也就是卡西欧测试数据应该是可信的,温度显示读取的也是BMP0805,既然气压比较准确,那么温度也是可信的,尽管SHT10也能提供温度数据,湿度就很难说了,要这么贵的模块靠一个几十块的便宜的家用温湿度计来校正,真有点悲哀了,不过不管了,反正人家说了湿度本来就是个比较负责的参数,精度差点也没什么。再测一下整机的耗电,大约3ma,离理想有点远,好在可以充电,不用太在意。

    耗时15天,费银90许,The Ending~~


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:194061 发表于 2017-4-27 07:48 | 只看该作者
兄弟能不能把那个HT1621的段位表给我一份?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表