こんにちは.研究開発部の鈴本 (@_meltingrabbit) です.
クックパッドの研究開発部では,ユーザーの課題を解決する手段をスマホの中からスマホの外(実世界)に拡張しようとチャレンジしています. 特に,料理を「作る」時の課題を解決するため,様々なデバイスを開発し,調理に関する知識と組み合わせることで,新たな調理支援の方策を切り開こうとしています.
その中の一例として,キッチンのワークトップやコンロでの微細な重量変化が取得できるデバイスをフルスクラッチで構築しました. 本稿ではその取り組みについてご紹介します.
調理中/調理後に知りたい情報?
調理において,重要な情報とは何でしょうか?
- 分量(重量,体積)
- 火加減(熱量,温度)
- 加熱時間(時間)
- 味付けの濃さ(塩分などの濃度,調味料などの重さ)
- 焼き色(色,温度)
... などなど,様々なことに目を配りながら,日々調理していると思います.
今回は重量に着目してみます. 調理中の重量変化が取得できると,どういった調理支援が考えられるでしょうか?
いくつか考えてみます.
まな板上にあるカット中の肉や野菜の重量がわかれば,何人前の料理を作っているかがわかります. それによって,その分量に合わせて微修正されたレシピを提示する,といったサポートが考えられます.
また,鍋やフライパンなどに入れた調味料の分量が自動で計量されていたら,今回の味付けが記録できるかもしれません. 食べた後に,「今回はちょっと味が濃かったなぁ」など感じたときに,その時の調理を振り返られるかもしれません.
さらに,例えば唐揚げは,揚げているときに鶏肉の重量が徐々に減少していくことが知られています. この重量変化をつぶさに捉えることができれば,「今がベストな揚げ終わりのタイミングだ!」などと教えてあげることができるかもしれません.
以上のようなモチベーションから,キッチンワークトップの重量を高精度に取得してみよう,と思い立ちました.
調理支援のために必要な重量センサとは
調理支援のための重量センサについて考えます.
上で記したようなことを実現しようとするのであれば,少なくとも小さじ1杯,つまり5 g程度の重量測定精度が不可欠です. そして,ワークトップにのる可能性がある物(コンロや鍋や食材,加えて人間の押し込み荷重など)を考えていくと,最大荷重は最低でも50 kg程度が求められます.
とすると,,,最大荷重は50 kgと仮定して,ダイナミックレンジが1/10,000!?の重量センサを欲している,というわけです. そんな精度でかつキッチンに設置できるものなど,そう簡単には手に入りません.
残された道は,フルスクラッチでの自作. 自作するために,重量計測に対する要求仕様を以下のように策定しました.
- 測定精度は5 g以下で,最小測定分解能はその1/10以上
- ダイナミックレンジは可能な限り広く.最大許容荷重は50 kgを超えることを目標
- サンプリング周波数は高ければ高いほどよい.1,000 Hz程度は超えたい
- 精度要求が厳しければ,リニアリティとオフセットドラフト,温度特性は妥協する.一方でヒステリシス特性やリピータビリティは重視する
また,既存のシステムキッチンを改造して重量センサを埋め込むのはハードルが高いため,すでにあるキッチンワークトップの上に設置し,その上で調理することにしました. そうすると,次のような構造的な要求が発生します.
- 既存のキッチンワークトップに設置し,その上で調理するため,可能な限り背の低い形状にする
- IHコンロとまな板とその他をその上に置くことを想定するので,天板の大きさは1,000 x 600 mm程度にする
得られたデータはリアルタイムに解析し,調理支援という形で調理する人にフィードバックできる必要があります. 高精度・高頻度に計測されたデータを後から抽出でき,解析できる,といったシステムでは,想定している調理支援には使えません. そこで,さらに次のようなシステム要求が追加されました.
- 取得データはリアルタイムで社内システムで利用できる(例えばAWS IoT Coreに送信できる,など)
これらの要求を満たす重量センサをフルスクラッチしていきます.
実装
最初に実装結果を記します.
下図のようなものが完成しました.
先述したとおり,システムキッチン自体を改造するのは難しいため,既存のキッチンのワークトップに乗せて使用します. IHコンロ,まな板,はかりが乗っているアルミ天板の上の重量が高精度かつ高頻度に測定できます.
達成されたスペックは,次のとおりです.
- 測定精度は,設計値は4 gで,実際に使ってみると2 g程度はありそう
- 許容最大荷重の実効値が54 kgで,絶対最大定格の実効値が84 kg
- 最高計測周波数が100 kHz(実質的に使えるのはせいぜい数kHz程度か?)
構造の概要は下図に示すとおりで,上から,超低頭ネジ,アルミ天板,カーボンロッド,アルミ治具,荷重センサ(ロードセル),ネジ,アルミ治具,ネジ,アルミフレーム,です. 天板の四隅を荷重センサで支持,計量する構造となっています. (したがって,今後のソフトウェアの改良で重量分布も取得可能になる予定)
この重量センサを開発するのには,いくつかのハードルがありました.
まずは,高精度な荷重センサの選定です.いろいろと検討した結果,工場などで用いられる産業用のロードセルを用いていますが,もともとのセンサの想定使用方法通りには使われていません.
また,ダイナミックレンジを大きくするためには,天板をできるだけ軽く作る必要がありました. なぜなら,ロードセルの許容最大荷重が例えば60 kgだとしても,天板の重さが20 kgもあると,実質的に計量可能な最大荷重は40 kgになってしまうからです. 一方で,軽く作ることに集中し,天板の剛性が十分でないと,荷重によって天板がたわみ,余計な力がロードセルに加わってしまい,正確な重量計測ができなくなります.
このサイズですと,板厚3 mm程度のアルミ板ですらおよそ5 kgの重量にもなりますが,両端単純支持では中央に20 kg程度の負荷をかけただけで50 mm程度はたわんでしまうのです. 軽い金属のアルミですら,こんなもんです. この軽量と高剛性という相反する要求を満たすために,最適な天板の厚みを計算しました. そして,アルミ板のみでは剛性が確保できないので,カーボンロッドで補強するなどしています.
カーボンロッドとアルミ天板との接着には,アクリル樹脂系の2液式接着剤を使いましたが,これも大変でした. 2液式接着剤とは,接着前に2種類の溶剤を自分で混ぜて,それが固化する前に接着面に塗りつけ接着するというものです. 今回用いた接着剤は,混合から固化までの時間が90秒だった(カーボンとアルミが接着可能で入手性の良いものがこれしかなかった)ので,小さなパーツの接着ならまだしも,1 m弱の大きなロッドに対して,
- そこそこ大量の溶剤を均一に混ぜ合わせる
- それをカーボンロッドとアルミ板に均一に塗る(均一でないとそこで応力集中してしまう)
- 位置を合わせて仮固定する
を90秒以内に終わらせるというタイムアタックをしなくてはいけないのがきつかったです.
さらには,ロードセルの計測値をリアルタイムに収集し,処理するのためのソフトウェアも重要です.
今回用いたロードセルは,工場などに組み込むことを前提として,RS232Cで計測信号を出力するインターフェイスはメーカーから提供を受けることが可能でした. しかし,RS232Cなので高頻度計測にはボーレートの問題もあるし,4つのセルからの信号を時刻同期しつつ高速に収集するミドルウェアを書くのはめんどくさいなぁ,と思ってしまいました.
最終的には,ロードセルの実体はひずみゲージのブリッジ回路なので,それを駆動して出力をAD変換できるロガーを別途購入し,そこからリアルタイムにデータを取得し,適切な信号処理を施し, 社内の調理支援システムへリアルタイムへデータを送信する,というソフトウェアを自作しました.
いざ,計測
要求仕様の出どころであった小さじ1杯を計測してみました.ワークトップ上に小皿を置き,そこに小さじ1杯を投入していったときの計測結果が下の2図です.
信号処理のフィルタのチューニングを変えていて,1枚目は高頻度な成分を抽出できるような設定になっており, 2枚目はかなり強めのLPFを挟むことで質量の増分を分解しやすい設定になっています.
そのため,1枚目では,水を小皿に垂らしたときの振動がよく計測されている一方で, 2枚目ではおよそ1,5,15秒のところでおおよそ大さじ1杯の水が投入されたということが明瞭に分かる結果となっています.
同じ操作を異なる信号処理で観察すると,違った特徴が見えるのは面白いですね.
次の図は,唐揚げを揚げたときの結果です. 3つの唐揚げを鍋に投入し,それをおよそ2分半揚げ,ひとつずつ取り出した履歴です.
0〜0.5分では,ひとつひとつの唐揚げの重さが分解できています. また,0.4〜2.7分頃では,揚げている最中に唐揚げ内部の水分が蒸発して軽くなっている様が観察できます.
まとめと今後
このように,これからの研究開発のための1センシングデバイスとしての重量センサが,無事に目指していたスペックを満たして実装することができました. 実は,クックパッドではソフトウェア開発のみならず,こういったハードウェアの開発も行っているのです. 今後はこれらを使い,調理中の様々なイベントを収録し,そして社内の様々な知見や技術(ハードもソフトも)を総動員して,「毎日の料理が楽しくなる」ような調理支援の開発を目指していきます!