IoT炊飯器
東京大学機械工学部3年 井上功一朗
1.コンセプト
1人暮らし、共働き家庭など、炊事に時間を割けない人をターゲットとした、既存の炊飯器をIoT化する拡張キット。外出先からインターネット経由で指令を送ると、全自動で指定の量を炊飯してくれる。
2.要求機能
(1) 米を計量して釜に入れる。
(2) 水を計量して釜に入れる。
(3) 炊飯器の蓋の開閉を行う。
(4) 炊飯ボタンを押す。
(5) 炊飯済で保温状態の米の残量計測
(6) インターネットを介した通信
※米は無洗米を使用する
3.機能実現のための具体的なプロセス
各種センサーとアクチュエーターおよびArduino UNO R3によって構成し、それらをメタルラックに3次元的にうまく配置することで、要求機能を実現した。
(1) 米の計量
一般に市販されている計量米びつを改造し、サーボモーターを取り付けることで実現した。計量米びつは穴の開いた円筒容器を回転させることで、1合分の米を測り落とすもので、動作を繰り返すことで指定の量の米を計量できる。改造した計量米びつを釜の真上に配置することで、サーボモーターの動作によって釜に米が落ちる仕組みとなった。最初は落とした米が飛び散ってしまうという不具合があったが、水を釜に入れた後に米を入れる制御とすることで解決した。
(2) 水の計量
水タンク、2つのソレノイドバルブ、水センサ、計測容器、各種チューブやバルブなどによって実現した。水タンクを最上部に配置、その下にソレノイドバルブ、水センサを取り付けた計測容器、ソレノイドバルブの順に配置しそれらを適切なチューブとバルブで接続した。計測容器は米1合分の水200㏄で満タンになる直方体の容器で、レーザーカッターでアクリル板を切って自作した。この容器の上部に水センサを取り付け、容器が満タンになったことを検知できるようにした。
制御アルゴリズムは以下の通り
・上側のソレノイドバルブを開ける。→計測容器に水が入り始める
・計測容器が満タンになったことを検知すると、上側のソレノイドバルブを閉め、下側のソレノイドバルブを開ける。→釜に水が入り始める
・すべての水が釜に落ちるのに十分な時間経過後、下側のソレノイドバルブを閉める。(今回は70秒とした。)
・以上の動作を繰り返すことで、指定の量の水を計測して釜に入れる。
最初は水センサーはついておらず、容器が満タンになるのに十分な時間、上のバルブを開いておいて、それから下のバルブを開けるという制御にしていた。しかし、計測容器に空気が抜ける穴をあけていなかったため、水がほとんど入っていかなかった。そこで、空気穴をあけることになったが、そうすると十分な時間上のバルブを開けていては水が漏れてしまうため、満タンになったことを検知するために、水センサを付けることとなった。
(3) 蓋の開閉
ソレノイドによってフックボタンを押すことで蓋を開け、サーボモーターを自作のクランク機構に取り付けた物によって蓋を閉めることで実現した。クランク機構は上述の計測容器と同じように、レーザーカッターを用いてアクリル板で制作した。
力不足、トルク不足によって所望の動作をしないことが多く、実現に非常に苦労した。フックボタンのばねを切って長さを半分にし、必要な力を小さくする、トルクの大きなサーボを使う、などによって何とか実現できた。
(4) 炊飯ボタンを押す
ソレノイドをボタンの前に取り付けることで実現した。
(5) 炊飯済で保温状態の米の残量計測
ロードセル(ひずみゲージ)を用いた重量測定装置を炊飯器の下に配置することによって実現した。
(6) インターネットを介した通信
ハードウェアとしては、Wi-FiモジュールESP-WROOM02をArduinoに接続して実現した。Webアプリは下記URLに公開されていたものをベースにして、HTML、CSS、JavaScript、PHPなどの言語を駆使して製作した。ほとんどの言語が初見だったため、製作は困難を極めた。
(参考URL:https://github.com/ics-creative/151217_arduino_ESP-WROOM-02_v1)
4.全体の制御アルゴリズム
〇Arduino
~初期設定~
・各種変数の宣言やピンの設定など
・Wi-Fiに接続
~ループ処理~
・重量を測定
・http通信(GETメソッド)でサーバーに重量情報を送信。サーバー上のPHPファイルが作動して重量情報をサーバー上のテキストファイルに格納。さらに、別のテキストファイルから指令情報(n合炊き指令ならn、それ以外は0)を取得してArduinoに送る。
・重量が炊飯器自体の重さ±30gかつ、指令情報が0でないとき、以下の処理に進む。それ以外の場合再度ループ。
・蓋を開ける
・水を1合分計って釜に入れる。指令情報に応じて繰り返す。
・米を1合分計って釜に入れる。水と同じく繰り返す。
・蓋を閉める。
・炊飯ボタンを押す。
〇Webアプリ
・パスワードを打ち込んで送信。
・POSTメソッドでサーバーにパスワードを送信、サーバー上のPHPでパスワードの正誤を判定。正しければ以下の処理へ。誤っていればやり直し。
・サーバー上のテキストファイルから重量情報を取得。
・重量が±30gなら指令ボタンを有効化。30g以上ならばその重量を表示。それ以外の場合は”Weight Error”と表示して何もしない。
(以下±30gの場合)
・有効化された指令ボタンを押す。
・押した指令ボタンに応じた指令情報をサーバー上のテキストファイルに格納する。
5.反省
電子工作は全くの初心者であったため、最初はよくわからないまま色々と進めてしまい、最終的に問題になったことが多々あった。例えば電源の不統一には非常に苦労させられた。AC100V、DC12V, 5V, 3.3Vなどが混在したためにレギュレーター等を駆使して複雑な回路を組むことになった。その上、サーボを途中で大幅にトルクが大きいものに変更したため、レギュレーターおよびACアダプターの容量が足りなくなり、大きく回路を組み替えざるを得なくなった。使用するアクチュエーターは極力電源をそろえ、使用するアクチュエーターをすべて把握したうえで回路を組み始めること、事前にブレッドボードで実験を行って問題がないことを確認すること、などおそらく電子工作を行う上で基本中の基本ともいえるであろうことの大切さを痛感した。
6.学んだことおよび感想
製作プロセスの部分に記述したが、作ってみないと分からない問題点が非常に多く、試作することの重要性を痛感した。もう1度同じものを作る機会があればもっとスマートなものが作れると確信するぐらいに、本当に多くのことに気づかされた。
また、人の動作をサーボなどの機械に代替させることの難しさも感じた。炊飯器の蓋を閉める、ボタンを押すなんて動作は、人間にとっては大して力もいらない単純な動作なのだが、それをソレノイドやサーボに代替させるのは簡単ではなかった。力やトルク不足、取り付け方が悪くて力が逃げる、などの問題が度々発生し、調整に非常に苦労した。ヒューマノイドロボットの開発者が、どのようにこれらの問題を解決しようとしているのか非常に興味がわいた。
苦労することも多く、非常に多くの時間を費やすことになった。しかし、全体としてはものづくりの難しさと楽しさの片鱗を味わうことができた有意義な演習であった。自分が作りたいと思ったものが実際に形になることは、試行錯誤の過程も含めて、この上なく楽しくて感動的であった。
何かしら反応が来たら面白そうなので、可能であればHPにこのアドレスを書いておいてほしいです。
k8o2u9@g.ecc.u-tokyo.ac.jp
ソースコード
ソースコード-20180313T020408Z-001.zip