cpscotti edited this page Jun 14, 2011 · 9 revisions

Welcome to the Push-Snowboarding wiki!

The main purpose of this wiki is to document the system's architecture and to help whoever wants to play with it. Push Snowboarding's goal is to connect a Nokia Phone to the snowboarding experience, trying to capture the invisible and intangible aspects of snowboarding.


Technically speaking, the project goes through data acquisition, processing and visualisation.

On the bottom of the stack we have a sort of Snowboarder Area Network (SAN?!) that connects wearable sensors to the phone via Bluetooth. This sensors are spread around the snowboarder's gear and include pressure transducers, heart rate monitors, accelerometers, compasses, gyroscopes, galvanic skin response transducer.

A bit upper on the stack we get to the phone's software where all those sensors connections are managed and where the "magic" happens. The application for the N8 is being fully developed with Qt and with expandability in mind.

App Backend

The app’s backend is centred around the idea of what we call Devices. This Devices generally represent a sensor and they emit (in the Qt sense of the word) their readings. Devices can be:

  • Bluetooth-connected devices (generally Arduinos connected through a Bluetooth Serial Port Protocol),
  • Sensors internal to the phone (connected through QMobility)
  • Abstract Devices that use other inputs as their source.

Together with all that there is a module that gathers all the output from this Devices and dumps them to XML files (which we call RawLog.xml). The communication between all these parts is managed by resembling a distributed subscriber-publisher pattern.

This inner architecture was designed to ease the work of anyone who has a cool idea on how to use the data being produced in real time. For example, if you want to add the feature of streaming loud applause to the phone’s sound system when the snowboarder lands a high jump, he or she just needs to subscribe to the Air-Time detector Device, use the length of the air to scale the applause, stream it to the sound API and you’re done! Right now this Devices are classes compiled with the app code, but we plan to make them as plugins so that one can add/remove plugins at will.

App Frontend

On the app’s frontend, we have a simple interface (fully built around a QGraphicsScene and QStateMachine) that enables the user to connect to the available sensors, start and end a run and check graphic and numerical reports/stats for the recorded runs.

This UI uses QPropertyAnimation and QStateMachine a lot. The trend here is that FAST (insanely fast) transitions are cool. If they are slow enough for the user to realise where that panel went to and where this other panel came from, its too slow! We are using 250ms as the standard animation duration and believe me, it looks beautiful! (NOTE: I still feel compelled to go faster on some of the transitions ;) ).


The Push Snowboarding Hardware (Sensors) is described in detail at Hardware Overview.

Further reading: