四.使用BLE Device Monitor初试蓝牙连接
为了使买的SensorTag能够充分体验价值,穷人我一冲动可是花了血本呀!
在淘宝买了一套工具,没法呀,TI官网的太贵。
没有iXX什么的,我就用平常的电脑,使用BLE Device Monitor软件!
先看指导手册:
打开BLE Device Monitor软件,设置选择相应的端口号,在左下框里会出现蓝牙host,如图:
在软件出现SCAN…提示框的时候(Autoscan默认是打开的)按一下下SensorTag的侧键使之进入广播状态,软件则会扫描到SensorTag并如下图显示在左下框网络列表里。如果错过了软件自动扫描时间,可以手动点击Scan按钮进行扫描。这时还没有连接,点击Connect按钮进行连接,连接如果成功在Status列显示Connected。
右侧大框底部的Autodiscover默认是打开的,如果连接成功会列出发现的服务属性列表,如下图,也可以手动点击Discover按钮。
在属性列表中按级别显示服务,特性和属性,暂不详述。
作为第一次使用,当然是急着看看传感器啦,右侧框顶部切换到SensorTag标签,显示如下图:
在“Test”模式,点击“Start”可以进行检测SensorTag功能是否正常,按照提示操作即可,不详述。
在“Monitoring”模式,确定上方的传感器都选中,点击“Start”,就可以看到不断刷新的传感器数据啦。
感觉还是比较准的,例如三个传感器片内温度,相差不大,气压和气象站网站的也差不多。
这里提一下红外测温,初步测试,感觉好像弄不准,相差很大。
顺手贴一下关于红外测温的介绍:
依据测温原理的不同,红外测温仪的设计有三种方法,通过测量辐射物体的全波长的热辐射来确定物体的辐射温度的称为全辐射测温法;通过测量物体在一定波长下的单色辐射亮度来确定它的亮度温度的称为亮度测温法;如果是通过被测物体在两个波长下的单色辐射亮度之比随温度变化来定温的称为比色测温法。
亮度测温法无需环境温度补偿,发射率误差较小,测温精度高,但工作于短波区,只适于高温测量。比色测温法的光学系统可局部遮挡,受烟雾灰尘影响小,测温误差小,但必须选择适当波段,使波段的发射率相差不大。本文选用全辐射测温法来计算被测量物体的温度,全辐射测温法是根据所有波长范围内的总辐射而定温,得到的是物体的辐射温度。选用这种方法是因为中低温物体的波长较大,辐射信号很弱,而且结构简单,成本较低,但它的测温精度稍差,受物体辐射率影响大。
固定的予置为0.95的发射率。该发射率值是对于多数有机材料、油漆或氧化表面的表面温度,就要用一种胶带或平光黑漆涂于被测表面加以补偿。使胶带或漆达到与基底材料相同温度时,测量胶带或漆表面的温度,即为其真实温度。
这里闲扯到校准的问题,有关详细请参看官网关于TMP006的文档:TMP006 User Guide,编号: sbou107
但是SensorTag源代码中好像传输的不是计算过后的温度值,而是热电堆的电压或者芯片内置温度传感器的芯片温度,这样的话,需要在Central设备方计算?
在源文件hal_irtemp.c中:
- /**************************************************************************************************
- * @fn HalIRTempRead
- *
- * @brief Read the sensor voltage and sensor temperature registers
- *
- * @param Voltage and temperature in raw format (2 + 2 bytes)
- *
- * @return TRUE if valid data
- **************************************************************************************************/
- bool HalIRTempRead(uint8 *pBuf)
- {
- uint16 v;
- uint16 t;
- bool success;
- if (irtSensorState != TMP006_DATA_READY)
- {
- return FALSE;
- }
- HalIRTempSelect();
- // Read the sensor registers
- success = HalSensorReadReg(TMP006_REG_ADDR_VOLTAGE, (uint8 *)&v,IRTEMP_REG_LEN );
- if (success)
- {
- success = HalSensorReadReg(TMP006_REG_ADDR_TEMPERATURE, (uint8 *)&t,IRTEMP_REG_LEN );
- }
- if (success)
- {
- // Store values
- pBuf[0] = HI_UINT16( v );
- pBuf[1] = LO_UINT16( v );
- pBuf[2] = HI_UINT16( t );
- pBuf[3] = LO_UINT16( t );
- }
- // Turn off sensor
- if (HalSensorWriteReg(TMP006_REG_ADDR_CONFIG, configSensorOff, IRTEMP_REG_LEN))
- {
- irtSensorState = TMP006_OFF;
- }
- HalDcDcControl(ST_IRTEMP,false);
- return success;
- }
上面代码中在SensorTag.c中直接调用了:
- static void readIrTempData( void )
- {
- uint8 tData[IRTEMPERATURE_DATA_LEN];
- if (HalIRTempRead(tData))
- {
- IRTemp_SetParameter( IRTEMPERATURE_DATA, IRTEMPERATURE_DATA_LEN, tData);
- }
- }
而在在源文件hal_irtemp.c中有这样一段代码是注释掉的没有使用:
- /* Conversion algorithm for die temperature
- * ================================================
- *
- double calcTmpLocal(uint16 rawT)
- {
- //-- calculate die temperature [癈] --
- m_tmpAmb = (double)((qint16)rawT)/128.0;
- return m_tmpAmb;
- }
- *
- * Conversion algorithm for target temperature
- *
- double calcTmpTarget(uint16 rawT)
- {
- //-- calculate target temperature [癈] -
- double Vobj2 = (double)(qint16)rawT;
- Vobj2 *= 0.00000015625;
- double Tdie2 = m_tmpAmb + 273.15;
- const double S0 = 6.4E-14; // Calibration factor
- const double a1 = 1.75E-3;
- const double a2 = -1.678E-5;
- const double b0 = -2.94E-5;
- const double b1 = -5.7E-7;
- const double b2 = 4.63E-9;
- const double c2 = 13.4;
- const double Tref = 298.15;
- double S = S0*(1+a1*(Tdie2 - Tref)+a2*pow((Tdie2 - Tref),2));
- double Vos = b0 + b1*(Tdie2 - Tref) + b2*pow((Tdie2 - Tref),2);
- double fObj = (Vobj2 - Vos) + c2*pow((Vobj2 - Vos),2);
- double tObj = pow(pow(Tdie2,4) + (fObj/S),.25);
- tObj = (tObj - 273.15);
- return tObj;
- }
- */
这块的代码还没怎么看,不知道是不是这样。以后再学习钻研。
而
BLE Device Monitor软件好像没有源代码,不知道怎么处理的。各位使用iPAD什么的,里面有关于校准的选项么?
[
本帖最后由 wangfuchong 于 2013-10-18 23:14 编辑 ]