NutriSense v3
13-08-2025



Less is More: hoe minder functionaliteiten (geen weegschaal meer) een betere gebruikerservaring geeft.
Health
Versie 3 van mijn NutriSense was nodig toen bleek dat ik altijd dezelfde portiegroottes eet. De weegschaal is niet meer nodig. Ik eet altijd een kom aardappelen, 200 gram groenten, enz.
Verdere verbeteringen:
- Extra groot LCD: 4 regels van 20 karakters.
- Tiptoetsbediening. Zo is de kast makkelijk schoon te houden, is handig in de keuken.
- Je kunt nu een hele maaltijd scannen als een batch en dan de OK-knop aanraken om je hele maaltijd in een keer naar de server te uploaden.
- Hij heeft lokaal de hele productentabel in EEPROM staan zodat hij geen roundtrip naar de server hoeft te doen als je iets scant.
- De kaartjes (RFID-tags) zijn ook verbeterd: elk kaartje toont het aantal calorieën en heeft linksboven een soort nutricscore: voedsel met een lage caloriedichtheid is groen, overig voedsel oranje.
- Hij toont op het LCD niet alleen het totaal aantal calorieën van vandaag maar tevens het aantal calorieen van je laatste maaltijd.
Die laatste verbetering was leuk want ik wilde de database niet wijzigen (zodat v1 en v2 van de NutriSense nog steeds blijven werken) en daarom schreef ik onderstaande SQL query die bepaald wat de laatste maaltijd is die je hebt gegeten. In de PHP-code staat die in het bestand maaltijd.php.
Download
Code (voor Arduino R4 WiFi)
Webserver (PHP-code en database)
Behuizing (OpenScad)
Wat kan ik hier nu mee?
Voor toekomstige projecten kan ik nu op mijn data analyses of machine learning algoritmiek loslaten zodat ik bijvoorbeeld het volgende krijg:
Maaltijdanalyse: berekenen hoeveel een ontbijt/lunch/diner gemiddeld bijdraagt aan het dagtotaal.
Waarschuwingen: melding op mijn telefoon als mijn maaltijd <300 kcal is (te licht) of >1100 kcal (te zwaar).
Tijdsanalyse: welke tijden van de dag je het meest eet (bijv. avond-snacks). Of ik maak een grafiek met aantal calorieen op Y-as en tijd van de dag op X-as.
Gewichtsmanagement: combineer kcal-inname met mijn streefgewicht en laat een AI tips geven wat ik dan meer/minder moet eten a.d.h.v caloriedichtheden.
Mood-tracking-koppeling: noteren hoe ik me voel (moet ik dan ook een apparaat voor maken!) en dan kijken of voeding invloed heeft. Hetzelfde kan ik doen met slapen, als ik slecht/goed slaap wat is dan de relatie met mijn voeding?
Machine learning: voorspellen wat ik waarschijnlijk bij mijn volgende maaltijd zal gaan eten.
Health
Versie 3 van mijn NutriSense was nodig toen bleek dat ik altijd dezelfde portiegroottes eet. De weegschaal is niet meer nodig. Ik eet altijd een kom aardappelen, 200 gram groenten, enz.
Verdere verbeteringen:
- Extra groot LCD: 4 regels van 20 karakters.
- Tiptoetsbediening. Zo is de kast makkelijk schoon te houden, is handig in de keuken.
- Je kunt nu een hele maaltijd scannen als een batch en dan de OK-knop aanraken om je hele maaltijd in een keer naar de server te uploaden.
- Hij heeft lokaal de hele productentabel in EEPROM staan zodat hij geen roundtrip naar de server hoeft te doen als je iets scant.
- De kaartjes (RFID-tags) zijn ook verbeterd: elk kaartje toont het aantal calorieën en heeft linksboven een soort nutricscore: voedsel met een lage caloriedichtheid is groen, overig voedsel oranje.
- Hij toont op het LCD niet alleen het totaal aantal calorieën van vandaag maar tevens het aantal calorieen van je laatste maaltijd.
Die laatste verbetering was leuk want ik wilde de database niet wijzigen (zodat v1 en v2 van de NutriSense nog steeds blijven werken) en daarom schreef ik onderstaande SQL query die bepaald wat de laatste maaltijd is die je hebt gegeten. In de PHP-code staat die in het bestand maaltijd.php.
WITH todays AS (
SELECT *
FROM logboek
WHERE date(datumtijd) = date('now')
ORDER BY datumtijd
),
gaps AS (
SELECT *,
CASE
WHEN LAG(datumtijd) OVER (ORDER BY datumtijd) IS NULL THEN 1
WHEN strftime('%s', datumtijd) - strftime('%s', LAG(datumtijd) OVER (ORDER BY datumtijd)) > 900 THEN 1
ELSE 0
END AS is_new_group
FROM todays
),
grp AS (
SELECT *,
SUM(is_new_group) OVER (ORDER BY datumtijd ROWS UNBOUNDED PRECEDING) AS gid
FROM gaps
),
last_gid AS (
SELECT gid
FROM grp
ORDER BY datumtijd DESC
LIMIT 1
)
SELECT SUM(kcal) AS totaal_kcal
FROM grp
WHERE gid = (SELECT gid FROM last_gid);Download
Code (voor Arduino R4 WiFi)
Webserver (PHP-code en database)
Behuizing (OpenScad)
Wat kan ik hier nu mee?
Voor toekomstige projecten kan ik nu op mijn data analyses of machine learning algoritmiek loslaten zodat ik bijvoorbeeld het volgende krijg:
Maaltijdanalyse: berekenen hoeveel een ontbijt/lunch/diner gemiddeld bijdraagt aan het dagtotaal.
Waarschuwingen: melding op mijn telefoon als mijn maaltijd <300 kcal is (te licht) of >1100 kcal (te zwaar).
Tijdsanalyse: welke tijden van de dag je het meest eet (bijv. avond-snacks). Of ik maak een grafiek met aantal calorieen op Y-as en tijd van de dag op X-as.
Gewichtsmanagement: combineer kcal-inname met mijn streefgewicht en laat een AI tips geven wat ik dan meer/minder moet eten a.d.h.v caloriedichtheden.
Mood-tracking-koppeling: noteren hoe ik me voel (moet ik dan ook een apparaat voor maken!) en dan kijken of voeding invloed heeft. Hetzelfde kan ik doen met slapen, als ik slecht/goed slaap wat is dan de relatie met mijn voeding?
Machine learning: voorspellen wat ik waarschijnlijk bij mijn volgende maaltijd zal gaan eten.