Genomineerd voor de STM32N6 Contest: laatste update van mijn Smart Cat Litter – Health Tracker

18 November 2025 –

Genomineerd voor STM32N6 contest
Eind oktober kreeg ik goed nieuws: mijn ingezonden project ‘Smart Cat Litter – Health Tracker’ is geselecteerd als één van de vijf nominaties voor de top 3 plekken in de internationale STM32 Edge AI Contest. Hierbij een update van wat ik de afgelopen tijd aan het project heb gedaan.

Mijn vier uitgangspunten voor ontwerp
Voor dit project had ik vier duidelijke eisen:
– een praktische AI-toepassing
– begrijpelijk en uit te leggen aan gewone mensen
– moet een dagelijkse vraag oplossen
– technisch haalbaar als prototype én met commerciële potentie

Waarom gezondheid via kattenbakgedrag meten
Die uitgangspunten brachten me bij iets waar ieder huishouden met katten mee te maken heeft: hoe hou je de gezondheid van je dier in de gaten als het je niks kan vertellen? Katten zijn extreem schoon en hebben een vaste dagelijkse routine. Dat betekent: veranderingen in gedrag zijn snel te meten en vaak meteen waardevol.

Signalen uit kattenbak-gedrag
Frequentie, hoeveelheid en patroon van kattenbakbezoek zeggen veel. Vaker plassen → mogelijk blaasontsteking, stress of diabetes. Minder plassen → uitdroging of nierproblemen. Afwijkend gewicht in de kattenbak werkt als vroegtijdig signaal. Met anomaly detection kun je met Edge AI die veranderingen op tijd opmerken.

Constructie met 3D-load cells
De vier 3D-geprinte load cells heb ik in een Wheatstone bridge-opstelling gezet. Ieder geel onderdeel bevat één rekstrookje. De rekstrookjes vormen samen de brug, waardoor kleine weerstandsveranderingen — lineair met het gewicht — meetbaar worden. De HX711 versterkt dat signaal. Op 10 Hz of 80 Hz kan ik heel regelmatig gewicht en weight-diff meten.

Verschil tussen Mac en Finn
Mijn katten verschillen ruim 1 kg in gewicht: Mac, een rode boskater van net boven de 5 kg, en Finn, een ragdoll van bijna 4 kg. Met mijn weegcellen welke 0.1 g resolutie hebben is het vrij eenvoudig om te bepalen welke kat op de bak zit. Door een paar uur te observeren en iedere sessie te meten, kreeg ik al snel inzicht.

Eerste observaties in praktijk
Na 11 bezoeken had ik al dit patroon:
– 5–30 g → plasje
– > 40 g → poep
– 0 g → snuffelen / persen zonder resultaat
Dat was voldoende basis om de data te gaan classificeren.

Opbouw van een echte dataset
Daarna heb ik de weegschaal onder de kattenbak gemonteerd en een week lang data verzameld. Iedere kleine gewichtswijziging kreeg een timestamp. Dat bleek al snel veel te veel data om terug te kijken, dus besloot ik er wat logica tussen te zetten.

Slimmere manier van sampling
Bij iedere wijziging bepaal ik op basis van gewicht welke kat erop staat. Tijdens een bezoek bewegen ze net genoeg om het signaal te laten schommelen. Daarom neem ik 10 seconden nadat de kat de bak verlaat een stabiele meting. Zo krijg ik een nette weight-diff en timestamp. Hiermee blijft de dataset klein en bruikbaar: 15–25 echte interacties per dag.

Publiceren naar Home Assistant
Ik wilde de data live in Home Assistant én lokaal op de STM32N6. Voor Home Assistant kies ik MQTT. Iedere weight-diff wordt verstuurd met cat-ID erbij. Het schoonmaken van de bak veroorzaakt geen problemen, want ik log alleen de verschillen, niet het absolute gewicht. En in Home Assistant heb ik een aparte tab gemaakt voor de Health Tracker, zodat ik daar de data live kan monitoren.

Dataset voorbereiden voor AI
Naast de live-data wilde ik een dataset voor Edge Impulse. Ik heb eerder veel gewerkt met Edge Impulse voor predictive maintenance met de SensorTile Wireless Industrial Node, dus de workflow was bekend. Ik zag dat de STM32N6 inmiddels ook ondersteund wordt, ideaal.

Dataset inladen en verdelen
De dataset laad ik via de CSV Wizard in Edge Impulse. Ik gebruik 80% voor training en 20% voor testen. De dataset is asynchroon, omdat ik alleen log bij relevante weight-diffs.

Gebruikte inputfeatures in model
Ik gebruik:
– weight_kg – absolute meting
– weight_add – de weight-diff
– cat_id – Mac (1) of Finn (2)
– label_id – timestamp-indicator

Anomaly detection via GMM
Voor anomaly detection kies ik een GMM. Kort uitgelegd: je data bestaat uit meerdere normale clusters, niet één gedragspatroon. In mijn geval: plasje, drol, bezoek zonder resultaat. Het model kijkt voor iedere nieuwe meting hoe waarschijnlijk die bij één van die clusters hoort. Lage log-likelihood → anomaly.

Model herkent vijf patronen
Na training herkent mijn model vijf clusters:
– Cluster 1: Finn’s dubbele bezoeken
– Cluster 2: normale plasjes
– Cluster 3: poep (60–120 g)
– Cluster 4: Mac’s single visits
– Cluster 5: nachtpauzes
Dat gaf precies de nuance die ik in het gedrag waar ik op gehoopt had.

Dashboard met duidelijke indicator
In de gebruikersinterface toon ik per kat het actuele gewicht, het aantal bezoeken in de laatste 24 uur en het tijdstip van het laatste bezoek. Daarnaast komt een urgentie-indicator:
– groen duimpje → normaal
– oranje oog → milde anomaly
– rood belletje → sterke anomaly

Visueel maken met cartoons
Om het dashboard wat vriendelijker te maken heb ik cartoonversies van Mac en Finn getekend. KPI’s als gewicht, aantal bezoeken en laatste tijdstip staan duidelijk in beeld, inclusief een kleine 24-uurs plot. Bovenaan staat “SMART CAT LITTER – HEALTH TRACKER”, met ruimte voor het ST-, STM32N6- en Edge Impulse-logo.

Complete keten
Daarmee is de complete keten rond: load cells → HX711 → weight-diff → cat-ID → MQTT → Home Assistant → dataset → getraind GMM-model → STM32N6 → dashboard.

Samenvatting van de toepassing
De Smart Cat Litter – Health Tracker zet de kattenbakmetingen om in herkenbare patroongroepjes. Elke nieuwe meting wordt vergeleken met wat Mac of Finn normaal doen. Is de waarschijnlijkheid laag, dan gaat de indicator aan. Een praktische, simpele en goed uitlegbare oplossing op een vraag die ieder kattenbaasje dagelijks heeft: hoe gaat het eigenlijk met mijn dier? En vooral een leuk project om te bedenken én te realiseren.