Fun with photocells

Radioshack in 1970

Images from Greg Ward:

Resurrected the 1970 graph of resistance versus intensity:

Datapoints read off cropped version of this graph with xv, and pasted into emacs: specGraph.txt.
Analysis in Matlab:

>> s = dlmread('/home/sci/gk/web/lum/specGraph.txt');
>> polyfit(s(:,1),s(:,2),1)

ans =

   -0.6063  463.9941

So the slope of the line is about -0.61, which roughly visually matches the graph.

See below for updated analysis of CRT measurements.


Radioshack in 2002

Bill Martin bought some cadmium-sulfide photocells; documentation here. I picked one of them at random and made something to hold it up against a CRT, while blocking as much ambient light as possible. As best I can tell, the CRT's gamma is 2.35, and the black level was set correctly.

First, trying to make sense of the Radio Shack datasheet. The first line describing ohms in relation to lux must be in error; should be Ohms, not KOhms). Fixing that:

>> r1 = [13 15 120 130 160];
>> r2 = [0.9 1.1 7 8 9];
>> lr1 = log(r1);
>> lr2 = log(r2);
>> (lr2 - lr1)/(log(100) - log(1))

ans =

   -0.5799   -0.5673   -0.6170   -0.6054   -0.6249

So it seems that the Radioshack of 2002 also says that resistance varies with intensity raised to the -0.61, roughly, in agreement with the Radioshack of 1970!

CRT measurements in 2002

Here is the data I got for different input levels ([0-255] normalized to [0.0-1.0]), with resistance in KOhms: CRT-data.txt. The values were quite variable for low values; for CRT level 0.0 it took a few minutes of the resistance creeping monotonically upward to finally stabilize. In the following, I didn't use that sample anyway.

>> x = dlmread('CRT-data.txt');
>> x = x(2:51,:);
>> plot(x(:,1), x(:,2))
>> plot(x(:,1).^2.35, x(:,2).^(-1))
>> plot(x(:,1).^2.35, x(:,2).^(-2))

Looking at log-log plots:

>> plot(log(x(:,1).^2.35), log(x(:,2)),'o-')
>> cfs = polyfit(log(x(:,1).^2.35), log(x(:,2)),1)

cfs =

   -0.5280   -0.7527

>> d = -9:1:0;
>> plot(log(x(:,1).^2.35), log(x(:,2)),'ko-', ...
  d,polyval(cfs,d),'g', ...
  d,polyval([-0.61,-0.85],d),'b')

The two or three points at the far left are at very low intensity levels, the data here is probably bad because there was still one (very dim) light on. Past that, the log-log slope I have looks to be somewhere between the "best fit" slope of -0.528 and the slope from Greg Ward's graph, -0.61, neither of which is very close to -1.


Error bars ...

The resistance measures seemed to vary quite a bit on the ohmmeter. Here are the ranges of values that I measured at 0.1 increments in input level CRT-range.txt (each line: input level, min, max resistance). I watched the readings for about a minute (slightly longer at low levels) in order to get this range.

>> r = dlmread('CRT-range.txt');
>> d = r(:,1);
>> min = r(:,2);
>> max = r(:,3);
>> plot(d,min,'k',d,max,'g')
>> plot(d.^2.35,min.^(-2),'k',d.^2.35,max.^(-2),'g')

Ideally, I'd have fixed-size error bars in my measurement of intensity, instead of in my measurement of resistance. Obviously, my error bars increase with higher intensity. This might be okay for this project, but I'd rather have a more precise and reliably calibrated measurement...