IoTプログラミング

学習の進め方

 micro:bitに取り付けてあるセンサーを使って、プログラミングをしていきます。

例題では、サンプルコードを載せてありますので、コードを入力して実行結果を確認してください。

課題は例題を応用した問題になっています。例題・練習問題が終了する度に、新しいプロジェクトを立ち上げて、プロジェクト名は問題の番号を書いてください(例:練習1-2)。

1.LEDを点滅させよう

micro:bit(マイクロビット)のディスプレイは、5x5のLEDで構成されています。 内部では5x5のマトリックスとしてmicro:bitに接続されています。また、それぞれのLEDは座標として表すことができます。

▶ 例題と課題

◉ 練習 ハートマークの作成

  • LEDでハートマークを表示させる。

[動作イメージ]

[コード] プログラム

課題 ハートマークを点滅させる

  • 電源を入れると0.5秒ごとにハートマークを点滅させる。

  • 0.5秒間表示しないようにするには、「表示を消す」ブロックと「一時停止」ブロックを組み合わせます。

[動作イメージ] プログラム

2.ボタンスイッチと変数

micro:bit(マイクロビット)の前面に2つのプッシュボタン(A/B)があります。前面のボタンAおよびBは、任意の目的でプログラミングできます。AとBはソフトウェアによってデバウンスされます。「一回押し」、「長押し」、および「A + Bの同時押し」の検出ができます。

ボタンは、反転方式で動作し、プルアップ抵抗により、ボタンを離したときに論理「1」になり、ボタンが押されたときに論理「0」になります。 AボタンとBボタンはどちらも、micro:bit(マイクロビット)のエッジコネクター(GPIOピン)に接続されています。

例題(ボタンスイッチの使い方と変数)

◉ 例題2-1 ボタンスイッチの作成

  • Aボタンを押すと「A」が表示される

  • Bボタンを押すと「B」が表示される

  • A+Bボタンを押すと、ハートマークが表示される

[動作イメージ] プログラム

例題2-2 カウントアップ①

  • Aボタンを押すと数が1ずつ増えて表示される(最初は0から始める)



[動作イメージ] プログラム

作成課題

◉ 課題2-1 カウントアップ②

  • Aボタンを押すと数が1ずつ増えて表示される(最初は0から始める)

  • Bボタンを押すと表示されている数から1ずつ減って表示される


[動作イメージ]

課題2-2 カウントアップ③

  • Aボタンを押すと数が1ずつ増えて表示される(最初は0から始める)

  • Bボタンを押すと表示されている数から1ずつ減って表示される

  • A+Bボタンを押すと0にリセットされる

[動作イメージ]

◉ 課題2-3 偶数のカウントアップ・ダウン

  • Aボタンを押すと偶数が順番に表示される(最初は0から始める)

  • Bボタンを押すと表示されている数から2ずつ減って表示される

  • A+Bボタンを押すと0にリセットされる

※最初だけ変数xを0とし、xをいくつ増やせば偶数になるのか

[動作イメージ] プログラム

◉ 課題2-4 奇数のカウントアップ・ダウン

  • Aボタンを押すと奇数が順番に表示される(最初は1から始める)

  • Bボタンを押すと表示されている数から2ずつ減って表示される

  • A+Bボタンを押すと1にリセットされる

[動作イメージ] プログラム

◉ 応用2-1 線を引く

  • Aボタンを押すと左から右にLEDが点灯する

  • Bボタンを押すと右から左にLEDが消灯する

※ヒント:LEDの「点灯」というブロックを使って、座標を変数で表します。

[動作イメージ]

◉ 応用2-2 線を引く2

  • Aボタンを押すと左から右にLEDが点灯する

  • Bボタンを押すと右から左にLEDが消灯する

  • A+Bボタンを押すと、全てのLEDが消灯し、変数の値もリセットされる

[動作イメージ]

3.光センサー

micro:bit(マイクロビット)は、LEDのディスプレイを光センサーとしても使用しています。

この5x5のLEDマトリックスは、LEDドライブピンの一部を繰り返し入力に切り替え、周囲光レベルにほぼ比例する電圧減衰時間(光の強度が高くなるほど内部容量の放電が急速になり、光の強度が低くなると放電速度は遅くなる。)をサンプリングすることにより、光を検出します。

環境光センサーで取得できる値は 0~255 です。

  • 0:暗い

  • 255:非常に明るい

例題(光センサーで読み取った値を表示)

