Light sensor + ADC board
The light sensor + ADC board puts a light-dependent resistor and a 10 kΩ resistor in a divider, with the midpoint on channel 0 of an MCP3008. It costs $9 and is for anything that reacts to light: night lights, blinds, "is the lamp on?" checks. Wire the SPI pins plus power and ground, then read channel 0 — brighter light gives a higher reading.
What's inside
| Part | Qty | Price each |
|---|---|---|
| Light sensor (LDR) | 1 | $0.75 |
| Resistor | 1 | $0.25 |
| MCP3008 ADC (SPI) | 1 | $4 |
| Total | 3 | $5 |
- The LDR is the top half of the divider; its resistance falls as light rises.
- The 10 kΩ resistor is the bottom half, so the midpoint voltage rises with light.
- The MCP3008 digitises the midpoint to 10 bits over SPI.
| Exposed pin | Inside the kit |
|---|---|
| vdd | adc:VDD |
| gnd | adc:DGND |
| clk | adc:CLK |
| dout | adc:DOUT |
| din | adc:DIN |
| cs | adc:CS |
vdd powers the LDR's end of the divider and must be 3.3 V; gnd is the shared ground. The kit has no chain ends; the SPI pins are clk, dout, din and cs.
Wiring it in circuit.py
from wiring import *
pi = Pi()
light = kits.LightADC()
pi.V3_3 >> light.vdd
light.gnd >> pi.GND
pi.SCLK >> light.clk
pi.MISO >> light.dout
pi.MOSI >> light.din
pi.CE0 >> light.csDriving it in main.py
from gpiozero import MCP3008
from time import sleep
light = MCP3008(channel=0)
while True:
print(f"light {light.value * 100:.0f}%")
sleep(0.5)Why buy the kit
Loose parts come to $0.75 + $0.25 + $4 = $5.00, against $9 — $4.00 for a divider and an ADC wired for you. That premium buys the fix for the divider's usual failure mode: an LDR and resistor swapped, which inverts every reading, or a floating VREF that makes all readings meaningless.
Simulator vs real hardware
- The LDR follows a power law from its simulated illuminance, refreshed every 50 ms, so covering it with a hand or switching on a lamp in its zone moves the reading.
- Each LDR draws its own 10-lux resistance from a 2:1 band, so two boards can differ by a factor of two — calibrate before using absolute thresholds.
- The MCP3008 runs at 3.3 V with VREF tied to VDD, so
valueis the midpoint voltage over 3.3 V; the same program works on a real Pi.
Further reading
- gpiozero: MCP3008 — reading the ADC channel, and feeding its value into an LED or threshold.