Zackxell Gohwell
02 — Case studyPhysical computingRavensbourne · 2025

A lamp thatlistensdims itselfreads the roomglows at night

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.

Role
Arduino code, wiring, sensor calibration
Team
Pair project with Myles
Time
2–3 weeks
Tools
Arduino, Fusion 360, laser cutter, soldering iron
Scroll ↓
Gloo: bamboo bowl, teal resin lid, oak base
Hover the dots
Six parts you can see.

Point at a dot to find out what each part does, and why it’s there.

01 / 06Resin lid

Printed in translucent blue resin by Myles in Fusion 360. Lowered so the lamp stays compact.

02 / 06Light sensor

The photoresistor, drilled into the top corner near the back. High enough to read the room, out of the lamp’s own glow.

03 / 06Bamboo bowl

An IKEA bowl, already the right size and shape. One side sanded flat so it tilts towards you.

04 / 06Touch sensor

The only thing you touch. Tap to switch the ring on or off. Left on show so you can see how it works.

05 / 06USB power

USB was enough, so the 5V battery and MOSFET were cut.

06 / 06Oak base

Oak from the offcut bin, band-sawn at an angle and sanded round to match the bowl.

Gloo from the frontGloo from the side
01 Problem

The main light stays on long after anyone needs it.

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.

The storyboard
  1. Too brightThe main light: often too bright, and more energy than the moment needs.
  2. SofterSwitch to the lamp for a softer light.
  3. Dark, so fullIt senses low light and goes to full brightness.
  4. Daylight, so dimAs daylight comes in, it dims on its own.
  5. Only what’s missingIt only uses what the room is missing.
Too brightSofterDark, so fullDaylight, so dimOnly what’s missing01 / 05
02 Research
8parts at the start.
We needed six.
Hover a part to see its job

Neither 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.

  1. PhotoresistorA0
  2. Resistor10kΩ
  3. LED ringPIN 6
  4. Touch sensorPIN 2
  5. ArduinoUNO
  6. Breadboard5V / GND
  7. 5V batterycut
  8. MOSFETcut

The body came from IKEA Hacks.

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.

03 Form

Six directions, one tilt.

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.

Directions
  1. Tilted sphereChosen. Soft edges, and the light faces you.
  2. Arch
  3. Drum
  4. Slatted
  5. Pole
  6. Goblet
Tilted sphereArchDrumSlattedPoleGoblet01 / 06
Colour sketch of the platform inside the bowl
The platform moved everything inside. A base big enough for the electronics would have been too large, so a platform near the rim holds the LED ring with the Arduino hidden beneath it.
Sketch: a ring with two slots for a twist-on lid
A twist-lock lid we dropped. The bowl’s 7mm wall was too thin for sturdy notches, so the final lid uses an inner lip instead.
04 Inside

Take it apart.

Scroll to separate the parts, or drag Explode. Dim the room to see what the lamp does.

04 · Inside · 3D model
Assembled
LDR 900brightness 1 / 255
05 Logic

One line flips the room’s light into the lamp’s.

The room Bright900Light sensor reads
The lamp Almost off1LED brightness / 255
☾ Dark roomDrag to change the room’s lightBright room ☀

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);
Hover a line of code
0LEDs in the ring

WS2812B, wired to pin 6. Bright enough to read through a resin lid.

0brightness steps

From 1 in a bright room up to 255 in the dark.

0parts we kept

We started with eight. The battery and MOSFET went.

0line of logic

map(ldr, 100, 900, 255, 1). Everything else is wiring.

06 The hard part

A lamp that reads light is also making it.

Everything difficult came from that. If the sensor can see the lamp, the lamp dims itself. If readings jump, the LEDs flicker.

Holes drilled in the bowl for the sensor

Where the sensor lives

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.

Flicker, and false taps

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.

07 Build

Made to be opened.

Everything inside can come out again. That mattered because we had to open it a lot when sensors failed.

The build
  1. Two wooden blocksInside the rim, they hold the platform down.
  2. Twist to unlockLine the notches up with the blocks and the platform lifts out. The third hole is for your finger.
  3. Soldered, not pluggedThe old LED cable kept dropping out, so we soldered it before it could fail inside the lamp.
  4. A resin lidDesigned in Fusion 360 by Myles. Translucent blue resin, with an inner lip that stops it sliding off at an angle.
  5. Oak from the offcut binBand-sawn at an angle on both ends, then sanded round to match the bowl.
  6. On show, on purposeWe’d planned to hide the sensor, then liked seeing how the lamp works.
Two wooden blocksTwist to unlockSoldered, not pluggedA resin lidOak from the offcut binOn show, on purpose01 / 06
08 Decisions

What we kept, and what we cut.

Kept · click a row to see what we cut
IKEA bamboo bowl+
Instead ofCarved blocks · stacked plywood · fully printed body
BecauseRight size and shape already, and the warm wood we wanted
Electronics inside, under a platform+
Instead ofEverything in the base
BecauseA base big enough would have been too large
Bowl tilted on a sanded-flat side+
Instead ofSitting upright
BecausePoints the light at the person
Lid with an inner lip+
Instead ofTwist-lock slots and notches
BecauseA 7mm wall was too thin for sturdy notches
Touch sensor on show+
Instead ofFlush and hidden
BecauseShows how the lamp works
USB power+
Instead of5V battery and MOSFET
BecauseFewer parts, same result
09 Result

The finished lamp responds to the room.

Finished lamp. Brightness follows the room.
Where it started. The same logic on a breadboard.

Change the light around it and the glow shifts to match. The only thing you ever touch is the sensor on the base.

10 Reflection

What I’d do next.

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.

  1. Test with real peopleOur testing was the two of us in a studio. A week on a few people’s desks, counting every tap on the sensor, would show how often the automatic brightness gets it wrong.
  2. A custom PCBThe breadboard and jumper wires work, but they’re messy and fragile.
  3. Auto-off after two hoursFor when someone falls asleep or leaves with the lamp at full brightness.
  4. Clap to switchA sound sensor, if it can ignore everything that isn’t a clap.

Lids in any colour.

Translucent resin comes in any colour, so the lid can be swapped. Pick one: the page’s light changes with it.