はじめに(動機)
前記事に掲載したM5stackを使って、キッチンの手前に置く「お風呂沸かしボタン」押しロボットを作るためだった。
以前に、Amazon echo+Node-REDで家電をコントロールする仕組みをラピットプロト的に作った。
これにより、赤外線で操作できる家電(照明/エアコン/扇風機/テレビ/レコーダ)はAmazon echoの制御管理下に入り、
実際に役に立っている(妻や子供たちからの評判も上々!)
「せっかくなら家じゅうの家電を制御してやろう」と欲望は尽きず。
ここで問題になってくるのは、「赤外線で制御できない操作機器」その中で、我が家で良く使うのは「お風呂沸かしボタン」だった。我が家では、お風呂の水の入れ替えは2,3日に1回、しかもお風呂に入るタイミングは家族バラバラなので、冷めた湯舟を沸かす機会は平均1回/日はある。ちなみに、遠隔制御が必要そうなのは「おいだき」ボタン。「おゆはり」の場合、必ずお風呂を洗いに風呂場に移動するので、実際に遠隔でボタンを押すケースがない。一方で、「おいだき」の場合、既に風呂桶には水が入っているケースがほとんどなので、遠隔操作の重要性が増してくる。(例えば、オンラインゲームに夢中になって物理的にも手が離せない状況だけど、ゲーム終了後にお風呂に入りたいなぁと思っている場合など)
なお、ボタン押し装置の既製品を使うのが一番早いとは思う。例えば、ボタン押しIoT機器として有名な「MicroBot Push」など。
microbot.is
しかし、我が家のお風呂ボタンはとても強敵で、おそらく既製品では安定してボタンを押せないと予想される。
理由1 : ボタンがとにかく固い!!
理由2:ボタン押し装置を固定する場所がない。両面テープによる壁固定は、壁紙をはがすリスクがありNG
難度の高そうな割に、たった2日に1回/10歩程度の手間を短縮するためだけの装置。
発案当初は正直そんなにモチベーションが上がらず、構想のみで2か月が過ぎていた。そんな時に出会ったのがM5stackだった。
M5stackを使ったロボット事例を見てるうちに
「これがキッチン近くにあったら可愛いな」
→「ん?こいつが、お風呂ボタンを押すと、、、なんだかシュールで面白い光景かも!?」
と思いたつと、急遽モチベーションが上がり、急ぎ作り上げてしまった。
完成写真
完成動画
M5stackを使って、Amazon echoからお風呂の「おいだきボタン」を押すロボットを作ってみた。
— おぎもトキ (@ogimotoki) 2018年7月27日
ただ、押すだけじゃ面白くないので、無駄に魔法を唱えてみました。うまく押せたらレベルアップ!#電子工作 #M5stack #家族のためのモノづくり pic.twitter.com/V4nX6bAcOr
ね、狙い通り、シュールな光景でしょ(笑)
ハードウェア検討
外形設計
サーボモータ+制御マイコンを購入したら完了ではない。むしろ、ここからがスタート!
どうやって、ボタンの下にサーボマイコンを固定するか、だ。
[案1]: サーボモータを壁に貼り付ける
→ 押すとすぐ落ちる。見た目も美しくない
そこで、サーボモータを固定するための棚をコーナンで購入してきて設置。石膏ボードの壁に対して耐荷重3kgの棚、まぁ耐えられるでしょう
[案2] : 棚の上にサーボモータを置いて固定
→サーボモータがボタン押し回転方向の反力に耐えられず上に持ち上がる……
という事は、サーボモータを抑える冶具が必要!という事、で3Dプリンタで作る想定で追加。
[案3] : サーボモータの上に抑え込み冶具を追加
→しかし、垂直方向の持ち上がりは回避できたが、水平方向の力の不均衡で前に押し出される。むむm…
[案4] : 台座の下に滑り止めシートを追加
ようやく安定して押せそうな構想は出来上がった。ふぅ~
続いて、固定冶具を検討。
ソフト設計
前回の記事のソフトをベースに、Wifiからの制御機能を追加しただけなので、それほど難しくはない
ただし、ラズパイのNode-REDからhttp通信で特定の情報を送るため、ロボット側のIPアドレスは固定にする必要があった。
調べたところ、Arduino環境でのESP32の固定IPの仕方は以下。
#include <WiFi.h> IPAddress ip(192, 168, 0, 50); //固定IP 192.168.0.50 IPAddress gateway(192,168, 0, 0); IPAddress subnet(255, 255, 255, 0); IPAddress DNS(192, 168, 0, 0); void setup(){ // WiFi設定 // We start by connecting to a WiFi network Serial.println(); Serial.println(); Serial.print("Connecting to "); Serial.println(ssid); WiFi.config(ip,gateway,subnet,DNS); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } void loop(){ // Check if a client has connected WiFiClient client = server.available(); if (!client) { return; } // Wait until the client sends some data Serial.println("new client"); while(!client.available()){ delay(1); } // Read the first line of the request String req = client.readStringUntil('\r'); Serial.println(req); client.flush(); if (req.indexOf("/oyuhari_on") != -1){ Serial.println("call http"); avatar.stop(); push_function(); avatar.start(); } }
ただ、押すだけやったらM5stackをつけた意味がない。せっかくなので、押した瞬間に何かアクションを仕掛けようと思い、効果音サイトを探してみる。
辺りを探していたら、たまたまドラクエの魔法風の音源を発見! すかさず妻が一言「ギラでお風呂が沸いたらいいのにね」。
という訳で、あっさり効果音が決まりました(笑) ゲーム好きな妻でよかった~