MicroPythonで温度センサーLM61CIZを使う

温度センサーLM61CIZを使い、ESP32-PICO搭載のM5Stack ATOM Liteで外気温を取得しました。

ESP32の制御にはMicroPythonを使いました。

 

■ 温度センサ

温度に応じた電圧を出力するIC温度センサです。買ったのは8年くらい前ですが^^;

高精度IC温度センサLM61CIZ ¥60
https://akizukidenshi.com/catalog/g/gI-11160/

このセンサは、温度範囲-30℃~100℃の範囲を300mV~1600mV(0℃=600mV)で出力し、1℃あたり10mV変化します。
この出力電圧を、ESP32のアナログ入力で読み取ります。

 

■ 配線

ATOM Liteの場合、使えるアナログ入力は、G32、G33、G34(G21)になります。

今回は、GROVE端子(XH2.0-4P)を使い、G32で読み取りました。

(端子のとこをグルーガンで固めたので汚らしいですが)

 

■ スクリプト(MicroPython)

ESP32のアナログ入力の分解能は12ビットで、読み取り値は0~4095です。

基準電圧は1.1Vで、基準電圧以上の電圧を読み取るには、キーワード引数attenで入力減衰率を設定するとの事。

【測定上限】
ADC.ATTN_0DB(減衰率を適用なし):1.2V
ADC.ATTN_2_5DB(2.5dBの減衰率):1.5V
ADC.ATTN_6DB(6dBの減衰率)  :2.5V
ADC.ATTN_11DB(11dBの減衰率) :3.3V

それぞれの設定で、線形性が取れててちゃんと測定可能な電圧範囲は以下だそうです。

【測定範囲】
ADC.ATTN_0DB(減衰率を適用なし):100mV~950mV
ADC.ATTN_2_5DB(2.5dBの減衰率):100mV~1250mV
ADC.ATTN_6DB(6dBの減衰率)  :150mV~1750mV
ADC.ATTN_11DB(11dBの減衰率) :150mV~2450mV

 

MicroPython ESP32 用クイックリファレンス
https://micropython-docs-ja.readthedocs.io/ja/latest/esp32/quickref.html#adc-analog-to-digital-conversion

 

この線形性の範囲は、実際にグラフを見るとわかりやすいです。
実際に測定した方がグラフの載せてくれてます。

 

ESP32のアナログポートの特性調査-入力感度特性
http://radiopench.blog96.fc2.com/blog-entry-1034.html

 

温度範囲を最大50℃とすると、このセンサの出力電圧は1.1Vなので、減衰率2.5dBを使うこととしました。

上記サイトの電圧と読み取り値の実測グラフのプロットを、目分量で読み取り、読み取り値(0〜4095)から電圧に変換する式を算出してみると、下記となりました。

voltage =  readvalue * 1.36/4096+0.08

電圧から温度の変換式は、仕様通りであれば、下記になります。

temperature = (voltage - 0.6)*100

という事で、温度を取得するコードは以下になります。

import machine
adc = machine.ADC(machine.Pin(32))
adc.atten(machine.ADC.ATTN_2_5DB)
val = adc.read()
vol =  val * 1.40/4096+0.03
temp = (vol - 0.6)*100

電圧の変換式は、ちょっと係数を変更していて、室温と体温を測ったときの出力電圧をテスターで読み取り、一致するように補正した結果こうなりました。

温度は正しく測れるものが手元にないので、ちゃんとした補正ではなく、体感的にまだ高めな温度になっている気がするので、調整が必要な気もします。

 

Updated: 2023年3月29日 — 07:08

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です