WiFi-Styrt Nattlys for Barnerommet: En trygg start på kvelden
Et tilpassbart, dimbart LED-lys som kan styres via mobilen eller stilles inn til å endre farge automatisk basert på tidspunktet på dagen.
Å skape en trygg atmosfære ved leggetid er avgjørende for både barn og voksne. Med dette prosjektet bygger vi et smart nattlys som ikke bare gir et lunt og behagelig lys, men som også kan tilpasses familiens rutiner direkte fra telefonen eller smarthussystemet ditt. Lyset kan dimmes ned, bytte til søvnfremmende farger på kvelden, og til og med fungere som en visuell «nå er det morgen»-indikator for de minste.
Hjernen
LED strip
Tilbehør
Koblingslogikk og Spenningsnivåer
Teknisk advarsel: Det er viktig å forstå spenningsnivåene her. ESP32-C3 opererer med 3.3V logikk, mens WS2812B forventer 5V logikk på datalinjen for å lese fargekodene feilfritt.
Selv om det noen ganger fungerer å koble 3.3V-datalinjen direkte til stripen over svært korte avstander, vil dette ofte føre til flimring eller feil farger etter hvert som komponentene blir varme. For et stabilt produkt anbefaler vi sterkt å bruke en logikknivåomformer (Level Shifter). Pass på at strømmen er frakoblet under montering!
| Komponent (Fra) | Pinne / Tilkobling | Komponent (Til) | Pinne / Tilkobling | Merknad |
| 5V Strømforsyning | VCC (+) | WS2812B LED-stripe | 5V | Koble kondensatoren (1000 µF) parallelt over VCC og GND her. |
| 5V Strømforsyning | GND (-) | WS2812B LED-stripe | GND | Felles jording for alle komponenter er kritisk! |
| 5V Strømforsyning | VCC (+) | ESP32-C3 | 5V / VBUS | Gir strøm til selve mikrokontrolleren. |
| 5V Strømforsyning | GND (-) | ESP32-C3 | GND | Felles jording. |
| ESP32-C3 | GPIO 8 | Level Shifter (LV Side) | Input | Datasignalet fra ESP32 (3.3V). |
| Level Shifter (HV) | Output | WS2812B LED-stripe | Data In (DIN) | Gjennom en 330 Ohm motstand (nå forsterket til et rent 5V datasignal). |
Programmering og Konfigurasjon
Det er flere måter å vekke dette lyset til live på. Vi presenterer to vanlige løsninger: ren kode via Arduino IDE for deg som vil forstå logikken, og en «ferdig» konfigurasjon for Home Assistant (ESPHome) for deg som vil ha det rett inn i smarthuset
Dette er en enkel kode som setter opp et beroligende, varmt lys. Perfekt om nattlyset skal stå alene uten en smarthub.
#include <FastLED.h>
#define LED_PIN 8 // Datapinnen på ESP32-C3
#define NUM_LEDS 30 // Husk å endre til antall LEDs du faktisk bruker!
#define BRIGHTNESS 100 // Lysstyrke (0-255)
#define LED_TYPE WS2812B
#define COLOR_ORDER GRB
CRGB leds[NUM_LEDS];
void setup() {
delay(3000); // En liten sikkerhetsforsinkelse ved oppstart
FastLED.addLeds<LED_TYPE, LED_PIN, COLOR_ORDER>(leds, NUM_LEDS).setCorrection(TypicalLEDStrip);
FastLED.setBrightness(BRIGHTNESS);
}
void loop() {
// Skaper et mykt, varmt oransje "nattlys" (Varm fargetemperatur reduserer blått lys)
fill_solid(leds, NUM_LEDS, CRGB(255, 120, 10));
FastLED.show();
delay(1000);
}Dette oppsettet gjør lampen virkelig smart. Kopier denne YAML-koden inn i ESPHome-dashbordet ditt. Da kan du styre lysstyrke, farger og velge animerte effekter rett fra mobilen.
# Grunnleggende ESPHome oppsett for ESP32-C3
esp32:
board: esp32-c3-devkitm-1
variant: esp32c3
# Konfigurasjon for WS2812B LED-stripe
light:
- platform: fastled_clockless
chipset: WS2812B
pin: GPIO8
num_leds: 30
rgb_order: GRB
name: "Barnerom Nattlys"
id: nattlys_barnerom
restore_mode: RESTORE_DEFAULT_OFF # Unngår at lyset slår seg på til full styrke etter et strømbrudd
effects:
- random:
name: "Rolige farger"
transition_length: 5s
update_interval: 10sDersom du foretrekker Python og bruker et verktøy som Thonny IDE, er dette den raskeste måten å få liv i nattlyset på. Koden under bruker det innebygde neopixel-biblioteket til å skape det samme lune, varme lyset.
Kopier denne koden inn i main.py på din ESP32-C3, slik at lyset starter automatisk hver gang den får strøm:
import machine
import neopixel
import time
# --- Konfigurasjon ---
LED_PIN = 8 # Datapinnen vi bruker på ESP32-C3
NUM_LEDS = 30 # Husk å justere dette til din faktiske lengde!
# Sett opp NeoPixel-objektet
pin = machine.Pin(LED_PIN, machine.Pin.OUT)
np = neopixel.NeoPixel(pin, NUM_LEDS)
def sett_varmt_nattlys(r, g, b, lysstyrke_prosent=100):
"""
Setter fargen på alle LEDs med en justert lysstyrke.
For nattlys vil vi ha mye rødt, litt grønt og null blått.
"""
# Justerer RGB-verdiene basert på ønsket lysstyrke (0-100%)
faktor = lysstyrke_prosent / 100.0
r_dim = int(r * faktor)
g_dim = int(g * faktor)
b_dim = int(b * faktor)
for i in range(NUM_LEDS):
np[i] = (r_dim, g_dim, b_dim)
np.write()
# --- Hovedløkke ---
print("Fibel-nattlys starter opp...")
while True:
# Setter en varm oransje/gul farge (R:255, G:120, B:10)
# Tips: Juster den siste verdien (lysstyrke) for å gjøre det svakere på kvelden
sett_varmt_nattlys(255, 120, 10, lysstyrke_prosent=50)
# Vi trenger ikke oppdatere stripen hele tiden når den har en statisk farge
time.sleep(10)Veien Videre
Gratulerer, du har nå bygget et smart, trygt og tilpassbart nattlys! Her er noen forslag til hvordan du kan optimalisere prosjektet videre:
- Automatiser i Home Assistant: Lag en automasjon som gradvis reduserer lysstyrken over 30 minutter ved leggetid (en «solnedgang»-effekt). Du kan også stille det inn til å lyse svakt grønt klokken 06:30 for å signalisere til barnet at det er greit å stå opp.
- Legg til en fysisk knapp: Ikke alle i familien vil bruke mobilen hele tiden. Du kan lodde en taktil knapp til en ledig GPIO-pinne (f.eks. tilkoblet GND med intern pull-up) og konfigurere ESPHome til å slå lyset av/på ved et trykk.
- Integrer en temperatursensor: Siden du allerede har en ESP32 koblet til strøm på rommet, kan du enkelt koble til en DHT22 eller BME280 for å overvåke inneklimaet.
Er du usikker på motstandsverdier hvis du skal bygge inn flere knapper eller dioder? Ta turen innom våre Hjeplemidler og bruk Ohms lov-kalkulatoren vår for å dobbeltsjekke kretsen din før du lodder.

Legg igjen en kommentar