レシピ連動調味料サーバー「OiCy Taste」の設計情報を公開、解説します

研究開発部のスマートキッチングループ プロトタイプエンジニアの山本です。専門分野はロボティクスです。
スマートキッチングループでは、 レシピを様々な機器とつなぐスマートキッチンサービス「OiCy」の開発を進めています。今年の5月、OiCyの開発を発表した際に、コンセプトモデルレシピ連動調味料サーバー「OiCy Taste」を公開しました。クックパッドからハードウェアが発表されたことに驚いた方も少なくないかと思います。かく言う私もその一人で、「OiCy Taste」を見てクックパッドのスマートキッチンの取り組みに興味を持ち、この夏からハード系エンジニアとしてプロジェクトに加わることになりました。よろしくお願いします。 このエントリでは、このレシピ連動調味料サーバー「OiCy Taste」の設計情報を公開します。

最初に

皆さんは料理をしますか?料理を楽しんでいますか? 料理とエンジニアリングはとても良く似ていると私は考えています。レシピが設計図で、材料の調達をして、加工(料理)をして、完成品を顧客に評価してもらう。加工の過程で廃材(生ゴミ)が出るので処分が必要で、設計図通り作ったはずなのに同じになるとは限らない図面や文章に載らないノウハウがあること。エンジニアリングが好きな人間は料理にもハマれると思います。何より、家族が美味しいと言ってくれたときの喜びは、苦労して作った製品やサービスが顧客からイイネって言われたときに勝るとも劣らない喜びだと思います。 では、自分自身を顧みて、日常的に料理はしていますがその料理を楽しめているのか?と自問してみると、仕事や育児に追われて時間のない中で、料理をタスクの様に感じて必ずしも楽しめていない事に気が付きました。楽しくて当然のことなのに楽しめていない。この問題をエンジニアとしてどう技術で解決するのか?この気付きを与えてくれたのが、今年5月のクックパッドの[レシピを様々な機器とつなぐスマートキッチンサービス「OiCy」]との出会いでした。

レシピ連動調味料サーバー[OiCy Taste]の設計情報公開の意図について


動画:レシピ連動調味料サーバー「OiCy Taste」
※本品はコンセプトモデルであり現時点で発売の予定はありません。

レシピを様々な機器とつなぐスマートキッチンサービス「OiCy」では、クックパッドに投稿されたレシピを、機器が読み取り可能な形式(MRR: Machine Readable Recipe)に変換して機器に提供します。レシピのMRR化ついては、9/7の大谷のエントリ:OiCyサービス(開発中)の裏側 〜レシピのMRR化〜で紹介されています。ぜひそちらも読んでいただければと思います。
さて、レシピ連動調味料サーバー「OiCy Taste」は、スマートキッチンサービス「OiCy」を利用した調理機器のコンセプトモデルです。クックパッドで作りたい料理を検索してレシピを閲覧すると、機器側が連動して簡単な操作でそのレシピで用いる調味料を配合して出すことができます。レシピを見ながらの調味料の配合は、レシピに書かれた分量を自分が作る料理の量に合わせて計算したり、各調味料の蓋を開ける、分量を測る、蓋を閉める、といった細かな作業の繰り返しです。実際料理をしていると、これはこれで結構手間がかかる作業で億劫だったりします。また、料理をしている最中は、手が濡れていたり汚れていたりしますので、音声を使って調味料を出せると手を拭く手間を省けますし、現在している調理作業を中断する必要がなくなり作業の効率性があがります。
本機の公開時、早期の商品化を期待するポジティブな声を多くいただきました。本当にありがとうございます、スマートキッチングループ関係者はますます奮い立っております。一方残念なお知らせになりますが、現時点でクックパッドが本機を製品化して販売する計画はありません。

本機は、レシピを様々な機器とつなぐスマートキッチンサービスOiCyを実証する一つのコンセプトモデルです。クックパッドの目指しているのは『毎日の料理を楽しみにする』ことであり、クックパッドの進めているスマートキッチンは『人間と機器が協調して調理』することを、スマートキッチンレベルの最高位のレベル5に掲げています。しかし、この取組はクックパッド一社だけで達成できるものではありません。料理をする作り手の皆さん、調理家電を開発販売する電機メーカー各社、キッチンを設計施工するハウスメーカー各社など、多くの関係者の協力があって初めて実現できると考えています。今回、レシピ連動調味料サーバー「OiCy Taste」の設計情報を公開するのは、スマートキッチンのムーブメントを盛り上げ、個人企業を問わず、一緒にスマートキッチンの研究開発に取り組む仲間を増やしたいという意図があります。今回公開された情報の利用に制限はありませんので、個人企業で本機のコピー機を開発するなり改良機を開発していただいてもなんの問題もありません。むしろウェルカムですので、その時は一報をいただけるとありがたいです。