◉ 例題3 光センサー1

  • Aボタンを押すと「光の明るさ」の数値が表示される

  • Bボタンを押すと、表示が消える


LEDに入る光の量を調節して、数値が変わるか確認してみましょう。

[動作イメージ]

[コード] プログラム

▶ 作成課題

課題3-1 光センサー2

  • Aボタンを押すと「光の明るさ」の数値が表示される

  • Bボタンを押すと、表示が消える

  • A+Bボタンを押すと「明るさ」に応じた棒グラフが表示される(棒グラフは「LED」ボックスにあります。)

[動作イメージ] プログラム

応用3-1 条件分岐

※条件分岐の書き方は、磁気センサー下の説明を参考にしてください。

  • 「明るさ」が100以上のとき、すべてのLEDを点灯させる

  • 「明るさ」が50以上100未満のとき、LEDを下から3段目まで点灯させる

  • 「明るさ」がそれ以外のとき、LEDを1段目まで点灯させる

[動作イメージ] プログラム

4.磁気センサー

Micro:bitを傾けると、方角の位置を取得することができます。

磁気センサーで取得できる値は、北を基点として時計回りに、0~359です。各方向の値は以下の通りです。

  • 北:0

  • 東:90

  • 南:180

  • 西:270

※ 準備ができていない場合は、-1003を返します。

条件分岐とは

プログラミングでは、とある条件に当てはまるかどうかによって処理を分けることがあります。「もしも~だったら~する」などの判断のことを条件分岐といいます。Microbitで分岐を作るときは、「もし」というブロックを使っていきます。「もし」ブロックは、「論理」ブロック一覧の中に用意されています。

「もし」ブロックの詳しい使い方は、以下のリンクを参考にしてみてください。

【micro:bit 分岐】プログラムの分かれ道を作ってみよう!




また、磁気センサーで取得する値は、入力ブロック一覧の「方角(゜)」ブロックを使用していきます。


▶ 例題(磁気センサーで読み取った値を表示)

◉ 例題4 1方向

  • 北の方角(316°以上または45°以下)のとき「N」を表示

  • それ以外の方角のときは何も表示しない

[動作イメージ] プログラム

[コード] プログラム

※上手く表示されないときは以下を参考にキャリブレーションを行なってください。

磁気センサーは使用前にキャリブレーション(較正)する必要があります。必要と判断された場合、キャリブレーションプロセスはランタイムソフトウェアによって自動的に開始され、LEDディスプレイに「TILT TO FILL SCREEN」と表示されます。micro:bit本体を傾けながら角度を調整することで、LEDディスプレイのすべてのドットを点灯させると、キャリブレーションが終了です

※ 文字「TILT TO FILL SCREEN」が画面上をスクロールしている間、キャリブレーションルーチンはバックグラウンドで実行されるため、スクロールが終了する前に傾斜を開始することができます。これにより、少し早くキャリブレーションを終了させることができます。

▶ 作成課題

◉ 課題4-1 4方向

  • 北の方角(316°以上または45°以下)のとき「N」を表示

  • 東の方角(45°以上~135°以下)のとき「E」を表示

  • 南の方角(136°以上~225°以下)のとき「S」を表示

  • 西の方角(226°以上~315°以下)のとき「W」を表示

[動作イメージ] プログラム

◉ 課題4-2 8方向

  • 8方向の方角に応じて「矢印」を表示する

  • 方角は以下の図の通りとする

  • 例えば、23度~67度の場合「↗」を表示する

  • 例えば、68度~112度の場合「→」を表示する

  • 詳細は以下のシミュレータで確認すること

[動作イメージ] プログラム

5.温度センサー

micro:bit(マイクロビット)は独立した温度センサーを設けているわけではなく、 NRF52アプリケーションプロセッサーのオンボード温度センサーを利用しています。

▶ 例題(温度センサーで読み取った値を表示)

◉ 例題5 温度センサー

  • Aボタンを押すと「温度」の数値が表示される

  • Bボタンを押すと、表示が消える


[動作イメージ] プログラム

[コード] プログラム

▶ 作成課題

◉ 課題5-1 温度センサー

Aボタンを押したときに、

  • 暑く感じやすい温度(28度超)になった場合、「かなしい顔」を表示。

  • 寒く感じやすい温度(17度未満)になった場合、「びっくり顔」を表示。

  • 過ごしやすい温度(17度〜28度)になった場合、「うれしい顔」を表示。

[動作イメージ]

6.加速度センサー

