LoginSignup
1

More than 3 years have passed since last update.

本家のScratch3.0でmicro:bitにつないだLEDを制御する - Scratch 3.0 micro:bit 拡張機能とArm Mbed オンライン IDEプログラミング

Last updated at Posted at 2020-12-13

micro:bitでLEDを制御する電子工作

micro:bitにつないだLEDをオン・オフさせるプログラミングは試したことがあるかと思います。

image.png
引用:https://support.microbit.org/support/solutions/articles/19000101863-connecting-an-led-to-the-micro-bit

今回、100円ショップで購入した電池ボックス付きのLEDイルミネーションライトとオーディオ用イヤホン延長コードを使って、回路を組み立てました。micro:bitの出力端子では、10個のLEDを明るく光らせるほどの電力供給ができませんので、トランジスタを使用しました(出力端子に直接つないでも半分くらいの暗さで点灯します)。
トランジスタやカーボン抵抗は、電子パーツショップで購入できます。部品代の割に送料の方が高いのですが、通販でも購入できますよ。

IMG_20201211_211129.jpg

必要なもの

完成品

デコレーションライトの電源・スイッチの配線を加工し、イヤホン延長コードで、micro:bitと接続しています。
イヤホン延長コードのプラグを抜けば、デコレーションライトは、元のとおり、スイッチでオン・オフできます。

image.png

回路図

デコレーションライトのスイッチへは、電池ボックスのプラス側が接続されていましたが、トランジスタのスイッチング作用を利用する為、マイナス側をスイッチの中央の端子に接続しています。
スイッチの切り替えにより、LEDのマイナス側、もしくは、micro:bitのマイナス側(GND)に接続されます。

image.png
※ あとで調べたら、ベースをプルダウンした方がより良いようです(ベースとGNDとを抵抗でつなぐ)。

MakeCodeによるプログラミング

micro:bitの端子P2がトランジスタのベースに接続されていますので、端子P2をデジタル出力にして、そののHi-Lowを切り替えます。ボタンAを押すとHi(1)になり、ボタンBを押すとLow(0)になります。
ここまでは、トランジスタのスイッチ作用を利用して、LEDをオン・オフさせる一般的な電子工作です。

image.png

本家Scratch3.0からmicro:bitの制御をする

ご存じの通り、Scratch3.0には、micro:bitと接続できる拡張機能があります。
Scratch - micro:bit (https://scratch.mit.edu/microbit)
ただし、この拡張機能(本家)には、端子P2をデジタル出力として利用するブロックが用意されていません。そのため、例えば、Microbit More (Yengawa Lab)のようなサードパーティが開発した独自のScratch3.0動作環境が必要です。

今回は、Scratch3.0の拡張機能(本家)をそのままに、micro:bitのファームウェア側だけを独自にプログラミングして、端子P2を制御できるようにしました。

Arm Mbed開発テンプレート - microbit-CodeMore-v1

MicroBit Moreのソースコードはpxt-scratch-microbit-moreとしてGitHubで公開されていますが、これを流用して、Arm Mbed IDE オンラインで、簡単にプログラミングとコンパイルができるようにした microbit-CodeMore-v1というテンプレートがGitHubで公開されています。
Arm Mbed オンライン IDE を開いて、プログラムをインポートすれば、すぐにプログラミングとコンパイルができます(HEX形式ファイルをダウンロードできる)。
https://ide.mbed.com/compiler/

image.png

端子P2をデジタル出力としてHi-Lowを切り替える

micro:bitの端子P2をデジタル出力として、Hi-Lowを切り替えるには、main.cppを次のようにプログラミングします。これは、Scratch3.0の拡張機能のテキスト表示ブロック(「〇〇を表示する」)で送られてくるテキスト(ManagedString)の最初の文字が"@"の場合、micro:bit側での処理を横取りして(onDisplayTextCommand)、独自にプログラミングできます。このコードの場合、テキストが"@on"であれば、端子P2をHi(1)にし、"@off"であれば、端子P2をLow(0)にしています。
コンパイルに成功するとHEX形式ファイルをダウンロードできますので、名前を付けてダウンロードし、いつもの通り、HEX形式ファイルをmicro:bitのドライブにコピーします。
※ 初回起動時は、micro:bitのキャリブレーションが必要なため、micro:bitのLEDのドットが1周回るように、micro:bitをぐるりと回転させてください。

main.cpp
#include "MicroBit.h"
#include "mbitcodemore/MbitMoreStartup.h"
#include "mbitcodemore/MbitCodeMore.h"

const ManagedString CMD_ON("@on");
const ManagedString CMD_OFF("@off");

MicroBitPin P2D(MICROBIT_ID_IO_P2, MICROBIT_PIN_P2, PIN_CAPABILITY_DIGITAL); 

// This handler, onDisplayTextCommmand is called, If the display text starts with '@'.
int onDisplayTextCommand(MicroBit &uBit, ManagedString &text)
{
    if (text==CMD_ON)
    {
        P2D.setDigitalValue(1); // P2 is now HI 
        // Handled, return zero.
        return 0;
    } else if (text==CMD_OFF)
    {
        P2D.setDigitalValue(0); // P2 is now LOW 
        // Handled, return zero.
        return 0;
    }   
    ManagedString err("Err:");
    text = err + text;
    // Unhandled, retrun not zero.
    return 1;
}

int main()
{
    MbitMore::startMbitMoreService(onDisplayTextCommand);
}

Scratch3.0でのプログラミングと実行

Scratch3.0を開き、拡張機能からmicro:bitを選択し、micro:bitと接続します(Scratch Linkの起動を忘れずに!)。
図のように、@on@offを表示するmicro:bit拡張機能のブロックを配置します。
※ 実際には、micro:bitに@on@offというテキストがスクロール表示されませんが、Scratch3.0のブロック側は、スクロール表示が終了するであろう時間だけ待ちます(ブロックの処理がブロックされます)。

bitmap.png

例えば、次のようなプロジェクトを作成すると、ネコがベルに触れるたびに、LEDが光ります。
https://scratch.mit.edu/projects/462795757/
image.png

おわりに

micro:bit(v1)には、Nordic nRF51822というMCUが使われており、Arm Mbed 開発環境でのプログラミングが可能です。Arm Mbed 開発環境でゼロからプログラミングするには、ライブラリの準備などが煩雑ですが、今回紹介したmicrobit-CodeMore-v1というテンプレートを使えば、比較的簡単にScratch3.0と連携させたプログラミングが可能です。

  • 100円ショップで購入した材料とトランジスタを使って、micro:bitでLEDを明るく点灯させました。
  • microbit-CodeMore-v1というテンプレートでHEX形式ファイルを作成しました。
  • 本家Scratch3.0の拡張機能micro:bitを使って、ネコがベルに触れるたびに、micro:bitに接続したLEDを点灯させました。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1