センサーにて気圧、温度、湿度を測定/sense hatを動かすpart5

シェアする

Pocket

※リニューアルしました 2018/10/9

1.環境を感知する

「sense hat を動かす」もpart5となりました。

LEDへの表示を終了し、sense hat上にあるセンサーに着目しましょう。

Sense HATには、周囲の状況を検出するための一連の環境センサーがあります。圧力、温度、湿度を測定することができます。

それぞれのセンサーの位置については、IT女子のラズベリーパイ入門奮闘記第45回をご覧ください。

2.Sense HAT で気圧を測る

まずは、気圧を測り、print するプログラムです。

from sense_hat import SenseHat

sense = SenseHat()
sense.clear()

pressure = sense.get_pressure()
print(pressure)

実行すると、測定した気圧の値が表示されます。

1018.3173828125 

3.Sense HAT で温度を検出する

Sense HATには、周囲温度を読み取ることができる2つのセンサー、湿度センサーと圧力センサーがあります。

  • get_temperature_from_humidityは湿度センサーから温度を読み取ります(get_temperatureは同じコマンドの短いバージョンです)。
  • get_temperature_from_pressureは、圧力センサーから温度を読み取ります。
from sense_hat import SenseHat

sense = SenseHat()
sense.clear()

temp = sense.get_temperature()
print(temp)

temp = sense.get_temperature_from_pressure()
print(temp)

実行したところ、以下の結果です。

38.38426971435547
35.349998474121094

温度が3℃も違いますね。うーん、どちらが合っているんだろうか?この場では結論が出せませんね。ラズパイにかぶせてあるので、秋なのに、こんな高温になっています。

4.Sense HAT で湿度を検出する

今度は、湿度を測ってみます。

from sense_hat import SenseHat

sense = SenseHat()
sense.clear()

humidity = sense.get_humidity()
print(humidity)

実行すると以下の結果が出ました。

48.57493591308594 

48.6%ですか。まあ、低い方なんでしょうかね?

5.気圧、温度及び湿度のスクロールテキスト表示

さて、次の演習は、気圧、温度及び湿度を測定して、測定結果をスクロールテキスト表示をするプログラムです。

「テキストの表示」で用いたスクロール・テキストの表示コードを使用します。

while True:
    # Take readings from all three sensors
    t = sense.get_temperature()
    p = sense.get_pressure()
    h = sense.get_humidity()

    # Round the values to one decimal place
    t = round(t, 1)
    p = round(p, 1)
    h = round(h, 1)
  ※------※ 下記参照

    # Create the message
    # str() converts the value to a string so it can be concatenated
    msg = "Temperature = {0}, Pressure = {1}, Humidity = {2}".format(t,p,h)

    # Display the scrolling message
    sense.show_message(msg, scroll_speed=0.05)

国際宇宙ステーションでは、気温で言うと、18.3℃~26.7℃の間で環境を維持しているようです。

そこで、次のプログラムは、気温が18.3度以上、26.7度以下なら、背景を緑、それ以外は、背景を赤くします(上記※------※に下記のif文が入っています)。

60爺の環境では、気温が35.0度(Sense Hatをずっとかぶせてあるので気温が高くなっているようです)だったため、背景が赤くなりました。

if t > 18.3 and t < 26.7:
   bg = [0, 100, 0] # green
else:
   bg = [100, 0, 0] # red

ただ、このプログラムでは、次の問題があります。

①メッセージスピードが速い
②背景が赤くて60爺の目に痛い
③気温他の見出しが長い
④全体をクリアしていないので、中断するとLEDに、それまでの結果が残る

そこで、次のように、プログラムを修正しました。 それと、⑤各数値は、小数点第二位まで表示するようにしました。

while True:
    t = sense.get_temperature()
    p = sense.get_pressure()
    h = sense.get_humidity()

    t = round(t, 2)  ⑤
    p = round(p, 2)  ⑤
    h = round(h, 2)  ⑤

    if t > 18.3 and t < 26.7:
        bg = [100, 0, 0] # red    ②
    else:
        bg = [0, 100, 0] # green    ②

    #     msg = "Temperature = {0}, Pressure = {1}, Humidity - {2}".format(t, p, h)
    msg = "Temp = {0}, Pres = {1}, Humi = {2}".format(t, p, h)    ③

    #     sense.show_message(msg, scroll_speed=0.05, back_colour=bg)
    sense.show_message(msg, scroll_speed=0.1, back_colour=bg)    ①

    sense.clear()    ④
    sleep(1)      ④

修正したプログラムを実行すると、問題点は、以下のように変更されています。

①メッセージスピードが先ほどより遅くなった
②背景は緑にした
③気温他の見出しは4桁になった
④最後に全体をクリア(1秒間)しているので、中断は、この時点で行う

以下に結果を動画で載せますね。

LED表示の向きを変える/sense hatを動かす part4はこちら。

スポンサーリンク

シェアする

フォローする