Det ultimate smarte nærværslyset

1 time Byggetid
Mellomnivå vanskelighet
Ferdigheter
3D-printing
Lodding

Slutt å vifte med armene i mørket. Tradisjonelle PIR-sensorer er supre til å oppdage en gående person, men de svikter når du sitter i sofaen og leser eller jobber ved skrivebordet ditt.

Start Project

Slutt å vifte med armene i mørket. Tradisjonelle PIR-sensorer er supre til å oppdage en gående person, men de svikter når du sitter i sofaen og leser eller jobber ved skrivebordet ditt. Dette prosjektet bruker 24 GHz mmWave-radar for å oppdage «mikrobevegelser» som pust, slik at smartlysene dine holder seg på så lenge du er i rommet.

Maskinvarematrise

Hjernen

Tilstedeværelsessensoren

Lyssensor (Valgfritt)

Koblingsskjema

  • VCC (Sensor) → 5V (ESP32)
  • GND (Sensor) → GND (ESP32)
  • TX (Sensor) → GPIO 21 (ESP32)
  • RX (Sensor) → GPIO 20 (ESP32)

Kode

Vi anbefaler å bruke ESPHome til dette prosjektet, siden det har innebygd støtte for LD2410.

# Simple Presence Detection Config
uart:
  id: uart_bus
  tx_pin: GPIO20
  rx_pin: GPIO21
  baud_rate: 256000

ld2410:

binary_sensor:
  - platform: ld2410
    has_target:
      name: "Presence Detected"
    has_moving_target:
      name: "Moving Target"
    has_still_target:
      name: "Still Target"
#include <ld2410.h>

// Use Hardware Serial 1 for the sensor (ESP32)
// Connect Sensor TX to ESP32 RX (GPIO 21)
// Connect Sensor RX to ESP32 TX (GPIO 20)
#define MONITOR_SERIAL Serial
#define RADAR_SERIAL Serial1
#define RADAR_RX_PIN 21
#define RADAR_TX_PIN 20

ld2410 radar;

void setup() {
  MONITOR_SERIAL.begin(115200);
  
  // Initialize radar serial
  RADAR_SERIAL.begin(256000, SERIAL_8N1, RADAR_RX_PIN, RADAR_TX_PIN);
  
  MONITOR_SERIAL.println(F("\nFibel.no: Nærværssensor starter..."));

  if (radar.begin(RADAR_SERIAL)) {
    MONITOR_SERIAL.println(F("LD2410 funnet og klar!"));
  } else {
    MONITOR_SERIAL.println(F("Kunne ikke finne LD2410. Sjekk kabling."));
  }
}

void loop() {
  radar.read(); // Continuous reading
  
  if (radar.isConnected()) {
    if (radar.presenceDetected()) {
      MONITOR_SERIAL.print(F("Tilstedeværelse oppdaget! "));
      if (radar.stationaryTargetDetected()) {
        MONITOR_SERIAL.print(F("Stasjonært mål funnet på "));
        MONITOR_SERIAL.print(radar.stationaryTargetDistance());
        MONITOR_SERIAL.println(F(" cm"));
      }
    } else {
      MONITOR_SERIAL.println(F("Ingen i rommet."));
    }
  }
  delay(200); // Small delay for readability in Serial Monitor
}
from machine import UART, Pin
import time

# Initialize UART on the ESP32-C3
# TX=20, RX=21, Baud=256000
uart = UART(1, baudrate=256000, tx=20, rx=21)

print("Fibel.no: Nærværssensor (MicroPython) starter...")

def parse_ld2410(data):
    # Basic frame check for LD2410 (simplified)
    # Header: F4 F3 F2 F1 | Tail: F8 F7 F6 F5
    if len(data) >= 23 and data[0] == 0xF4:
        # Byte 13 contains target status
        # 0x00: No target, 0x01: Moving, 0x02: Stationary, 0x03: Both
        status = data[13]
        if status > 0:
            return True
    return False

while True:
    if uart.any():
        raw_data = uart.read()
        if parse_ld2410(raw_data):
            print("Tilstedeværelse oppdaget!")
        else:
            print("Rommet er tomt.")
            
    time.sleep(0.5)

Hvorfor dette settet?

Ved å velge LD2410C får du en sensor som fungerer gjennom plastinnkapslinger, noe som gjør den perfekt for et «skjult» smarthjemoppsett. Koble den til Home Assistant for å utløse dine eksisterende smartpærer eller en LED-stripe.