加速度センサーは、3軸(X,Y,Z)で測定ができ、ハードウェアでの検出(落下検出)、 及びソフトウェアアルゴリズムによる検出(ロゴの向き、シェイクなど)が可能です。

測定する軸については、以下をご参照ください。

  • x:左右方向(左:-、右:+)

  • y:前後方向の加速度。(ロゴ方向:-、エッジコネクター方向:+)

  • z:上下方向の加速度。(下:-、上:+)

  • 絶対値:3つの次元(方向)すべてから得られる加速の強さ。

▶ 例題(加速度センサーで読み取った値を表示)

◉ 例題6 加速度センサー

  • ゆさぶられたとき、数が1ずつ増えて表示される(最初は0から始める)

  • ボタンAが押されたときに、変数xを0にしなさい(初期化)


[動作イメージ] プログラム

[コード] プログラム

▶ 作成課題

◉ 課題6-1 乱数

  • ゆさぶられたとき、0~10のランダムな数が表示される



※ ランダムな数は「計算」ブロック一覧から「~から~までの乱数」ブロックを使用すること

[動作イメージ] プログラム

◉ 課題6-2 3の倍数

  • ゆさぶられたとき、1から順番に数が増えていき、3の倍数のときだけ、「にっこり」顔が表示される。

  • ボタンAが押されたときに、変数xを0にしなさい(初期化)

3の倍数という表現は、「計算」ブロック一覧から「remainder of~」というブロックを使用すること

[動作イメージ] プログラム

◉ 応用6-1 ゆさぶる度に、LEDランプを1つずつ点灯

  • ボタンスイッチと変数の「応用1」を参考にして作成しなさい

  • ヒント:計算ブロックの「~を~で割ったあまり」ブロックを上手に使って2段目以降も点灯するようにしてみよう

[動作イメージ] プログラム

◉ 応用6‐2 応用1で25個点灯させたら、GAMEOVER

  • 応用1のプログラムに、LEDランプを25個点灯させたときに、「GAMEOVER」と表示されるように改良しよう

  • 「GAMEOVER」ブロックは、「高度なブロック」→「ゲーム」のところにブロックがあります。

[動作イメージ] プログラム

7.繰り返し(ループ)処理

繰り返し

プログラミングでは、同じ処理を自動で繰り返すことを「繰り返し(ループ)処理」といいます

micro:bitには、ループのためのブロックがいくつか用意されています。「ずっと」ブロックもループさせるブロックの1つですが、今回は一定の回数を繰り返すブロックを使ってプログラムを書いていきましょう。


「ループ」から、「くりかえし」 のブロックを選択してきます。この「くりかえし」ブロックは、指定した回数だけループでプログラムを実行することができます。

▶ 例題

◉ 例題7-1 ハートをドクドクさせる

  • Aボタンを押したら、大きなハート、小さなハートの順番で4回繰り返す。

  • Bボタンを押したら、すべての点灯を消す。

[動作イメージ] プログラム

[コード] プログラム

◉ 例題7-2 横に線を引く

  • Aボタンを押したら、1行目のLEDを左から順番に0.1秒間で点灯させていきます。

  • Bボタンを押したら、すべての点灯を消す。

[動作イメージ] プログラム

[コード] プログラム

▶ 作成課題

◉ 課題7-1 縦に線を引く

  • 3列目のLEDを上から順番に0.1秒間で点灯させていきます。

  • Bボタンを押したら、すべての点灯を消す。

  • 順番に繰り返すときは「ループブロック」を使います

ヒント:点灯ブロックのx座標を2、y座標を変数にします。その状態で変数を0~4まで繰り返します。

[動作イメージ] プログラム

課題7-2 斜めに線を引く

  • Aボタンを押したら、座標(0,0)のLEDから下へ順番に0.1秒間で点灯させていきます。

  • Bボタンを押したら、すべての点灯を消す。

  • 順番に繰り返すときは「ループブロック」を使います

[動作イメージ] プログラム

◉ 課題7-3 斜めに線を引く②

  • Aボタンを押したら、座標(5,0)のLEDから左下へ順番に0.1秒間で点灯させていきます。

  • Bボタンを押したら、すべての点灯を消す。

  • 順番に繰り返すときは「ループブロック」を使います

[動作イメージ] プログラム

◉ 応用7-1 四角をつくる

  • Aボタンを押したら、1行目のLEDを左から順番に0.1秒間で点灯させていきます

  • Bボタンを押したら、すべての点灯を消す。

  • 順番に繰り返すときは「ループブロック」を使います

[動作イメージ]プログラム