前一段,给Arduino做了一个外壳。材料是有机玻璃再加上 3mm 的铜柱螺丝和螺母的组合,做出来效果还不错。最明显的就是放到论坛上会有很多人关注和讨论。相比OpenCV统计骰子点数的装置,这个盒子的人气高很多。【参考1】
淘宝上有更专业的Arduino外壳,只是价格比较贵。有兴趣的朋友可以像我这样,买一块有机玻璃,再买一把各种螺钉螺母的。
果壳网近期有个手机装置设计大赛,翻翻箱子看看手上有什么能够用起来的东西。最后决定做一个“无线温度计”。除了上面的外壳,还有如下材料:
Arduino Uno
TN901 红外温度传感器
蓝牙模块
简单介绍一下 TN901 ,实物如图(实际我使用的比下面的长一截,多出来一段电路板,不知道是不是考虑到太短了用起来容易焊接不亮,或者容易头重脚轻)
上图从左到右分别是 A:测试 G:地 C:时钟 D:数据 V:电源【参考】。从另外一个方向看过去,顺序刚好颠倒。用的时候先看一下电路板上哪里是 A 哪里是 V 即可确认方向。刚开始的时候我就接反了,不工作,吓得我一身冷汗(这个小东西要 150元,是我一个月购买材料budget。开发品就是贵啊。相比之下,淘宝上还有50元的测温枪,不同的传感器而已)
论坛上有人之前做过【参考1】,有现成的库可以使用【参考2】,方便啊!
连接上蛮简单,VCC供电(建议选 5V),GND接好之后,剩下三根线,根据库初始化时的提示分别将 Data CLK ACK 连接到 Pin 13 12 11。连接好之后,在串口就能看到数据了。
下面再引入蓝牙模块。入手的是专门Arduino 使用的。简单的说Arduino蓝牙模块=单板+底板。而我刚开始入手的是单板。入手单板之后有点傻眼:小是够小,但是没引出来需要的Pin脚。最后还是买了一个专门 Arduino 使用的了事。
有专门的 TN901的库,因此 Arduino 程序编写要简单的多。
#include <Arduino.h> #include <Wire.h> #include "TN901.h" //引用库文件 TN901 tn; //实 例 化 void setup() { Serial.begin(9600); tn.Init(13,12,11); //初 始 化 data clk ack } void loop() { tn.Read(); SerialValue(); delay(2000); } void SerialValue() { String s; s=">O"+String(tn.OT, DEC)+"E"+String(tn.ET,DEC)+"<"; Serial.println(s); //Serial.print(tn.OT, DEC); //Serial.print("ET"); //Serial.print(tn.ET, DEC); }
出来的两个温度分别是目标温度(tn.OT)和当前的环境温度(tn.ET)。上面的程序将结果放在一个下面这样 >Oxx.xxEyy.yy< 的字符串中发送到串口上。再通过串口蓝牙,我们的电脑就能够收到结果了。
供电部分使用的是一个USB充电宝,内部是一节 16580 电池。体积适中,价格也不贵。
电脑端,使用Delphi 设计了一个简单的界面,用类似任务管理器的界面来展示当前的和部分的历史数据
为了方便起见同时还使用了 CPort VCL 来作为串口通讯。但是个人感觉不是很稳定,因此有机会还是直接使用 API 爱进行通讯比较好。程序下载 IRTemp。Arduino相关库下载:tn9
最后还拍摄了一个应用的演示视频。
http://www.tudou.com/programs/view/dDu_7_c58TA/?resourceId=414535982_06_02_99
参考:
1. http://www.geek-workshop.com/thread-10726-1-1.html用有机玻璃做个arduino外壳
2. http://www.geek-workshop.com/thread-8727-1-1.html DIY红外非接触式温度计
3. http://www.geek-workshop.com/thread-1884-1-1.html如何自己编写Arduino支持的C++类库
4. http://www.zytemp.com/products/tn901.asp Tn9 usermanual