最近激しく仕事が忙しくて、ブログを書くどころか読む気力ゼロの毎日…。
ご覧いただいている皆様、中々見にいけなくてすみません。
それでも、ちょっとだけ私のやっている仕事(というか趣味か?)について、紹介したいと思います。
ランとは直接関係ないので、猫やIoTにご興味のない方はスルーしてください。
私の本職は、ITエンジニア、特にデータサイエンティストの仕事を好んでしています。
(最近は忙しいわりに、つまらん仕事ばっかりですが…)
過去のプロダクトでは、「ランニングウォッチ」の開発の仕事もしたことがあります!
↓
これがランを始めるきっかけでした。
既に生産終了してしまった国産メーカーです…使ってくださっているランナーの皆さんありがとうございます。
当時は、
・GPSモジュールの低消費電力化、位置精度向上
・トンネル内部でもスピードを推定するAI技術開発
などをしていました。
さて、今回は仕事の本業とは少しだけ離れた趣味の世界でのお話となります。
ずばり、「猫の体重管理」
猫の体重を測るのは、可能ではあるけど、結構面倒です。
・体重計に自ら乗ってから、猫を抱えて再び乗って差をみる
・専用の体重計を準備する
などでしょうか?
専用の体重計は、動物病院などでないと現実的ではない。
結局人間用の体重計を使うことになることが多いだろうけど、面倒なので結局記録を取り続けるのは困難。
そこで目を付けたのが、トイレ。
トイレなら、必ず一定時間じっとしているし、その重量を測れたらよいのでは?
うちの猫トイレは、家具のようなタイプとなっています。
(関西いるときに、ホームセンタームサシで購入したものです、すごいいいですね)
扉を開けると、中にトイレが設置できるので、そこにプラスチックのトレイを使っています。
この重量を測ればよいんじゃないか?
ということで、計測できるように色々買ってきて組んでみました。
重量計測するには、ロードセル(ひずみゲージ)が有用のようでした。
トイレの見守りという例を探すと、カメラも候補にあがったのですが、うちのトイレは真っ暗なので意味なしのため今回はスキップです。
部品 | 個数 | 値段 |
---|---|---|
ラズパイ3A+ | 1個 | 約5000円ぐらい |
ブレッドボード | 1個 | 220円 |
ジャンパー線 | 10~本程度 | 100円ぐらい? |
LED | 1個 | 10円 |
カーボン抵抗1kΩ | 1個 | 1円 |
ロードセル10㎏タイプ | 1個 | 540円 |
HX711(ロードセルのA/D変換) | 1個 | 350円 |
タクトスイッチ | 1個 | 10円 |
ねじ | M4x2,M5x2 | 100円くらい |
穴あきボード | 2枚 | 500円くらい(カット代金込) |
USB to miniUSB | 1個 | 不明(在庫流用) |
AC to USB | 1個 | 不明(在庫流用) |
合計金額は、6831円くらい
ラズパイは、リッチなものを使ってしまっているのでオーバースペックでコスト増となっています。
実際にはマイコンタイプの、RaspberryPi Pico WHでも十分動作可能と思われるので、そうすると以下で1380円
多分、3500円も出せば同じことが出来そうな予感…。
はんだ付けの自信があるなら、RaspberryPi Pico Wで、1000円以下で手に入りそうです。
ただし、WiFi付モデルでないと、この記事の内容は実現できませんのでご注意ください。
■ハードウェア
これらをそろえて、まずはハードウェアを作ります。
ボードをロードセル(ひずみゲージ)に付けて、配線をしていきます。
ハードは専門外のため、苦労しましたが、なんとか完了。
以下の記事を参考にしてみました。
私が買ったロードセルは、猫の体重+トイレ重量なので、10㎏までのものにしておきました。
お値段は540円、20㎏でも同じようです。
A/D変換のHX711は、「はんだ付け」が必要でしたので、猫のために泣く泣くやりました…難しい!
■ファームウェア
ロードセルはアナログ信号しか出ていないので、ラズパイで認識するためにA/D変換が必要で、HX711というのを使うのが一般的のようです。
出力は独自フォーマットのようで、以下のタイミングチャートで定義されています。
ラズパイ側では、GPIOを2個つかって、DOUTとPD_SCKを取ればよいようです。
2pinで24bitの表現ですね。
これを解析するのは大変なのですが、素晴らしいことにGITHUBに解析用のモジュールがアップされていました。
ラズパイだからPythonコードが使えるので、上記を使うことで簡単に重量に相当する値が取得できます。
なお、ラズパイには「RaspberryPI OS」をインストールしてあります。
プログラムの自動起動は、[ /etc/rc.local ]を使っています。
個人的には、久しぶりにLinux触りましたが、いつまでたっても、viは慣れないです。
真のエンジニアへの道のりは遠し…。
■ソフトウェア
重量がわかったところで、どうやって記録するか?
これを解決しないと、ただのブラックボックスで中で何をやっているかわかりません。
そこで、トイレをして、体重計測が出来たら、ラインに通知をすることにしました。
流れは、
1.LINEグループを作る
2.LINE NOTIFYで、トークンを取得する
3.取得したトークンを使って、WebAPIをCallする
とシンプルです。
Pythonを使って、かなり簡単に実装できます。
■動作確認
以上のことをやっていき、ようやく試作機が完成して動作テスト中までこぎつけました。
最初にも記載しましたが、以下が全体像です。
以下、通知の結果です。かなりうまくいっています!
(開発中のため、テスト用のメッセージが入っています…m(_ _)m)
うちには、2匹の猫がいて、1つのトイレをシェアしています。
そのため、AI技術を使って、2匹の区別もつくように設計しています。
この辺りはデータサイエンティストとして一番得意分野ですね。
トイレ量は、乗る前と乗った後の差の重量ですが、意味があるか!?うーん。
トイレしたときに通知が来ること自体は、すぐ掃除できるし、結構嬉しいです。
■出演
最後に実験に付き合ってくれた猫2匹を紹介。
2匹とも保護猫です。
イネちゃん
13歳のおばあちゃん、目が悪いけど元気です。
体重は3.6㎏ぐらいか
ティモちゃん
7歳の男の子、事故で右前足がない(3本足)ですが元気です。
漫画「夜廻り猫」にも登場しています。
体重は2.6㎏ぐらいか(足が1本ないけど、それでも少ない…増やしたい)
暫くデータを取りながら、様子を見ていきたいと思います。
こんな仕組みほしい人いるんだろうか~?
以上、本業の合間の、癒しの趣味の紹介でした。