Posts tagged ‘YL-40 I2C sensor module’

去年の夏に作った、YL-40の温度センサ(サーミスタ)で室温を測定する仕組みの続き。冬に低温での補正をしたが、予想どおり、その時に調整した範囲を超えたらズレて来た。本物の温度計と比べたら、25.5℃以上で、補正式の想定する温度差より0.3℃くらい低い(→ 温度計からは0.6℃くらい低い)感じだった。合わないのは嫌けど※、測定も調整も面倒なので延期して居たものの、段々差が大きくなったので 仕方なく先月の中頃に着手した。

※とは言え、そもそも、0.6℃くらいの差なんて「誤差の範囲」なんだから気にしなくていいという話(悪魔の声)もあるw

気分ならぬ気温次第でチェック・調整できる温度が決まるので なかなか進まなかったが、近頃は暑い日も出て来て大分進んだ。今日は室温が26.5℃くらいまでチェックできたので、去年の夏の出来上がった頃の温度(室温: 27.5-28℃くらい)まで もう少しだ。

サーミスタの温度の補正に関しては、素子の特性の温度変化(下を参照)以外に、基準として使った温度計(「シチズン大」)と温度センサの応答速度(熱容量)の違い、シチズン大の特性・精度、ADCの分解能や性能※や特性変動、それに、隣にあるディスプレイの熱の影響や空調とそれに伴う室内の気流も関係しているので、なかなか単純ではない。

※当初は、オフセットのグラフ(赤の点線)に見られる、不自然な変曲(屈曲)点はADCの性能(オフセット(上下)、直線性(曲がり)、変換精度(傾き))によると思って居たが、今はサーミスタの特性によるものかと思っている。

それでも、なぜか飽きずに(暇に飽かせて?)温度の測定・差のチェックと補正式の改良を続けて、どうにか満足できる感じになった。

冬には一つの直線で補正したが、(ちょっと前から薄々感付いて居たように、)それではうまく行かず、今は4つの直線で補正している。補正のためのオフセット(センサの温度に加える量)はグラフの赤の点線である。どうも、センサの特性に いくつかの変曲点があるようで、妙な形になっている。

書いてから思い出したが、冬に試行錯誤していた時、どうも19℃辺りに変曲点がある気がして2つの式にしていたが、それは不自然だと却下して1つにした。(グラフ: 黒の点線) 当時は低温だけだったので1つでも何とか合ったが、今となっては最初の勘が当たっていた。

補正パラメタの調整は、補正後の温度の線(グラフ: オレンジの直線)が上下に広がる測定点群の中央を通るように、あるいは、センサとシチズン大の温度差のグラフ(これは補正後の温度の線に沿って上下を拡大したものと等価である)で点群の分布が正負(上下)均等になるように、補正式(オフセット)が通る点を設定している。欲を言えば あと2本くらい増やしたいが、面倒なので しないで済ませたい。プログラムの作りを、直線の本数(実際には、補正式が通る点の数)を任意に増やせるようにすれば少しは手間は減るだろうが、それも面倒だw

まあ、そこまでやるなら、きっと「うまい曲線」があるはずで、補正(オフセット)のグラフは いかにも良く見る形だけど どういう式かは浮かんで来ない。: 3次式を45°の軸でフリップさせた形? → 1/3乗の式? (← 似ては居るが、0付近が垂直になるので違うようだ。 ← 式の構成によっては そうでもなさそうだ。) だとしたらなぜ?

そこで画像検索してみたら、サーミスタのBという定数は温度で変わるので(だから、実際には「定数」ではない)、温度とBの関係を求めて正確な温度を求めている方が居た。だから、理想的な補正式(曲線)のグラフを描けば そういう(温度に対するBから温度の補正値を対応させる)形になるのだろう。※ 実際、参照したページの「図6:出力電圧から「変数B」と「定数B」でサーミスタ温度に換算結果」は僕の補正のグラフと何か関係ありそうな雰囲気だ。

※実際には、上の方法では正確な温度が直接求められるので「補正」する必要はなく、補正式のグラフも意味がない。

ところで、この方は どうやって任意の温度を生成しているのか分からないが(恒温槽?)、僕にはそれができない(実際には、現在と同様に いろいろな室温で測定すればいい)のと、補正式を作り直すのが面倒なので(こっちが大きいw)、とりあえずは現状のままにしておく。

