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

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

[「CoderDojo向けTFabWorks製品無償レンタルプログラム」](https://tfabworks.com/coderdojo-rental/)が2021年1月15日にスタートします。先日、[CoderDojo Japanのポッドキャスト](https://coderdojo.jp/podcasts/21)を観ていたら（[YouTube動画はこちら](https://www.youtube.com/watch?v=43vUwn_M6Ro)）、「サーボにはどのくらいのトルクがあるのか？」という質問が出ていて、「スイッチとかをぽっちと押したりできるチカラ」とか「スマートスピーカーみたいなカタチで」というアイデアが出ていました（[YouTube動画 17分44秒あたり](https://youtu.be/43vUwn_M6Ro?t=1064)）。

> **Bセット（サーボモーターセット）**
>
- micro:bit本体(V1.5)
- スピーカー付きサーボコネクトボード（TFW-KR1）
- 電池3本
- サーボモーターFT90B　２個
- USBケーブル

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

micro:bitは、BLE(Bluetooth Low Energy)による無線通信が可能です。スマートスピーカーからBLEで接続できる標準仕様はなさそうです。SWITCHBOT 株式会社の[SwitchBot](https://www.switchbot.jp/)は、その[BLE通信仕様が公開](https://github.com/OpenWonderLabs/python-host/wiki/Bot-BLE-open-API)されていますが、スマホアプリとの連携が必要そうですので、実験をするには煩雑です。

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

## スマートホームの概要図

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

![ScratchSmartHome.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/252891/8faca244-1a81-bd75-c454-e91dd9ef9ae6.png)
**図. スマホ(Scratch3.0) →\<クラウド変数\>→パソコン(Scratch3.0)→\<Scratch Link\>→micro:bit→サーボ→スイッチ**

## Scratch3.0のコード

クラウド変数を使うためには、Scratcherになったユーザーでログインして、変数を作成する際に「クラウド変数（サーバーに保存）」にチェックを入れます。micro:bit CODE Moreと通信するために、拡張機能からmicro:bit拡張機能をを選択し、「〇〇を表示する」ブロックを配置し、"@"で始まる半角英数字を入力します。
![HashScratch (15).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/252891/c282a323-cf74-00ed-39cc-9f7707029fd0.png)

## micro:bitのコード

GitHubの次のURLで、[micro:bit CODE More!のテンプレート](https://github.com/jp-rad/microbit-CodeMore-v1)が公開されていますので、これを元に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`します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/252891/dfde23bc-844c-3b54-cf79-223aadc3277d.png)

`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動画
![YouTubeLogo.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/252891/9de57949-8420-3c65-b2f5-d8b83df6ffbe.png)](https://youtu.be/t_HmNIBOUDg)
クラウド変数の反応が悪いときがあるので、一時変数で計算したり、応答用のクラウド変数を追加して、現在のサーボの状態を確認できるようにした方が良さそうです。
また、第三者からのmicro:bit接続を防止するために、共通鍵（パスワード）などによる認証・認定機能の実装をお勧めします。


# おわりに

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

**おまけ**
サーボ [FEETECH FT90B](http://www.feetechrc.com/15kg-low-voltage-drive-digital-9g-steering-gear.html) のトルクは、1.0kg/cm(3.0V)、または、1.3kg/cm(4.8V)、1.5kgcm(6.0V) です。
今回使ったサーボは、[DIY MORE MG90S](https://www.diymore.cc/products/mg90s-servo-motors-metal-gear-9g-for-rc-helicopter-airplane-car-boat-robot-controls)です。そのトルクは、2.2kg/cm(4.8V)、または 、2.5kg/cm(6.0V) です。