Introduction: Circadian Light
I have made a Circadian Light using a Raspberry Pi Pico to control of the LEDs, and made a frame out of wood and 3D print.
Supplies
Tools
- Soldering Iron and Wire
Electronics
- Raspberry Pi Pico
- Neopixel Stick x 2
- 6 Wires (Two Red, Two White, Two Black)
Lamp
- 3D Printed Lamp Shade
Step 1: Wire Neopixels
Wire and solder between the two Neopixels, attaching GND to GND, DOUT to DIN and 5VDC to 5VCD.
Step 2: Wire Neopixels to Raspberry Pi Pico
Wire and solder:
Neopixel GND to Raspberry Pi pin 40 (GND)
Neopixel 5VCD to Raspberry Pi pin 38 (VBUS)
Neopixel DIN to Raspberry Pi pin 1 (GP0)
Step 3: Test Code
import machine
import neopixel
import time
# Configuration
NUM_PIXELS = 16 # Change if your NeoPixel stick has more LEDs
PIN_NUM = 0 # GPIO0 = physical pin 1
# Initialize NeoPixel
np = neopixel.NeoPixel(machine.Pin(PIN_NUM), NUM_PIXELS)
# Helper to set all pixels to a color
def set_all(r, g, b):
for i in range(NUM_PIXELS):
np[i] = (r, g, b)
np.write()
# Fade in/out function
def fade_to_color(r_target, g_target, b_target, steps=50, delay=0.02):
for i in range(steps + 1):
r = int(r_target * i / steps)
g = int(g_target * i / steps)
b = int(b_target * i / steps)
set_all(r, g, b)
time.sleep(delay)
def fade_off(steps=50, delay=0.02):
current = np[0] # Assuming all same color
r0, g0, b0 = current
for i in range(steps, -1, -1):
r = int(r0 * i / steps)
g = int(g0 * i / steps)
b = int(b0 * i / steps)
set_all(r, g, b)
time.sleep(delay)
# Main loop
while True:
# Fade into blue
fade_to_color(25, 100, 255)
time.sleep(3)
# Fade off
fade_off()
time.sleep(2)
# Fade into orange
fade_to_color(255, 100, 0)
time.sleep(3)
# Fade off
fade_off()
time.sleep(2)
Code similar to the final code, to make sure all connections are correct and working, if all works continue to next step.
Step 4: Enter Final Code
import machine
import neopixel
import time
# Configuration
NUM_PIXELS = 16 # Change if your NeoPixel stick has more LEDs
PIN_NUM = 0 # GPIO0 = physical pin 1
# Initialize NeoPixel
np = neopixel.NeoPixel(machine.Pin(PIN_NUM), NUM_PIXELS)
# Helper to set all pixels to a color
def set_all(r, g, b):
for i in range(NUM_PIXELS):
np[i] = (r, g, b)
np.write()
# Fade in/out function
def fade_to_color(r_target, g_target, b_target, steps=50, delay=0.02):
for i in range(steps + 1):
r = int(r_target * i / steps)
g = int(g_target * i / steps)
b = int(b_target * i / steps)
set_all(r, g, b)
time.sleep(delay)
def fade_off(steps=50, delay=0.02):
current = np[0] # Assuming all same color
r0, g0, b0 = current
for i in range(steps, -1, -1):
r = int(r0 * i / steps)
g = int(g0 * i / steps)
b = int(b0 * i / steps)
set_all(r, g, b)
time.sleep(delay)
# Main loop
while True:
# Fade into orange
fade_to_color(255, 100, 0)
time.sleep(3600)
# Fade off
fade_off()
time.sleep(36000)
# Fade into blue
fade_to_color(25, 100, 255)
time.sleep(3600)
# Fade off
fade_off()
time.sleep(46800)
Step 5: Print 3D Model Lamp
Print Lamp Shade with Clear 3D laminate.
Print Electronics Holder with Black/Neutral coloured 3D Laminate
Step 6: Assemble
Assemble all the pieces




