Detecteur de présence ESP32 + LD2410c

Bonjour,

Je viens de finir de bricoler mon détecteur de présence pour allumer la lumière de mes toilettes automatiquement (ESP32 avec esphome + LD2410c). Je suis plutôt satisfait du résultat, la détection est rapide et mes lumières s’allument quasi instantanément. Cependant, lorsque je reste un peu longtemps dans la pièce immobile, puis que je sors de la zone de détection de l’appareil, la transition pour le changement d’état de détection est trèèèèès longue (et donc les lumières metten du temps à s’éteindre). Ca peut dure jusqu’à 30 secondes à une minute.
Sachant que le détecteur est à 100% sur certaines gates immobile. (Je suis à environ 50 cm du détecteur quand assis sur les toilettes). A croire qu’il sature et que ça ne lui fait pas plaisir…

Avez-vous déjà rencontré ce problème, et si oui, comment le régler?

Ci-dessous un exemple d’état quand il y a quelqu’un sur les toilettes.

Bonjour,
j’ai le même comportement, mais sa dure pas 30sec. Il est sur timeout a 2s, ça peut mettre 10s quand je sors de la zone. Je l’utilise sur un ESP32-S3 flash16mb Psram8mb.

Mais quel est la raison de ce ‹ lag › ?

Question pourquoi avoir 8 zone passage en 0.20-0.25 ? Ou 0.75 ?

Huit zones passages? C’est à dire? Je n’ai pas compris la question

Dans ton graph on voie 8 zone axe horizontal.

C’est 8 zone/palier sont tes distance de détection

Dans le ld2410c tu peut configurer chaque palier/zone avec une distance de 0.75 ou 0.20 ( de mémoire)

Ce qui fait que le ld2410 peut détecter quand c’est configurer sur 0.75 jusqu’à une distance maxi d’environ 6m (8 x 0.75) ou alors jusqu’à environ 2m (8 x 0,25)

À partir de là tu peut ensuite mettre des seuil pour indiquer si au dessus de ce seuil pour chaque palier alors tu considère qu’il y a une présence en dessous il n’y pas de présence

Pour désactiver un pallier ou un range de palier complet, il faut configurer le seuil à 100

Exemple :
Tes toilettes font 2m de long, là où tu pose le popotin se trouve à environ 1m de distance du capteur tu configure donc la détection du palier 4 jusqu’à 8 et du palier 0 à 3 avec un seuil de détection à 100

