ラズベリーパイで温度を取得しようとしています。
センサーはMM-TXS03でサンハヤトさんから購入しました。気圧と温度が両方取得できるセンサーでLPS331APの仕様となっています。
shで取得しようと思っているのですが、データは一応拾っているのですが、摂氏に仕様と計算させても、どうしてもおかしな温度になってしまします。ちなみに、気圧はほぼ合っていると思います。
計算方法をご存じの方、ぜひ教えてください。よろしくお願いいたします。
手動で値を取得した場合
$sudo i2cset -y 1 0x5d 0x20 0x90
$sudo i2cget -y 1 0x5d 0x2b
0xd8
$sudo i2cget -y 1 0x5d 0x2c
0xce
$sudo i2cset -y 1 0x5d 0x20 0x00
値の計算
ced8 -> 52952 (16進数 -> 10進数)
42.5+(52952÷480.0)=152.816666667
152度だと、計測場所は体感18度程度なのでかなりかけ離れていると思います。
実際の計算式は下記のとおりです。
#!/bin/bash
### set active mode
sudo i2cset -y 1 0x5d 0x20 0x90
PressOut_TH=`i2cget -y 1 0x5d 0x2b`
PressOut_TL=`i2cget -y 1 0x5d 0x2c`
RawDatTemp=`echo "0x${PressOut_TL:2:2}${PressOut_TH:2:2}"`
RawDatTM=`printf %d $RawDatTemp`
echo "scale=2;42.5+($RawDatTM/480.0)" |bc
### set power down
sudo i2cset -y 1 0x5d 0x20 0x00
---- EOF ----
下記ページを参考に作って見ました。
http://news.mynavi.jp/articles/2014/08/19/raspbe …
http://news.mynavi.jp/articles/2014/08/19/raspbe …
よろしくお願いいたします。
No.1
- 回答日時:
×ced8 -> 52952
符号無しでなはなく、符号付き整数で計算してください。
∵そうでないと42.5度以下を示すことができません。
この回答への補足
回答ありがとうございました。
符号の有り無しについて考えてもいませんでした。
パソコンの関数電卓を使って試算しながらめているのですが、符号をつけても外しても16進数の部分を10進数に変換すると同じ値「ced8 -> 52952」となります。
符号をつけることによりマイナスに値が進むことになり、42.5を加えることにより正常な摂氏を表示すると思うのですが、符号をつけても付けなくても同じ値となります。
すみませんが、もう少し詳しく教えていただけないでしょうか?
よろしくお願いいたします。
ahoo_chieokureさん、lumiheartさん、色々と情報をありがとうございました。お二方からの情報を元にもう少しWEBを探って、phpで符号付きの16進数を変換するツールを作って見ました。
符号付き16進数の計算方法が枯れたページのとおりに作ったため、もっちゃりしたモノになりましたが、計算は大丈夫と思います。
本当にありがとうございました。
<?php
function sign_hexdec($hex) {
# 2進数の「1」を定義
$pl=0b01;
# 値を1文字づつ分解
$arr = str_split($hex);
if ($arr[0] >= dechex(8)) {
# 16進数を2進数に変換
$s = base_convert($hex,16,2);
# 0と1を反転
$t = decbin(~bindec($s));
# 32bit表記を16bit表記に切り取り
$tt = mb_substr(decbin(bindec($t) + bindec($pl)),16,16);
# 16bitにした文字を1文字づつ分解
$bi = str_split($tt);
# 10進数の値を初期化
$ans=0;
# 桁ごとに2の乗数を掛けて桁の値を掛ける
for ($i=0;$i<=15;$i++) {
$ans=(pow(2,15-$i)*$bi[$i])+$ans;
}
$ans = $ans * (-1);
} else {
$ans=hexdec($hex);
}
}
?>
No.2ベストアンサー
- 回答日時:
回答1さんのお礼文にある
>符号をつけても外しても16進数の部分を10進数に変換すると同じ値「ced8 -> 52952」となります。
http://news.mynavi.jp/articles/2014/08/19/raspbe …
ここのプログラムの変数定義は
short int temp;
つまり符号付16bitなので
0xced8 -> -12584
なので
42.5 + (-12584 / 480) = 16.28℃ <エコ暖房ですね!
因みにWindows付属の「電卓」なら
表示>プログラマ
左下の「Word」 <符号付16bit選択
デフォルトはQword 符号付64bit
このままで16進10進変換してはいけません <かなりの人がハマる
http://www.ne.jp/asahi/shared/o-family/ElecRoom/ …
にあるLPS331AP 日本語マニュアル↓
http://www.ne.jp/asahi/o-family/extdisk/LPS331AP …
17/18ページ
に詳しい解説があります
コメントありがとうございました。
符号付16Bit選択の意味が良くわかりました。
これを printfで変換しようとしていますが、%dの為、符号なしで変換しているというわけですね。printfを調べていたのですがどうも符号付16bitの方法が探してみましたが見つかりませんでした。
bashで作っているだけに難しいようです。
ちょっと、アプローチの方法を変えてみようと思います。サンプルファイルもgccコンパイルでmainが二つあり、うまくコンパイルできないので使えません。気圧と同じようにbashで出来ればありがたかったのですが、printfが対応していないことにはどうにもなりません(というより探しきれなかっただけかもしれませんが)。
ahoo_chieokureさん、lumiheartさん、ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 一眼レフカメラ EOS M5の画質について 1 2022/05/12 10:00
- その他(コンピューター・テクノロジー) 50台の織機から回転数を取得・集計しモニターに表示したい 2 2022/11/05 15:48
- その他(開発・運用・管理) おんどとりWebStorage APIから温度情報を取得し表示したい 2 2023/08/03 09:53
- 化学 温度変化に伴う圧力と体積の変化について 2 2022/07/25 17:21
- 国産バイク トゥデイ(原付)にKN企画の油温計をつけました。 付属のセンサーではドレン部分と合わなかったので(セ 1 2022/05/05 22:14
- 数学 場合の数、確率 45 (浜松医科大学) 1 2023/07/29 13:52
- PHP PHP MySql ページング 2 2022/09/20 06:38
- 化学 化学の分圧の問題です。お助けください。 2 2022/11/07 22:48
- その他(ソフトウェア) F-BASICで計算中の実行が中途で勝手に止まり、大変困っています。 2 2023/03/02 16:15
- 化学 閉じた系で部屋の温度を下げる方法 6 2022/07/22 23:50
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
c languageで 簡単な質問があ...
-
VB.net Double と...
-
有効数字について 以前質問をし...
-
16進数 加算 減算 C言語
-
10次の多項式を求めるプログラ...
-
z80について
-
VB6.0での小数点の扱いについて
-
コンピューターは指数関数をど...
-
EXCELの関数"STDEV(標準偏差)"...
-
2進数の0.2?
-
浮動小数点演算を固定小数点演...
-
ExcelのINT関数の計算結果がお...
-
floatの有効桁数
-
Pythonについてなのですが、小...
-
O(n log n)について2
-
VBAでの割り算の余りの求め方
-
ラズベリーパイ>MM-TXS03で温度...
-
浮動小数演算は実行環境の変化...
-
Double型について
-
double型からfloat型への型変換...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
O(n log n)について2
-
ExcelでPC(パソコン)によって...
-
ExcelのINT関数の計算結果がお...
-
16進数 加算 減算 C言語
-
VB.net Double と...
-
floatの有効桁数
-
三菱シーケンサ(Aシリーズ)で...
-
c languageで 簡単な質問があ...
-
除算を使わずに10で割りたい。
-
VBAでミリ秒まで出力する方法
-
VBAでの割り算の余りの求め方
-
VB6.0での小数点の扱いについて
-
VB6のFIX関数での誤差について
-
有効数字について 以前質問をし...
-
100桁の計算ができなくて困って...
-
浮動小数演算は実行環境の変化...
-
EXCELの関数"STDEV(標準偏差)"...
-
BCD・HEX・BINについて
-
コンピューターは指数関数をど...
-
乱数 なぜ剰余を使うのか
おすすめ情報