温度域別のグラフでオフセットを比べると、低中温域(21℃くらいまで)は従来(グラフ: 黒の点線)と改良版(グラフ: 赤の点線)の差が小さいので問題なかったのだが、中高温域では差が大きくなって、最初に書いた「温度が合わない」問題と辻褄が合う。実際、23℃以上(→ グラフ)でのオフセットの差は大ざっぱには0.3℃以上で、(最初に書いた)僕の印象に合う。

改良版の補正式を使用したところ、現在のところは、(室温が急激に変化しない状態では、)シチズン大との温度差が概ね(ひいき目に見て)±0.3℃以内※に収まるようになった。

※測温系の分解能(ADCと回路構成に依存する)が約0.24℃なので、これくらいなら許せる。

夏に近づいて室温が28℃くらいまでになれば(、一周回って)、補正の調整は ひとまず終了だ。

が、上に挙げた、サーミスタのパラメタBを温度の関数として温度を求める方法が結構良さそうな気が しつつあるし、センサ類の経時変化や夏の測定方法が今一つだったかも知れないので、また差が出る気もしている。

まあ、その時はその時だ。

なお、Bを温度の関数として温度を求めるにしても、その式は僕の補正式を含めた温度計算式を滑らかにしたものに近いはずであるだろうから、現状からの大きな精度向上は期待できなさそうな気はする。今の温度差は温度計算式以外の要因(特に熱容量の差)も大きいと思うからだ。

 

 

PS. 本題には全く関係ないが、y= x1/3のグラフを探していたら、「y=1/3x二乗のグラフらしんですけど−」という質問(?)があって、僕だったら何を答えていいか分からないところを ちゃんと答えている方が居て感心した。

偉そうだけど、「これの何が分からないのか全く分からない」というのが正直なところだ。その質問を理解して教える教師は偉いと思う。ただ、その教え方(「考え方」)が学校式とか受験用の気がして、本当に実用になるのか疑問はある(もちろん、教師次第だろう)。

 

更に離れるが、上の前か後に、「実はE= mc2の"2"は1.9・・・とかじゃないのか」という質問に、正しいだろうが全然説明になってない、「当たり前のことだ。勉強してないの?」みたいな回答をし、その後、良くある訳の分からない深過ぎる話(δだの数直線だの間隔・連続だの)を書き連ねた人が居たが、そういうのが居るから物理とか数学が嫌いな人間が増えるのだと思う。

実際にグラフを描くと、E= mc2とE= mc1.99は全く違う(値になる)と思うが、式の見た目は近く見える。それに、上の木で鼻を括ったような回答の奴自身も「近似的に証明されている」とも書いているのだから、1.99・・・だったら かなり近いかも知れないではないか。(数学嫌いなので知らんけどw)

 

更に脱線して、別の質問「数学が特異な人たちは、こういう数式が分かるんですか?−」でもやっぱりオタ偉そうな人が多くて苦笑した。数学嫌いの僕は こんな面倒な式は理解する気は全くなくて、必要ならプログラムを書くだけだ。

しかも、この式には間違いがあるではないか(回答を読んで分かった)。なのに、気付かずに したり顔で偉そうなことを書く連中って一体???

あと、回答にあったが、これが誤差を計算するものなら、絶対値でなく2乗の理由が理解できない(全部の回答を読めばいいのかも知れない)。「幾何学的な性質」とか サラッと書かれても「は?? 何ですか?!」だよ!!

だいたい、以下は すごい違和感しかない。

誤差には正も負もあるので、打ち消しあってゼロになったりするのは困る。
だったらを2乗すればいい。
全部プラスの数字にして、それを全部足し合わせて、足した個数で割り算する。
もともと2乗していたんだから、ルートすることでもとに戻せば、1回あたりの誤差として使える

