Android Open Source - BleSensorTag Ti Temperature Sensor






From Project

Back to project page BleSensorTag.

License

The source code is released under:

MIT License

If you think the Android project BleSensorTag listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package sample.ble.sensortag.sensor;
//www .  j  av  a2s .co  m
import android.bluetooth.BluetoothGattCharacteristic;

import static java.lang.Math.pow;

/**
 * Created by steven on 9/3/13.
 */
public class TiTemperatureSensor extends TiSensor<float[]> {

    private static final String UUID_SERVICE = "f000aa00-0451-4000-b000-000000000000";
    private static final String UUID_DATA = "f000aa01-0451-4000-b000-000000000000";
    private static final String UUID_CONFIG = "f000aa02-0451-4000-b000-000000000000";

    TiTemperatureSensor() {
        super();
    }

    @Override
    public String getName() {
        return "Temperature";
    }

    @Override
    public String getServiceUUID() {
        return UUID_SERVICE;
    }

    @Override
    public String getDataUUID() {
        return UUID_DATA;
    }

    @Override
    public String getConfigUUID() {
        return UUID_CONFIG;
    }

    @Override
    public String getDataString() {
        final float[] data = getData();
        return "ambient="+data[0]+"\ntarget="+data[1];
    }

    @Override
    public float[] parse(BluetoothGattCharacteristic c) {

    /* The IR Temperature sensor produces two measurements;
     * Object ( AKA target or IR) Temperature,
     * and Ambient ( AKA die ) temperature.
     *
     * Both need some conversion, and Object temperature is dependent on Ambient temperature.
     *
     * They are stored as [ObjLSB, ObjMSB, AmbLSB, AmbMSB] (4 bytes)
     * Which means we need to shift the bytes around to get the correct values.
     */

        double ambient = extractAmbientTemperature(c);
        double target = extractTargetTemperature(c, ambient);

        return new float[]{(float)ambient, (float)target};
    }

    private static double extractAmbientTemperature(BluetoothGattCharacteristic c) {
        int offset = 2;
        return TiSensorUtils.shortUnsignedAtOffset(c, offset) / 128.0;
    }

    private static double extractTargetTemperature(BluetoothGattCharacteristic c, double ambient) {
        Integer twoByteValue = TiSensorUtils.shortSignedAtOffset(c, 0);

        double Vobj2 = twoByteValue.doubleValue();
        Vobj2 *= 0.00000015625;

        double Tdie = ambient + 273.15;

        double S0 = 5.593E-14;  // Calibration factor
        double a1 = 1.75E-3;
        double a2 = -1.678E-5;
        double b0 = -2.94E-5;
        double b1 = -5.7E-7;
        double b2 = 4.63E-9;
        double c2 = 13.4;
        double Tref = 298.15;
        double S = S0*(1+a1*(Tdie - Tref)+a2*pow((Tdie - Tref),2));
        double Vos = b0 + b1*(Tdie - Tref) + b2*pow((Tdie - Tref),2);
        double fObj = (Vobj2 - Vos) + c2*pow((Vobj2 - Vos),2);
        double tObj = pow(pow(Tdie,4) + (fObj/S),.25);

        return tObj - 273.15;
    }
}




Java Source Code List

sample.ble.sensortag.BleSensorsRecordService.java
sample.ble.sensortag.BleServiceBindingActivity.java
sample.ble.sensortag.BleService.java
sample.ble.sensortag.BluetoothStateReciever.java
sample.ble.sensortag.DeviceScanActivity.java
sample.ble.sensortag.DeviceServicesActivity.java
sample.ble.sensortag.adapters.BleDevicesAdapter.java
sample.ble.sensortag.adapters.TiServicesAdapter.java
sample.ble.sensortag.ble.BleActionsReceiver.java
sample.ble.sensortag.ble.BleDevicesScanner.java
sample.ble.sensortag.ble.BleExecutorListener.java
sample.ble.sensortag.ble.BleGattExecutor.java
sample.ble.sensortag.ble.BleManager.java
sample.ble.sensortag.ble.BleServiceListener.java
sample.ble.sensortag.ble.BleUtils.java
sample.ble.sensortag.config.AppConfig.java
sample.ble.sensortag.dialogs.AppDialog.java
sample.ble.sensortag.dialogs.EnableBluetoothDialog.java
sample.ble.sensortag.dialogs.ErrorDialog.java
sample.ble.sensortag.fusion.SensorFusionActivity.java
sample.ble.sensortag.fusion.SensorFusionFragment.java
sample.ble.sensortag.fusion.engine.SensorFusionEngine.java
sample.ble.sensortag.fusion.engine.SensorFusionHelper.java
sample.ble.sensortag.fusion.sensors.AndroidSensorManager.java
sample.ble.sensortag.fusion.sensors.AndroidSensor.java
sample.ble.sensortag.fusion.sensors.BleSensorManager.java
sample.ble.sensortag.fusion.sensors.BleSensor.java
sample.ble.sensortag.fusion.sensors.ISensorManager.java
sample.ble.sensortag.fusion.sensors.ISensor.java
sample.ble.sensortag.fusion.sensors.SensorManagerException.java
sample.ble.sensortag.gl.GLSurfaceView.java
sample.ble.sensortag.gl.GlFragment.java
sample.ble.sensortag.gl.ModelLoader.java
sample.ble.sensortag.gl.ModelRenderer.java
sample.ble.sensortag.info.TiDeviceInfoSerivce.java
sample.ble.sensortag.info.TiGapSerivce.java
sample.ble.sensortag.info.TiGattSerivce.java
sample.ble.sensortag.info.TiInfoService.java
sample.ble.sensortag.info.TiInfoServices.java
sample.ble.sensortag.sensor.TiAccelerometerSensor.java
sample.ble.sensortag.sensor.TiGyroscopeSensor.java
sample.ble.sensortag.sensor.TiHumiditySensor.java
sample.ble.sensortag.sensor.TiKeysSensor.java
sample.ble.sensortag.sensor.TiMagnetometerSensor.java
sample.ble.sensortag.sensor.TiPeriodicalSensor.java
sample.ble.sensortag.sensor.TiPressureSensor.java
sample.ble.sensortag.sensor.TiRangeSensors.java
sample.ble.sensortag.sensor.TiSensorUtils.java
sample.ble.sensortag.sensor.TiSensor.java
sample.ble.sensortag.sensor.TiSensors.java
sample.ble.sensortag.sensor.TiTemperatureSensor.java
sample.ble.sensortag.sensor.TiTestSensor.java