Eten op inspanning, niet op de klok — zo werkt Smart Fueling in WattLog

Elke wielrenner kent het advies: eet elke 45 minuten. Elke wielrenner die ooit een zware intervaltraining heeft gedaan, weet ook dat het niet klopt. Een drempeltraining van 60 minuten verbrandt meer koolhydraten dan een herstelrit van 90 minuten, en een timer ziet het verschil niet. Het moment waarop je merkt dat je had moeten eten, is het moment waarop het te laat is: je zit midden in een blok, handen aan het stuur, en de hongerklop komt twintig minuten later.

Ik bouw WattLog in mijn eentje: een trainingsplatform met live sensordata, gestructureerde workouts die een smart trainer in ERG-modus aansturen, en gesimuleerde GPX-routes. Er was al een instelling „herinner me elke X minuten aan eten”, en toch vergat ik steeds te eten — omdat de herinnering niets te maken had met hoe hard ik reed. Zo heb ik die vervangen door iets dat daar wél rekening mee houdt.

Het signaal komt al binnen

Een vermogensmeter of smart trainer meldt meerdere keren per seconde het aantal watt. Vermogen maal tijd is mechanische arbeid in kilojoules, en fietsen kent een handig toeval. Getrainde wielrenners zetten voedingsenergie met een rendement van ongeveer 18–26% om in arbeid op de pedalen [1], en één kcal is 4,184 kJ. Bij een rendement van zo’n 24% heffen de twee factoren elkaar op, dus kost 1 kJ arbeid op de pedalen ongeveer 1 kcal voedingsenergie. Het is een benadering: het rendement verschilt per renner en stijgt met het vermogen [1, 2], dus de echte factor schuift een beetje de ene of de andere kant op. De berekening staat uitgebreider in kilojoules verbranden op de trainer. In mijn analyse na de rit zat dit al. Alleen tijdens de rit was het niet beschikbaar.

De kern van de engine is daarom een accumulator in de sessiemanager aan de serverkant. Elke vermogensmeting telt de arbeid sinds de vorige meting op (trapeziumintegratie), waarbij het gat tussen twee metingen is begrensd op 5 seconden, zodat een Bluetooth-onderbreking geen energie kan verzinnen. Gaat het totaal over een drempel (standaard 400 kJ, per atleet instelbaar), dan krijgt de renner de melding om te eten. De status staat in dezelfde Redis-sessiemetadata als de rest van een live rit, dus een herladen pagina of een nieuwe verbinding met een andere API-worker gaat verder waar het was, in plaats van de balk op nul te zetten.

Die eerste versie stond er snel en was al beter dan de timer. Maar hij zat er nog steeds op een interessante manier naast.

Niet elke kilojoule is gelijk

400 kJ in een rustig duurtempo en 400 kJ op drempel zijn evenveel arbeid, maar ze kosten niet evenveel brandstof. De inspanningsfysiologie noemt dit de „crossover”: bij lage intensiteit is vet de belangrijkste brandstof, en naarmate de intensiteit stijgt schuift het lichaam op naar koolhydraten, die bij zware inspanning domineren [3]. Studies met isotopentracers bij wielrenners laten hetzelfde beeld in detail zien: de oxidatie van spierglycogeen en bloedglucose stijgt met elke stap in intensiteit, terwijl de vetoxidatie piekt rond een gemiddeld vermogen en daarna daalt [4, 5]. Een balk die ruwe kilojoules telt, waarschuwt te laat op zware dagen en zeurt op rustige.

De oplossing is een curve: het aandeel koolhydraten in de energie als functie van de intensiteit ten opzichte van FTP. Ik gebruik een stuksgewijs lineaire curve met ongeveer 45% bij 55% van FTP, 65% bij 75%, 80% bij 95% en meer dan 90% boven FTP. Om duidelijk te zijn over de herkomst van deze getallen: het is mijn eigen benadering, gevormd naar de richting en de globale orde van grootte van de bovenstaande studies, geen waarden uit één enkel onderzoek. Die studies meten intensiteit ten opzichte van VO2max of maximale belasting, niet FTP, dus de vertaling is een technische schatting. De kilojoules van elke meting worden vervolgens gewogen met dat aandeel, ten opzichte van een gematigde referentie-inspanning:

gewicht = koolhydraat_aandeel(vermogen / FTP) / 0,65   (= 1,0 bij een gelijkmatige, gematigde inspanning)

brandstofbalk += kJ_toename × gewicht