僕にすれば、正負で打ち消し合うのが困るなら、まず、絶対値だ。なぜか2乗して、それを加算したのをsqrtしたって元に戻るとは思えない(ここは すごく強引だと思う。: 2乗は非線形だから、そのあとに加算したものをsqrtして線形に戻るかって話だ。まあ、多くの専門家が何も言わずに使うのだから問題ないのだろうけど、それが本質的に問題ないのか、実用的になのかは重要だ)。それよりは、絶対値を加算して平均したほうが ずっといい(素直だ)と思う(実際、上の回答の2乗に関係する行(2, 4行目)を除けば、絶対値のほうが適しているのに、なぜ2乗なんてして処理を増やすのだろうか)。まあ、きっと何か理由があるんだろう。

僕は(正しかろうがそうでなかろうが、自分の用途に問題なく使えるのであれば、考えるだけ無駄・本質でないので)「そういうもの」として粛々と使うだけだ。

 

と、最後はなぜか 数学(が得意気な人)に対する怨嗟になってしまった。。。

  •  0
  •  0
Keys: , , ,

夏に作った、ディスプレイの輝度自動調整システムの明るさセンサの ついでに付けた室温測定機能。冬になってから、朝などに温度センサ(以下、「センサ」)と一般の温度計(以下、「シチズン大」)の差が大きいのが気になって居た。1℃くらい温度センサが高いようだった。合う時もあるので、「たまたま」wか、測定場所が違うせいかと思って居たのだが、そもそも、朝起きた時には ずっと空調が停まっていて室内の温度が ほぼ同じと考えられるにも関わらず違っているのはおかしいし、段々ズレがひどくなって来て見過ごせなくなったので、重い腰を上げて調整した。想像以上に大変だったが、センサと温度計が合うようになったのが気持ちいいし、今まで分からなかったことが分かった(気がする)。

なお、ここでは、シチズン大が「真の温度」を示すと仮定し、センサの示す温度を それに近づけるような補正を考えている。もちろん、シチズン大にも誤差はあるが、市販品なのでセンサよりは正確で安定している(突発的な誤差の変動が起こらない → ほぼ一定のオフセット誤差が長時間続く)と想定する。

