The problem
Cats are experts at hiding illness. By the time something looks obviously wrong it is often already advanced. But the early warning is usually there in the routine: a cat that starts drinking more, eating less, or grooming less is telling you something days before it becomes visible.
Meowtion is a battery-powered collar that watches those habits continuously. It classifies behaviour on the collar itself and surfaces the trend on a dashboard, so you notice the change rather than the crisis.
How it works
Cat | Collar nRF52840 Sense - Zephyr - on-device AI - battery | BLE Station ESP32-S3 - ESP-IDF - WiFi gateway - mains powered | WiFi / HTTPS Firebase Auth - Realtime Database - Storage - Functions | Dashboard Streamlit + Firebase web
The collar is Bluetooth-only to keep the power budget survivable, so an always-on station plugged in near the food bowl is its gateway to the cloud. It is multi-user: each owner registers their own cats and stations and sees only their own data.
The cascade, and what it has actually done
The design premise was that eating and drinking should be hard to separate on an accelerometer — head down, rhythmic, similar duration — but easy to separate by sound. Audio is expensive and the collar has a 100 mAh cell, so running it continuously was never an option.
Meowtion runs a confidence-gated cascade instead. An int8 IMU model classifies every 5 s window, and only when its softmax confidence falls below 0.75 does it wake a short audio model to confirm. Most of the time the cheap model is enough; the expensive one fires only when the answer is genuinely uncertain.
Here is how that has performed, on a held-out split of a first single-cat dataset (155 labelled clips, 116/39 train/test):
- Overall accuracy — 92.3% (36 of 39)
- Eat — F1 0.94
- Resting — F1 1.00
- Drink — F1 0.80 (recall 0.67, from 11 training clips)
- Moving — F1 0.00 (10 training clips; both test clips read as Eat)
The audio stage fired on 6 of the 39 clips — the 15% below threshold — and changed none of them. The IMU model was already confident and correct on the confusable cases this recording contained, so the cascade's accuracy equals the IMU stage's. The mechanism is built and verified; the accuracy gain I designed it for is not yet demonstrated, and won't be until there is a larger, more behaviourally ambiguous dataset than one cat and eleven drink clips.
What the gate buys unconditionally is memory. The two models share a single 48 KiB tensor arena — legal only because the gate guarantees they are never resident at the same time — and their weights execute in place from the flash model partition rather than being copied into RAM. On a part with 256 KiB total, sitting at 226 KiB static with an encrypted BLE link, that is the difference between two models and one.
Audio is classified on-device and discarded immediately — never recorded, never transmitted. That was a hard requirement, not a feature: a microphone on a pet in someone's home should not be sending audio anywhere.
It is not fixed-function
The pipeline has no hardcoded class list. You define the behaviours you want to recognise in the dashboard, label the captured clips, and the model trains on whatever set you chose. Training runs server-side in a Cloud Function and the new model is delivered to the collar over the air. Scratching, litter-tray use, play — if you can label it, it can learn it.
Build
There is no custom PCB. Each device is a Seeed XIAO board in a 3D-printed shell, which makes this genuinely reproducible: two boards, a LiPo, a filter membrane, a collar strap, and a few hours of printing.
The collar shells are PETG with a flexible TPU skin, bonded with water-resistant glue. A 20 mm hydrophobic PTFE membrane sits over the microphone hole — it passes sound while keeping out water and dust, which matters for something worn by an animal that drinks from bowls and goes outside. The collar mounts to a standard 10 mm quick-release safety strap; the quick-release is not optional.
Privacy and security
Data is scoped per owner: database and storage rules restrict every read and write to the owning account. Devices carry a scoped, revocable token, never the owner's password. The collar-to-station BLE link uses LE Secure Connections, so a nearby device cannot eavesdrop on it or push a model to the collar.
Licence
Hardware designs and 3D print files are CERN-OHL-S v2 (strongly reciprocal). All code — firmware, app, cloud functions — is MIT.
Everything is on GitHub
Print files, firmware for both boards, the Firebase backend, the dashboard, and a full technical reference (hardware, firmware, on-device AI, training, cloud, protocols, security). None of it is behind anything.
Repo — github.com/Jerome-Graves/meowtion
Live dashboard — meowtion.streamlit.app
If you build one, open an issue and tell me how it went.
Jerome Graves