sense hatに搭載のセンサーにて気圧、温度、湿度を測定する

2017年5月9日

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

今までは、sense hat のLEDへの表示(sense hatの取付けとLEDにテキスト表示を実施、sense hatのLEDマトリクス上に様々なイメージを表示する、sense hatのLEDマトリクス表示の向きの設定を変更する方法)を実施してきました。

今回は、Sense hat上にあるセンサーに着目します。

Sense HATには、周囲の状況を検出するための一連の環境センサーがあります。

具体的に言うと、「気圧」「温度」「湿度」を測定することができます。

今回の記事では、Senese hat上にあるセンサーを使って、「気圧」「温度」「湿度」を測定する方法をご紹介します。

それぞれのセンサーの位置については参考記事をご覧ください。

スポンサーリンク

Sense HAT で気圧を測る

まずは、Sense HAT で気圧を測ってみましょう。

気圧を測り、print するプログラムは次の通りです。

from sense_hat import SenseHat
sense = SenseHat()
sense.clear()
pressure = sense.get_pressure()
print(pressure)

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

1018.3173828125 

Sense HAT で温度を検出する

次は、Sense HAT で温度を検出します。

Sense HATには、周囲温度を読み取ることができるセンサーが2つ用意されています。

そのセンサーとは、湿度センサーと圧力センサーです。

実際に、これらのセンサーで、どのように温度を検出するのでしょうか?

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

上記のように、2つの関数が用意されています。

さっそく、それぞれのセンサーで温度を検出してみましょう

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℃も違いますね。

うーん、どちらが合っているんだろうか?

この場では結論が出せませんね。

Sense hatをラズパイにかぶせてあるためか、秋なのに、こんな高温になっています。

スポンサーリンク

Sense HAT で湿度を検出する

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

from sense_hat import SenseHat
sense = SenseHat()
sense.clear()
humidity = sense.get_humidity()
print(humidity)

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

48.57493591308594 

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

スポンサーリンク

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

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

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

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

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

  1. メッセージスピードが速い
  2. 背景が赤くて60爺の目に痛い
  3. 気温他の見出しが長い
  4. 全体をクリアしていないので、中断すると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)      ④

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

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

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

※sense hat で遊ぶの一つ前と次の記事を紹介しています。
⇒ previous:sense hatのLEDマトリクス表示の向きの設定を変更する方法
⇒ next:sense hatで測定した温度と湿度及び気圧をpythonでグラフ表示

最後に

今回は、sense hat上にあるセンサーに着目しました。Sense HATには、周囲の状況を検出するための一連の環境センサー(気圧、温度及び湿度)があります。

簡単なプログラムで、それらの値を検出することが出来ました。

ただ、温度はラズパイが熱を発するので、少々高い温度になってしまうようですね。

最後に測った内容をディスプレイ表示しましたが、早く流れすぎるのでプログラム修正をかけて見ました。これらを使用することで、簡単に周囲の環境を計測できますね。

■「sense hatで遊ぶ!」の記事は次の通りです

参考
IT女子のラズベリーパイ入門奮闘記第45回

スポンサーリンク
この記事を書いた人

60爺

60路を越え、RaspberryPi と出会い、その関係でブログ開設(2017/2~)となりました。始めてみると、コツコツやるのが性に合ってしまい、漢字の記事から家の補修・将棋・windows10関係・別名・言い方などジャンルを拡大して今に至ってます。まだまだ、元気なので新たな話題を見つけて皆様に提供できればと思っています。「プロフィールはこちら