dangomushi115 が 2022年03月26日21時10分40秒 に編集
コメント無し
本文の変更
作ったもの ==== ミルクが人肌(40℃)まで冷めたかどうかを判定し、通知するシステム。   背景 ==== 最近、子供が生まれて、ときどきミルクを飲ませるようになりました。 赤ちゃんに飲ませるミルクは、一般的に以下のような手順で作る必要があるといわれています。 1. 70℃以上のお湯を用意する 1. 哺乳瓶に粉ミルクを入れる 1. お湯を哺乳瓶に注ぎ、粉ミルクを溶かす 1. 粉ミルクの溶けたお湯(=ミルク)を人肌程度(※)まで冷ます ※:ここでいう「人肌程度」は一般的に、40℃といわれています。 赤ちゃんに衛生的に問題ないミルクを飲ませるためお湯を加熱する必要がありますが、**十分に冷まさないとやけどさせてしまう**危険性があります。 一方で、赤ちゃんの両親がミルクを作るときは大抵、おなかがすいて赤ちゃんは泣いています。赤ちゃんの両親は**一刻も早くミルクを飲ませたい**と焦っているものの、「万が一、やけどさせたら・・・」などと思い、人肌以上に冷めてから飲ませがちです。 そこで、「飲み頃通知システム」により、ミルクが十分冷めたことを定量的に判断できるようにすることで、赤ちゃんに安心して飲み頃のミルクを飲ませることができるようになるため、この「飲み頃通知システム」を作ることにしました。 材料 ==== | 品名|参考URL|備考| |:-:|:---|:---| | M5Stack Basic | [https://akizukidenshi.com/catalog/g/gM-16008/](https://akizukidenshi.com/catalog/g/gM-16008/) | Grayなどでも可 | | サーマルカメラPIM365 | [https://shop.pimoroni.com/products/mlx90640-thermal-camera-breakout?variant=12536948654163](https://shop.pimoroni.com/products/mlx90640-thermal-camera-breakout?variant=12536948654163) | 新型コロナウイルスの流行以来、どこにも在庫がない。M5StackのThermal Unitでも可。 | その他、下図に示すようなケース(治具?)を3Dプリンタで作成した。  作り方(ハード) ==== 上述した部品は、下図のように取り付けます。   なお、サーマルカメラPIM365とM5Stackは下表の通りのピンを接続します。なお、M5StackのThermal UnitならばGroveケーブルで接続すればOKです(多分)。 | PIM365 | M5Stack | |:---:|:---| | 3-6V|3v3| | SDA|21| | SCL|22| | 🚫|つながない| | GND|G|  作り方(ソフト) ==== 今回は、あえてUIFlowを使ってみることにしました。 ①まず最初に、M5Stack BasicにUIFlowを使用するためのファームウェアのようなものを書き込みます。 →M5StackのUIFlowのページから、ファームウェア書き込み用のツール「M5Burner」をダウンロードし、公式の手順に従ってファームウェアを書き込みます。 **※:今回、Thermal Unit用のブロックを活用しますが、最新のファームウェアではThermal Unitが非対応になっているようです。よって今回はちょっと古いファームウェア「v1.4.5.1-en」を書き込みます。**  ②UIFlow公式の手順に従って、UIFlowブラウザ版のページから開発を始めます ③下図を参考に、画面右上の「DEMO」ボタンを開き、「THERMAL」を選択します。 →これにより、Thermal Unit用のブロックを使用できるようになります。  ④画面右上にある「MANAGER」ボタンを選択し、Device File Manager->Images->Add Imageから、画像を選択してM5Stack Basicに画像をアップロードします。  なお、アップロードする画像は下記に示すとおり、飲み頃を示す「OK.JPG」と、まだ熱い状態を示す「NG.JPG」の2種類です。これらの画像は90×240ピクセルです。   ⑤下図を参考に、ブロックや変数を設定します。図中に示した「40」の部分を、例えば「60」等に変えれば、猫舌の人が熱い飲み物の飲み頃を通知するようなシステムにすることができます。 ※:UIFlowだと、サーマルカメラモジュールからのデータの読み込み・画面への表示が、1ブロック(一番上の紫のブロック)でできてしまうところが便利ですね。  なお、上記のブロックをMicroPythonで記述した場合、以下のようになります。 ``` from m5stack import * from m5ui import * from uiflow import * import unit setScreenColor(0x222222) thermal0 = unit.get(unit.MLX90640, unit.PORTA) label0 = M5TextBox(246, 6, "Max:", lcd.FONT_Default, 0xFFFFFF, rotate=0) label2 = M5TextBox(246, 32, "Min:", lcd.FONT_Default, 0xFFFFFF, rotate=0) image0 = M5Img(0, 0, "res/default.jpg", True) while True: thermal0.update(x=90, y=60, show=True, showCenter=True) label0.setText(str((str('Max:') + str(str(int((thermal0.getMaxTmp()))))))) label2.setText(str((str('Min:') + str(str(int((thermal0.getMinTmp()))))))) if (thermal0.getMaxTmp()) <= 40: image0.changeImg("res/OK.JPG") else: image0.changeImg("res/NG.JPG") wait_ms(2) ``` 終わりに ==== このシステムを使用することで、赤ちゃんに安心してミルクを飲ませられるようになりました。
もっとも、赤ちゃんと暮らすのに慣れてきた結果、このシステムがなくても落ち着いてミルクを飲ませられるようになりましたが・・・
もっとも、慣れてくればこのシステムがなくても落ち着いてミルクを飲ませられるように・・・