Twee eigenschappen zijn hierbij belangrijk. Ten eerste is het gewicht bij een gematigde inspanning precies 1, dus de drempel behoudt zijn betekenis en bestaande instellingen gedragen zich niet ongemerkt anders. Ten tweede valt zonder FTP de intensiteit niet te beoordelen, dus valt de balk terug op ongewogen kilojoules in plaats van te gokken. In de praktijk vult rijden op 96% van FTP de balk nu meer dan 30% sneller dan dezelfde hoeveelheid arbeid op 56%. Ken je je FTP niet, begin dan met een FTP-test.

De balk toont grammen, geen kilojoules. Renners denken in „één gel” of „ongeveer 30 g”, niet in kJ. De drempel wordt daarom weergegeven als een portie koolhydraten (400 kJ is met dezelfde aannames ongeveer 30 g), en tijdens de rit staat er „18 / 30 g”.

De details die het bruikbaar maken midden in een interval

Een correct getal is niet genoeg als de melding op het verkeerde moment komt. Het meeste werk ging zitten in wanneer de app iets zegt:

De terreinvoorspelling leverde de bug op waarvan ik het blijst ben dat de tests hem vonden. Een waypoint dat binnen een stiltezone werd gepasseerd, werd overgeslagen maar bleef in de lijst staan. Omdat de triggervoorwaarde „gepasseerd tussen de vorige en de huidige positie” was, kon hij nooit meer afgaan: de melding ging stilletjes verloren. De fix laat een openstaand waypoint afgaan in de eerste tick na het einde van de stiltezone, en voegt meerdere gepasseerde waypoints samen tot één melding, zodat een verouderde nooit later in z’n eentje opduikt.

Vóór de rit: wat mee te nemen

De andere helft van de voeding gebeurt thuis. Vóór elke sessie van meer dan een uur toont de voorbereidingspagina nu een kaart met de koolhydraten en het vocht die je mee moet nemen — zonder een trainer te verbinden of iets te starten.

Bij een gestructureerde workout komt de energie rechtstreeks uit het plan: het doelvermogen van elke stap maal de duur geeft de exacte kilojoules, normalized power geeft de intensiteit, en dezelfde koolhydraatcurve wordt per stap toegepast. Een workout met zware versnellingen en rustige herstelblokken vraagt meer koolhydraten dan een gelijkmatige rit met hetzelfde gemiddelde vermogen, en de schatting houdt daar rekening mee.

Voor een GPX-route is er geen plan, dus gebruik ik het natuurkundige model waar de trainersimulatie al op draait: voor elk segment van 50 m het vermogen dat nodig is om de aangenomen snelheid vast te houden tegen zwaartekracht, rolweerstand en luchtweerstand, met het gewicht van de renner, het gewicht van de fiets, CdA, Crr en luchtdichtheid. Dit soort model is goed gevalideerd: in wegtests voorspelde het het gemeten vermogen met R² = 0,97 en een standaardfout van 2,7 W [6]. Afdalingen waarbij je niet hoeft te trappen tellen als nul arbeid. Een heuvelachtige route komt zo terecht duurder uit dan een vlakke van dezelfde lengte.

De getallen worden daarna een paklijst: ongeveer de helft van de verbrande koolhydraten, begrensd op wat de darm kan opnemen, en weergegeven als bereik, omdat één getal valse precisie zou suggereren. De grenzen volgen de huidige richtlijnen voor koolhydraatinname tijdens inspanning: één enkele koolhydraatbron kan tot ongeveer 60 g/u worden geoxideerd, en pas langere inspanningen rechtvaardigen ongeveer 90 g/u, met meerdere transporteerbare koolhydraten zoals glucose plus fructose [7]. Dezelfde richtlijnen zeggen dat de inname omlaag moet bij een lage absolute intensiteit — en dat is precies wat de intensiteitscurve doet. De factor „de helft van wat je verbrandt” is mijn eigen keuze, geen getal uit de literatuur.

Voor vocht wordt de zweettabel uit de analyse na de rit hergebruikt, begrensd op 0,8 l/u. Hier is de eerlijkste bron een kanttekening: zweetsnelheden verschillen sterk tussen mensen, en het standpunt over vochtaanvulling raadt aan je eigen zweetsnelheid te bepalen door je vóór en na een rit te wegen, met als doel het vochtverlies onder ongeveer 2% van je lichaamsgewicht te houden [8]. De tabel is een startpunt, niet jouw getal. Meer daarover in hydratatie, elektrolyten en zout.

