稼働中

Raspberry Pi Pico(d_03)LM61 温度センサー

LM61 温度センサー

LM61は単一電源温度センサーです。2.7V, SOT-23 or TO-92 Temperature Sensorです。
※micro:bitの記事e_05からRaspberry Pi Picoで使えるように追記、修正等をしました。

外観

LM61の外観です。
LM61LM61-TO92
電源電圧は2.7~10VなのでRaspberry Pi Picoの電源が使えます。600mVのオフセットと摂氏温度にリニアに比例(+10mV/℃)します。次式で出力します。
Vo=10mv/℃ X T℃ + 600mV
したがって、周囲温度は T℃=(Vo-600mV)/10mV になります。詳細はデータシートを参照して下さい。

接続図

Raspberry Pi Picoとの接続は下図のようにしました。LM61のVoutをA/D変換するためADC0(GP26)に接続しました。
※Raspberry Pi Picoのピン機能図はhttps://datasheets.raspberrypi.com/pico/Pico-R3-A4-Pinout.pdfにあります。
接続図

スクリプト

LM61の温度測定を試して見ます。スクリプトは以下のようにしました。
※開発環境はThonnyです。ThonnyでMicroPythonをRaspberry Pi Pico with RP2040にインストールして使っています。

machineモジュールにあるclass ‘ADC’を使ってA/D変換します。read_u16メソッドを使って読みます。


>>> help(ADC)
object <class 'ADC'> is of type type
  read_u16 -- 
  CORE_TEMP -- 4

A/D変換をADC0(GP26)で行う場合に①②③のいづれかでオブジェクトを作成します。①が分かりやすいように思います。
※import machine
①adc = machine.ADC(0)
②adc = machine.ADC(26)
③adc = machine.ADC(machine.Pin(26))

デジタル値は以下で得られます。
d=adc.read_u16()

ADCの基準値が3.3Vならアナログ値は
a=d*(3.3/2**16)=d*(3.3/65536)
になります。

スクリプトは以下のようにしました。


from machine import ADC
##LM61 2.7V, SOT-23 or TO-92 Temperature Sensor
# Vo=(+10mV/C x temp)+600mV >> temp=(Vo-600mv)/10mV
# ADC(0) ADC(26) ADC(Pin(26))  GP26
vo=ADC(0).read_u16()*(3.3/2**16) #ADC_ref=3.3V
temp=(vo-0.6)/0.01
print('Temp=%6.2f℃' %temp)

測定結果


>>> %Run -c $EDITOR_CONTENT
Temp= 32.83℃

CORE_TEMP
ちなみclass ‘ADC’にある定数CORE_TEMPは


>>> ADC.CORE_TEMP
4

ADC(4)と同じです。内部で接続されているのでGPIO番号はありません。
ダイオードの電圧Vbe’をADC(4)で調べます。
27℃でVbe = 0.706Vです。-1.721mv/℃で変化します。そのためコア温度は
core_temp =27-(Vbe’-0.706)/1.721mV
で得られます。


core_temp =27-((ADC(4).read_u16()*(3.3/2**16))-0.706)/0.001721
print('coreTemp=%6.2f℃' %core_temp)

測定結果


>>> %Run -c $EDITOR_CONTENT
coreTemp= 34.07℃

まとめ
Raspberry Pi PicoでMicroPythonを使ってLM61での温度測定が出来ました。
class ‘ADC’の使い方が分かりました。コア温度を測定できました。