OptiTrainer: looplichtje XXL

Een van de allereerste projectjes die iemand doet als hij net begint met embedded programmeren is het maken van een looplichtje: een programmaatje dat een klein aantal led’s op een microcontroller één voor één aanstuurt. Zo’n looplichtje is leuk als eerste oefening maar het kan ook opgeschaald worden voor meer serieuzere toepassingen. Een van die toepassingen is als ‘pacing guide’ voor sporters en een van de strategieën om op te schalen is toegepast in OptiTrainer.

OptiTrainer is een pacing guide voor hardlopers, wielrenners en skaters die gebruik maken van een trainingsbaan van maximaal 400 meter. Over die volledige lengte zit op iedere 5 cm een RGB led, samen een totaal van 8000 led’s die elk individueel worden aangestuurd. De sporter en/of coach kunnen via een website eenvoudig een kleur en snelheid instellen of een trainingsset invoeren en starten. Het enige dat de sporter dan nog hoeft te doen is het juiste lampje bijhouden.

  

Architectuur

Het opschalen van een looplichtje door alleen meer led’s aan de microcontroller te hangen is voor zo’n toepassing niet meer toereikend: 8000 led’s kunnen gewoon niet meer direct worden aangesloten op een microcontroller en ook de 8001 draden en 400 meter afstand die daar bij komen kijken vormen een uitdaging.

Om die problemen op te lossen, is OptiTrainer opgebouwd uit 80 losse modules van 5 meter lengte waar 100 led’s in zitten die via twee RS485-bussen aangestuurd worden vanuit een centrale server. Door de 400 meter lengte op te splitsen in twee stukken van 200 meter, kon de datarate op de RS485-bus verdubbeld worden. Ieder segment van 5 meter bestaat verder uit twintig modules die in elkaar haken waarbij de eerste module voorzien is van een microcontroller die alle led’s op die module kan aansturen. Door deze korte modules kan het systeem niet alleen rechtuit maar ook in bochten worden gelegd. Deze architectuur is weergegeven in figuur 1.

Website

De interface van OptiTrainer is een website waarmee trainingssets worden gekozen en pacers worden gestart. Deze website breekt de gekozen trainingsset vervolgens op in verschillende elementen (zoals 4 x 100 meter of 150 meter op 9 km/h gevolgd door 50 meter op 12 km/h) en stuurt die informatie in JSON-formaat door optiserver.

Optiserver rekent real-time uit wanneer welke led welke kleur moet krijgen en rendert alle led’s naar een interne framebuffer. Daarna wordt deze framebuffer via verschillende backends geconverteerd naar diverse output systemen, zoals een GUI voor test- en debugdoeleinden en een dual RS485 backend waaraan de ledmodules gekoppeld zijn.

De backend die de RS485-communicatie verzorgt, vertaalt het framebuffer dataformaat naar een zeer compact formaat dat beschrijft welke led welke kleur moet krijgen. Verder is deze backend speciaal geschreven voor een zo hoog mogelijke datarate met zo laag mogelijke latency om aan de real-time latency eisen van het systeem te voldoen.

De 80 nodes luisteren continu op de RS485-bus naar data die relevant is voor het segment dat zij beheren. De data die voor hen relevant zijn, worden vervolgens omgezet in een kleine interne framebuffer voor dat segment, waarna de node de framebuffer via SPI verstuurt naar de schuifregisters die de leddrivers aansturen.

Uitbreidingen

Met OptiTrainer kunnen nu al duurlopen en trainingssets voor individuen en groepen afgewerkt worden, maar er zijn nog veel meer uitbreidingen denkbaar, zoals andere trainingsvormen en koppelingen met sensoren voor hartslag of stappentellers.

De ontwikkelaars bij Metatronics hopen dat sporters en coaches met dit systeem trainingen leuker en effectiever kunnen maken zodat dit XXL looplichtje uiteindelijk zal zorgen voor XXL prestaties!

OptiTrainer is ontwikkeld met subsidies van Agentschap NL, Gemeente Eindhoven, Sportcomplex Eindhoven Noord en Zwemcentrum De Tongelreep.

De behuizing van OptiTrainer is ontwikkeld in samenwerking met ACE ingenieursbureau.

Admar Schoonen, Metatronics

Metatronics

 .