What this measures
This is a Rayleigh match. With normal color vision you can mix red and green light until it looks identical to a yellow — two different spectra that produce the same signal in your cones (a metamer).
The interesting number is not the mixture you settle on, but how wide a range of mixtures you accept as "the same yellow." Most people accept a fairly wide band. A tetrachromat — someone with a fourth cone type — breaks that metamer and accepts a narrower band. The width of your matching range is the signal.
Build the device
A fork of the BrainardLab Penn Anomaloscope: an Arduino Leonardo driving a yellow LED and an RGB LED, behind an orange long-pass filter and a diffuser.
- Board: Arduino Leonardo. LEDs: yellow → D9 (100 Ω), RGB red → D6 (150 Ω), green → D5 (100 Ω), blue → D3 (unused).
- Firmware: flash
anomaloscope_leonardo.ino(dumb actuator:R/G/Y 0–255over serial, 9600 baud). - Filter (required): an orange long-pass with cut-on between 546 and 589 nm — Rosco #23, Kodak/Tiffen Wratten 23A, or Lee 780 Golden Amber. Plus a diffuser (Scotch tape over the LEDs).
- Then: Connect above, Calibrate, and Run the test.
↓ Lid cutting template (SVG — print at 100%) — two 1.5" windows, centerlines, septum mark.
Full BOM, wiring, and CAD are in the project repo. (Build-guide page expands in a later phase.)
Calibrate (do this first)
Two steps. 1) Balance red against green. 2) Bring the mix's brightness down to the yellow. Calibrate with the filter and diffuser in place.
- Balance: set
G_GAINuntil the red and green bands look equally bright. - Filter check: look through the orange filter too — the green band should drop well below the red.