技術をかじる猫

適当に気になった技術や言語、思ったこと考えた事など。

Circuit Playground Express の各種機能を試す(3)

温度センサーを利用する

利用するライブラリは adafruit_thermistor.mpyでこれを lib に放り込む。

f:id:white-azalea:20200706192012p:plain

で、コードをしれっと

import time
import adafruit_thermistor
import board

thermo = adafruit_thermistor.Thermistor(board.TEMPERATURE, 10000, 10000, 25, 3950)
while True:
    temp = thermo.temperature
    print((temp,))
    time.sleep(1)

実行するとこんなかんじ

(27.9365,)
(27.9139,)
(27.959,)
(28.004,)
(27.8915,)
(27.959,)
(27.9139,)
(27.9139,)

大体 28 度位なのだが、これを手のひらで包むと

(29.4573,)
(29.5717,)
(29.7322,)
(29.7092,)
(29.824,)
(29.939,)
(30.0081,)
(30.1693,)
(30.2384,)
(30.2616,)

単位が 度というのが助かりますね。
海外だと単位が華氏で有ることも多いので…

他のライブラリを利用してみる

circuit playground のアクセスをもっと単純化したライブラリ adafruit_circuitplayground が存在したので使ってみた。

f:id:white-azalea:20200706193615p:plain

コードは

import time
from adafruit_circuitplayground import cp

while True:
    print("Temperature C:", cp.temperature)
    time.sleep(1)

うーんシンプル。

Temperature C: 27.3748
Temperature C: 27.3748
Temperature C: 27.3972
Temperature C: 27.4197
Temperature C: 27.4197
Temperature C: 27.4197

このライブラリを利用して温度を視覚化しようか

温度の視覚化

温度で LED 光らせてみようか。

import time
from adafruit_circuitplayground import cp

# LED の明るさ設定
cp.pixels.auto_write = False
cp.pixels.brightness = 0.3

# 25-30 度の間で 10 段階表示
minimum_temp = 25
maximum_temp = 30

# 平たく言えば、最小温度から最大温度までの比率を 10 段階計算
#まぁ、25 度下回ればマイナスにもなるし、30 度超えれば 10 以上になるが、ループとしては特に問題ない
def scale_range(value):
    return int((value - minimum_temp) / (maximum_temp - minimum_temp) * 10)

while True:
    peak = scale_range(cp.temperature)

    # 10 個ある LED を範囲内で発光させる
    for i in range(10):
        if i <= peak:
            cp.pixels[i] = (255, 255, 255)
        else:
            cp.pixels[i] = (0, 0, 0)

    # 発光!
    cp.pixels.show()
    time.sleep(0.5)

ということで、30 度でマックス、25 度からおよそ 0.5 度刻みで光らせるコードを書いた。
その様子がコレである。

f:id:white-azalea:20200706195029j:plain

ちなみに起動してると、次第に基盤自体に熱を持つので、27 度の室温なら気づくと 30 度とかになる…