CircuitPython 10行プログラミング Step3 (8) サーミスタ

 サーミスタを使った温度測定をします。サーミスタは、アナログの温度センサの中では安価で、測定できる温度範囲も広いです。examplesに入っているソースthermistor_simpletest.pyを読むと、サーミスタの出力を接続するピン番号、外部抵抗とB定数などを指定しています。

import time
import board
import adafruit_thermistor

# these values work with the Adafruit CircuitPlayground Express.
# they may work with other thermistors as well, as they're fairly standard,
# though the pin will likely need to change (ie board.A1)
# pylint: disable=no-member
pin = board.TEMPERATURE
resistor = 10000
resistance = 10000
nominal_temp = 25
b_coefficient = 3950

thermistor = adafruit_thermistor.Thermistor(pin, resistor, resistance, nominal_temp, b_coefficient)

# print the temperature in C and F to the serial console every second

while True:
celsius = thermistor.temperature
fahrenheit = (celsius * 9 / 5) + 32
print('== Temperature ==\n{} *C\n{} *F\n'.format(celsius, fahrenheit))
time.sleep(1)

 AdafruitのCircuitPythonで使用しているボードは3.3Vが多いので、想定している電源は3.3Vと思います。

 Voはマイコン・ボードのアナログ入力ピンA0につなぎます。

  pin = board.A0

 直列の抵抗R2はこちらの記事で使った82kΩにします。

  resistor = 82000

 利用したセンサNXFT15XH103FA は25℃のときに10kΩなので、次のパラメータはそのままです。

  resistance = 10000
  nominal_temp = 25

 カタログによるとB定数は3380なので変更します。

  b_coefficient = 3380

 実行中の様子です。指先でセンサをつまむとすぐに温度が上昇しました。

7セグメントLEDに表示する

 4桁の7セグメントLEDに測定した温度を表示します。I2Cインターフェースでつなげられるコントローラht16k33用のライブラリがあるので利用します。この事例では7セグメントLED(QUAD ALPHANUMERIC)なので、インスタンスを初期化するとき、Seg14x4ではなくSeg7x4にします。このライブラリは、マトリクス表示器などにも対応しています。
 round(celsius,1)は、小数点第2位を丸めて小数点第1位の表示を得ます。

import time
import board
import adafruit_thermistor
import busio
import adafruit_ht16k33.segments

i2c = busio.I2C(board.SCL, board.SDA)

display = adafruit_ht16k33.segments.Seg7x4(i2c, address=0x70)
resistor = 82000
resistance = 10000
nominal_temp = 25
b_coefficient = 3380

thermistor = adafruit_thermistor.Thermistor(pin, resistor, resistance, nominal_temp, b_coefficient)

while True:
celsius = thermistor.temperature
print('Temperature', round(celsius,1))
display.print(round(celsius,1))
display.show()
time.sleep(3.14)

 実行している様子です。正確な温度計を利用して校正しないと、温度の値は正しくありません。nominal_temp = 25の数字を変更して、室温付近は近似できます。