■5回目 温度測定
こんにちは、ガマンです。
今回はRaspberry Pi Picoで温度を測ってみます。
Raspberry Pi Picoには、内蔵されている温度センサがあります。
この内蔵センサで室温を測ってみる実験と、
秋月で買ってきた温度センサをRaspberry Pi Picoにくっつけて測る、
2つの実験をやってみます。
それではさっそく実験してみましょう。
■準備
●温度を測る道具
まず道具をそろえます。
道具2 温度センサモジュール(S-5851A搭載)
https://akizukidenshi.com/catalog/g/gM-11575/道具3 抵抗10kを2本
道具4 ジャンパー線、ジャンパー線を複数
道具5 ブレッドボード
購入時に参考にしていただければと思います。
■温度センサとPicoを接続する
●温度を測る回路を作る
それでは回路を作っていきます。
実態配線図、回路図を記載しておきますので、参考にしてください。
温度センサは端子1本1本に意味がありますので、
接続するときはどこに何をつないでいるのかよく確認してください。
使うジャンパー線は、固いものでも柔らかいものでもOKです。
Raspberry Pi PicoのGPIOピンは、GPIO14(SDA)、GPIO15(SDL)を使いました。
■Pythonプログラムを書く
●温度を測る実験
ではプログラムを書いて動かしてみましょう。
開発環境Thonnyを立ち上げて、
メニューの[表示]-[Plotter]をクリックしてください。
画面の右下にこのような枠が増えるはずです。
上のほうの枠にプログラムを書いて実行ボタンを押します。
温度を測るプログラムは概要欄に記載しておきますので、
コピー&ペーストして動かしてみてください。
from machine import I2C, Pin
import utime
sensor_temp = machine.ADC(4) # 内蔵温度センサーに接続されるADCはNo4
conversion_factor = 3.3 / (65535)
i2c = I2C(1, scl=Pin(15), sda=Pin(14), freq=400000) # 外部温度センサーはGPIO14,15に接続
while True: # 以下を無限ループ
reading = sensor_temp.read_u16() * conversion_factor # 内蔵温度センサーの読取り
temperature = 27 - (reading - 0.706)/0.001721 # 読取り値を温度に変換
data = i2c.readfrom(0x48, 2) # 外部温度センサーのデバイスアドレスは048H
temp = (data[0] << 8) + data[1] # 外部温度センサーの読取り
if((temp & 0x8000) != 0): # 2の補数表現を整数に変換。最上位ビットが1のとき、
temp = -(0x10000 - temp) # 負の数に変換
temp = temp / 256 # 読取り値を温度に変換
print('Pico', temperature,'External', temp) # それぞれのセンサー温度の表示
utime.sleep(1) # 1秒待つ
実行ボタンを押すと、
shell枠に文字と数字が、右下の枠にグラフが表示されます。
表示されましたか?
本当に測れているのか、試しにドライヤーの熱風を、センサに向けてみると、
温度が上昇していることがわかります。
●2つの温度
実はRaspberry Pi Picoの中には、温度センサが入っています。
ピコに続く数字が、Raspberry Pi Picoに内蔵された温度センサで測定した温度、
Externalに続く数字が、温度センサモジュールで測定した温度です。
Plotter枠には、それらの温度がグラフ化されて、表示されています。
内蔵されている温度センサは、ICの中に入っているので、
ICの近くの温度しか測れません。
さらにCPUがずっと計算していると、温度が上がってくるかもしれません。
内蔵センサと、温度センサモジュールで、測定値が違いますね。
それぞれに誤差があると思いますが、どちらが正確なのでしょう。
温度センサモジュールの精度は、仕様によると±2.0℃ぐらいなので、
これぐらいの差は、あまり気にしても仕方ないかもしれませんね。
Ayu先生の、M5Stackにディジタル温度センサを接続して温度を測りました。
みんな値が違うのですが、大体の温度はわかります。
次回は、またLEDに戻るのですが、
LEDの明るさと色をじわじわ変えてみます。またね!