使用されている湿度センサー「Sensirion SHT21」は、温度とthe 湿度の2種類のデータが取得できます。
SensorTagの 湿度センサーへのデータアクセス
ハンドルを用いたSensorTagの 湿度センサー「Sensirion SHT21」(U6)への問い合わせは、次のテーブルに従います。
Type | UUID | Handle | Read/Write | Format |
---|---|---|---|---|
<Data> | F000AA21 * | 0×38 | Read/Notify | TempLSB TempMSB HumLSB HumMSB (4 bytes) |
<Data Notification> | 0×39 | R/W | 2 bytes | |
<Configuration> | F000AA22 * | 0×3c | R/W | 1 byte |
湿度センサーデータの湿度への変換式
Tempは温度で、Humは湿度を示します。
湿度センサー「Sensirion SHT21」から入力したデータ(Handle:0x38)は、二つの符号なし2バイト整数で示します。次の計算式により湿度と温度に変換します。h1,2は温度データで、h3,4は湿度データを示します。
次に湿度に変換する計算式を示します。計算した結果は0-100の間の値を取ります。100以上の値を取る場合は、その値は無視します。
次に温度に変換する計算式を示します。単位は「°C」となります。
湿度センサーデータ変換のプログラム
上記の湿度センサーの変換式をjava言語とc言語でコード化した例を示します。
java言語で記述すると次のようになります。
/* Conversion algorithm, temperature */ private double calcHumTmp(int rawT) { double v; //-- calculate temperature [deg C] -- v = -46.85 + 175.72/65536 *(double)rawT; return v; } /* Conversion algorithm, humidity */ private double calcHumRel(int rawH) { double v; rawH &= ~0x0003; // clear bits [1..0] (status bits) //-- calculate relative humidity [%RH] -- v = -6.0 + 125.0/65536 * (double)rawH; // RH= -6 + 125 * SRH/2^16 return v; }
C言語で記述すると次のようになります。
/* Conversion algorithm, temperature */ double calcHumTmp(uint16 rawT) { double v; //-- calculate temperature [deg C] -- v = -46.85 + 175.72/65536 *(double)(qint16)rawT; return v; } /* Conversion algorithm, humidity */ double calcHumRel(uint16 rawH) { double v; rawH &= ~0x0003; // clear bits [1..0] (status bits) //-- calculate relative humidity [%RH] -- v = -6.0 + 125.0/65536 * (double)rawH; // RH= -6 + 125 * SRH/2^16 return v; }