micro:bit Makecode はじめの一歩 LEDチカチカ

2021.8.13 Coskx Lab  

1 はじめに

micro:bitなどのマイクロコンピュータが,自分以外のものに働きかけするときには,端子からデジタル信号(電圧をHighにしたり,Lowにしたり)を出力して必要な動作をします。
micro:bitを使って何かを動かそうとするときのはじめの一歩はLEDチカチカ(Lチカ,LEDの点滅)です。



micro:bitの端子に,プログラムでHigh(3.3V)を出力したりLow(0V)を出力したりして,その端子に接続されたLEDを点滅させることができます。
LED[発光ダイオード(light emitting diode)]は電流を流すと発光する素子です。

2 使用環境

3 端子の割り付け

LEDに接続するmicro:bitの端子番号を決めます。
すでに他の用途に使われている端子を使うことはできません。
ここでは端子P0を使うことにします。
 参考 micro:bit端子一覧


4 接続

LEDを端子P0とGNDの間に付けるだけでは,電流が流れすぎて,LEDやmicro:bitの破損につながりますので,保護抵抗220Ωを使います。
次のように接続することを目指します。



端子に直接はんだ付けしてしまってもよいのですが,そのようなことはやりたくないため,micro:bitの端子を引き出して扱いやすくなっているブレイクアウトボードなどを使います。細工が必要な場合もあります。

ブレイクアウトボード KITRONIK-5601Bの場合

LEDと保護抵抗をブレッドボードに挿して,オス-メスのジャンパ線を用いて接続します。シルク印刷で端子P0とGNDと書いてあるところを捜します。
安全のためにはテスタで,ブレイクアウトボードの端子P0とmicro:bitの端子P0の間の導通をテストしておくと良いでしょう。



5 LED点滅プログラム

MakeCodeを使います。
無限ループ内で,ボタンAが押されているときにはプログラム上でP0に値1をH(3.3V)を出力し,押されていないときは値0L(0V)を出力します。
このとき端子P0にはそれぞれ電圧3.3V(Level High or L)と電圧0V(Level Low or L)が出力されます。

  LED点滅の動作テスト用プログラム



コピペする場合は,次のソースコードをPythonソースとして貼り付ければ完了です。

def on_forever():
    if input.button_is_pressed(Button.A):
        pins.digital_write_pin(DigitalPin.P0, 1)
    else:
        pins.digital_write_pin(DigitalPin.P0, 0)
basic.forever(on_forever)

6 実行の様子

ボタンAが押されているときは,端子P0にH(3.3V)が出力され,LEDが点灯します。
ボタンAが押されていないときは,端子P0にH(0V)が出力され,LEDが消灯します。
テスタを使って端子P0の電圧を測定してみてください。
5Vくらいまで測定できる電圧レンジにして,テスタケーブル黒をGNDに,赤を端子P0にあてると,上記のことが確認できます。



重要なポイント

7 ロジックテスタ

回路はそのまま同じですが,コンパクトに作るとロジックテスタ(ある端子のH・Lを検査する)が作れます。熱収縮チューブなどで,ショートしないように作ります。
黒ケーブルはGNDへ,赤ケーブルは検査したい端子に触れます。端子にH信号が出ていれば,LEDが点灯します。
検査対象から取り出す電流は少なくしたいため,抵抗は点滅が確認できる範囲のできるだけ大きな値のものを使います。



8 クイズ

ここまではLEDを端子P0に接続することを決めたうえで,配線を考え,プログラムを作成しました。
LEDをP1に接続する場合はどうすればよいか考えましょう。
答え合わせ


9 まとめ

micro:bitでLED点灯ができました。
プログラム上でP0に値1を出力すると,端子P0にH(3.3V)が出力され,端子P0に接続されたLEDが点灯します。
プログラム上でP0に値0を出力すると,端子P0にH(0V)が出力され,端子P0に接続されたLEDが消灯します。


補足1 保護抵抗

回路には電流制限のための220Ω抵抗が使われています。この抵抗値は次のように決めています。

(1)LEDのデータシートを検討します。(ネット検索でデータシートを見つけます)
絶対定格で,最大許容電流を調べると50mAとなっていました。
通常使用での電流値は見当たらなかったですが,特性測定には20mAが使われていました。また明るさ測定の基準値も20mA時の時のものでした。
LEDは20mA程度で使用するようです。(実用上は1mAでも点灯します)

(2)次にmicro:bitのデータシートを調べるのですが,micro:bitに使われているマイクロコントローラ(Kinetis KL27 Microcontroller)のデータシートを調べます。(ネット検索でデータシートを見つけます)
わかりにくいのですが電気特性の欄を見ると,端子のHの時の出力電流(ID)は±25mAまでとなっています。(全端子トータルで100mAまで)
25mA以下であれば問題ないのですが,少ないほどCPUの負担が減ります。

(3)まず20mA駆動の設定で考えます。LEDにかける電圧と流れる電流の間にはある関係があり,それはデータシートにグラフで示されています。20mAの時は2.15Vになっています。
端子の出力電圧は3.3Vなので,抵抗で1.15V電圧降下してくれるとLEDには2.15Vがかかります。抵抗で20mA流れるときに1.15V電圧降下を起こすべきなので,抵抗値はV/I=1.15/0.02=57.5Ωになります。(V/I=(3.3-2.15)/0.02=57.5Ω)
10mA駆動の設定では,LEDのデータシートのグラフでは,1.98Vが読み取れます。抵抗値はV/I=(3.3-1.98)/0.01=132Ωになります。
5mA駆動の設定では,LEDのデータシートのグラフでは,1.9Vが読み取れます。抵抗値はV/I=(3.3-1.9)/0.005=280Ωになります。
電流は小さいほうがCPUにとって負担が少ないので,入手しやすい220Ωの抵抗を用いることにしました。

  LEDの電圧と流れる電流の関係(OS5RPM5B61A-QR)


補足2 モータをつなぎたくなる???

ボタンAが押されているときは,端子P0にH(3.3V)が出力され,LEDが点灯します。
ボタンAが押されていないときは,端子P0にH(0V)が出力され,LEDが消灯します。
3.3Vが出力されるならば,端子P0とGNDの間に模型用DCブラシモータ(マブチ130モータなど)をつなぐ誘惑にかられます。
小型モータは電池2個3Vで力強く回るはずです。
しかし,小型モータの内部抵抗は1Ω程度です。モータが止まっている状態ではモータはただの1オームの抵抗にすぎません。
もしつないだら,I=V÷R=3Aの電流が流れることになってしまいます。
「補足1 保護抵抗」のところにもあるように,micro:bitの端子は25mA(0.025A)までしか電流が取り出せません。無理やり3Aが流れる状態にすると,micro:bit破損の危険性があります。
直接つなぐのはダメでも,モータドライバを使えば,micro:bitの端子に出力される3.3Vと0Vの信号を大電流に変えて,モータを回すことができます。

 モータドライバボード(KITRONIK-5620/5698)で,モータを回す

同様な理由で,豆電球も直接つないではいけません。