A lamp that dims itself when the room is already bright, and glows as it gets dark. You decide whether it’s on. The room decides how bright.

Point at a dot to find out what each part does, and why it’s there.
Printed in translucent blue resin by Myles in Fusion 360. Lowered so the lamp stays compact.
The photoresistor, drilled into the top corner near the back. High enough to read the room, out of the lamp’s own glow.
An IKEA bowl, already the right size and shape. One side sanded flat so it tilts towards you.
The only thing you touch. Tap to switch the ring on or off. Left on show so you can see how it works.
USB was enough, so the 5V battery and MOSFET were cut.
Oak from the offcut bin, band-sawn at an angle and sanded round to match the bowl.


People leave it on out of habit, fall asleep under it, or walk out without switching it off. Plenty would rather use a small lamp anyway, for studying, working or winding down. We wanted a lamp that doesn’t wait for anyone to remember it.




01 / 05Neither of us knew which components an adaptive lamp needed. We studied builds on YouTube and Instructables, tried circuits in Tinkercad, and followed EL Passion’s DIY Smart Lamp tutorial for the code. Then we built with everything and asked people with more experience what we could remove.
Someone pointed us to IKEA Hacks, where people rework IKEA products into new ones. The bamboo bowl we’d found was already the right size and shape, so we designed the lamp around it.
We sketched shades, drums, cages and a pendant. The round forms won: soft edges suited the warm glow we wanted. Then we tilted the bowl so the light faces the person, which meant sanding one side of it flat to sit on.





01 / 06

Scroll to separate the parts, or drag Explode. Dim the room to see what the lamp does.
The room is bright, so the lamp stays almost off.
The photoresistor gives a number from 0 to 1023. In our room, dark read about 100 and bright about 900. The Arduino maps that range backwards onto LED brightness, and the touch sensor switches the ring on or off.
// more light in, less light outint brightness = map(ldrValue, 100, 900, 255, 1);brightness = constrain(brightness, 1, 255);if (ctsValue == HIGH && lastState == LOW) { ledState = !ledState; // tap toggles on/off}setStripColor(255, 255, 255, ledState ? brightness : 0);WS2812B, wired to pin 6. Bright enough to read through a resin lid.
From 1 in a bright room up to 255 in the dark.
We started with eight. The battery and MOSFET went.
map(ldr, 100, 900, 255, 1). Everything else is wiring.
Everything difficult came from that. If the sensor can see the lamp, the lamp dims itself. If readings jump, the LEDs flicker.

We drilled the photoresistor into the top corner of the bowl, close to the back. It isn’t directly behind, so a wall doesn’t block it. It’s high enough to read the room and out of the lamp’s own glow. The hole is barely wider than the sensor, so it sits flush.
At first the ring flickered while dimming instead of fading. Raw LDR readings swing a lot. Calibrating a fixed range (100–900) and constraining it gave the brightness a band to move within. The touch sensor triggered on its own too, until I fixed its ground connection and adjusted its sensitivity in code.
Everything inside can come out again. That mattered because we had to open it a lot when sensors failed.





01 / 06Change the light around it and the glow shifts to match. The only thing you ever touch is the sensor on the base.
Both sensors died on us near the end. The touch sensor came back the next day. The light sensor failed days before the presentation, and started working again once its replacement was on order. We never found out why. Next time I’d check connections and power first, and keep spares.
Translucent resin comes in any colour, so the lid can be swapped. Pick one: the page’s light changes with it.