免責事項:公開された情報を利用して開発製作行為をした結果生じたトラブルや損失・損害等について、当方は一切責任を問わないものとします。

OiCy Tasteのシステム構成

f:id:ymmttks:20180911143612p:plain
OiCy Tasteのシステム構成

調味料サーバー「OiCy Taste」は、本体上のボタン操作によって選択された調味料を設定量出すことができます。また、スマホのアプリ操作やスマートスピーカーの音声入力を用いて本体に触れることなく調味料を出すこともできます。このような本機のシステムは、上図の構成で実現されています。 本機は、ボタン操作やWiFiコマンドにより指定された調味料を指定された量だけ出す様になっています。本体側には非常にシンプルな機能しか持っておらず、複雑な情報処理(レシピ情報から調味料の決定や分量計算、音声操作のための音声認識など)は、スマホアプリやクラウドサービス側で実装されています。そのため、調味料サーバー「OiCy Taste」本体には高度な情報処理を行うプロセッサや高度な認識認証を行うセンサ類は不要で比較的低コストに実現可能な構成になっています。

OiCy Tasteのハード構成

f:id:ymmttks:20180911143603p:plain
OiCy Tasteのハード構成
調味料サーバー「OiCy Taste」のハード構成は上図のようになっています。 4種類の液体調味料が独立した4本のガラスボトルに封入されていて、4つの独立したポンプでボトル内を加圧し液体調味料を押出してノズルから排出します。各ボトルとポンプをつなぐ空気流路は三股になっていて電磁弁が取り付けられています。この電磁弁は、調味料を出し終わった際にボトル内の気圧を大気圧レベルに戻せるようにするために取り付けられています。この電磁弁がないと、ボトルとノズルの間のチューブに液体調味料が残ってしまい、ノズルから残った調味料が垂れてきたりチューブ内で調味料が固まり流路閉塞をおこすなどトラブルの原因となります。
排出される調味料の分量は、ロードセルを用いて重量変化をフィードバック制御し管理されています。調味料の配合は、レシピ上で少々(=小さじ1/8、1g未満)と記載されるレベルの精度が要求されます。開発初期段階では、単純にポンプの駆動時間によるオープンループ制御も検討されていましたが、要求される精度を実現することが困難で、電磁弁を用いたボトル内気圧の減圧機構が追加されました。イメージビデオでは、4つの調味料が同時に出ている映像が流れますが、これは電磁弁をつける前の状態で、現在の仕様では重量計測が配合調味料を受ける容器一箇所で行われている都合上、複数の調味料を同時に出すことができません。安価な非接触の液体流量センサーなど、いいセンサー情報をお持ちの方は是非教えていただければと思います。 なお、4つの液体調味料は、醤油、みりん、日本酒、お酢が選ばれています。これは、クックパッドに投稿されたレシピとそのアクセス頻度などのデーターベースを活用し、最もよく利用される調味料の組み合わせとして選ばれています。
以下が、本機で使用した主要な機構部品と本体メカ部品の3Dデータ(STEP形式)です。一部の機構部品については現在入手が困難になっているものもありますので参考情報になります。また、3Dデータは重量センサーのロードセル対応前かつ電磁弁改良前の仕様になっています。

主な機構部品

OiCy Tasteの3Dデータ

OiCy Tasteの電子回路構成

f:id:ymmttks:20180911143645p:plain
OiCy Tasteの電子回路構成
調味料サーバー「OiCy Taste」の電子回路構成の概要は上図のようになっています。以下、各ブロックごとに解説していきます。実際の回路図は下にリンクしています。

①マイコンボード

機体の制御は、電子工作等でおなじみのESPr® Developer(ESP2866)ボード(以降、ESPrボード)を使用しています。WiFi通信をする装置をプロトタイピングするにあたって、ESP8266や後継のESP32は低コストで導入できる最有力のマイコンボードだと思います。ただし、電源周りで苦労することが多いデバイスですので電源回路の設計、評価に注意が必要です。

②I/O拡張