Dat hergebruik was bewust. Mijn eerste versie van de kaart vóór de rit rekende met een vaste 500 ml per uur, terwijl de analyse na de rit voor een gematigde indoorsessie 1,4 l/u zweet aannam. De renner zou over dezelfde rit twee tegenstrijdige dingen te horen krijgen. Nu is er één koolhydraatcurve en één set zweetsnelheden, gedeeld door de balk tijdens de rit, het plan ervoor en de analyse erna.

Een bug die de functie elders vond

Bij het testen van de routekaart kreeg ik een verdacht resultaat: 2,7 l vocht voor een route die volgens de pagina 1 u 41 min zou duren. Dat is 1,6 l/u, het dubbele van de grens. De vochtberekening klopte. De duur was fout, en niet in mijn nieuwe code: vier routeschermen schatten de tijd als segmenten × 5 seconden, maar segmenten zijn 50 m lang, dus die formule klopt alleen bij 36 km/u. Bij de standaard 18 km/u was elke routetijd in de app met de helft onderschat. De backend geeft de tijd nu mee met het voedingsplan, en alle routeschermen delen één functie „afstand gedeeld door snelheid”.

Wat het niet doet

Dit is een richtlijn, geen meting, en dit artikel zou oneerlijk zijn zonder de kanttekeningen:

De hele engine kan in de Instellingen worden uitgezet, en zolang hij aanstaat vervangt hij de oude eetherinnering met vaste tussenpozen in plaats van ermee te concurreren.

Wat ik eruit meeneem

De functie die eruitzag als „toon een melding bij 400 kJ” werd drie modellen die het met elkaar eens moeten zijn: een live accumulator, een plan vóór de rit en een analyse erna. Het echte werk zat niet in de formule, maar in zorgen dat die drie de renner hetzelfde verhaal vertellen, en in het kiezen van het juiste moment om iets te zeggen. De beste beslissing was geen enkel scherm eigen constanten te laten houden. De nuttigste gewoonte was een getal dat vreemd oogt — zoals 2,7 l in minder dan twee uur — te behandelen als bugmelding en niet als afrondingskwestie.

Bronnen

  1. Coyle EF, Sidossis LS, Horowitz JF, Beltz JD. Cycling efficiency is related to the percentage of type I muscle fibers. Med Sci Sports Exerc. 1992;24(7):782–788. PubMed 1501563
  2. Ettema G, Lorås HW. Efficiency in cycling: a review. Eur J Appl Physiol. 2009;106(1):1–14. doi:10.1007/s00421-009-1008-7
  3. Brooks GA, Mercier J. Balance of carbohydrate and lipid utilization during exercise: the "crossover" concept. J Appl Physiol. 1994;76(6):2253–2261. doi:10.1152/jappl.1994.76.6.2253
  4. Romijn JA, Coyle EF, Sidossis LS, et al. Regulation of endogenous fat and carbohydrate metabolism in relation to exercise intensity and duration. Am J Physiol. 1993;265(3):E380–E391. doi:10.1152/ajpendo.1993.265.3.E380
  5. van Loon LJ, Greenhaff PL, Constantin-Teodosiu D, Saris WH, Wagenmakers AJ. The effects of increasing exercise intensity on muscle fuel utilisation in humans. J Physiol. 2001;536(1):295–304. doi:10.1111/j.1469-7793.2001.00295.x
  6. Martin JC, Milliken DL, Cobb JE, McFadden KL, Coggan AR. Validation of a mathematical model for road cycling power. J Appl Biomech. 1998;14(3):276–291. doi:10.1123/jab.14.3.276
  7. Jeukendrup A. A step towards personalized sports nutrition: carbohydrate intake during exercise. Sports Med. 2014;44(Suppl 1):S25–S33. doi:10.1007/s40279-014-0148-z (open access: PMC4008807)
  8. American College of Sports Medicine; Sawka MN, Burke LM, Eichner ER, et al. Exercise and fluid replacement. Med Sci Sports Exerc. 2007;39(2):377–390. doi:10.1249/mss.0b013e31802ca597
  9. Venables MC, Achten J, Jeukendrup AE. Determinants of fat oxidation during exercise in healthy men and women: a cross-sectional study. J Appl Physiol. 2005;98(1):160–167. doi:10.1152/japplphysiol.00662.2003

Train slimmer met WattLog.pro

WattLog.pro verzamelt gegevens van je trainer en laat zien wat er echt met je vorm gebeurt.

Probeer WattLog.pro gratis →

← Alle blogberichten