ASio が 2021年05月16日04時35分14秒 に編集
初版
タイトルの変更
スマホDEミルク
タグの変更
obniz
HX711
スマートホーム
メイン画像の変更
本文の変更
概要 ==== スマホから遠隔で赤ちゃんの粉ミルクが入った哺乳瓶にお湯を給湯するシステム ミルクをあげる前と後の重さを比較して飲んだ量を出力する <メリット> ロードセルで重さをフィードバックしてるので一定量のお湯を注ぐことが出来る おむつ替え中などの手が離せない場面でもミルクを作ることが出来る ミルクを飲んだ量を確認することが出来る 動画 ==== [](https://youtu.be/8e4cbD7Z61o) 部品 ==== - obniz Board 1Y - 5kgロードセル & HX711 - MICRO SERVO 9G - モバイルバッテリー - スマートフォン システム構成 ==== ![キャプションを入力できます](https://camo.elchika.com/936b9ae7fbc8f7637ffa83d0675e56faef11e91a/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f34386339366331382d626539362d343264392d383866662d6366343863343034643736322f62623665326535662d653932382d343431312d623930392d326538656665353334306332/) ![キャプションを入力できます](https://camo.elchika.com/5e7259a51387f827dd0768add12207b0c4161d38/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f34386339366331382d626539362d343264392d383866662d6366343863343034643736322f32386132616662352d643666612d346335302d383939392d363738633164353262333536/) ソースコード ==== ```arduino:スマホDEミルク <script> $("#bploading").text("RUNNING..."); (async function(){ var obniz,check,x=0,y=0; const weight = 43; //哺乳瓶の重さ obniz = new Obniz('OBNIZ_ID_HERE'); await obniz.connectWait(); obniz.display.print('スマホDEミルク') button = new ObnizUI.Button('給湯'); button2 = new ObnizUI.Button('計量'); var sensor = obniz.wired("hx711" , {gnd:0, dout:1, sck:2, vcc:3} ); var servomotor = obniz.wired("ServoMotor",{"signal":9, "vcc":10, "gnd":11}); sensor.setOffset(150500); //オフセットの設定//153200 sensor.setScale(434.5); //スケールの設定 servomotor.angle(60); //サーボモータ初期位置 while (true) { await ObnizUI.Util.wait(0); if (button.isClicked()) { await ObnizUI.Util.wait(0); obniz.display.print('START') var value1 = await sensor.getValueWait(1) - weight; //1 times average console.log(value1.toFixed() + 'ml'); check = value1.toFixed(); if ((check < -5)) { obniz.display.print('No...') } else { await ObnizUI.Util.wait(100); servomotor.angle(30); //サーボモータロック解除ボタン押す await ObnizUI.Util.wait(1000); obniz.display.print('---給湯中---') while ((x < 200*0.78 )) { servomotor.angle(95); //サーボモータ給湯ボタン押す var value2 = await sensor.getValueWait(1) - weight; //1 times average console.log(value2.toFixed() + 'ml'); x = value2.toFixed(); } servomotor.angle(60); //サーボモータ初期位置 await ObnizUI.Util.wait(1000); while ((x <= 200 )) { servomotor.angle(95); //サーボモータ給湯ボタン押す await ObnizUI.Util.wait(350); servomotor.angle(60); //サーボモータ初期位置 await ObnizUI.Util.wait(1000); var value2 = await sensor.getValueWait(1) - weight; //1 times average console.log(value2.toFixed() + 'ml'); x = value2.toFixed(); } var value3 = await sensor.getValueWait(1) - weight; //1 times average console.log('END=' + value3.toFixed() + 'ml') obniz.display.print('END') y = value3.toFixed(); } }else if (button2.isClicked()) { await ObnizUI.Util.wait(0); var value4 = await sensor.getValueWait(1) - weight; //1 times average obniz.display.clear(); console.log(y - value4.toFixed() + 'ml 飲んだよ'); obniz.display.print('スマホDEミルク') obniz.display.print(y - value4.toFixed() + 'ml 飲んだよ') x = 0 ; y = 0 ; }else { } } })(); </script> ``` 工夫した点 ==== - 哺乳瓶が無い状態で給湯すると水浸しになるので、重さを確認して哺乳瓶があるときだけお湯を注ぐプログラムを組んだ。 - 目標値を実際のお湯を注ぐ量丁度に設定して目標値になるまでループを回すと湯量がオーバーした為、 目標値を78%として給湯して78%になると一旦給湯を停止させ最終目標値までは小刻みにモータを動かし給湯する仕組みにした。 検証 ==== 200mlのミルクに対して目標値をそのまま200mlにすると応答の遅延により水量がオーバーしました。 そこで、80%の量に設定して繰り返し(n=10)の検証を行いました。 しかし、ばらつきが大きかった為、78%の設定値としてその後サーボモータを小刻みに制御し給湯することでばらつきを抑えました。 ![キャプションを入力できます](https://camo.elchika.com/7aa41aa3b04289e5328b2e5140680b698c74fc5e/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f34386339366331382d626539362d343264392d383866662d6366343863343034643736322f34636535393635642d643866312d343534302d616539642d646165356631646633613462/) ![キャプションを入力できます](https://camo.elchika.com/29e75072d3357d82aaa844854956b48fc6b035c4/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f34386339366331382d626539362d343264392d383866662d6366343863343034643736322f66366536333264312d396334392d346230322d613633322d383465333133393461383466/) 今後の目標 ==== 1. 飲んだ量をLINEで通知させる NODE.jsを使って単体でのメッセージ送信の確認は行ったが、 本コードとの合わせ込み方が分からなかったので引き続き勉強して実装する。 LINEで通知することでミルクを飲んだ時間と量の履歴が残るので育児記録に 役立てることが出来る。 2. スマホで数値入力に対応する 今回は固定の水量で給湯を行ったがスマホから数値を入力したり 動画のおまけでも紹介したように他の飲み物のボタンもあらかじめ実装する。 3. 前後工程も自動化する 粉ミルクの計量と供給や哺乳瓶を回して粉ミルクを溶かす自動機も製作する。 まとめ obnizを使って育児のサポートとなる自動機をどんどん作っていきます!