With my initial voltage tests a failure, I decided that I would pursue the more traditional route of using LEDs as sensors. This was described by Dietz et al. in a paper entitled "Very Low-Cost Sensing and Communication Using Bidirectional LEDs". Rather than directly measuring the voltage at the anode pin, Dietz et al. propose a simple timing system - measuring the time it takes for the voltage at the input pin to fall to zero again. This time is generally very short - it can be a few thousand microseconds in bright light, ranging to 300 milliseconds in darker conditions.

I found some sample code on the Arduino playground (found here) that employed such a counting system. After modifying the code a little to fit a test setup, I hooked up the system to 3 LEDs and attempted to determine the response functions of the LEDs. Using the same testing methods as before - putting the LEDs and their breadboard in a lightbox and measuring the light intensity at each brightness level - I came up with some hard data.

This data can be viewed either in PDF format or in .grf format; both files are provided below.


Looking at the graphs, the data doesn't look very promising. Initially, LEDs 3 and 4 didn't actually sense any light at all - the system timed out at 30,000 microseconds. Meanwhile, LEDs 1 and 2 were sensing light well below the timeout threshold. The results here do make sense, in a way - they all have a downward slope that one would expect with brighter conditions (more incoming light means that it takes less time for the system to bleed back to zero voltage). The problem is that the four LEDs exhibit very different responses to the same lighting. For a scientific device, this is not an admirable trait.

The tested LEDs here are a set from RadioShack; few specifications are currently available.

A RadioShack white LED.