In het voorjaar van 2017 heb ik samen met de mannen van HappyShip gewerkt aan een bijzondere lift. De lift, waar je je in hartje Utrecht waant, staat echter niet in de binnenstad maar is de lift van het nieuwe Van der Valk-hotel aan de Winthontlaan.
Het resultaat is hier ook te bewonderen.
Wat is mijn bijdrage?
Ik heb ervoor gezorgd dat de beweging van de echte lift wordt vertaald in een beweging van de camera in de Unity Game Engine. We mochten niet direct ingrijpen op het liftmechanisme, daarom werd er naast de normale liftsensor een tweede sensor geplaatst die ik uit kon lezen met een gewone Arduino. (De liftsensor is een rotary encoder). Ik heb dus een Arduino programma gemaakt dat uit de pulsjes van de rotary encoder berekent hoe hoog de lift is, met welke snelheid en op welke verdieping. Dit programma geeft deze gegevens een aantal keer per seconde door naar een Unity programma op een PC dat vervolgens voor de vertaling van deze hoogte naar een beeld zorgt.
Om een mooie gelijkmatige beweging van de camera te krijgen moet het programma natuurlijk de snelheid “smoothen” en extrapoleren. Daarnaast moet het programma ervoor zorgen dat eventuele foutjes (gemiste pulsjes, de lift stopt op een andere plek dan het programma denkt) op een soepele manier opgevangen worden.
Waar ben ik het meest trots op?
Ik ben het meest trots op hoe mijn programma fouten opvangt en de snelheid van de camera aanpast. Aangezien er geen extra sensor was die de lift bijvoorbeeld op het laagste punt synchroniseert (die was er wel maar zorgde bij tests voor rare signalen vandaar dat we hem toch uitgeschakeld hebben) moest het programma deze synchronisatie op een andere manier doen. Ik heb daarvoor het principe van “Soft Sync” bedacht, wat in het kort betekent: als de lift stilstaat op een hoogte die ongeveer overeenkomt met de verwachte pulshoogte van een verdieping, dan kunnen we ervan uitgaan dat de lift “normaal” stilstaat op die verdieping. Dan kunnen we dus de gemeten pulshoogte weer synchroniseren met de hoogte die we op die verdieping zouden moeten hebben!