稼働中

マイクロビット(e_05)LM61 温度センサー

LM61

LM61は単一電源の温度センサーです。以下がLM61の外観です。

LM61

電源電圧は2.7~10Vなのでmicro:bitから給電して使えます。出力電圧は摂氏温度に比例(+10mV/℃)します。600mVのオフセットがあります。Vo=(10mv/℃ × T℃)+600mV で出力されます。したがって、周囲温度は、T℃=(V0-600mV)/10mV になります。

LM61で測定した温度とmicro:bitのtemperature()で測定した温度の比較してみます。

接続例

micro:bitと以下のように接続します。LM61の電源はmicro:bitの3.3Vを使います。LM61の出力をmicro:bitの入力ピンpin1に接続します。pin1のモードはアナログ入力にします。
LM61接続図
※micro:bitのピン配置図は「https://tech.microbit.org/hardware/edgeconnector/」からの引用です。

スクリプト

スクリプトは以下のようにしました。※thonny-microbitを使っています。


#!/usr/bin/env python
# -*- coding: utf-8 -*-
from microbit import *

# データを振幅比で換算(map)
def u_map(value,a_min,a_max, b_min,b_max):
    y= (value-a_min)/(a_max-a_min) * (b_max-b_min)+b_min
    return y

display.off()
pin1.set_pull(pin1.NO_PULL)     #LM61の出力をpin1で受ける

while True:
    r_v1 = pin1.read_analog()   #pin1をread_analogにする
    sleep(100)
    vo=u_map(r_v1, 0, 1024, 0, 3300) #3215 読値を振幅で換算して電圧に
    #T=(Vo-600)/10
    t0=(vo-600)/10              #摂氏温度に換算
  
    t1=temperature()            #micro:bitの温度を得る関数

    #print(r_v1, vo, t0, t1)
    print('Read=%04d ' % r_v1, 'Vo=%04d_mV ' % vo,'t0=%06.2f_℃ ' % t0,
          't1=%06.2f_℃ ' % t1)
    sleep(1000)

実行結果(ThonnyのShell表示、ThonnyのSTOPアイコンで停止)


>>> %Run b1116_lm61_b.py
Read=0265  Vo=0854_mV  t0=025.48_℃  t1=023.00_℃ 
Read=0265  Vo=0854_mV  t0=025.48_℃  t1=023.00_℃ 
Read=0265  Vo=0854_mV  t0=025.48_℃  t1=023.00_℃ 

比例換算


def u_map(value,a_min,a_max, b_min,b_max):
y= (value-a_min)/(a_max-a_min) * (b_max-b_min)+b_min
return y

で換算しています。read_analog()値は0~1023の値をとります。1023で電源電圧(3297mV)になります。
したがって read_analog()値は(3300/1024)X 読値になります。
仮に読値が511の場合は(3300/1024)*511 = 1648.8mV になります。
u_map関数の計算では、u_map(511, 0, 1024, 0, 3300) になります。そのため、y=(511-0)/(1024-0)*(3300-0) となるので、先と同じです。
結果をみるとややLM61の方が温度が高くなっています。テスターで電源電圧を測定すると3215mVでした。この値で再測定すると


>>> %Run b1116_lm61_b.py
Read=0265  Vo=0832_mV  t0=023.28_℃  t1=023.00_℃ 
Read=0265  Vo=0832_mV  t0=023.28_℃  t1=023.00_℃ 
Read=0265  Vo=0832_mV  t0=023.28_℃  t1=023.00_℃ 

LM61の温度とmicro:bitのtemperature()関数で得た値とほぼ同じになりました。

温度を条件にLED点灯

LM61で測定した温度を条件にしてLEDをON/OFFの条件にしてみます。
以下のようにpin3に抵抗とLEDを接続します。pin3はwrite_digitalで使います。
LM61-LED接続図
先のスクリプトで不要な部分を削除して、条件式とpin3からLEDのON/OFFを追加します。


#!/usr/bin/env python
# -*- coding: utf-8 -*-
from microbit import *
def u_map(value,a_min,a_max, b_min,b_max):
    y= (value-a_min)/(a_max-a_min) * (b_max-b_min)+b_min
    return y

display.off()
pin1.set_pull(pin1.NO_PULL)

while True:
    r_v1 = pin1.read_analog()
    sleep(100)
    vo=u_map(r_v1, 0, 1024, 0, 3215) #3215
    
    t0=(vo-600)/10
   
    if t0 > 25:              # 25℃を超えたらLEDをON
        pin3.write_digital(1)
        print('Ta > 25℃ LED ON  %06.2f_℃ ' % t0)
    else:                       # 25℃以下ならLEDをOFF
        pin3.write_digital(0)
        print('Ta <=25℃ LED OFF %06.2f_℃ '  % t0)
        
    sleep(1000*10)              # 10sec 待機

実行結果(ThonnyのShellに表示)


>>> %Run b1116_lm61_b2.py
Ta <=25℃ LED OFF 023.60_℃ # 25℃以下なのでLEDはOFF 
Ta > 25℃ LED ON  025.48_℃ # 25℃を超えたのでLEDをON
Ta > 25℃ LED ON  025.80_℃ 
Ta > 25℃ LED ON  025.80_℃ 
Ta > 25℃ LED ON  025.17_℃ 
Ta <=25℃ LED OFF 024.85_℃ # 25℃以下なのでLEDはOFF
Ta <=25℃ LED OFF 023.60_℃ 

応答速度

ちなみに温度の応答らしきものを調べてみました。LM61で温度を測定してプロットしただけです。
LM61のパッケージ部を手で摘まんで温めた後の冷却時間です。手を離してから定常になるまで約10分くらいかりました。樹脂パッケージなので熱の応答は遅いようです。環境が変化したら即反応が必要な用途には不向きです。

冷却速度

まとめ
micro:bitで温度センサーLM61を用いて温度測定をしました。LM61を使えば簡単に温度測定ができると思います。