OGIMOノート~家族のためのモノづくり~

OGIMOテックノート ~家族のためのモノづくり~

重度障害の息子を持つ父親エンジニアの備忘録。自作の電子工作おもちゃ/リハビリ器具/ロボット関係の製作記録、思った事を残していきます

M5stack(ESP32)でお風呂沸かしボタン押しロボットを作ってみた

はじめに(動機)

前記事に掲載したM5stackを使って、キッチンの手前に置く「お風呂沸かしボタン」押しロボットを作るためだった。

以前に、Amazon echo+Node-REDで家電をコントロールする仕組みをラピットプロト的に作った。

ogimotokin.hatenablog.com

これにより、赤外線で操作できる家電(照明/エアコン/扇風機/テレビ/レコーダ)はAmazon echoの制御管理下に入り、
実際に役に立っている(妻や子供たちからの評判も上々!)
「せっかくなら家じゅうの家電を制御してやろう」と欲望は尽きず。

ここで問題になってくるのは、「赤外線で制御できない操作機器」その中で、我が家で良く使うのは「お風呂沸かしボタン」だった。我が家では、お風呂の水の入れ替えは2,3日に1回、しかもお風呂に入るタイミングは家族バラバラなので、冷めた湯舟を沸かす機会は平均1回/日はある。ちなみに、遠隔制御が必要そうなのは「おいだき」ボタン。「おゆはり」の場合、必ずお風呂を洗いに風呂場に移動するので、実際に遠隔でボタンを押すケースがない。一方で、「おいだき」の場合、既に風呂桶には水が入っているケースがほとんどなので、遠隔操作の重要性が増してくる。(例えば、オンラインゲームに夢中になって物理的にも手が離せない状況だけど、ゲーム終了後にお風呂に入りたいなぁと思っている場合など)

なお、ボタン押し装置の既製品を使うのが一番早いとは思う。例えば、ボタン押しIoT機器として有名な「MicroBot Push」など。
microbot.is
しかし、我が家のお風呂ボタンはとても強敵で、おそらく既製品では安定してボタンを押せないと予想される。

理由1 : ボタンがとにかく固い!!
理由2:ボタン押し装置を固定する場所がない。両面テープによる壁固定は、壁紙をはがすリスクがありNG

難度の高そうな割に、たった2日に1回/10歩程度の手間を短縮するためだけの装置。
発案当初は正直そんなにモチベーションが上がらず、構想のみで2か月が過ぎていた。そんな時に出会ったのがM5stackだった。

M5stackを使ったロボット事例を見てるうちに
「これがキッチン近くにあったら可愛いな」
→「ん?こいつが、お風呂ボタンを押すと、、、なんだかシュールで面白い光景かも!?」
と思いたつと、急遽モチベーションが上がり、急ぎ作り上げてしまった。

完成写真
f:id:motokiinfinity8:20180726011918j:plain




完成動画


ね、狙い通り、シュールな光景でしょ(笑)

ハードウェア検討

サーボモータ検討

まずお試しで、低価格のSG90 (トルク 1.8kgf・cm)で試してみたが、残念ながらサーボモータがパワー負けしてる…
そこで、もう少しトルクが強い(かつ低価格でコンパクト)サーボモータを探してみた。
すると、スイッチサイエンスさんで以下のサーボモータを発見。
www.switch-science.com

トルク 3 kg·cmで小型で良い感じ!という事で、さっそく購入!
簡易実験をしたところ、サーボモータをきっちり固定して、簡易アームさえつければ押せそうな感触!

外形設計

サーボモータ+制御マイコンを購入したら完了ではない。むしろ、ここからがスタート!
どうやって、ボタンの下にサーボマイコンを固定するか、だ。

[案1]: サーボモータを壁に貼り付ける
f:id:motokiinfinity8:20180728015116j:plain
→ 押すとすぐ落ちる。見た目も美しくない
そこで、サーボモータを固定するための棚をコーナンで購入してきて設置。石膏ボードの壁に対して耐荷重3kgの棚、まぁ耐えられるでしょう

[案2] : 棚の上にサーボモータを置いて固定
f:id:motokiinfinity8:20180728015117j:plain
サーボモータがボタン押し回転方向の反力に耐えられず上に持ち上がる……
という事は、サーボモータを抑える冶具が必要!という事、で3Dプリンタで作る想定で追加。

[案3] : サーボモータの上に抑え込み冶具を追加
f:id:motokiinfinity8:20180728015119j:plain
→しかし、垂直方向の持ち上がりは回避できたが、水平方向の力の不均衡で前に押し出される。むむm…

[案4] : 台座の下に滑り止めシートを追加

ようやく安定して押せそうな構想は出来上がった。ふぅ~
f:id:motokiinfinity8:20180728015121j:plain
続いて、固定冶具を検討。

3Dプリンタでの筐体設計

サーボにつけるアーム部。タミヤのユニバーサルアームセットで作ろうとしたが、「見た目がダサいね」と妻に一蹴。
ここで、発想の転換。「機構じゃなくて、M5stackを活かしてロボットっぽくした方が楽しいんじゃないかな」

ならばいっその事、3Dプリンタで外装加工をしてやろうではないか、という事で以下の3種類の冶具を3Dプリンタで作成

①アーム部
②M5stack本体格納部
サーボモータ保持部

Fusion360で作成して出来たCAD図面は以下。結構ロボットぽくてイイね!



f:id:motokiinfinity8:20180728020521j:plain





ソフト設計

前回の記事のソフトをベースに、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をつけた意味がない。せっかくなので、押した瞬間に何かアクションを仕掛けようと思い、効果音サイトを探してみる。

効果音|音素材の01SoundEarth

辺りを探していたら、たまたまドラクエの魔法風の音源を発見! すかさず妻が一言「ギラでお風呂が沸いたらいいのにね」。

という訳で、あっさり効果音が決まりました(笑) ゲーム好きな妻でよかった~

まとめ

M5stack+3Dプリンタを使って、我が家固有の「お風呂制御ボタン」に最適な外装配置に仕上げる事で、強敵だった固いボタン押しを遠隔制御する方ができた。

しかし、せっかく作ったこのロボット、一日一回使う用途だけではもったいない。せっかくキッチン横という、LDK内でもリッチな場所に配置されているので、是非とも他の用途にも使えるロボットに進化させていきたいと思う。

うーん、他に何に使えるだろうか。悩むぜー