IoTプラレールを作ってみました（その1：IoT電池の作成）


# はじめに

こんにちは。(株) 日立製作所の [Lumada Data Science Lab.](https://www.hitachi.co.jp/New/cnews/month/2020/03/0330d.html) の松本茂紀です。

先日掲載しました私の紹介記事（[データサイエンティストの仕事～日立のデータサイエンティストに聞いてみた！～シリーズ３～](https://qiita.com/KH_MOON/items/b8f21589547fbd21fe12)）で、オフの時間に生活の役に立つIoTデバイスを作っていることを少し紹介しました。

今回、その一例となる「**IoTプラレール**」についてご紹介します。

<br/> コロナ禍でおうち時間が増えた現在、みなさんはいかがお過ごしでしょうか。

子育て世代で共働きのご家庭ですと、日中は子どもの遊び相手もしなくてはならず、運動したくても運動できないこともあるのではないでしょうか。

私はこの板挟みにある状況を解消するために、「運動しながら子どもの遊び相手ができるIoTデバイス」を作ることにしました。


> その他の記事は以下から参照できますのでよろしければどうぞ。
>
> [IoTプラレールを作ってみました（その2：IoT電池の作成 後編）](https://qiita.com/shi-matsumoto/items/35b3f7b8e53ac47f0aa4)
>
> [IoTプラレールを作ってみました（その3：IoTサイクルメータを作ろう 前編）](https://qiita.com/shi-matsumoto/items/0d9fad8fae00abe087e4)
>
> [IoTプラレールを作ってみました（その4：IoTサイクルメータを作ろう 後編）](https://qiita.com/shi-matsumoto/items/173a86deeda743fe0990)
>
> [IoTプラレールを作ってみました（その5：プラレールとフィットネスバイクを電波でつなごう 前編）](https://qiita.com/shi-matsumoto/items/7c3584f0d3ec1f380660)
>
> [IoTプラレールを作ってみました（その6：プラレールとフィットネスバイクを電波でつなごう 後編）](https://qiita.com/shi-matsumoto/items/8931aefaf8edb4080bdb)

# 運動しながら子どもの遊び相手ができるIoTデバイスとは？

子どもの遊び相手をしつつ、運動もしたいということで「フィットネスバイクを漕ぐスピードに応じて、プラレールを動かすIoTデバイスを作ってみよう」と考えました。まずはじめに、プラレールの動きを制御できるようにIoT化する必要があります。また、フィットネスバイクを漕ぐ動作を検出し、折角ならカロリー計算もできるサイクルメータが欲しいと思い、以下の２つのIoTデバイスを作ろうと考えました。

- プラレールの心臓部をIoT化する**IoT電池**を作ろう
- フィットネスバイクをハックしてオリジナルの**IoTサイクルメータ**を作ろう
    
    **機能を実現するのにポイントとなる機能**
        1. プラレールの動きを制御する機能
        2. フィットネスバイクを漕ぐスピードや消費カロリーを測定する機能
        3. フィットネスバイクから電波を発信してプラレールで受信する機能

## システム構成を考えてみました
![1-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/642018/69ac83e3-4021-a6c1-0ca8-41af42ef21ff.png)


**パルスオキシメータ：**

センサー自体は安価に手に入るけど、なにげに実装が面倒（指に挟むクリップなど、製品レベルの工夫が色々）。それを100均アイテムで手軽、かつ機能面も優れたお手軽デバイスを工作。**工作が一番テンション上がる**。

**BLE通信：**

IoTで主流になっているBLE規格（Bluetooth Low Energy）の通信を使用

**ラズパイzero + 電子基板：**

Raspberry Pi Zero W + ユニバーサル基板でIoTサイクルメータを作成

**IoT電池：**

BLE通信でフィットネスバイクから送られてきたデータを基に、プラレールのモーター出力を制御

# 要件定義

データサイエンティストにとって、要件定義は最も重要なプロセスです。顧客が本当に実現したいことにリーチできないと、遅延や手戻りに繋がり信頼を失ってしまうかもしれません。今回の顧客（娘（４歳））の信頼を失うのは避けなくてはなりません。

プラレールをIoT化するにあたって、顧客（娘（４歳））がプラレールで遊ぶ際のニーズを整理しました。

1. 常磐線の色や形が一番のお気に入りで必ず走らせたい
2. いろんな種類の電車で遊びたい
3. 走ってる様子を飽きるまで見ていたい

これらを損ねること無くIoT化するために、技術的には以下の要件を満たす必要がありそうです。

**１．外観を損ねないように、車両の内部に収める**

- 最小限の機能を持った無線通信可能なデバイスが良さそうです。今回は、ESP-WROOM-32を搭載したマイコンを選ぶことにしました。
- マイコン用電源として、取り扱いやすさと車両内に収まるサイズを考慮し、単４電池✕２本を選ぶことにしました。

**２．他の車輌で使えるように、車両自体は改造しない**

- プラレールのモーターに直接配線せず、取り外し可能にするため、単３電池に似せた電極を作成し、後ろの車両へ引き出す方法を考えました。
- 配線を引き出してもカバーができる様に、駆動車のスイッチ部分の隙間から線を通し、中間車両の連結部分の隙間から入る設計にしました。（図１A）
- 他の車両に付け替えられるように、配線はコネクタでマイコンと接続し、スイッチ部分の隙間を通れるように小さなコネクタ(XH)を選択しました。（図１B）
 
![1-01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/642018/9922dd3d-6a9c-04ed-629f-5c532e579e7a.png)

**３．長く稼働できるように、消費電力は抑えたい**

- モーターを制御する際の設定を、極力損失の少なくなるように設定することにしました。



# ⽤意するもの

材料は以下の通りです。

**必須の材料**

| 名称                         | 詳細                                                         | 参考価格(購入当時)                                              |
| :--------------------------- | ------------------------------------------------------------ | ----------------------------------------------------- |
| 無線通信マイコン             | ESP-WROOM-32搭載の開発ボード（今回はスイッチサイエンス社製のESPr Developer 32を使用） | 2200円                                                |
| モータードライバ             | DRV8835を使用                                                | 450円                                                 |
| DCDCコンバータ               | 3.3V昇圧のDCDCコンバータ  XCL102を使用                       | 300円                                                 |
| 電池ボックス                 | 単４サイズ　２個                                             | 60円                                        |
| ユニバーサル基板             | 56.5x32mmを切って使用                                        | 80円                                                  |
| XHコネクタ                   | ２ピン（ベース付ポスト、ハウジング、ハウジング用コンタクト） | 45円                                                  |
| スライドスイッチ             | 小型の１回路２接点                                           | 25円                                                  |
| 単４を単３に変換するアダプタ | 100円ショップSeriaの２個入り電池パック                                   | 100円                                                 |
| スズメッキ線                 | 基板の配線用に少し                                           | 実質数十円                                            |
| 配線コード                   | 複芯の細めのワイヤーが柔軟性があり扱いやすい                 | 実質数十円                                            |
|                              | 合計                                                         | 約3500円<br>（マイコン・電子基板を除けば500円くらい） |

**必要な工具**

| 名称               | 詳細                                                         |
| ------------------ | ------------------------------------------------------------ |
| ハンダとハンダゴテ | 新たに購入する場合は温度調整可能な精密機器用のハンダゴテがおすすめ |
| ニッパー           | 基板を切る場合は大きめのよく切れるもの、細かい配線をカットするときには小さいものがそれぞれあると便利 |
| ペンチ             | 配線を曲げたり、コネクタをつけるのにラジオペンチなどがあると便利 |
| 接着剤             | 電池ボックスを張り合わせるのでプラスチック用接着剤                 |
| USBケーブル        | ・プログラムを書き込むのに使用<br>・TypeAオスとmicroUSB（micro  B）オスのケーブルを使用 |

**あると便利な材料**

| 名称           | 詳細                                                         | 参考価格     |
| -------------- | ------------------------------------------------------------ | ------------ |
| PHコネクタ     | ・２ピン（ベース付ポスト、ハウジング、ハウジング用コンタクト）<br>・電池パック用とニセ電池用でコネクタを分けると挿し間違いがないので安心 | 55円         |
| 熱収縮チューブ | ・Φ1.5やΦ3ほどの太さ<br>・ニセ電池の配線が２本なのでまとめておくのに便利 | 実質数十円   |
| 絶縁材         | ・基板・マイコンの接触防止<br>・2cm×2cm程度の大きさで厚さ1mm程度のゴム板を使用<br>100円のサッシ用スポンジを薄くスライスするなどでOK | 実質数十円   |
| 単芯配線コード | 複芯だと力がかかったときハンダ付け部分が切れる場合があるので、少し硬いけど丈夫な単芯配線コードがあると便利 | 実質数十円   |
|                | 合計                                                         | 約 200円程度 |

**あると便利な工具**

| 名称         | 詳細                                                         |
| ------------ | ------------------------------------------------------------ |
| メルトガン   | 隙間の充填や絶縁、補強に使えるので便利。100円ショップでも買える。      |
| 鉄ヤスリ     | 接着面を少し削って接着性を上げたり、切った基板断面をなめらかにするのにあると便利 |
| ヘアアイロン | 熱収縮チューブを収縮させるのに便利。火で炙るより安全。       |
| 圧着ペンチ   | コネクタの金属部（コンタクト）を固定するのに便利             |
| テスター     | 通電してるかチェックするために一つはあると便利               |



# IoT電池の心臓部、ニセ電池を作る

プラレールのモーターに電気を送るための最も重要なパーツ、ニセ電池を作ります。 **<font color="red">ここが一番重要なポイント</font>** です！

一般に電池ソケットのマイナス極部分にバネが付いているのがわかる通り、電池ソケットと単３電池の電極部がしっかり押し付けて接触させないと正しく通電できません。つまり、電池ソケットにしっかり収まる単３電池のサイズ感が重要になってきます。

そこで、単３電池の形に近くて、電極用の金属を兼ね備えたアイテムが、 **単４を単３に変換する電池ボックス（100円）** です。

通常の使い方は、このボックスに単４電池を差し込むだけなので、マイナス極側はオープンになっています。そこで、２つのボックスを使って、マイナス極側を作成します。

まず、ボックスの一つを、図の様に電極周りで切り取ります。後で、切断面ともう一つの電池ボックスのオープになっている部分を接着剤で張り合わせますので、接着面を軽くヤスリで傷を付けておくと接着しやすいです。

![1-02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/642018/9583e36b-7d38-7196-2720-1ca207e2f86b.png)


　２つの電極は一度外します。配線コードは長めに（２５ｃｍくらい）２本用意し、２つある電極のマイナス側（面が広い部分）とプラス側（面が狭い部分）にそれぞれハンダ付けを行います。電極は大きな金属の塊なので、ハンダが乗るまで時間が掛かるのと、乗った後冷めて固まるまで時間が掛かるので、ハンダが固まるまで動かさないように注意してください。

配線した電極をもとの電池ボックスの穴に押し込み、組み立てていきます。このとき、切り取った側は、マイナス側にハンダ付けした電極を元と同じ様に差し込みます。もう一方は、プラス側にハンダ付けした電極を、元とは逆向きに差し込みます。先程の切り口の面ともう一つの電池ボックスのオープンな部分とを接着します。出来上がりは図のように、プラス極（突起）とマイナス極（平面）をもつ単３電池のような形状になります。

![1-03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/642018/302446f1-b321-f340-cb1f-876938e9242f.png)

なお、電池ソケットに入れたとき、外側から押されるので、マイナス極側はこれで安定しますが、プラス極側は強く押されると抜けてしまいます。そこで、プラス極側には押し込まれても抜けないように補強しないといけません。接着剤でも構いませんが、ここではメルトガンで隙間を充填しました。

ここまでで、ちゃんとできたかどうか確認するため、ニセ電池をプラレールの電池ソケットに入れてみて、配線コードの反対側を電池につないで見てください。ちゃんと動き出せば成功です！

お好みで２本の配線コードをまとめます。熱収縮チューブを、２本の配線より少し短めに用意し、２本の配線を通します。なお、ここまで長くなると配線コードを熱収縮チューブに通すのも結構大変です。そこで、配線コードの先端をミシン糸のような細い糸くくりつけ、糸の反対側に縫い針などのおもりを付けて先にチューブを通しておき、配線コードを引っ張り出す様にすると簡単です。熱収縮チューブに配線を通したら、ヘアアイロンやライターなどで温めて収縮させれば完成です。

最後に、配線コードの反対側にXHコネクタを取り付けます。このとき、向きに注意してください。今回作成するプログラムでは写真のように、コネクタの突起からみて左がマイナス極側（青線）、右がプラス極側（黄線）となるように作成しました。なお、左右を間違えても問題ありませんが、後で紹介するプログラムを修正しないと逆向きに動き出します。

![1-04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/642018/eb67c1db-fe80-6c99-5ff0-f1751e9cd21d.png)

**注意事項**

* 作業時は、ケガのないよう十分ご注意ください。
* 異常が発生した場合は、直ちに使用を中止してください。（異常例：びりびり電気を感じる、熱い、焦げくさいなど）
* お子様の手が届かないところに保管してください。




# マイコン（ESP32）にプログラムを書き込む準備をしよう

今回利用するマイコンは、SoCとしてESP32が搭載されています。ここでESP32のプログラムを書き込む方法を簡単に紹介します。プログラムの書き込みは、マイコンをPCにUSBで接続して行いますので、USBケーブルを用意しておきます。

1．まず、PCにプログラムを書き込むためのツールとして、Arduino IDEをインストールします。こちらからプログラムをダウンロードします。

   https://www.arduino.cc/en/software

2．プログラムを解凍し、ESP32用のライブラリをインポートします。

   ```
   $ tar xvf arduino-1.8.15-linux64.tar.xz
   $ cd arduino-1.8.15/hardware
   $ mkdir espressif
   $ cd espressif
   $ git clone https://github.com/espressif/arduino-esp32.git esp32
   $ cd esp32
   $ git submodule update --init --recursive
   $ cd tools
   $ python get.py
   ```

3．システム再起動後、Arduino IDEを起動し、Toolsメニューから以下を設定します。

   >Board : [ESP32 Arduiono]→[ESP32 Dev Module]を選択
   >
   >Port : [/dev/ttyUSB0]を選択（環境に合わせてください）

4．新規にプログラムを作成し、コンパイル＆書き込みのアイコンをクリックします。正常終了すればプログラムの書き込みは完了です。

なお、マイコンはUSBからの５V給電で起動していますが、ピンからの給電も可能です。データシートによれば、搭載されているチップのESP-WROOM-32の動作電圧は3.3 Vで、マイコンボードのVINは3.7 V～ 6.0 Vの電圧を印加することで起動できると書いてあります。今回、プラレールの中に電池を収めるため、充電できる単４のニッケル水素電池（1.2 V）を２本使用しますが、この電池でマイコン用の電源にも併用したいと思います。ただし、合わせても2.4 Vしか得られず、動作電圧に満たないため、DC/DCコンバータというものを用いて昇圧を行います。なお、3.3Vへの昇圧でもマイコンが起動するのを確認できたので、今回は3.3 V昇圧用のDC/DCコンバータを用いました。



# デバイスを組み⽴てよう

**※注意**

**一度組み立てると、後で手直しが大変なので、もし先にモーターの動きを見たい方は、ブレッドボードを使ったプロトタイピングを行うことをおすすめします。**

プラレールの中間車両側にしまうデバイスを作成します。まずは電池ボックスを作成します。２つの電池ボックスをプラス・マイナスが互い違いになるように接着していきます。このとき、接着面をヤスリで軽く傷を付けておくと接着しやすいです。

片側の電極部分はスライドスイッチを取り付け、反対側は配線コードと繋いでいきます。それぞれ、うまい具合にハンダ付けする必要がありますが、電池ボックスは熱に弱くすぐ溶けてしまうので、電池ボックスから伸びる金具部分などを上手く活用するなり工夫してください。なお、私の場合は若干溶けて変形してしまって、電池の入りが悪くなりました。

今回用いた電池ボックスは、電極部分からピンが下に伸びてるタイプでしたが、根本から切り取らないとプラレール内に収まらなかったので切除してあります。

配線コードの先端にも、ニセ電池のときと同様にコネクタを取り付けました。プラスとマイナスに注意してください。なお、こちらのコネクタは穴を通すことはないので大きめで大丈夫です。ニセ電池とサイズを変えておくと挿し間違いが防げます。

![1-05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/642018/e129b9bb-2a3a-8e3a-9359-3b3dacc19951.png)



続いて、マイコン周りの実装を行います。マイコンの基板の他に、モーターを制御するモータードライバーと、3.3V昇圧のDC/DCコンバータ、ニセ電池と単４電池ボックスから伸びるコネクタのベースを実装していきます。

なるべく配線の取り回しを少なくするため、使うピンの場所などを上手く選んで配線していきます。配線にあたって、ユニバーサル基板の裏表を使いますので、次の様に表記します。

![1-06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/642018/fef785de-473f-1660-8933-fd6e2eaedeee.png)


各パーツとユニバーサル基板の配線の模式図は以下のとおりです。マイコンは裏面側（チップが無い面）に実装していきます。ユニバーサル基板への配線は、前述の表と裏面にスズメッキ線を上手く折り曲げて加工していきます。９０度に曲がっている部分は、適宜ハンダ付けして基板に固定しておくと便利です。

![1-07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/642018/1dc98ade-8bed-99e9-7c17-08f98527ac59.png)



次に、あらかじめ配線したユニバーサル基板に、モータードライバ、DC/DCコンバータ、XPコネクタ、HPコネクタを図のように実装していきます。黒点が書かれてる部分は、ユニバーサル基板と上下に配線で繋がっている状態です。配線が他の配線や他の金属部に接触していると、通電したときにショートして壊れてしまうので注意してください。ユニバーサル基板と各パーツとが意図せず接触するのを避けるため、少し浮かせるように隙間を開けてハンダ付けするか、絶縁体を挟むなどしても良いと思います。

![1-08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/642018/e19f2954-f010-ab0f-afe3-690d9db8f2e0.png)


図のようにできた基板を、マイコンと合わせていきます。ユニバーサル基板とマイコンとが接続されるピンは6箇所（3V3、GND×2、VIN、25、26）です。先程同様、ユニバーサル基板とマイコンの間に、少し隙間をあけたり絶縁体を挟んでおくと安心かもしれません。今回は、厚さ1mm程度のゴム板を挟んでみました。完成品を上からと横から見ると写真のようになります。

![1-09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/642018/12102043-4319-6f8b-3d15-5879cb23c3d8.png)



# おわりに

次回の記事では、作成したデバイスにプログラムを書き込んでプラレールを動かしたいと思います。

「こんなのあったらいいな」を、身近に手に入るアイテムとアイディア次第で実現できるのが、電子工作の楽しいポイントだと思います。そんな楽しさが少しでも伝わればと思い、まずは工作パートから紹介してみましたがいかがでしたでしょうか。

もし、電波を受信してモーターを制御する、という機能だけを実現しようと思えば様々な方法がありますが、出来上がってから「これじゃない」とガッカリしないために、要件定義が重要だということが伝われば幸いです。

その代わり、制約条件も厳しくなってきますが、創意工夫をしながら一つずつ問題解決していくことで、楽しみながら技術や知識、問題解決力を身につけられるのではないかと思うので、是非トライしてみてはいかがでしょうか。


#### 商標

「プラレール」は株式会社タカラトミーの登録商標です。