La forma más sencilla (pero no más barata) es probablemente usar una cámara web e integrar los valores de píxeles.
No sé cuánto error hay en este proceso, pero estoy bastante seguro de que podría funcionar.
[editar: ampliando el comentario de Oli Glaser]
No me di cuenta antes de que la serie era una opción. La forma más barata sería utilizar una fotocélula CdS y un condensador y medir la constante de tiempo utilizando las líneas de control serie. Esto costará alrededor de $ 1.50 para un conector DE9, una fotocélula y un condensador en cantidades individuales.
El problema es que, a menos que esté haciendo esto en DOS, tendrá que escribir un controlador de núcleo para hacer la lectura. Windows tiene lo suficiente como para que no obtengas una latencia de nivel de milisegundos.
Una alternativa es usar un capacitor de valor muy alto (por ejemplo, alrededor de 1000uF o menos). Mis experimentos con NT y XP muestran que la latencia de 50 milisegundos no es irrazonable. Al usar un capacitor de 1,000uF, si asumimos que la resistencia promedio de la celda CdS en el rango que está leyendo es de aproximadamente 25kohms (escribí código para hacer esto en un AVR hace un mes y creo que la luz en un "sala traducida a aproximadamente 25k), entonces la constante de tiempo es de 25 segundos. Eso debería darle mucha resolución, incluso si la lectura del puerto serie tiene una imprecisión de 100 milisegundos.
Ahora ha despertado mi interés :-) Voy a tener que intentar codificar esto. ¿Se pregunta si .NET está a la altura?