I'm currently a student doing a work placement at one of my university's research departments, the Centre for Advanced Internet Architectures. As part of my placement, I developed a library for Arduino to interface with another of our (FOSS) projects, L3DGEWorld.
L3DGEWorld was designed to monitor networks and networked computer systems using a realtime 3D interface. Different statistics are represented through different visual attributes. For example, one of the super computing clusters at Swinburne University uses L3DGEWorld to provide a visual overview of the state of every node. Each node is a floating entity, and the CPU utilisation is represented by rotation speed, the memory utilisation by size and the network utilisation by bounce height. (See example here. )
Additionally, the user may also interact with the entities. Using the different "tools" (weapons) available, a user may trigger a l3dgecomm enabled device to perform certain actions.
l3dgecomm is the protocol for communicating between L3DGEWorld and an input or output daemon. Arduino-l3dgecomm provides an interface to allow an Arduino to provide input and take output from L3DGEWorld and other l3dgecomm compatible programs.*
We put together two proof of concept videos to demonstrate the main functionality of arduino-l3dgecomm.
In the first video, the arduino acts only as an input daemon. We read an analog input and set the spin rate of an entity on-screen accordingly. Input from any source can be used, as long as you can express it as an integer.
In the second video, we demonstrate the output functionality of L3DGEWorld, with the Arduino acting as an output daemon. We interact with entities in-game, which controls the actions of the Arduino. When an action is sent, the Arduino is provided with the tool ID, entity ID and a string containing the states of the various attributes of the entity. In this case, we use the entity ID to determine which angle the servo actuates to.
Both of these are very simplistic examples of the functionality - L3DGEWorld can be expanded far beyond these examples with minimal effort. For example, monitoring temperatures around a datacenter, while allowing a user to turn additional localised cooling devices on and off .