スイッチやLEDなどのUI周りは、マイコンボードからSPIインターフェイス接続によりSPI I/O ExpanderのMCP23S17を用いて拡張します。マイコンの接続されるI/Oのうち入力は、『醤油』、『みりん』、『料理酒』、『お酢』を選択する4つのボタン入力、調味料を出す『出す』ボタン入力、分量切り替えと調味料を出す操作をするジョグダイヤルで3個の入力が必要で、合計8の入力ポートになります。出力は、『醤油』、『みりん』、『料理酒』、『お酢』の選択対象表示をするLEDが4個、ジョグ操作で切り替えられる調味料の量を表示するLED(小1、小2、大1、大2、大3、大4、連続)が7個、通電状態及びWiFi接続状況を表示するLEDが1個が必要となり、合計12の出力ポートになります。従って、入出力合わせて20個のI/Oが必要になるためマイコンボード単体のI/Oが不足します。そこで、SPI接続可能なMCP23S17を使ってI/Oを拡張するわけですが、MCP23S17で拡張できるI/Oポートは16個のためこれでもポートが不足します。そこで、調味料の出す量を表示するLEDは同時には一つしか点灯しませんので、デコードICの74HC138を使って3bitのI/Oから7個のLEDを制御してポートの不足を補っています。

③モータードライバ

ポンプの駆動は、I2C接続式のモータードライバIC DRV8830を用いています。ポンプのモーターを駆動する場合はモーターの回転方向を制御できる必要はないのでこのようなモータードライバICは必須ではありませんが、I/Oポートの数が限られている中で、DRV8830を使うと複数のモーター(ポンプを)I2Cバス最大9個までぶら下げて個別に回転数を制御できます。もともとは、複数の調味料を同時に出すことを想定して、各ボトルごとに独立したポンプをもたせる設計になっていました。しかし、重量センサーによるフィードバック制御で調味料を高精度に出すようになったことから同タイミングで複数のボトルから調味料を出せる必要性はなくなり、ポンプと電磁弁のコストバランス次第ではポンプを1つにして複数電磁弁による流路切り替えにしたほうが良いかもしれません。抜本的に再設計をする機会があれば、ぜひとも再検討したいところです。

④電磁弁駆動回路

電磁弁は、マイコンボードのI/OポートからFETを介して直接駆動しています。4つの電磁弁を1つのI/Oポートで駆動している回路の都合上、4つの弁は同じタイミングでしか開閉できません。このあたりは、設計データを見渡した際に「なんでこんな微妙な仕様になっているんだろう?」と気がつくところです。なんのことはない、開発の途中で必要になって追加された機能でポートが空いてなかったという話で、ハードウェアの試作開発ではよくある話です。リバースエンジニアリングで設計の時系列を読み解くのが楽しいのはこういう発見があることだと思います。

⑤アナログ回路

アナログ回路部分では、ひずみゲージを用いた重量センサーであるロードセルの出力、増幅、A/D変換しています。ロードセルは非常にデリケートなセンサーデバイスですので、信号はインスツルメンテーションアンプを用いた差動増幅で行っています。この出力を原点調整機能付きのヴォルテージフォロアを介して、I2C出力の12bit ADCにてアナログデーターをデジタル化します。この回路ブロックは、非常にノイズに対してセンシティブなため、基板回路設計において十分なノイズ対策を擦る必要があります。回路図を見るとわかりますが、当初はこのアナログ回路の電源は①のマイコンボードから供給される3.3Vのデジタル電源と共用になっていましたが、WiFi通信をするとこのESP2866のマイコンボードは電源電圧が暴れるためアナログ回路の電源が振られるという最悪の状態になってしまいます。そこで、アナログ回路は電源に自前のLDOを抱える仕様に変更されました。

主な電気部品

OiCy Tasteの回路図(改修指示含む)

OiCy Tasteのファームウェア

本機のファームウェアは、Arudino IDEで開発されています。組み込み系のプロトタイピングツールとしてすっかり定着したArudino IDEですのでESP8266向けの開発環境構築に関する説明は他の詳細に解説しているサイトを参照してください。一般的なArudinoのコードのように、setup()関数で周辺デバイスの初期化処理と内部変数の初期化を、反復的に呼び出されるloop()でメインの処理を行っています。メインループでは、HTTPリスクエスト(WiFiコマンド)の処理と物理UIボタン操作から、実行するべき操作を抽出し、動作に反映させるという処理を行います。このメインループとは独立に、モーターや電磁弁、重量センサーなどリアルタイムに処理する必要がある部分がタイマーtimer0_ISR()により10ms周期(100Hz)で制御されます。 また、使用しているライブラリのバージョンアップによって、以前動いていたプロジェクトファイルを再ビルドするとビルドは通ってファームウェア更新はできるけれども実機で正しく動かなくなるという現象が起こります。このあたりはOSSを使っている場合に避けられない問題ですが、スマートな管理解決方法を教えていただきたいところです。 以下が、本機のソースコードになります。元々公開を前提としていないプロトタイプ検証用のソースコードですので、アドホックな実装な部分が多々あるところはご理解とご容赦をお願いします。

OiCy Tasteのファームウェアソースコード

公開設計情報のGitHubリポジトリ

https://github.com/cookpad/oicy-taste

おわりに

本エントリでは、コンセプトモデルレシピ連動調味料サーバー OiCy Tasteについて設計情報の解説をさせていただきました。
8月9日のプレスリリースで、レシピを様々な機器とつなぐスマートキッチンサービスOiCyのパートナー企業10社を発表しましたが、クックパッドでは「OiCy」と連携した製品やサービスの実用化をパートナー企業様と協力してすすめていきます。今後も、「毎日の料理を楽しくする」コンセプトモデルを開発公開していきますのでご期待下さい。

最後に、クックパッドの研究開発部では、「毎日の料理を楽しみにする」ためのスマートキッチンデバイスを開発提案する仲間を募集しています。 ご興味がある方は採用ページを是非ご覧ください。ご連絡をお待ちしております。

中途採用:プロトタイプエンジニア(ハードウェア)

/* */ @import "/css/theme/report/report.css"; /* */ /* */ body{ background-image: url('https://cdn-ak.f.st-hatena.com/images/fotolife/c/cookpadtech/20140527/20140527163350.png'); background-repeat: repeat-x; background-color:transparent; background-attachment: scroll; background-position: left top;} /* */ body{ border-top: 3px solid orange; color: #3c3c3c; font-family: 'Helvetica Neue', Helvetica, 'ヒラギノ角ゴ Pro W3', 'Hiragino Kaku Gothic Pro', Meiryo, Osaka, 'MS Pゴシック', sans-serif; line-height: 1.8; font-size: 16px; } a { text-decoration: underline; color: #693e1c; } a:hover { color: #80400e; text-decoration: underline; } .entry-title a{ color: rgb(176, 108, 28); cursor: auto; display: inline; font-family: 'Helvetica Neue', Helvetica, 'ヒラギノ角ゴ Pro W3', 'Hiragino Kaku Gothic Pro', Meiryo, Osaka, 'MS Pゴシック', sans-serif; font-size: 30px; font-weight: bold; height: auto; line-height: 40.5px; text-decoration: underline solid rgb(176, 108, 28); width: auto; line-height: 1.35; } .date a { color: #9b8b6c; font-size: 14px; text-decoration: none; font-weight: normal; } .urllist-title-link { font-size: 14px; } /* Recent Entries */ .recent-entries a{ color: #693e1c; } .recent-entries a:visited { color: #4d2200; text-decoration: none; } .hatena-module-recent-entries li { padding-bottom: 8px; border-bottom-width: 0px; } /*Widget*/ .hatena-module-body li { list-style-type: circle; } .hatena-module-body a{ text-decoration: none; } .hatena-module-body a:hover{ text-decoration: underline; } /* Widget name */ .hatena-module-title, .hatena-module-title a{ color: #b06c1c; margin-top: 20px; margin-bottom: 7px; } /* work frame*/ #container { width: 970px; text-align: center; margin: 0 auto; background: transparent; padding: 0 30px; } #wrapper { float: left; overflow: hidden; width: 660px; } #box2 { width: 240px; float: right; font-size: 14px; word-wrap: break-word; } /*#blog-title-inner{*/ /*margin-top: 3px;*/ /*height: 125px;*/ /*background-position: left 0px;*/ /*}*/ /*.header-image-only #blog-title-inner {*/ /*background-repeat: no-repeat;*/ /*position: relative;*/ /*height: 200px;*/ /*display: none;*/ /*}*/ /*#blog-title {*/ /*margin-top: 3px;*/ /*height: 125px;*/ /*background-image: url('https://cdn-ak.f.st-hatena.com/images/fotolife/c/cookpadtech/20140527/20140527172848.png');*/ /*background-repeat: no-repeat;*/ /*background-position: left 0px;*/ /*}*/