Ce qui fait que seulement quand la personne ouvre la porte (le détecteur d’ouverture par exemple allume la lumière, tu te pose sur le trône la détecteur capte, tu sort du trône, il détecte plus personne dans les Seine 4 à 8 et donc descend en dessous du seuil et sa éteins la lumière .

La seul chose compliquer et de trouver le seuil limite de détection car cela et influencer par les onde qui se trouve autour, wifi, gsm etc…

Il faut que tu face des vérifications sans personne dans la pièce et en ayant une personne de différente taille et corpulence pour trouver le point commun de seuil de détection….

Sa prend un peut de temps mais une fois bien config sa fonctionne très bien.

Avec cette méthode chez moi dans mon bureau la lumière s’éteint en 2sec max après être sortie de la pièce

Ok, je comprend mieux la question, merci :slight_smile:

En fait je n’ai pas vraiment de nécessité à définir des zones actives ou non (je pense). Je m’explique :

Mes toilettes font environ deux mètres de long, le détecteur est sur le calibre « 0.25 » (donc 8 * 0.25 = 2m), tout est ok et il ne me « voit » pas lorsque je suis hors des toilettes (plutôt bien foutu pour le coup, la détection a lieu pile poil quand je passe le pallier, plutôt content ^^).
Ensuite, la zone de détection spécifique quand on est assis sur les toilettes est entre les gates 1 et 4.
Ce qui me pose problème sont ces deux points :

  • On voit bien sur les deux graphiques que j’ai publié que le mode mobile me détecte entre 0 et 4, plutôt cohérent (bien qu’il n’y ai rien entre la zone 0 et 1), alors que le mode immobile ne détecte aucun signale entre les gates 0 et 2 et me « voit » entre 2 et 8 (plutôt étonnant qu’il ne me voit pas plus proche, mais surtout très étonnant qu’il détecte une présence entre les zones 4 et 8, je ne suis pas si gros que ça ^^).

  • Le changement d’état de « détecté » à « non détecté » est très long : contrairement à la courbe mobile qui est très réactive en fonction des mouvements que l’on fait, la courbe immobile met beaucoup de temps à diminuer en intensité une fois que je suis sorti des toilettes, elle met du temps à « s’actualiser » (vu qu’"il n’y a plus rien à détecter), et mets donc du temps à passer à 'état « non détecté ». En gros, la courbe immobile reste sur « 100% » dans les zones 2 et 8 alors que je suis sorti des toilettes depuis plusieurs secondes, et cette dernière peut mettre facilement 30 secondes avant de diminuer significativement en intensité (inférieur à ma valeur seuil).

Ok, pourrais-tu envoyer toute ta config sur l’EPS

Car ça pourrait être un problème de ton LD2410 ou du firmware/modèle installé dessus…

Voci le code YAML :

esphome:
  name: detecteur
  friendly_name: detecteur
  platformio_options: 
    board_build.extra_flags:
      - "-DARDUINO_USB_CDC_ON_BOOT=0"

# Example configuration entry
esp32:
  board: esp32dev
  framework:
    type: arduino
      
# Enable logging
logger:


# Enable Home Assistant API
api:
  encryption:
    key: "LAjhMy83UNrMTpOQbiwt7KGLBQHf4aunJMl0U1WtunE="

ota:
  - platform: esphome
    password: "d18f627750914a0a812770d3a80cf8ed"

wifi:
  ssid: xx
  password: xx

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Esp32 detecteur"
    password: "FApKPxy5S4I2"

captive_portal:

uart:
  tx_pin: GPIO17
  rx_pin: GPIO16
  baud_rate: 256000
  parity: NONE
  stop_bits: 1

ld2410:
  id: "capteur_ld"

binary_sensor:
  - platform: ld2410
    has_target:
      name: "Présence"
    has_moving_target:
      name: "Cible mobile"
    has_still_target:
      name: "Cible Immobile"
    out_pin_presence_status:
      name: "état broche présence"

  - platform: gpio
    pin: 15
    name: "broche gpio présence"
    device_class: presence         

sensor:
  - platform: ld2410
    light:
      name: "lumière"
    moving_distance:
      name: "Distance Déplacement"
    still_distance:
      name: "Distance Immobile"
    moving_energy:
      name: "Énergie Mobile"
    still_energy:
      name: "Énergie Immobile"
    detection_distance:
      name: "Distance de détection"
    g0:
      move_energy:
        name: "g0 Énergie Mobile"
      still_energy:
        name: "g0 Énergie Immobile"
    g1:
      move_energy:
        name: "g1 Énergie M"
      still_energy:
        name: "g1 Énergie I"
    g2:
      move_energy:
        name: "g2 Énergie M"
      still_energy:
        name: "g2 Énergie I"
    g3:
      move_energy:
        name: "g3 Énergie M"
      still_energy:
        name: "g3 Énergie I"
    g4:
      move_energy:
        name: "g4 Énergie M"
      still_energy:
        name: "g4 Énergie I"
    g5:
      move_energy:
        name: "g5 Énergie M"
      still_energy:
        name: "g5 Énergie I"
    g6:
      move_energy:
        name: "g6 Énergie M"
      still_energy:
        name: "g6 Énergie I"
    g7:
      move_energy:
        name: "g7 Énergie M"
      still_energy:
        name: "g7 Énergie I"
    g8:
      move_energy:
        name: "g8 Énergie M"
      still_energy:
        name: "g8 Énergie I"

  - platform: wifi_signal 
    name: Signal Wifi
    id: wifi_signal_db
    filters:
      - lambda: return min(max(2 * (x + 100.0), 0.0), 100.0);
    update_interval: 60s
    unit_of_measurement: "%"
    entity_category: "diagnostic"


switch:
  - platform: ld2410
    engineering_mode:
      name: "mode ingénierie"
    bluetooth:
      name: "contrôle bluetooth"

number:
  - platform: ld2410
    timeout:
      name: "délai"
    light_threshold:
      name: "seuil lumière"
    max_move_distance_gate:
      name: "distance déplacement maximal"
    max_still_distance_gate:
      name: "distance Immobile maximal"
    g0:
      move_threshold:
        name: "g0 seuil Énergie M"
      still_threshold:
        name: "g0 seuil I"
    g1:
      move_threshold:
        name: "g1 seuil I"
      still_threshold:
        name: "g1 seuil"
    g2:
      move_threshold:
        name: "g2 seuil M"
      still_threshold:
        name: "g2 seuil I"
    g3:
      move_threshold:
        name: "g3 seuil M"
      still_threshold:
        name: "g3 seuil I"
    g4:
      move_threshold:
        name: "g4 seuil M"
      still_threshold:
        name: "g4 seuil I"
    g5:
      move_threshold:
        name: "g5 seuil M"
      still_threshold:
        name: "g5 seuil I"
    g6:
      move_threshold:
        name: "g6 seuil M"
      still_threshold:
        name: "g6 seuil I"
    g7:
      move_threshold:
        name: "g7 seuil M"
      still_threshold:
        name: "g7 seuil I"
    g8:
      move_threshold:
        name: "g8 seuil M"
      still_threshold:
        name: "g8 seuil I"

text_sensor:
  - platform: ld2410
    version:
      name: "version du micrologiciel"
    mac_address:
      name: "adresse mac"

select:
  - platform: ld2410
    distance_resolution:
      name: "résolution de distance"
    light_function:
      name: "fonction de lumière"
    out_pin_level:
      name: "niveau de broche de sortie"

button:
  - platform: restart
    icon: mdi:power-cycle
    name: "ESP Reboot"   
  - platform: ld2410
    restart:
      name: "redémarrer"
    query_params:
      name: "paramètres de requête"
    

Voici mon fichier de config:

S2 mini :


avec detécteur LD2410C:

Code ESP:

esphome:
  name: detecteur-presence-bureau
  friendly_name: Détecteur présence bureau
  platformio_options:
    board_build.extra_flags:
      - "-DARDUINO_USB_CDC_ON_BOOT=0"
esp32:
  board: lolin_s2_mini
  framework:
    type: arduino

# Enable logging
logger:


# Enable Home Assistant API
api:
  encryption:
    key: !secret api_encrypt_key

ota:
  - platform: esphome

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  reboot_timeout: 10min
  use_address: 192.168.1.182
  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Detecteur-Presence-Bureau"
    password: !secret web_password

captive_portal:

web_server:
  port: 80
  version: 2
  local: true

uart:
  tx_pin: GPIO18
  rx_pin: GPIO33
  baud_rate: 256000
  parity: NONE
  stop_bits: 1
  id: uart_1


ld2410:
  - uart_id: uart_1

binary_sensor:
  - platform: ld2410
    has_target:
      name: Presence
    has_moving_target:
      name: Moving Target
    has_still_target:
      name: Still Target
    out_pin_presence_status:
      name: out pin presence status

sensor:
  - platform: ld2410
    light:
      name: light
    moving_distance:
      name : Moving Distance
    still_distance:
      name: Still Distance
    moving_energy:
      name: Move Energy
    still_energy:
      name: Still Energy
    detection_distance:
      name: Detection Distance
    g0:
      move_energy:
        name: g0 move energy
      still_energy:
        name: g0 still energy
    g1:
      move_energy:
        name: g1 move energy
      still_energy:
        name: g1 still energy
    g2:
      move_energy:
        name: g2 move energy
      still_energy:
        name: g2 still energy
    g3:
      move_energy:
        name: g3 move energy
      still_energy:
        name: g3 still energy
    g4:
      move_energy:
        name: g4 move energy
      still_energy:
        name: g4 still energy
    g5:
      move_energy:
        name: g5 move energy
      still_energy:
        name: g5 still energy
    g6:
      move_energy:
        name: g6 move energy
      still_energy:
        name: g6 still energy
    g7:
      move_energy:
        name: g7 move energy
      still_energy:
        name: g7 still energy
    g8:
      move_energy:
        name: g8 move energy
      still_energy:
        name: g8 still energy

switch:
  - platform: ld2410
    engineering_mode:
      name: "engineering mode"
    bluetooth:
      name: "control bluetooth"

number:
  - platform: ld2410
    timeout:
      name: timeout
    light_threshold:
      name: light threshold
    max_move_distance_gate:
      name: max move distance gate
    max_still_distance_gate:
      name: max still distance gate
    g0:
      move_threshold:
        name: g0 move threshold
      still_threshold:
        name: g0 still threshold
    g1:
      move_threshold:
        name: g1 move threshold
      still_threshold:
        name: g1 still threshold
    g2:
      move_threshold:
        name: g2 move threshold
      still_threshold:
        name: g2 still threshold
    g3:
      move_threshold:
        name: g3 move threshold
      still_threshold:
        name: g3 still threshold
    g4:
      move_threshold:
        name: g4 move threshold
      still_threshold:
        name: g4 still threshold
    g5:
      move_threshold:
        name: g5 move threshold
      still_threshold:
        name: g5 still threshold
    g6:
      move_threshold:
        name: g6 move threshold
      still_threshold:
        name: g6 still threshold
    g7:
      move_threshold:
        name: g7 move threshold
      still_threshold:
        name: g7 still threshold
    g8:
      move_threshold:
        name: g8 move threshold
      still_threshold:
        name: g8 still threshold

button:
  - platform: ld2410
    factory_reset:
      name: "factory reset"
    restart:
      name: "restart"
    query_params:
      name: query params

text_sensor:
  - platform: ld2410
    version:
      name: "firmware version"
    mac_address:
      name: "mac address"

select:
  - platform: ld2410
    distance_resolution:
      name: "distance resolution"
    baud_rate:
      name: "baud rate"
    light_function:
      name: light function
    out_pin_level:
      name: out pin level

La présence se désactive en quelque secondes :

si tu prends l’application sur ton mobile HLK-radar, et que tu te connectes sur ton ld2410, il y a deux graph important :

le premier : Mouvement
le deuxième : présence

c’est le deuxième dans ton problème qu’il faut bien configuré, il faut mettre des seuils qui font que la courbe passe vite en dessous du seuil en question

Exemple chez moi (toujours dans mon bureau) :
flèche rouge = seuil utilisé pour indiquer la puissance de présence
flèche bleue = information de puissance détectée par la sonde

et voici quand je sors du bureau la courbe bleu descend et passe en dessous du seuil (ligne rouge) et le détecteur passe en vers (Rond en haut à gauche)
pour avoir une estimation du temps, au moment où la courbe du premier graph se met à bouger c’est quand je me déplace pour sortir du bureau) le temps entre le moment où je sors de la pièce et l’information remontées par le détecteur et ~2-3 sec max

RPReplay_Final1730564355

1 « J'aime »

Ne pas oublier de mettre à jour à la dernière version 2.44 depuis l’application mobile, ils ont rajouté une option « Auto » qui permet de faire un test de bruit et d’auto implémenter les bonnes valeurs pour les différents seuils.

Pendant le test, il faut que le détecteur soit à son emplacement définitif et personne dans la pièce, cela lui permet de vérifier les différents parasites dans la pièce et d’ajuster les valeurs.

Ensuite faire le test en passant dans la pièce (mouvement, et en restant statique à un endroit) et vérifié le bon fonctionnement, si pas au top pour vous, ajuster les valeurs manuellement :slight_smile: