SMART LAMP
En biologisk optimeret lysterapi-lampe til den mørke danske vinter.
A biologically optimised light therapy lamp for the dark Danish winter.
PCB Design · Thermal Management · Gemini API · USB-C PD
Prototype Demo & Gennemgang Prototype Demo & Walkthrough
🔊 Videoen afspilles automatisk uden lyd. Klik på højttaleren for at slå lyden til.
🔊 Video demonstration in Danish only. Click the speaker icon to enable audio.
Live MVP Landingsside Live MVP Landing Page
Vi byggede en landingsside for at teste markedets efterspørgsel. Dette er et reelt eksempel på Lean Startup-metoden — at måle kundernes interesse før der investeres yderligere.
We built a landing page to test market demand. This is a real example of the Lean Startup methodology — measuring customer interest before investing further.
Åbn Bio Lamp Landingsside → Open Bio Lamp Landing Page →Problemet The Problem
Over 10% af danskerne lider af vinterdepression (Seasonal Affective Disorder / SAD). I den mørke danske vinter, med typiske arbejdstider fra 8 til 16, er eksponeringen for naturligt sollys kritisk lav. Mens forbrugere tyr til kommercielle 10W RGB LED wake-up lamper, er disse baseret på smalbånds-halvleder-LED'er, der udsender højintense blå lys-spikes for at undertrykke melatonin og gennemtvinge opvågning, men de udsender praktisk talt nul Near-Infrared (NIR) energi (700nm til 1400nm).
Over 10% of Danes suffer from winter depression (Seasonal Affective Disorder / SAD). In the dark Danish winter, with typical working hours from 8 to 16, natural sunlight exposure is critically low. While consumers turn to commercial 10W RGB LED wake-up lamps, these rely on narrow-band semiconductor LEDs that emit high-intensity blue light spikes to suppress melatonin and force waking, but they emit virtually zero Near-Infrared (NIR) energy (700nm to 1400nm).
Dette skaber hvad professor Glen Jeffery (UCL) betegner som en "Infrared Famine". Forskning viser, at dette NIR-underskud forårsager et fald i mitokondriefunktionen og metabolisk underskud. Eksponering for lys med lange bølgelængder inden for de første timer efter opvågning øger frigivelsen af kortisol, hvilket er gavnligt på mange måder. Derudover undertrykker brug af LED-belysning ved sengen om aftenen melatonin, hvilket påvirker overgangen til søvn negativt. En blackbody radiator har ikke denne effekt, hvilket gør den til en meget intuitiv erstatning for sengelampen.
This creates what Professor Glen Jeffery (UCL) identifies as an "Infrared Famine". Research shows that this NIR deficit causes a mitochondrial decline and metabolic deficiency. Exposure to long wavelength lighting within the first hours of waking increases the release of cortisol, which is beneficial in numerous ways. Additionally, using bedside LED lighting in the evening suppresses melatonin negatively impacting the transition to sleep. A blackbody radiator does not have this effect, making it a very intuitive bedroom desk lamp replacement.
Hypotesen The Hypothesis
Et hybridt lysterapi-system, der kombinerer high-CRI LED'er med en blackbody radiator (tungsten-halogen), kan levere det fulde solspektrum (400nm til 1500nm+). Ved at bruge en HUSB237 negotiator til at forhandle 20V og høj strøm fra en standard USB-C PD strømforsyning kan vi bygge en sikker og biologisk optimal wake-up lampe.
A hybrid lysterapi (light therapy) system combining high-CRI LEDs with a black-body radiator (tungsten-halogen) can deliver the full solar spectrum (400nm to 1500nm+). By using a HUSB237 negotiator to request 20V and high current from a standard USB-C PD power supply we can build a safe and biologically optimal wake-up lamp.
For at validere dette satte vi os for at bygge en ESP32-S3 styret smart lampe:
To validate this, we set out to build an ESP32-S3 controlled smart lamp:
- Forhandle 20V fra standard USB-C PD opladere og drive halogen PWM dæmpning med soft-start logik for at beskytte glødetråden.
- Håndtere halogenvarme (>200°C) sikkert gennem en skandinavisk CNC-fræset træbase og en passiv, konvektionskølet børstet aluminiums-topplade.
- Implementere gnidningsfri lokal betjening, herunder dobbelt-klap aktivering og stemmestyring uden behov for en mobil-app.
- Negotiating 20V from standard USB-C PD chargers and driving halogen PWM dimming with soft-start logic to protect the filament.
- Managing halogen heat (>200°C) safely through a Scandinavian CNC-milled wood base and a passive, convection-cooled brushed aluminum top plate.
- Implementing zero-friction local controls, including double-clap triggers and voice-control without requiring a mobile app.
Iterationslog Iteration Log
V1 — Halogen driving PoC V1 — Halogen driving PoC
Det oprindelige proof-of-concept indeholdt en klassisk ESP32, et 1.14" Tenstar T-Display, et mekanisk analogt joystick og to serieforbundne 12V halogenpærer.
The original proof-of-concept featured a classic ESP32, a 1.14" Tenstar T-Display, a mechanical analog joystick, and two series-connected 12V halogen bulbs.
Feedback: Brugergrænsefladen var intuitiv, men at integrere joysticket i et rent design var besværligt. Printkortet (PCB) blev meget varmt på grund af stråling fra halogenpærerne og store switching-tab i MOSFET'en uden brug af en gate driver.
Feedback: The user interface was intuitive, but incorporating the joystick in a clean design was troublesome. PCB got very hot due to radiation from halogen bulbs and high switching losses in the mosfet without using gate driver.
V2 — Voice Input og premium design V2 — Voice Input and premium design
Input blev ændret til en roterende encoder med premium-følelse for en samlet betjeningsmekanisme i én komponent. Der blev lavet et intuitivt UI baseret på blot drejning, kort tryk, dobbelt tryk og langt tryk på encoderen. Systemet med et enkelt input betyder dog, at ændring af flere indstillinger kan være omstændeligt. For at løse dette blev der tilføjet stemmekommandoer (f.eks. "Sæt alarm til 07:30") og dobbelt-klap aktivering med et MEMS mikrofonmodul.
Input was changed to premium-feeling rotational encoder for single component input mechanism. An intuitive UI is made based on just turning, short press, double press and long press of the encoder. The single input system means changing multiple settings can be cumbersome. To address this, voice command entry (e.g., "Set alarm for 07:30") and double-clap triggers was added with a MEMS microphone module.
Oprindeligt implementerede vi et lokalt neuralt netværk til keyword spotting (ved hjælp af Edge Impulse), som kørte lokalt på ESP32-S3. Dette udnytter, at sætningen "set alarm" er ens på mange sprog, så en enkelt wake-word detektionsalgoritme kunne bruges på tværs af sprog. Selvom det var elegant, betød det, at enheden altid skulle "lytte", hvilket ikke er rart i et soveværelse. I stedet vækkes mikrofonen nu kun ved et dobbelt tryk, hvilket aktiverer en 5-sekunders optagelse, der sendes til Gemini API'et sammen med en prompt om at returnere et bestemt format.
Initially, we implemented a local keyword spotting neural network (using Edge Impulse) running locally on the ESP32-S3. This leverages the fact that the sentence "set alarm" is identical in many languages, meaning a single wake word detection algorithm could be used for many languages. Although elegant, this means the device would always be "listening", which is not great in a bedroom. Instead, the microphone is only waken up by a double press which enabled a 5s recording that is sent to the Gemini API along with a prompt to return a certain format.
Alarmkonfigurationer gemmes i ESP32'erens non-volatile flash-hukommelse for at bevare brugerens indstillinger over genstarter, hvilket minimerer friktion. Kabinettet overgik fra et simpelt 3D-printet kabinet til en træbase med en tyk børstet aluminiums-topplade, der fungerer som passiv køleplade.
Alarm configurations are saved to the ESP32's non-volatile storage to save user input across power ups, reducing friction. The enclosure transitioned from simple 3d printed case to a wood base with a thick brushed aluminum top plate acting as a passive heatsink.
Disse er teknisk set ikke v2, men snarere v1.5, da dette var en test med plast med træ-"tape" omkring. Funktionelt v2, men uden at betale for træbokse og metallåg. Rigtige v2 billeder kommer snart.
These are technically not v2, but rather v1.5 as this was a test for plastic with wooden "tape" around it. Functionally v2, but without paying up for wooden boxes and metal lid. Real v2 pictures coming soon.
Teknisk opbygning Technical Build
Elektronik & PCB Electronics & PCB
- Power Negotiation: HUSB237-chip konfigureret til at forhandle 20V @ 5A fra en standard USB-C PD oplader.
- Switching: Low-side dæmpning med high-power N-channel MOSFETs drevet af mikrocontrolleren gennem en gate driver anvendes til både LED- og halogen-lyskilder.
- Voltage Rails & MCU: LM2596 buck converter stepper 20V VCC ned til 5V for at forsyne Waveshare ESP32-S3 med integreret 1.47" LCD-skærm.
- Lydoptagelse: Knowles SPH0645LM4H-B omnidirektionel I2S MEMS mikrofon.
- Custom PCB design: designet i EasyEDA og produceret/samlet af JLCPCB.
- Power Negotiation: HUSB237 chip configured to request 20V @ 5A from a standard USB-C PD charger.
- Switching: Low-side dimming with high-power N-channel MOSFETs driven by microcontroller through a gate driver is used for both LED and halogen light sources.
- Voltage Rails & MCU: LM2596 buck converter steps down 20V VCC to 5V to power the Waveshare ESP32-S3 with integrated 1.47" LCD display.
- Audio Capture: Knowles SPH0645LM4H-B omnidirectional I2S MEMS microphone.
- Custom PCB design: using EasyEDA and assembly by JLCPCB.
DSP Lyd-pipeline DSP Audio Pipeline
- Dual-Core eksekvering: Core 0 kører UI og håndterer EC11 encoder interrupts. Core 1 afvikler netværk og lyd-opgaver.
- Lokal klap-detektering: Core 1 behandler løbende 1600-sample chunks af I2S mikrofondata. Den beregner rå signal-peak og Root Mean Square (RMS). En transient spike med
peak > 11000ogrms < 5000markeres. Hvis en dobbelt peak detekteres inden for et 200ms–800ms tidsvindue, sætter systemet et flag for at slukke lampen og afvise aktive alarmer. - Gemini Speech-to-Intent: Dobbeltklik på encoder-knappen starter optagelse. ESP32-S3 optager 5 sekunders lyd i PSRAM, tilføjer 6x software-gain, downsampler fra 16kHz til 8kHz, pakker det med en 44-byte WAV-header, base64-enkoder det og poster JSON-payloadet direkte til Google Gemini API'et. System prompten instruerer Gemini i udelukkende at returnere
HH:MMværdier i JSON, som derefter vises på skærmen og bruges til at ændre alarmindstillingerne.
- Dual-Core Execution: Core 0 runs the UI and handles EC11 encoder interrupts. Core 1 runs the networking and audio tasks.
- Local Clap Detection: Core 1 continuously processes 1600-sample chunks of I2S microphone data. It calculates the raw signal peak and Root Mean Square (RMS). A transient spike with
peak > 11000andrms < 5000is flagged. If a double peak is detected within a 200ms–800ms window, the system flips a flag to shut off the lamp and dismiss active alarms. - Gemini Speech-to-Intent: Double-clicking the encoder button initiates recording. The ESP32-S3 records 5 seconds of audio into PSRAM, applies 6x software gain, downsamples from 16kHz to 8kHz, packages it with a 44-byte WAV header, base64-encodes it, and posts the JSON payload directly to the Google Gemini API. The system prompt instructs Gemini to output only
HH:MMvalues in JSON, which are then displayed on screen and used to change alarm settings.
Mekanik / Kabinet Mechanical / Enclosure
- Varmehåndtering: Halogenpærer arbejder ved temperaturer >200°C, og high-power LED'erne skal aflede op til 50W varme ved maksimal lysstyrke. En børstet aluminiums-topplade bruges som en massiv passiv køleplade til at bortlede varme fra halogenfatningen og printkortet via naturlig konvektion.
- Thermals: Halogen bulbs operate at temperatures >200°C and the high power LEDs need to dissipate up to 50W of heat at maximum brightness. A brushed aluminum top plate is utilized as a massive passive heatsink to dissipate heat from halogen bulb mount and the PCB via natural convection.
Tidsforbrug Time Investment
| Fase | Timer (ca.) |
|---|---|
| V1 | 50 |
| V2 | 30 |
| V3 | 25 |
| I alt | 105 |
| Phase | Hours (approx) |
|---|---|
| V1 | 50 |
| V2 | 30 |
| V3 | 25 |
| Total | 105 |