micro:bitで温度計と照度計を作ってみよう
カリキュラム
https://gyazo.com/8bdafc934330064bee9d273c75bbbc8c
ここでは,micro:bitに組み込まれている,または後から接続した温度センサや明るさセンサを利用したプログラムを作ってみます.このプログラミング活動は,3年理科の「地面のようすと太陽」や「太陽の光」(明るさと温度)などに組み入れることができます. 要既習
なお,ここで作る温度計は,外で使うなどのためにコンピュータとの接続を切り離すと,micro:bitに電源は供給されなくなり動かなくなりますので,そのような場合は電池ボックスを接続してください.
https://gyazo.com/8bdafc934330064bee9d273c75bbbc8c
温度を表示してみよう
ここでは,温度をmicro:bitのLEDパネルに表示するプログラムを作ります.プロジェクト温度を表示する(雛形)を開いてください. https://gyazo.com/a96dd0f811f4fa2e49c98f16169d4c53
micro:bitには下の画像の白丸の部分に温度センサが組み込まれていて,「入力」カテゴリにある変数ブロック「「温度(℃)」を用いることで,プログラムの中で温度を利用することができます. https://gyazo.com/f6adfca220eaa698519eac930a804aff https://gyazo.com/f6721e1c36dd7f8351b5bb17a7ae5aec
変数 変数ブロックには文字列や数などの値を入れることができ,文字列を入れるべき場所や数を入れるべき場所に置くと,変数ブロックに入っている文字列や数を置いたたのと同じ動きになります. micro:bitのLEDパネルに数を表示するには「基本」カテゴリにある「数を表示」ブロックを用いるのでしたね.では,作ってみましょう.
正解例を示します.
https://gyazo.com/154bfc6385209ca799954d84b5067716
「数を表示」ブロックの,表示する数を置く部分に「温度(℃)」ブロックを入れ,それを「ずっと」ブロックの中に入れることで,計測した温度が表示され続けます.
https://gyazo.com/8bdafc934330064bee9d273c75bbbc8c
ボタンを押すと温度が表示されるようにしてみよう
現在作ったプログラムでは,ずっと温度が表示され続けるため,少し見辛くないでしょうか.そこで,micro:bit についているボタンを押すと,その時の温度を表示するプログラムを作ってみます.
イベント Aボタンが押された時に,あるブロックを実行したい場合には,「入力カテゴリ」の中にあるイベントブロック「ボタン(A)が押されたとき」を用います.Aボタンが押されると「ボタン(A)が押されたとき」ブロックの中に置かれたブロックが実行されます. https://gyazo.com/d1e7007079122d66ca576bd6204b714c
では,作ってみましょう.
正解例を示します.
https://gyazo.com/898ad6d26769fe1b32fedf680296116f
先ほどにプログラムで「ずっと」ブロックの中に置いていたブロックを,「ボタン(A)が押されたとき」ブロックの中に置くことで.Aボタンを押したときに「数を表示」ブロックが実行され,その時に計測された温度が表示されるようになります.
https://gyazo.com/8bdafc934330064bee9d273c75bbbc8c
Bボタンを押すと明るさが表示されるようにしてみよう
micro:bitはLEDの部分に明るさを計測するセンサも含まれています.そこで,Aボタンを押すと温度が,Bボタンを押すと明るさを表示するプログラムを作ってみます.
プロジェクト温度と明るさを表示する(雛形)を開いてください.Bボタンが押された時に,あるブロックを実行したい場合には,「ボタン(A)が押されたとき」ブロックの(A)の部分を(B)に変更したブロックを使うだけです.また,明るさは変数ブロック「明るさ」で得ることができます.では,作ってみましょう. 正解例を示します.
https://gyazo.com/9c5a0adbba8a9a1fef7951dae1fbaa9e
https://gyazo.com/8bdafc934330064bee9d273c75bbbc8c
高温アラート装置を作ってみよう
ここでは,ある温度よりも計測した温度が高くなったら,それを知らせるプログラムを作ります.
高温アラート装置を作ろう(雛形) を開いてください.用意されているブロックを用いて,ある温度よりも計測した温度が高い時にLEDパネルを点灯するプログラムを作ってみます. ある温度よりも計測した温度が高いかどうか,ある数(温度)と計測した温度の大小を調べ,それによってLEDを点灯するか消灯するかを行う部分を作ってみます.
条件分岐 何かの条件によってプログラムの動きを変えることを条件分岐と呼びます.条件分岐を実現するためのブロックが条件分岐ブロックhttps://gyazo.com/8feb8e277a020c37ffc25dc203534b94です.上の六角形の部分に真偽値を置くと,真値である時は上側の窪みに置かれたブロックが,偽値である時は下の窪みに置かれたブロックが実行されます.この真偽値を置く部分には,多くの場合,条件を表す条件式を置きます.条件式はその式が成り立っていれば真,成り立たっていなければ偽となります. 不等式 今回は二つの数の大小が条件となります.数の大小を調べるための条件式は不等式ブロックhttps://gyazo.com/fbcb5ec410206ad853d54aab8030099bを用いて作ります.この不等式ブロックは左側に入れた数が右側に入れた数より大きい場合は真となり,異なる場合は偽となります.なお,不等号の部分は,他の<,≧,≦に変更することもできます. では,プログラムを完成させてみましょう.なお,何度より高くなったらの基準は自由に決めてください.また,LEDをどのように点灯するかは自由です.「アイコンを表示」ブロックや「LED画面に表示]ブロックを使ってください.LEDを消灯するのは「表示を消す」ブロックです.
正解例を示します.
https://gyazo.com/093b309b6ae049a2df6d224a5d2f6b27
温度が30度よりも大きい時にはLEDパネルを点灯させて,30度以下の時にはLEDを消灯するように,「アイコンを表示」ブロックと「表示を消す」ブロックを,適切に条件判断ブロックの中に入れます.
https://gyazo.com/8bdafc934330064bee9d273c75bbbc8c
より正確な温度を計測する
micro:bitに組み込まれている温度センサはmicro:bit自体の温度を計測しています.そのため,外の温度よりも高い温度になってしまいます.より正確に温度を計測したい場合は,micro:bitに別の部品を取り付けます.
https://gyazo.com/2136390ef90416e654884fef64c18f86
TFabWorks温度センサ
TFabWorksの温度センサは,ワンタッチでmicro:bitに取り付けられる温度センサです.
https://gyazo.com/3c1bbe4faa0925062d6fb3c16ae46da7
(TFabWorks webサイトより)
この温度センサで計測した温度は「STEM」カテゴリ内の変数ブロックhttps://gyazo.com/a8e5685a5203d0b4ef1d14bd6f9e7b8cで得ることができます.これらのブロックを使って一からプログラミングをする場合にはTFabWorksの温度センサを使うの準備を行なってください. https://gyazo.com/dceefeeee862bb02a12f3695db7d62c6
https://gyazo.com/8bdafc934330064bee9d273c75bbbc8c
(チャレンジ)熱中症アラート装置を作る
TFabWorksの温度センサは,湿度を測ることもできます.温度と湿度がわかれば暑さ指数(WBGT)を簡易的に計算することができます.日本生気象学会「日常生活における熱中症予防指針Ver.4」(2022)では,日常生活において,この暑さ指数が31以上なら危険,28以上31未満なら厳重警戒,25以上28未満なら警戒という指標を出しています.
ここでは,WBGTを計算して,31以上の時と28以上の時にそれぞれ危険と厳重警戒を示すアイコンをLEDに表示するプログラムを作ってみます.
なお,WBGTは温度と湿度からだけでは正確に求めることができませんが,小野らが提案している推定式を用い,さらに必要なデータ(条件)を決め打ち(夏の日なたの微風状態での気温と湿度)することで,おおよその値を計算することができるので,ここでは,その式を用いることにしましょう.
WBGT=0.735×温度+0.0374×湿度+0.00292×温度×湿度--2.78048
小野 雅司, 登内 道彦, 通常観測気象要素を用いた WBGT(湿球黒球温度)の推定, 日本生気象学会雑誌, 50 巻, 4 号, p. 147-157, 2014/03/28
https://gyazo.com/2a0d83ddcd75d146c690566ddc77b5c4
WBGTを求める
計測した温度と湿度からWBGTを計算するブロックを作ります.湿度は変数ブロックhttps://gyazo.com/8e09b6f8237616e1c8937b98420ab9d8に入っています. WBGTはかなり複雑ですが,加算(減算)が何度も行われる構造になっていることがわかります.そこで,計算結果を入れるための変数ブロックhttps://gyazo.com/59a026f414e467aa059393f0145f3e66に数を加算していくhttps://gyazo.com/593c43ee9f1e616046bf5bc2a9804c43ブロックを使って,WBGTに0.735×温度,0.0374を×湿度,0.00292×温度×湿度,-2.78048を順に加算していくようにしてみましょう.つまり,変数ブロック「WBGT」に0.735×温度を足す.WBGTに0.0374を×湿度を足す.WBGTに0.00292×温度×湿度を足す.WBGTに-2.78048を足すと言うことを行います.なお,最初に変数ブロック「WBGT」にどのような数が入っているかわからない(不定)なので,最初に-2.78048を入れてしまうのが良いでしょう. なお,3つの数の乗算がありますね.3つの数の四則演算をしたい場合は,2つの数の四則演算に分解します.たとえば,1+2-3なら1+2を計算し,その結果-3とします.具体的にはhttps://gyazo.com/22a1dc778954c68f82e8dcd6129118f1とします.では,計算部分を作ってみてください.
正解例を示します.
https://gyazo.com/23554b541e67ce5a0d7eeb44542f72af
WBGTの値に応じて表示を変える
計算したWBGTに応じてLEDの点灯を変える部分を作ります.31以上の時と28以上の時にそれぞれ危険と厳重警戒を知らせるのでしたね.また,28より小さい時は表示しないようにすることも忘れてはいけません.
このように3つの場合に分岐する場合は多条件分岐させます.それには条件分岐ブロックhttps://gyazo.com/8feb8e277a020c37ffc25dc203534b94の下にある+ボタンを押します.するとhttps://gyazo.com/708b9bc858950de6845f2f6d47f05ffaのように条件を入れる部分が増えます.この多条件分岐ブロックでは,一番上の6角形の部分に入れた条件式が成り立つ時は一番上の窪みの中のブロックが実行され,成り立たない時は次の条件式が調べられ,それが成り立つ時は真ん中の窪みの中のブロックが実行され,成り立たない時は一番したの窪みの中のブロックが実行されます. 作ってみる
では,どのような条件式を入れれば良いかをよく考えながらプログラムを作ってみてください. 正解例を示します.
https://gyazo.com/ee7d7ed2f0b6a9c07eebbbcce1572cc9
最初にWBGTが31以上であるかを調べています.もしWBGTが28以上であるかを調べるようにしてしまうと,31度以上の時も成り立ってしまい危険が表示され,厳重警戒が表示できなくなってしまいます.また,「以上」を調べているので,>ではなく≧を使うことにも注意が必要です.
https://gyazo.com/8bdafc934330064bee9d273c75bbbc8c
他の種類のセンサを使う
https://gyazo.com/2136390ef90416e654884fef64c18f86
Boson,GROVE,Gravityのセンサを使う
DFRobotのBosonシリーズの温度センサと明るさセンサ,湿度センサは,同じくDFRobotのBoson/Gravity-micro:bit用拡張基板を用いるとケーブルで簡単に接続できるセンサです.
https://gyazo.com/6b04064edafd0043251989c26da6693b
このセンサで計測した温度と明るさ,湿度は「入出力端子」カテゴリ内の「アナログ端子を読み取る」ブロックで得ることができます.端子は,温度センサからのケーブルを刺した場所の番号を選びます.なお,摂氏単位の温度は,取得した値 * 10.89 / 104.8576で得ることができます.また,明るさは0から1023で表わされ,最も暗い場合が0,最も明るい場合が1023になります.湿度は0から1000で表されているようです.
Seeed StudioのGROVEシリーズの温度センサと明るさセンサは,同じくSeeedのBitMakerなどを用いるとケーブルで簡単に接続できるセンサです.
このセンサで計測した温度と明るさは「入出力端子」カテゴリ内の「アナログ端子を読み取る」ブロックで得ることができます.端子は,温度センサからのケーブルを刺した場所の番号を選びます.なお,摂氏単位の温度は,ーーーーーーで得ることができます.また,明るさは0から1023で表わされ,最も暗い場合が0,最も明るい場合が1023になります.
DFRobotのGravityシリーズの温度センサと明るさセンサは,DFRobotのBoson/Gravity-micro:bit用拡張基板などを用いるとケーブルで簡単に接続できるセンサです.
https://gyazo.com/b3758333c4c9126136a0ff0495465820
このセンサで計測した温度は「入出力端子」カテゴリ内の「アナログ端子を読み取る」ブロックで得ることができます.端子は,温度センサからのケーブルを刺した場所の番号を選びます.なお,摂氏単位の温度は,取得した値÷1023.0 * 3.3 / 0.01で得ることができます.また,明るさは0から1023で表わされ,最も暗い場合が0,最も明るい場合が1023になります.
こちらの雛形では,「明るさと温度」カテゴリの中に,各種センサから「温度」「明るさ」「湿度」を得るためのブロックが用意されています.
https://gyazo.com/8bdafc934330064bee9d273c75bbbc8c
Copyrights 2020- Naoki Kato, IML at CICT, TGU