obnizでもプラレールを動かしたい！

これは[Obniz Advent Calendar 2018](https://qiita.com/advent-calendar/2018/obniz)の9日目の記事です

2018年7月7,8日に金沢にて[NT金沢](http://wiki.nicotech.jp/nico_tech/index.php?NT%E9%87%91%E6%B2%A22018)というイベントが開催されていました

togetterにて雰囲気がまとめられています[ [ここ](https://togetter.com/li/1244552) ]

私もESP8266を複数台使用して子どもに大人気のプラレールを自動制御をしたものを展示していました

クリックするとYoutubeへとびます↓
[![](https://img.youtube.com/vi/uAb04AHpw5w/0.jpg)](https://www.youtube.com/watch?v=uAb04AHpw5w)

さて本題ですが、obnizでも簡単にプラレールハックができるのではいか？ということで、obnizを使ってプラレールを制御してみました

# 作ってみた
ということで作ってみたものが以下の動画になります

車両は一方向のみ走行するようにし、駅は島式ホームにしてみました

クリックするとYoutubeへとびます↓
[![](https://img.youtube.com/vi/vWvh8Z4lABY/0.jpg)](https://www.youtube.com/watch?v=vWvh8Z4lABY)

本当はNT金沢で展示したように立体交差させたかったのですが、レールを作るのに時間が要するのと制御が複雑化するので今回は単純なものにしました

また自動でのプラレール制御は行っていません

obnizはweb上でマイコンを制御できるところが長所だと思うため、自動化よりは自分で制御したほうが良いと判断しました

# 材料
最低限必要な材料です

下の材料の他にもレールの改造と短いレールを作るために3Dプリンタを必要とします

  * R-01 直線レール 10本
  
  * R-03 曲線レール 11本
  
  * R-08 ストップレール 2本
  
  * R-11 ターンアウトレール L 2本
  
  * R-11 ターンアウトレール R 2本

  * J-14 ブロック橋脚 3個 (任意)
  
  * J-17 ニュー踏切 1本 (直線レールでも代用可)
  
  * デジタル・マイクロサーボ(SG90) 4個

  * obniz 1個

  * ブレッドボード

  * ジャンパーワイヤ
  
  * お好きな車両

# レールの改造

## ターンアウトレール
サーボモータでターンアウトレールを制御できるように改造をします

ターンアウトレールの裏側にペットボトルの切れ端を下記の画像のように接着剤等で貼り付けます

![DSC_2840.jpg](https://qiita-image-store.s3.amazonaws.com/0/96450/651e546f-fa5f-fa63-0276-463f1af604b8.jpeg)

こうすることでバネのようにポイントが切り替えが可能となります

<br>

つぎにサーボモータをターンアウトレールに固定するために、3Dプリンタで固定するものを作ります

githubにてモデルデータを公開しているため、ダウンロードして印刷すれば完成します

![servo2.JPG](https://qiita-image-store.s3.amazonaws.com/0/96450/2349b540-e0d5-218f-a773-990d4c317eae.jpeg)

[ダウンロード先](https://github.com/Momijinn/PlasticRail_Parts/blob/master/fixing_servo_ver2/fixing_servo_ver2.stl)

印刷後、サーボモータをネジで固定し、糸などでターンアウトレールとサーボモータの羽をくくりつければ改造完了です

![asdfa.jpg](https://qiita-image-store.s3.amazonaws.com/0/96450/8cdc820e-6cab-a8a9-d785-8b762969f737.jpeg)


## ストップレール
ターンアウトレールよりは簡単で、サーボモータをネジ等で固定し、ポイントとサーボモータの羽を固定すれば改造完了です

![DSC_2839.jpg](https://qiita-image-store.s3.amazonaws.com/0/96450/1b39d2a3-2a27-4e7a-7bab-5a29b4989176.jpeg)


## 自家製プラレール
ターンアウトレールにてレールを並行分岐させるとレールが少し足りない事態になります

今回作成したものは2本の自作レールが必要になります

**1本目**が通過線のすぐ横にあるレールです

1/4直線レールよりも少し小さいレールでないとはまりません

トミカからそのようなレールは現在のところ販売されていない(2018/11/21現在)ため、3Dプリンタで作ります

もちろんこのデータもgithubに公開済みですので、ダウンロードして印刷すれば完成します

![rais1.JPG](https://qiita-image-store.s3.amazonaws.com/0/96450/4a10562d-a5da-ad8e-e17e-70a585bae1ec.jpeg)

[ダウンロード先](https://github.com/Momijinn/PlasticRail_Parts/blob/master/rail/rail.stl)

<br>

**2本目**が駅にて一番外側にあるレールです

レールというよりはレールとレールを接続するためのコネクタというべきでしょうか

![DSC_2837.JPG](https://qiita-image-store.s3.amazonaws.com/0/96450/ae88c0bf-33fe-095b-2268-5c243467fafe.jpeg)


もちろんトミカからそのようなレールは現在のところ販売されていない(2018/11/21現在)ため、3Dプリンタで作ります

このデータはgithubにはありません(ゴメンナサイ)

しかし、githubにて"レールと繋がる部分(rail_down.stl)、レールの長さの部分(rail_middle.stl)、レールと繋げる部分(rail_top.stl)"と、レールを各パーツごとに公開しています

[レールパーツ](https://github.com/Momijinn/PlasticRail_Parts/tree/master/rail/parts)

[ThinkerCad](https://www.tinkercad.com/)等の3Dモデルソフトまたはアプリにて各パーツをインポートしくっつけて作成をしてください

# プログラム
プログラムはobnizのリポジトリところで公開をしています

[プラレールコントロール.html](http://obniz.io/users/432/repo/プラレールコントロール.html)

サーボモータとobnizの接続は以下のようになっています

```
  0pin -- vcc
  1pin -- gnd
  3pin -- レールの一番外側にあるストップレールのサーボモータのsignal
  4pin -- レールの一番外側から二番目にあるストップレールのサーボモータのsignal
  5pin -- ストップレールを分岐させるためのターンアウトレールのサーボモータのsignal
  6pin -- 通過線とストップレールの分岐をさせるためのターンアウトレールのサーボモータのsignal
```
レールを組み立て、レールの改造し、obnizとサーボモータを接続し、プログラムを起動すると以下のような画面になります

|マニュアルモード|お手軽モード|
|---|---|
|![Screenshot_20181121-094645.png](https://qiita-image-store.s3.amazonaws.com/0/96450/064794c4-4c4e-8b9f-bcac-2e6c821660b6.png)|![Screenshot_20181121-094659.png](https://qiita-image-store.s3.amazonaws.com/0/96450/c0640d48-5e68-4cad-b145-b2e6cd856a45.png)|


**マニュアルモード**と**お手軽モード**の2つを表示しています

マニュアルモードでは各ストップレールやターンアウトレールを制御していくものです

車両が一台であれば容易に制御できますが2台以上になるとかなり難しいです

次にお手軽モードですが、停止させたい駅や通過させたい駅へ簡単に誘導してくれます

マニュアルモードよりも容易に制御することができます

また、お手軽モードでは駅へ停止命令を出したときにデフォルトでは<font color=orange>**10秒経過後に自動で発車をします**</font>

<br>

操作画面にて、すこし技術的な話をすると、レイアウトは[bulma](https://bulma.io/)というCSSライブラリで作っています

軽量でかつjavascirptの依存がないためobnizが読み込んでいるjqueryにも影響がでないと判断してこのライブラリを使用しました

トグルスイッチについてもbulmaで書かれている[bulma-switch](https://wikiki.github.io/form/switch/)というライブラリで実現しています

ライブラリをつかいつつJavaScriptでいい感じにプログラムをかき、いろいろ微調整して完成をしました

![DSC_2836.JPG](https://qiita-image-store.s3.amazonaws.com/0/96450/6cb4e962-114e-7ffd-442e-45302fb1322f.jpeg)


# まとめ
obnizを使ってプラレールをスマートフォン等の端末で操作できるものを作ってみました

obnizのおかげでマイコンのプログラムとWebアプリを同時に作ることができるのため、短時間でスマホで動かすおもちゃが作れるので便利です（しかし、ネット環境がないと動かせないのがネックですが・・・）

<br>

最後に宣伝です

いつもはブログにて活動をしています

http://www.autumn-color.com/

obnizだけでなくARに挑戦したり、いろいろ作ってみた記事を掲載しています

それでは良いお年を