背景
- 猫を2匹飼っている
- 1匹は軽度の脂肪肝の疑い
- 肝臓の負荷を下げるため、毎日食事量を一定に保つ必要がある
- キャットフードは1日3回(朝、昼、夜)
- 1匹あたり目安は45g/日
問題
誰がどれだけ食べたか分からない
- 2匹ともムラ食い(食べたいときに食べたい量だけ食べる)
- 給餌皿は分けているが、自分の皿という認識はない(食べたい皿から食べる)
とても大変
アプローチ
猫の餌が入った皿の重量を、自動で定期的に記録したい
(どちらが食べた問題は残るが、記録の手間は減りそう)
まずは正攻法として、感圧センサによる計測を試みる
以下の記事を参考に作る
圧力センサーを使って、デスクワークでどれだけ寿命が縮んでるか測ってみた
材料
- 感圧センサ(FSR406) ... 670円
- M5Stack Core2 IoT開発キット ... 6,589円
- マイクロSDカード 16GB ... 620円
- ブレッドボード ... (自宅にあった)
- ジャンパーワイヤ ... (自宅にあった)
- 10kΩ抵抗 ... (自宅にあった)
- GROVE 4ピンケーブル20cm 5本セット ... 407円
- GROVE-ユニバーサル4ピンコネクタ 10個入り ... 220円
- 送料 ... 800円
秋月やAmazonで購入
不要なものも含まれているかも?
実装
ユニバーサル4ピンコネクタのソケットがブレッドボードに刺さらない
ジャンパーワイヤを無理やり繋ぐ
(GROVE4ピン-ジャンパーワイヤ オス のケーブルがあれば良かった)
#include <Arduino.h>
#include <time.h>
#include <M5Stack.h>
#define ANALOG_PIN 36
int val = 0;
void setup() {
M5.begin();
Serial.begin(115200); // シリアル通信速度
Serial.println("setup");
M5.Lcd.fillScreen(TFT_LIGHTGREY);
}
void loop() {
val = analogRead(ANALOG_PIN);
M5.update();
M5.Lcd.setTextFont(7);
M5.Lcd.setTextSize(2);
M5.Lcd.setTextColor(TFT_BLACK, TFT_LIGHTGREY);
M5.Lcd.setCursor(10, 40);
M5.Lcd.print(val);
Serial.print("value:"); Serial.println(val);
Serial.println();
delay(1000);
}
課題
実際に動かすと、以下の理由で重量が正確に計測できなかった
-
センサの淵の部分を巻き込んで皿を置くことになり意図した抵抗値の変化が起きない
→ 感圧センサが小さすぎる -
騒音対策などで床にクッションシートを引いているため、センサの歪みが小さくなる
→ 固い板などを敷く -
静止状態でも10g程度で値がぶれる
→ ノイズや接触抵抗?
1,2 は対策できるが、3の解決が難しそう
今後
別のアプローチを試みる
キッチンスケールの値を読み取る
デジタルの場合
- ディスプレイに繋がる線を横取りすれば計測済みの値が使える?
- 計測しっぱなしができるか?(5分程度で電源切れる?)
- はんだ付けが必要(猫がいるので危ない?)
アナログの場合
- 目盛りを画像処理で読み取る?
- 夜など部屋が暗いときにも精度は確保できる?
先人の知恵を拝借する
猫IoTLT MZ工房さんの投稿から
画像処理で、餌の面積から食べた量を計測する
まとめ
一筋縄ではいかない。。。
進展があれば記事を更新します
2023/3/14追記 圧力センサーではなくロードセルで試してみた