micro:bitで便利な電気器具を作ってみよう
カリキュラム
https://gyazo.com/8bdafc934330064bee9d273c75bbbc8c
ここでは,micro:bitに様々な入出力デバイスを繋げ,便利な電気器具(を模倣するもの)を作ります.このプログラミング活動は,6年理科の(電気の利用)に組み入れることができます. micro:bitには様々なブランドの入出力デバイスが繋げられます.この研修教材では,DFRobotのBosonシリーズの入出力デバイスを,同じくDFRobotのBoson/Gravity-micro:bit用拡張基板を使って繋げます.
要既習
https://gyazo.com/8bdafc934330064bee9d273c75bbbc8c
BOSONの入出力デバイスの使い方
Boson/Gravity-micro:bit用拡張基板にmicro:bitを差し込み,基盤の端子に専用ケーブルでBOSONの入出力デバイスを繋げることで,micro:bitから入出力デバイスにアクセスできるようになります.入力デバイスは基盤のP0〜P2端子に繋げることができます.出力デバイスはP0〜P2だけでなく,P8,P12,P16端子に繋げることもできます.
https://gyazo.com/6e38af24d87da9145bfe712631a342ad https://gyazo.com/6b2e6e30b5a3d7c4177093fbe4f7b816
micro:bitにコンピュータで作ったプログラムを転送するには,いつものと同じようにmicro:bitのMicro-USB端子とUSBケーブルを使ってコンピュータと接続してください.コンピュータと接続している状態ではmicro:bitにUSBケーブルを通して電流が供給されますが,コンピュータから外して動かす時にはmicro:bitの電源コネクタに電池ボックス(単3電池2本)を繋げるなどしてください.
なお,繋げる入出力デバイスによってはmicro:bitに繋げた電池だけでは電流が足りないことがあります.コンピュータからの転送がうまくいかない,動作が何かおかしいなどの現象が起こった場合は,基盤の電源コネクタに基盤用の電池ボックス(単4電池3本)を繋げてください.
BOSONの入力デバイスからの値は「入出力端子」カテゴリ内の「アナログ端子を読み取る」「デジタル端子を読み取る」ブロックで得ることができます.また,出力デバイスへの出力は「アナログで出力する」「デジタルで出力する」ブロックで行うことができます.
ただ,この研修教材で使うプログラムの雛形では,BOSONの入出力デバイス専用のブロックが用意されているので,それを用います.
https://gyazo.com/8bdafc934330064bee9d273c75bbbc8c
ボタンを押すと温度が表示されるようにしてみよう
最初に,micro:bitについているボタンを押すと,温度センサが計測した温度をmicro:bitのLEDに表示するプログラムを作ります.
まず,温度センサを基盤に接続してください.P0〜P2端子のどれでも良いのですが,ここではP2につなげてください.
https://gyazo.com/6b04064edafd0043251989c26da6693b
次に,電気の利用(BOSON):ボタンが押されたら温度を表示するを開いてください.この雛形では,温度センサが計測した温度が入る変数ブロック「温度」を用いることができます.この「温度」ブロックは「電気の利用」カテゴリの中にあります.なお,この「温度」ブロックを使うときには,温度センサを繋げた端子番号を指定する必要があることに注意してください. https://gyazo.com/da2633a0233dee6c7b8b21127954bd10
では,用意されたブロックを用いてmicro:bitのボタンを押すと温度を表示するプログラムを作ってみましょう.
https://gyazo.com/db74e5a51c3e40db501f361e7ebbcaf5
正解例を示します.
https://gyazo.com/e954df2f201db4536ef56c5ebb87ad5e
micro:bitのLEDに数を表示するには「基本カテゴリ」の中にある「数を表示」ブロックの◯の部分に表示すれう数を入れたブロックを実行します.温度センサが計測した温度が入っている「温度」ブロックは変数ブロックです.変数ブロックは文字や数を入れておくことができ,文字列や数の代わりに置くと,変数ブロックに入っている文字列や数をそこに置いたのと同じ動作になるのでしたね.ですので「温度」ブロックを「数を表示」ブロックの◯の部分に置けば,温度を表示することができます. また,micro:bit上のAボタンが押された時に,あるブロックを実行したい場合には,「入力」カテゴリの中にある「ボタン(A)が押されたとき」ブロックを用います.micro:bitのAボタンが押されると「ボタン(A)が押されたとき」ブロックに挟まれたブロックが実行されるので,上で作ったブロックをここに置けば良いことになります.
他の入力センサを使ってみよう
BOSONには様々な入力デバイス(センサ)がありますが,先ほど開いた雛形では,湿度センサ,音センサ,明るさセンサ,ダイヤルを使うことができるようになっています.それぞれのセンサを繋げてどのような値が表示されるか試してみましょう.
https://gyazo.com/e45ea1c0b6161c7e7e118bf1711bf223
温度以外の変数ブロックは0〜100の値が返ってくるようになっています.湿度は0%〜100%に対応し,音は大きな音ほど,明るさは明るいほど,ダイヤルは+側に回すほど,100に近い値になります. https://gyazo.com/8bdafc934330064bee9d273c75bbbc8c
手を近づけると温度が表示されるようにしてみよう
先ほど開いた雛形では,人感センサとプッシュボタンも使えるようになっています.これらの入力デバイスの状態が入るブロックは先ほどの入力デバイスの状態が入るブロックとは種類が違い,真か偽(真偽値)を入れておくことができる論理変数ブロックです.論理変数ブロックは六角形の枠のところに置くことができます.「人感センサ」ブロックはセンサのそばにものがあると真が,なければ偽が入ります.「プッシュボタン」ブロックはボタンが押されていると真が,押されていないと偽が入ります. https://gyazo.com/faea73df8789c5ca4941286cd41cfe60
電気の利用(BOSON):手を近づけると温度を表示するを開いてください.手をセンサに近づけると温度が表示されるプログラムを作ってみます.今回は表示しっぱなしではなく,手がセンサから離れると表示を消すようにしてみます.準備として,先ほどと同様に温度センサを基盤のP2端子に接続し,さらに人感センサをP1端子に繋げてください.準備ができたら,プログラムを作ってみましょう. https://gyazo.com/45e0f32671b8c50ab1e8446660a3d027
正解例を示します.
https://gyazo.com/8a05c145e126edc1ba696a0353b084b1
今回は人感センサのそばに手があるかどうかで,温度を表示するかどうかを変えます.何かの条件によってプログラムの動きを変える条件分岐をするには,条件分岐ブロックhttps://gyazo.com/8feb8e277a020c37ffc25dc203534b94を使うのでしたね.条件分岐ブロックでは,上の六角形の部分に真偽値を入れると,真が入っている時は上側の窪みの中に置いたブロックが,偽が入っている時は下の窪みの中に置いたブロックが実行されます.人感センサのそばに手があるかどうかによって論理変数ブロックである「人感センサ」ブロックに真か偽が入っているので,これを六角形の部分入れれば良いことになります. 同様に「プッシュボタン」を使って,プッシュボタンが押されたら温度が表示されるプログラムも作ってみましょう.
https://gyazo.com/8bdafc934330064bee9d273c75bbbc8c
モータプロペラを回してみよう
次に出力デバイスを使ったプログラムを作ってみます.モータプロペラを基盤に繋げてください.出力デバイスは基盤のP0〜P2,P8,P14,P16のどこに繋げても良いのですが,ここではP8に繋げてください.
https://gyazo.com/f22c63a898e273292380057f5160c776
この雛形では,出力デバイスを使う場合には,どの端子にどの出力デバイスを繋げているかを「出力デバイスをつなげる」ブロックを最初に実行して設定する必要があります.また,繋げた出力デバイスに電流を流すには「出力デバイスに流す電流の大きさを設定する」もしくは「出力デバイスに流す電流の大きさを増減する」を使います.前者は0〜100のパーセンテージで電流の大きさを設定でき,0だと電流が流れず,100だと最大の電流が流れます.後者は,それまでに流れている電流の大きさ(パーセンテージ)を指定した値の分だけ増減させることができます.これらのブロックを1回実行すると,次に実行するまで設定(変更)した電流の大きさで表される電流が出力デバイスに流れます.
https://gyazo.com/3d324f9af0d81285693cd20bde1a0509
では,単純にモータプロペラを最大の速さで回すプログラムを作ってみましょう.
正解例を示します.
https://gyazo.com/8723c0b8653e525252c854ef49010f53
先ほど説明したようにモータプロペラに電流を流すために「出力デバイスに流す電流の大きさを設定する」ブロックを実行すると,ずっと同じ大きさの電流が流れ続けるので,「最初だけ」ブロックの中に入れるので十分になります.
数値を色々変えて,電流の大きさに応じてモータプロペラの回る速さが変わることを確認してください.ただ,残念ながら,BOSONのプロペラモータは流す電流の大きさを変えても回る速さの違いを感じるほど変化がありません.
プッシュボタンを押している間モータプロペラを回そう
次に,プッシュボタンを押している間はモータプロペラが回るプログラムを作ってみます.
プッシュボタンを基盤のP2端子に繋げてください.「プッシュボタン」ブロックは「人感」ブロックと同じ論理変数ブロックなので,やり方はわかるかと思います.では,作ってみましょう.ちなみに,モータプロペラを止めたい場合は電流の大きさを0にします. https://gyazo.com/029b9526658f3acbf381250b6f20b528
正解例を示します.
https://gyazo.com/2f1fce03c8f07c7de66859d9956bd785
プッシュボタンが押されているか押されていないかをずっと調べて,その状況によってモータプロペラを回したり止めたりしないといけないので,その部分を行う条件分岐ブロックは「ずっと」ブロックの中に入れます. 明るくなったらモータプロペラが回るようにしてみよう
今度は,明るくなったらモータプロペラが回るプログラム,明るさが50%を超えたらプロペラが回るようにしてみます.明るさを利用するので,プッシュボタンの代わりに明るさセンサを基盤のP2端子に繋げ,プログラムを作ってみましょう.
https://gyazo.com/eab1d2fe6bc41c183f5d0d906678beba
正解例を示します.
https://gyazo.com/d2f1dc936f75be84f4c600f866f9d610
変数ブロック「明るさ」を用いれば明るさセンサが計測した明るさが0〜100の数として得られます.この明るさが50より大きいことを条件とした条件分岐を行えば良いので,不等式ブロックを用いて条件式<明るさ>50>を作り,条件分岐ブロックの六角形の部分に置き,真(明るさが50より大きい)の時にはモータプロペラに電流を流し,偽(明るさが50以下)の時にはモータプロペラに電流を流さないようにします. 明さに応じてモータプロペラが速く回るようにしてみよう
次に,明るくなるにつれモータプロペラが早く回るプログラムを作ってみます.
条件分岐を使って,たとえば,明るさが75以上の時は電流を75%,明るさが75以上ではなく50以上の時は電流を50%,明るさが50以上ではなく25以上の時は電流を25%,それ以外の時は電流を0%とすれば,明るさに応じてモータプロペラの回る速さが変わります.次に示すのがそのようにして作ったプログラムです.
https://gyazo.com/5ecb75482d8f18f2e343467dad998a86
このプログラムを見てなにか思いませんか? もしこれを十段階にしたら,二十段階にしたら,プログラムが長くなってしまいますね.また,判定に用いている明るさの数値と電流の大きさの数値が同じだなと気がついた方もいるのではないでしょうか.
今作っているプログラムでは明るさと電流の大きさの二つの値が比例関係にあり,さらには,明るさを表す数値が0〜100で,電流の大きさを表す数値も0〜100なので,全く一致していますよね.つまり,明るさの数値をそのまま電流の大きさに使うことができるはずです.電気の利用(BOSON):出力デバイスを制御する(二値の関係)を開いて,プログラムを作ってみましょう. 正解例を示します.
https://gyazo.com/524163744b5ec202420451ceb34796ba
LED照明をつけてみよう
同じように,明るさに応じてLED照明の明るさを変えるプログラムを作ってみます.
まず,プロペラの代わりにLED照明を接続してください.
https://gyazo.com/684e3fdaa54be35dcec122f382b1bb6f
プロペラモータのプログラムと同様に明るくなるにつれて電流の大きさを増やすのでも良いのですが,照明と部屋の明るさの関係を考えると,部屋が暗いと照明を明るく,部屋が明るいと照明を暗くするのが自然かと思います.そのためには,明るさの値0〜100に対して,電流の大きさを100〜0に対応させれば良いはずです.では,プログラムを作ってみましょう.
正解例を示します
https://gyazo.com/f173d76834bdd2c624c5a50b722ea4bd
また,このような書き方もできます.赤色のブロックは「入出力」カテゴリの中にあるブロックで,元の下限から上限の値をとる数値を,結果の下限と上限に変換してくれます.
https://gyazo.com/dce25b57dee38cf9be63849ee0c99e36
https://gyazo.com/8bdafc934330064bee9d273c75bbbc8c
便利な電気器具を考えて作ってみよう
これらの入出力デバイスを使って,便利な電気器具を作ってみましょう.とは言っても本物を作れるわけではありません.例えば,プロペラモータを扇風機とみなしたり,車とみなしたり,想像力を働かせたものづくりになります.
人がいると温度に応じて強さの変わる扇風機を作ってみる
でも,なかなか思いつかないでしょうから,ここでは,人がそばにいると,温度に応じてその風の強さが変わる扇風機を作ってみます.
使うデバイスは,扇風機に見立てるモータプロペラ,温度を測るための温度センサ,人がそばにいるかどうかの人感センサになります.それぞれを基盤のP8,P1,P2端子に繋げて,電気の利用(BOSON)を開いて,プログラムを作っていきます. https://gyazo.com/5df4917d4364755d46652c58009c0026
まずは人が近くにいたら扇風機を回す,いなかったら止めるという動きを作ってみましょう.手を近づけると温度を表示するプログラム,プッシュボタンを押している間はモータプロペラが回るプログラムを参考にすればすぐできますね.では,作ってみましょう.
このような感じになるかと思います.
https://gyazo.com/f50d96641a785201dc37095e8fa8664e
次に,温度に応じて扇風機の強さが変わるようにしたいと思います.扇風機の強さに対応する電流の大きさは0〜100ですが,温度の方は温度そのものですので,先に作ったプログラムほどその対応関係が簡単ではなさそうです.温度と電流の大きさを関係を考える必要があります.ここでは,20度以上になると扇風機が回り出し,35度で最大風量になるようにしてみます.つまり温度の値20〜35に電流の大きさ0〜100を対応させます.この二つの値の関係を表す式を作れるでしょうか? よく考えてプログラムを作ってみましょう.
正解例を示します.
https://gyazo.com/3db3101b2fcc7aa31a9b20b8130e9095
このように書くこともできます.
https://gyazo.com/0eb396189230d7b1f62c8641725ad348
他にも色々な電気器具を考えてみましょう.
https://gyazo.com/8bdafc934330064bee9d273c75bbbc8c
Copyrights 2020- Naoki Kato, IML at CICT, TGU