5月の終わりに開催されたIoTLT Vol.51でお風呂IoT Mk2の発表をしてきました。
IoTLT Vol.51 令和発にお風呂IoTの完成形を目指して発表しました!
ここでは、Mk2の製作話をまとめてみます。ぶっちゃけまだ完成してないのに何言ってるのって話ですが、次のためにまとめです。。
中身の紹介
去年のうちに、水位検知をして通知をするお風呂IoTとサーボモーターで外付けした水栓締める蛇口IoTまでやりました。
今回はそれの統合をして、どちらも連携して動作しつつ、実用に耐えるガチで使えるものを目指しました。
まずは蛇口部。箱を作る過程はこんな感じで確かめつつです。
最終的な筐体がこれ。
(この後3Dプリントのラフトを取り除こうとカッターで削ってたらざっくり手のひらを切りました。皆さんもお気を付けください。。)
回路には、ESP32-DevkitCを使い、ユニバーサル基板を使いました。まさに専用のものがスイッチサイエンスで発売(同人系の基板でした)されているものを利用して、頑張って配線してました。
水位センサーはディスプレイを付けてみた
水位センサー自体はもう動くようになってたので、ESP32+Micropythonで動くように少し変更したぐらいです。ただそれだとつまらなかったので、温度や水位検知状態をディスプレイへ出せるようにしています。
当日はデモをやろうとしたのですが、回線が良くなかったのか、やっつけなコードが悪かったのかうまく動かせず。一応テストで動くようにはなってたのですが。。
どちらも単独で動き無線で連携させる
スライドでも出したのですが、蛇口部と水位センサー部の2つを無線通信で行う算段です。センサー/モーターコントローラーを兼ねるために、ESP32を2つともに利用しています。
DCDCコンバーターとレベル変換
電源ですが、どちらも防水が大事なので電池などバッテリーを内蔵させるようにします。Qi対応とかできたらとてもかっこいいと思いますが技術力乏しいので、乾電池やモバイルバッテリーを活用しています。
最終的には乾電池で動くようにすることを目指してます。電池交換しやすいのもあるので。
蛇口部のESP32とサーボモーターは動作させる電圧が違います。そのため、DCDCコンバーターを入れて、6Vの乾電池(ここでは充電池なので5V行くか行かないかのレベル)のみでどちらも動くようにしています。
それと、@ike_jpnさんにアドバイスをいただいて、蛇口部のサーボモーターにレベル変換を入れたほうがいいとのことで入れてみました。
回路図大事ですよね.書かずに作業してモーターから煙り出したこと何度かあります^^; この回路図ですが,ESP32(3.3v)とサーボ(6v)が直結されてるのがちょっと気になりました.レベル変換してもいいかも.
— Makoto Koike (@ike_jpn) March 31, 2019
それらを合わせて最終的な回路はこれがベース。まだきれいじゃないのですが動きは問題なかったです。
配線をきれいにしつつ、テストしていい感じだったので組み込みました。
うまく行った部分
Micropythonを活用
ESP32にはMicroPythonを入れました。httpのやりとりができるので、双方ともWifi接続です。
蛇口側はどちらかというと命令を受けて操作される側なので、HTTPのURLで操作できるようにしました。APIというとかっこいいですねw
(かっこいいので)APIの実装にはmicrodotというMicropythonで使えるFlaskライクなWebフレームワークを使いました。
GitHub - miguelgrinberg/microdot: The impossibly small web framework for MicroPython
Microdot - Web Framework to Micropython - MicroPython Forum
製作中にソケットで実装するつもりでしたが、たまたまこちらのフレームワークを見つけたので使ってみたところ、使い勝手が良かったので数時間でそれらしい挙動が作れました。Micropythonでhttp周りをやりたいならおススメです。
ちなみに英語ですが作者の方がチュートリアル的なブログ記事を公開しているので、そちらを流し見するのもオススメです。
水位センサー側は上のURLを叩ければ良いです。こちらはurequestsという、requestsのMicropython版が標準で搭載されているので利用しました。こちらも機能は簡素ながら十分でした。
3Dプリンタにちょっとだけ強くなった
ものづくりとして3Dプリンタをフル活用させていました。試作品は1か月もない中で5つ以上作ってたので稼動は多かったと思います。
試作過程の物
iPad Proで動作を監視中。これでどこでもプリント中の様子が見れるようになったので、夕飯作ってる間とかにも見られるようになりました。
OpenSCADでの操作もそれなりに理解してきたので、データをいじる過程で調整しやすいようにできてきたのもよかったところです。
このモデルの突起部分はすべて同じ機能を数値変更で変えています。なので数字を変えるだけで結果がすぐに出せるので搭載物を模したモデルと比べながらの調整はしやすかったです。
ダメだった部分
防水は難しい
3Dプリンタで防水ケースを作るのは難易度が高い印象です。利用している3Dプリンタも黎明期なときのもので、ものはできますが精度がちょっときびしいです。実は防水テストはまったくできませんでした。
たとえば蛇口操作用として、コックが付いているホースジョイントを使っていますが、基板部分の箱とホースジョイントを固定するマウントの2つをインサートナットを使って固定することにしてみました。
インサートナットは埋め込みナットともいうものです。以下の写真のように、樹脂部品にナットを埋め込むことができます。(埋め込み方法ははんだごてでナットを熱して埋め込んでます)
これをきれいに収めるくぼみを作るのが難航してまして結局この形はあきらめています。水が入らないような厚みと3Dプリンタが出せる厚みの調整ができませんでした。時間がなかったからでもあるのですが、箱の構成を考え直す必要もあったので経験不足による失敗でした。
懇親会でも話をしてましたが、防水ケースはタカチという界隈では有名なメーカーがありまして、扱いやすいのと価格も良いので、使わない手はないと思ってます。
防水・防塵 樹脂ボックス・防水プラボックス | 製品情報 | タカチ電機工業 - 産業用・工業用のケース・ボックス・ラック・筐体の製造メーカー
また、蛇口側は電池交換以外開けないことを前提に、スイッチを入れることも考えていろいろ用意してみました。
最終的にはこの写真の左側のものを使う予定でしたが、こちらも箱の加工に苦労してあきらめてます。(当日は小型のスライドスイッチを中にいれてました。
スイッチの詳細:マル信無線電機 MS-384L0#2 プッシュスイッチ防水型(照光式・青色発光)
OpenSCADはプロトタイプに向かない
細かい調整ができるようになってきたのはよかったのですが、たとえば断面を見たいときに、存在するモデル事に論理差をとって行いますが、その辺が面倒でした。この辺がマウスで操作できたらなあと。そう考えると、プロトタイプ自体にはGUIベースのCADのほうが明らかにアクション早いなと。
3DプリンタはFusion360に切り替えを考えてます。
次回は
お風呂IoTは実に1年前に発表をしてから今となりました。形としては見えてきたかなと思う一方で、実際に使おうとするところまで持っていくのが難しい印象で、今後どうしようかなと考えてます(というか放置してますw
なんとか部品を収めるだけで精一杯だったので、次回はデザインを考えて作り上げたいです。一応アイディアはあるので何とか形にしていきたいですね。
そもそも家族側から使えるもの早く作って!と催促され始めているので、お風呂水位通知側は使えるように見繕いなおして動くようにしておこうかと。
ということで夏はちょっと無理かもしれないけど秋頃に作ってまた持ってこれたらいいなあと(この記事はMaker Faire Tokyo 2019の会場にあるスタバで休憩中に書きました。ブース見ていたら意欲高まってきました!)