「CoderDojo向けTFabWorks製品無償レンタルプログラム」でつくるスマート家電スイッチ


「CoderDojo向けTFabWorks製品無償レンタルプログラム」がスタートします。

「CoderDojo向けTFabWorks製品無償レンタルプログラム」が2021年1月15日にスタートします。先日、CoderDojo Japanのポッドキャストを観ていたら(YouTube動画はこちら)、「サーボにはどのくらいのトルクがあるのか?」という質問が出ていて、「スイッチとかをぽっちと押したりできるチカラ」とか「スマートスピーカーみたいなカタチで」というアイデアが出ていました(YouTube動画 17分44秒あたり)。

Bセット(サーボモーターセット)

  • micro:bit本体(V1.5)
  • スピーカー付きサーボコネクトボード(TFW-KR1)
  • 電池3本
  • サーボモーターFT90B 2個
  • USBケーブル

Scratch3.0 + micro:bit でスマートホーム

micro:bitは、BLE(Bluetooth Low Energy)による無線通信が可能です。スマートスピーカーからBLEで接続できる標準仕様はなさそうです。SWITCHBOT 株式会社のSwitchBotは、そのBLE通信仕様が公開されていますが、スマホアプリとの連携が必要そうですので、実験をするには煩雑です。

micro:bitと通信ができるものとして、Scratch3.0のmicro:bit拡張機能(Scratch Link)があります。しかし、標準の拡張機能では、micro:bitに接続したサーボを制御することができません。そこで、 Scratch3.0からも制御を可能とするmicrobit-CodeMore-v1 テンプレートを使って、スマートホームを実現します。

スマートホームの概要図

Scratch3.0からサーボを制御するだけでは、少し物足りません。外出先からでも、スイッチを押したりしたいですよね。そこで、Scratch3.0のクラウド変数を使って、外出先のスマホからでも操作できるようにしたいと思います。


図. スマホ(Scratch3.0) →<クラウド変数>→パソコン(Scratch3.0)→<Scratch Link>→micro:bit→サーボ→スイッチ

Scratch3.0のコード

クラウド変数を使うためには、Scratcherになったユーザーでログインして、変数を作成する際に「クラウド変数(サーバーに保存)」にチェックを入れます。micro:bit CODE Moreと通信するために、拡張機能からmicro:bit拡張機能をを選択し、「〇〇を表示する」ブロックを配置し、"@"で始まる半角英数字を入力します。

micro:bitのコード

GitHubの次のURLで、micro:bit CODE More!のテンプレートが公開されていますので、これを元にmicro:bitのコーディングを行い、HEX形式ファイルにコンパイルします。
https://github.com/jp-rad/microbit-CodeMore-v1

まずは、Arm Mbed オンライン IDEのコンパイラを開きます(サインアップとサインインが必要)。
https://ide.mbed.com/compiler/

「インポート」ボタンで、インポートウィザードを表示し、「ここをクリック」で「Import Program」ダイアログを表示します。Source URLに、 https://github.com/jp-rad/microbit-CodeMore-v1と入力して、Importします。

main.cppを次のように書き換えます。@on@offで、端子P1に接続したサーボを制御します。

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

const ManagedString SWITCH_OFF("@off");
const ManagedString SWITCH_ON("@on");

MicroBitPin P1(MICROBIT_ID_IO_P1, MICROBIT_PIN_P1, PIN_CAPABILITY_ANALOG); 

// This handler, onDisplayTextCommmand is called, If the display text starts with '@'.
int onDisplayTextCommand(MicroBit &uBit, ManagedString &text)
{
    if (text==SWITCH_OFF)
    {
        P1.setServoValue(30);
        return 1;
    }
    else if (text==SWITCH_ON)
    {
        P1.setServoValue(150);
        return 1;
    }
    ManagedString err("Err:");
    text = err + text;
    // Unhandled, retrun not zero.
    return 1;
}

int main()
{
    // Start Service
    //MbitMore::startMbitMoreService();
    MbitMore::startMbitMoreService(onDisplayTextCommand);
}

これを「コンパイル」すると、コンパイルが開始され、コンパイルに成功するとHEX形式ファイルを名前を付けてダウンロードできます。HEX形式ファイルをダウンロードしたら、いつものように、micro:bitドライブ(例えば、D:\)へファイルコピーします。

実験

【警告】

  • 家電製品等の分解は、自己責任で行ってください。メーカーからの保証を受けられなくなったり、故障や火災の原因となります。
  • 感電には十分注意してください。また、電気配線工事には資格が必要です。
  • micro:bitへの第三者からの接続にご注意ください。
  • Scratch3.0プロジェクトを共有しないでください。共有すると世界中のから操作される恐れがあります。

実際にスマホで、Scratch3.0のプロジェクトを開いて、クラウド変数経由で、サーボを制御できるかどうかを実験しました。
→ YouTube動画

クラウド変数の反応が悪いときがあるので、一時変数で計算したり、応答用のクラウド変数を追加して、現在のサーボの状態を確認できるようにした方が良さそうです。
また、第三者からのmicro:bit接続を防止するために、共通鍵(パスワード)などによる認証・認定機能の実装をお勧めします。

おわりに

  • 「CoderDojo向けTFabWorks製品無償レンタルプログラム」が2021年1月15日にスタートします。micro:bitを使ってみたい方は、日本各地のCoderDojoにご相談ください。
  • レンタル Bセット(サーボモーターセット)を使ったスマート家電スイッチの実験ができます。
  • Scratch3.0のクラウド変数を使って、外出先のスマホからでもmicro:bitに接続されたサーボを制御し、自宅便所のスイッチを入切できました。

おまけ
サーボ FEETECH FT90B のトルクは、1.0kg/cm(3.0V)、または、1.3kg/cm(4.8V)、1.5kgcm(6.0V) です。
今回使ったサーボは、DIY MORE MG90Sです。そのトルクは、2.2kg/cm(4.8V)、または 、2.5kg/cm(6.0V) です。