ズレの原因は、推定した温度センサ(サーミスタ)のパラメタ(B値, 基準抵抗値, 基準温度)が異なっているのかパラメタが温度依存なのか、温度が下がるにつれてサーミスタの抵抗値から得られる温度が高くなるためだった。そのズレの量は、パラメタが合っているであろう温度からの差に比例しているようだ(簡単に言うと、温度が上がるとズレは減る: 下図の灰色の点線が補正量(= ズレの符号を逆にしたもの)。

YL-40の温度センサを直線で補正した。

今までの測定と調整から、補正の式は以下のようになった。

補正パラメタ:

    • 補正する下限の温度: Ta (実際にはこれより低い温度も可能)
    • Taでの補正量: Da
    • パラメタが合っているであろう温度: Tb
    • Tbでの補正量: Db= 0

→ 補正直線の傾き: k= (Da-Db)/(Ta-Tb)

温度補正式: センサの温度をtとすると、補正後の温度t'は以下である。

t < Tbの場合: t’= t + k * (t – Ta) + Da
t >= Tbの場合: t'= t

実際のパラメタは以下になり、kは0.0905となった。

  • Ta: 14.0 (℃)
  • Da: -1.72 (℃)
  • Tb: 33.0 (℃)
  • Db: 0 (℃)

以下に補正の例を示す。

  • シチズン大: 15℃: 補正前のセンサ: 16.35℃, 補正量: -1.51℃ → 補正後のセンサ: 14.8℃
  • シチズン大: 20℃: 補正前のセンサ: 21.15℃, 補正量: -1.07℃ → 補正後のセンサ: 20.1℃
  • シチズン大: 22℃: 補正前のセンサ: 22.84℃, 補正量: -0.92℃ → 補正後のセンサ: 21.9℃

ズレは結構大きく、しかも、ほぼ全温度(33℃以下)でズレて居たことになり、一体僕は何をしていたんだと、なかなか がっかりだ。確かに、夏に調整していた時も、夕方などに なぜか0.6℃くらいズレたままだったことがあって、当時はシチズン大の「熱・冷え溜まり」と思って片付けたが、実は こういうことだったのかも知れない。※ ただ、温度が高くなると上の補正式からズレてくると思う(実際には曲線なのではないか)ので、春や初夏に再度確認・調整したい。

※今、上の式で26℃での補正量を計算したら、-0.63℃だった。合わない0.6℃の正体は これだったのだろうか? (だったら楽で いいが・・・w)

 

何日間も寒い朝に暖房なしで測定するなどの苦労をして、上の補正式とパラメタを求めてプログラムに適用したところ、概ね合うようになった(下に例)。

YL-40とシチズン大の温度が合っている例。: YL-40の温度は右端下部の"Rm ℃"の下。

上のグラフを説明する。: グラフは補正式が分かってからの数日間の測定・補正結果を示している。横軸は温度センサでの温度、縦軸(左)はシチズン大での温度または補正後の温度、縦軸(右)は補正量(オフセット)である。グラフ中央の斜めの点線は補正前後の温度を示す。測定した温度の点が この直線上にある時※、温度センサ(補正後)とシチズン大の温度が「合っている」状態である(ほとんどの点はセンサの分解能の約±0.25℃に収まっている)。

※正確には、「この直線の近くにあるはずの、センサの温度とシチズン大の温度を対比する線上」であるが、センサの温度とシチズン大の温度を対比させることは正確な補正することであるので、描くことはできない。

下のほうの灰色の線は温度センサの温度に対する補正量(縦軸は右)を示す。

たまにズレが大きいことがあるが、暖房をし始めたり、日が出て来たりして温度変化が急な場合に、温度計とセンサの温度反応速度の違いが影響していると推測している。不思議なのは、なかなか合わない領域があることだ(グラフの20-22℃の膨らんだ部分)。

他におもしろいのは、日によって測定点の直線からのブレ方(上か下か)が違うことだ。センサのADCの特性が長短時間的にブレるためかと想像している。そのため、補正後の値のグラフが そのブレの範囲の中央辺りを通るように調整した。

 

最後に苦労話を書く。

センサとシチズン大の温度差をちゃんと測れるようになるまでが大変だった。そもそも、「同じ温度」を比べていないのに気付かずに惑わされたので、何度も試行錯誤した。空調(暖房)の影響にも惑わされた。一時は、机の下の電気ストーブや日射しや横にあるディスプレイの熱もズレる原因かと思ったが、それらはセンサとシチズン大の両方に効くので、直接の原因ではないことが分かった。ただ、反応速度に差があるので、短時間的にはズレるため、原因と誤解してしまった。

やはり、以前も書いたように、正しい測定・計測が一番重要だ。これを しなければ・できなければ、何もできない・始まらない。

測定ファースト!

それから、電源を入れてからセンサが温まるまで(約10分)は温度が低目に出ることにも惑わされた。夏でもそうだったが、寒い場合はその時間が長引くことに気付かなかった。それが分かるまでは、補正は中央辺りでV字に交わる2つの直線(低温側の傾きは負)なのかと思ったが、そんな器用なものではなかったし、日によって結果が異なった(電源を入れる時刻が違うので、開始時の温度も違うため)ので、そのたびに補正パラメタを変更していた。

あと、センサのケースの通風が悪いのかと思って、側面のほぼ全体を開口にしてみたが、効果があったかは不明だ(温度の精度の点では ないだろう)。まあ、埃が入りやすくなる以外は、通風が良くて悪いことはないのでそのままにしているが、もし、センサ付近に埃が溜まるようなら、狭めたい。

 

PS. センサの温度分解能の0.25℃は物足りない。ちょっとした時に差が大きく見えて、気分が悪い。今はADCの測定可能範囲の半分以下しか使っていないので、フルに使うようにすれば0.1℃オーダー(例: 0.18℃)にできる。のだが、かなりの手間が掛かる(例: 明るさも温度も調整・較正し直し)ため保留している。というか、やりたくないw

そもそも、分解能を上げても それに合う精度が あるかは疑問で、「雑音で ふらついているだけ」ってことになるかも知れない(それでも、平均すれば精度が高められる可能性はある。音や画像のディザーのイメージ)。

分解能以外に、ADCの誤差(オフセット, 直線性)を補正できないかと思って基準電圧源を調べたが、手軽なものではADCの分解能(約14mV)を超えるものは なさそうなので諦めた。また、1個だけでは駄目で、少なくとも2個(高・低電圧)必要なので、なかなか大変だ。

  •  1
  •  0
Keys: , ,