Bonjour tout le monde, un petit moment que je bidouille dans mon coin, et surtout un bon moment que je cherche a me faire une sonnette connectée intelligente. Cependant mon problème a l’époque c’est qu’il fallait pas mal de matos mais aujourd’hui les puces ont bien évoluées et la plupart sont bien gérer dans esphome. A la base je voulais juste un petit truc tout banal mais le choix d’un esp en particulier m’a confirmer que l’ont pouvait aller bien plus loin dans le ce petit concentré de technologie.
A la suite d’une autre discussion au sujet d’une puce esp32 que vous pouvez retrouver ici:
https://forum.hacf.fr/t/esp32-s3-n16r8-avec-cam-micro-et-haut-parleur/47411/2
je me suis remis a taffer dessus. une programmation en espidf pur me semblais intéressante mais esp home a visiblement quelques avantages supplémentaire.
Description du projet point par point:
- puce: esp32S3 CAMERA/PSRAM
- amplificateur pour HP/micro NS4168
- pilotage gache electrique via MOSFET/relais
- 2X Leds infrarouge 940nm 3W via driver led en pwm pour eviter la chauffe ( ces betes la chauffe beaucoup ) le choix des 940 est pour eviter que la lumiere soit visible ( et ne pas eveiller la curiosité des gens )
- dissipateurs thermique FORTEMENT conseillé pour les leds IR
- led RGB intégré WS2812 pour effets differents au bouton
- utilisation d’un capteur de mouvement/présence via LD2420 pour prévenir Frigate et éviter les fausses détections (animaux/voitures) et n’enregistrer QUE lorsque necessaire ( vis a vis de la legislation en France)
- utilisation de ha pour renseigner la hauteur du soleil et interagir avec l’éclairage du bouton
- utilisation de frigate pour assurer la détection/identifier/enregistrer
- ajout d’un buzzer pour confirmer l’appuis sur le bouton en plus de l’effet visuel ( en cours )
le pin du bouton central reste encore a etre identifier il n’est pour le moment pas fonctionnel!!!
!!! MISE EN GARDE !!!
l’installation d’une camera sur la voie publique est interdit en France
Cependant ici la camera ne filmera/enregistrera UNIQUEMENT lorsque une présence est détectée ( donc plusieurs secondes ), pour le moment aucun réglage n’a encore été fait pour régler la sensibilité du LD2420, c’est une partie a venir.
je vous partage le code encore actuellement en phase alpha, j’ai usé des substitutions pour que chacun puisse adapter a ces besoins. le pinout est “FORCER” par le PCB cependant j’ai indiquer les pins utilisés, non utilisés afin que vous puissiez la aussi adapter a vos besoins.
il me reste encore des essais a faire et surtout retrouver le pin du bouton qui n’est indiqué nul pars même dans les sources originelles de cette carte.
Suivra par la suite le coté Carillon
l’utilisation du lecteur SD étant encore très peu supporté par esphome autant en faire abstraction pour le moment.
place au code: ( encore en phase alpha )
PS: esphome fournissant deja l’etats des entités dans HA, vous pouvez desactiver MQTT pour eviter les doublons a moins que vous en ayez besoin pour interragir avec d’autres appareils connecté.
# PINS LIbres non utilisé sur cet esp s3:
# GPIO0 (strap pin → à éviter si possible)
# GPIO1 (souvent dispo, attention UART selon board)
# GPIO3, GPIO11, GPIO12, GPIO13, GPIO14, GPIO16, GPIO17, GPIO18,
# GPIO19, GPIO20, GPIO22, GPIO23, GPIO24, GPIO25,
# GPIO26, GPIO27, GPIO28, GPIO29, GPIO30, GPIO31,
# GPIO32, GPIO43, GPIO44
# (legacy code notes)
# SPI1 (old/unused):
# CLK: GPIO4
# MISO: GPIO13
# MOSI: GPIO21
# SD Card (old/unused):
# CLK: GPIO4
# DAT0: GPIO13
# CMD: GPIO21
# CD: GPIO19
# ----------------------------------------------------
# PIN UTILISE sur ce projet:
# ----------------------------------------------------
# Système / statut
# !!!!! ATTENTION CE PIN est raccordé pour le status de la carte SD
# GPIO2 : status_led
# LED / IR / PWM
# GPIO21 : WS2812 (RMT)
# GPIO15 : PWM IR (LEDC)
# SPI/ SDCARD Réservé pour ne pas tout mélangé
# GPIO3, GPIO11, GPIO12,
# Caméra + I2C caméra
# GPIO33 : XCLK (external_clock)
# GPIO41 : PCLK (pixel_clock)
# GPIO34 : HREF
# GPIO35 : VSYNC
# GPIO4, 5, 6, 7, 8, 42, 47, 48 : D0..D7 (data_pins)
# GPIO36 (SCL), GPIO37 (SDA) : I2C cam (SCCB)
# Audio I2S
# GPIO38 : I2S DIN (micro)
# GPIO39 : I2S BCLK (micro)
# GPIO40 : I2S LRCLK/WS (micro)
# GPIO9 : I2S DOUT (speaker)
# GPIO10 : I2S BCLK (speaker)
# GPIO45 : I2S LRCLK (speaker)
# GPIO46 : PA_CTRL (ampli enable)
# ----------------------------------------------------
# SONNETTE ESP32-S3 CAM + AUDIO + LD2420 + IR + GÂCHE
# ----------------------------------------------------
substitutions:
device_name: sonnette
friendly_name: sonnette portail
wifi_ssid: !secret wifi_ssid
wifi_password: !secret wifi_password
api_encryption_key: "!secret encryption_key"
ota_password: "12345678"
hotspot_ssid: "Sonnette Hotspot"
hotspot_password: "12345678"
static_ip: 192.168.10.127
gateway_ip: 192.168.10.1
subnet_mask: 255.255.255.0
dns_ip: 192.168.10.1
mqtt_broker: 192.168.10.21
mqtt_username: sonnette
mqtt_password: Sonnette!!
media_url: "http://192.168.10.21:8123/media-browser/browser/app%2Cmedia-source%3A%2F%2Fmedia_source/%2Cmedia-source%3A%2F%2Fmedia_source%2Flocal%2FThe%20Prodigy/%2Cmedia-source%3A%2F%2Fmedia_source%2Flocal%2FThe%20Prodigy%2FBreathe"
# --------- Seuils “nuit” basés sur l’élévation du soleil ----------
# (rasant = soleil bas sur l’horizon, typiquement entre -6° et +6° selon ton goût)
sun_on_elevation: "-2.0" # devient "nuit" quand élévation <= -2°
sun_off_elevation: "2.0" # redevient "jour" quand élévation >= +2°
# ---- IR ----
ir_idle_night: "0.25" # 25% la nuit
ir_boost_night: "0.90" # 90% pendant détection (nuit)
ir_boost_ms: "15000" # durée du boost après détection
# ---- timings sonnette ----
ring_antidouble_ms: "2000"
ring_timeout_s: "30"
strike_pulse_ms: "3000"
esphome:
name: ${device_name}
friendly_name: ${friendly_name}
platformio_options:
build_flags: -DBOARD_HAS_PSRAM
board_build.arduino.memory_type: qio_opi
board_build.f_flash: 80000000L
board_build.flash_mode: qio
on_boot:
priority: -100
then:
- switch.turn_on: amp_enable
- delay: 200ms
- script.execute: update_daynight
- script.execute: apply_idle_state
esp32:
board: esp32-s3-devkitc-1
flash_size: 16MB
partitions: partitions_16mb_ota.csv
framework:
type: esp-idf
sdkconfig_options:
CONFIG_FATFS_LFN_STACK: "y" # inutilisé ici mais en prevision de l'utilisation du lecteur de carte sd
logger:
ota:
- platform: esphome
password: ${ota_password}
api:
encryption:
key: ${api_encryption_key}
# ----------------------------------------------------
# Services HA -> ESP (pratique)
# Tu appelles ça depuis une automation / bouton HA
# ----------------------------------------------------
services:
- service: call_answered
then:
- script.execute: on_call_answered
- service: open_door
then:
- script.execute: open_strike
- service: apply_idle
then:
- script.execute: apply_idle_state
- service: ir_boost_now
then:
- script.execute: ir_boost
wifi:
ssid: ${wifi_ssid}
password: ${wifi_password}
manual_ip:
static_ip: ${static_ip}
gateway: ${gateway_ip}
subnet: ${subnet_mask}
dns1: ${dns_ip}
ap:
ssid: ${hotspot_ssid}
password: ${hotspot_password}
captive_portal:
web_server:
port: 80
time:
- platform: homeassistant
id: homeassistant_time
mqtt:
broker: ${mqtt_broker}
port: 1883
username: ${mqtt_username}
password: ${mqtt_password}
discovery: true
# ESPHome 2026.x: la camera exige psram:
psram:
mode: quad
speed: 80MHz
# ----------------------------------------------------
# Globals
# ----------------------------------------------------
globals:
- id: last_ring_ms
type: uint32_t
restore_value: no
initial_value: '0'
- id: breathe_level
type: float
restore_value: no
initial_value: '0.0'
- id: call_answered_flag
type: bool
restore_value: no
initial_value: "false"
# ----------------------------------------------------
# État Jour/Nuit basé sur le soleil (élévation)
# ----------------------------------------------------
- id: is_night
type: bool
restore_value: no
initial_value: "false"
# ----------------------------------------------------
# Soleil (élévation) depuis HA
# ----------------------------------------------------
sensor:
- platform: homeassistant
id: sun_elevation
entity_id: sensor.sun_solar_elevation
internal: true
on_value:
then:
- script.execute: update_daynight
# (optionnel) capteurs distance LD2420
- platform: ld2420
moving_distance:
name: "LD2420 Moving Distance"
# ----------------------------------------------------
# UART + LD2420
# (TX/RX à adapter si besoin)
# ----------------------------------------------------
uart:
- id: uart_ld2420
tx_pin: GPIO17
rx_pin: GPIO16
baud_rate: 115200
ld2420:
uart_id: uart_ld2420
text_sensor:
- platform: ld2420
fw_version:
name: "LD2420 Firmware"
# ----------------------------------------------------
# SPI réservé (pour plus tard)
# ----------------------------------------------------
spi:
id: sd_spi
clk_pin: GPIO11
mosi_pin: GPIO3
miso_pin: GPIO12
# ⚠️ WARNING:
# GPIO2 is physically wired as SD_CS on the PCB.
# status_led is used ONLY while SD card is NOT enabled.
# If SD (SPI) is enabled in the future, REMOVE status_led on GPIO2.
status_led:
pin:
number: GPIO2
inverted: true
# ----------------------------------------------------
# Lumières/LED/Infra Rouge
# ----------------------------------------------------
light:
# --------------------------
# LED RGB WS2812 (GPIO21)
# --------------------------
- platform: esp32_rmt_led_strip
id: led_sonnette
name: "LED RGB Sonnette"
pin: GPIO21
num_leds: 1
chipset: WS2812
rgb_order: GRB
restore_mode: RESTORE_DEFAULT_OFF
effects:
- strobe:
name: "Strobo Rouge"
colors:
- red: 100%
green: 0%
blue: 0%
duration: 120ms
- red: 0%
green: 0%
blue: 0%
duration: 120ms
- pulse:
name: "Respiration Bleue"
transition_length: 500ms
update_interval: 1.2s
# --------------------------
# LED IR dimmable PWM via driver led
# --------------------------
- platform: monochromatic
id: ir_light
name: "IR"
output: ir_pwm
restore_mode: ALWAYS_OFF
# ----------------------------------------------------
# Sorties
# ----------------------------------------------------
output:
# --------------------------
# - driver led IR dimmable
# --------------------------
- platform: ledc
id: ir_pwm
pin: GPIO15
frequency: 2000 Hz
# --------------------------
# - Ampli NS4168 : PA_CTRL=GPIO46, LRCLK=GPIO45, BCLK=GPIO10, DOUT=GPIO9
# - Micro MSM261S4030 : WS=GPIO40, BCLK=GPIO39, DIN=GPIO38
# --------------------------
- platform: gpio
pin: GPIO46
id: pa_ctrl
# ----------------------------------------------------
# Switchs
# ----------------------------------------------------
switch:
- platform: output
name: "Amplifier Enable (NS4168)"
output: pa_ctrl
id: amp_enable
restore_mode: RESTORE_DEFAULT_ON
# ----------------------------------------------------
# Gâche électrique (GPIO14) — impulsion ~3s
# (⚠️ Mets un driver: MOSFET/relai + diode roue libre selon la gâche)
# ----------------------------------------------------
- platform: gpio
id: strike
name: "Gâche (GPIO14)"
pin: GPIO14
restore_mode: ALWAYS_OFF
on_turn_on:
- delay: ${strike_pulse_ms}ms
- switch.turn_off: strike
button:
- platform: template
name: "Ouvrir la gâche"
icon: "mdi:lock-open"
on_press:
- switch.turn_on: strike
# --------------------------
# I2C caméra (SCCB) (pins EXACTS du firmware d'origine)
# --------------------------
i2c:
- id: cam_i2c
sda: GPIO37
scl: GPIO36
frequency: 100kHz
esp32_camera:
name: camera_jardin
# XCLK = GPIO33 (firmware d'origine)
external_clock:
pin: GPIO33
frequency: 20MHz
i2c_id: cam_i2c
# data_pins DOIT être D0..D7 dans l'ordre
data_pins: [GPIO7, GPIO5, GPIO4, GPIO6, GPIO8, GPIO42, GPIO48, GPIO47]
vsync_pin: GPIO35
href_pin: GPIO34
# PCLK = GPIO41 (firmware d'origine)
pixel_clock_pin: GPIO41
resolution: 640x480
jpeg_quality: 12
max_framerate: 5 fps
idle_framerate: 0.2 fps
vertical_flip: false
horizontal_mirror: false
contrast: 2
brightness: 2
saturation: 0
esp32_camera_web_server:
- port: 8080
mode: stream
- port: 8081
mode: snapshot
# ----------------------------------------------------
# Audio I2S
# ----------------------------------------------------
i2s_audio:
- id: i2s_in
i2s_lrclk_pin: GPIO40
i2s_bclk_pin: GPIO39
- id: i2s_out
i2s_lrclk_pin: GPIO45
i2s_bclk_pin: GPIO10
microphone:
- platform: i2s_audio
id: mic
i2s_audio_id: i2s_in
adc_type: external
i2s_din_pin: GPIO38
pdm: false
speaker:
- platform: i2s_audio
id: spk
i2s_audio_id: i2s_out
dac_type: external
i2s_dout_pin: GPIO9
i2s_mode: primary
media_player:
- platform: speaker
name: "HP Sonnette"
id: mp
announcement_pipeline:
speaker: spk
format: WAV
sample_rate: 16000
num_channels: 1
# ----------------------------------------------------
# Bouton sonnette physique + anti-double + logique
# ----------------------------------------------------
binary_sensor:
- platform: gpio
id: doorbell_button
name: "Bouton Sonnette (GPIO19)"
pin:
number: GPIO19
mode: INPUT_PULLUP
inverted: true
on_press:
then:
- script.execute: on_button_pressed
- platform: ld2420
has_target:
id: presence
name: "Présence (LD2420)"
on_press:
then:
- script.execute: on_presence
on_release:
then:
- script.execute: on_presence_cleared
script:
- id: breathe_blue
mode: restart
then:
- repeat:
count: 8
then:
- lambda: |-
id(breathe_level) += 0.125f;
if (id(breathe_level) > 1.0f) id(breathe_level) = 1.0f;
- light.turn_on:
id: led_sonnette
red: 0%
green: 0%
blue: 100%
brightness: !lambda "return id(breathe_level);"
- delay: 150ms
- repeat:
count: 8
then:
- lambda: |-
id(breathe_level) -= 0.125f;
if (id(breathe_level) < 0.0f) id(breathe_level) = 0.0f;
- light.turn_on:
id: led_sonnette
red: 0%
green: 0%
blue: 100%
brightness: !lambda "return id(breathe_level);"
- delay: 150ms
# ----------------------------------------------------
# Scripts “moteur” (ta logique complète)
# ----------------------------------------------------
# 1) Calcul jour/nuit selon élévation
- id: update_daynight
mode: restart
then:
- lambda: |-
if (!id(sun_elevation).has_state()) return;
const float el = id(sun_elevation).state;
const float on_th = atof("${sun_on_elevation}");
const float off_th = atof("${sun_off_elevation}");
// Hystérésis: on devient nuit sous on_th, on redevient jour au-dessus de off_th
if (!id(is_night) && el <= on_th) id(is_night) = true;
else if (id(is_night) && el >= off_th) id(is_night) = false;
# 2) Applique l’état idle (jour/nuit)
- id: apply_idle_state
mode: restart
then:
- if:
condition:
lambda: 'return id(is_night);'
then:
# Nuit: IR 25% + LED bouton bleu faible
- light.turn_on:
id: ir_light
brightness: ${ir_idle_night}
- light.turn_on:
id: led_sonnette
red: 0%
green: 0%
blue: 100%
brightness: 25%
else:
# Jour: IR OFF + LED OFF (ou tu peux mettre bleu 25% si tu veux)
- light.turn_off: ir_light
- light.turn_off: led_sonnette
# 3) Boost IR pendant détection présence (nuit)
- id: ir_boost
mode: restart
then:
- if:
condition:
lambda: 'return id(is_night);'
then:
- light.turn_on:
id: ir_light
brightness: ${ir_boost_night}
- delay: ${ir_boost_ms}ms
- script.execute: apply_idle_state
# 4) Présence détectée -> IR boost + event HA + (option) snapshot
- id: on_presence
mode: restart
then:
- script.execute: ir_boost
- homeassistant.event:
event: esphome.sonnette_presence
data:
device: "${device_name}"
# Pour snapshot: fais une automation HA sur cet event
- homeassistant.event:
event: esphome.sonnette_snapshot_request
data:
device: "${device_name}"
- id: on_presence_cleared
mode: restart
then:
- homeassistant.event:
event: esphome.sonnette_presence_cleared
data:
device: "${device_name}"
# 5) Bouton appuyé -> strobe rouge + son + notif + attente réponse 30s
- id: on_button_pressed
mode: restart
then:
- lambda: |-
const uint32_t now = millis();
if (now - id(last_ring_ms) < (uint32_t)atoi("${ring_antidouble_ms}")) return;
id(last_ring_ms) = now;
id(call_answered_flag) = false; // reset à chaque appel
# Feedback immédiat: le bouton a bien marché
- light.turn_on:
id: led_sonnette
effect: "Strobo Rouge"
# Event HA pour tout ce qui est “système” (notif téléphone, frigate record, etc.)
- homeassistant.event:
event: esphome.doorbell_pressed
data:
device: "${device_name}"
# Sonnerie locale 1x (si tu veux garder ton media_url HA)
- media_player.play_media:
id: mp
media_url: "${media_url}"
# Attente “quelqu’un décroche” -> piloté par HA via un service (voir plus bas)
- delay: ${ring_timeout_s}s
# Si au bout de 30s personne n’a “répondu” (via HA), on stoppe tout et on déclenche la séquence message
- if:
condition:
lambda: 'return !id(call_answered_flag);'
then:
- light.turn_off: led_sonnette
- homeassistant.event:
event: esphome.doorbell_no_answer
data:
device: "${device_name}"
# 6) Quand HA indique “quelqu’un a répondu” -> stop strobe + respiration bleue
- id: on_call_answered
mode: restart
then:
- light.turn_on:
id: led_sonnette
effect: "Respiration Bleue"
- homeassistant.event:
event: esphome.doorbell_answered
data:
device: "${device_name}"
# 7) Ouverture gâche depuis HA (ou bouton interne) + arrêt effet
- id: open_strike
mode: restart
then:
- switch.turn_on: strike
- light.turn_off: led_sonnette
- script.execute: apply_idle_state
- homeassistant.event:
event: esphome.doorbell_strike_opened
data:
device: "${device_name}"
ici le code du fichier de partition pour du 16MB de flash: partitions_16mb_ota.csv
Name, Type, SubType, Offset, Size
nvs, data, nvs, 0x9000, 0x5000
otadata, data, ota, 0xE000, 0x2000
app0, app, ota_0, 0x10000, 0x700000
app1, app, ota_1, 0x710000, 0x700000
spiffs, data, spiffs, 0xE10000, 0x1F0000
ici le code des scripts, automatisations, etc coté Home assistant ( a collé dans le dossier Packages de votre home assistant:
###############################################################################
Package Home Assistant — Sonnette Portail
Fichier: /config/packages/sonnette_portail.yaml
###############################################################################
input_select pour “voie publique / privé”
input_select:
sonnette_mode_enregistrement:
name: « Sonnette - Mode enregistrement »
options:
- « Voie publique (interdit) »
- « Privé (autorisé) »
initial: « Voie publique (interdit) »
icon: mdi:cctv
#(optionnel) input_boolean “appel en cours” pour un état simple
input_boolean:
sonnette_appel_en_cours:
name: « Sonnette - Appel en cours »
icon: mdi:phone-in-talk
⚠️ Je ne connais pas les entity_id exacts des entités Frigate dans HA (ça dépend de l’intégration Frigate). Dans HA tu verras souvent des entités du style :
switch.frigate_camerajardin_recordings
switch.frigate_camerajardin_detect
camera.frigate_camerajardin
###############################################################################
AUTOMATIONS
###############################################################################
automation:
###########################################################################
1) Présence détectée (LD2420) → snapshot + notif (optionnel)
###########################################################################
alias: « Sonnette - Présence → snapshot »
mode: restart
trigger:
platform: event
event_type: esphome.sonnette_presence
condition:
action:
Exemple: snapshot HA sur la caméra ESPHome (si tu l’as en entity camera.xxx)
service: camera.snapshot
target:
entity_id: camera.camera_jardin # ← à adapter
data:
filename: « /media/sonnette/snapshot_presence_{{ now().strftime(‹ %Y%m%d_%H%M%S ›) }}.jpg »
Option: envoyer une notif
service: notify.notify
data:
title: « Sonnette »
message: « Présence détectée (LD2420). »
###########################################################################
2) Bouton pressé → notif + (optionnel) lancer une vue / ouvrir dashboard
###########################################################################
Déclenchée par esphome.doorbell_pressed.
alias: « Sonnette - Bouton pressé → notifications »
mode: single
trigger:
platform: event
event_type: esphome.doorbell_pressed
action:
service: notify.notify
data:
title: « Sonnette »
message: « On sonne au portail. »
Option: marque appel en cours
service: input_boolean.turn_on
target:
entity_id: input_boolean.sonnette_appel_en_cours
###########################################################################
3) Mode voie publique / privé → activer/désactiver Frigate recordings
###########################################################################
alias: « Sonnette - Mode enregistrement → Frigate »
mode: restart
trigger:
platform: state
entity_id: input_select.sonnette_mode_enregistrement
action:
choose:
conditions:
condition: state
entity_id: input_select.sonnette_mode_enregistrement
state: « Privé (autorisé) »
sequence:
service: switch.turn_on
target:
entity_id:
- switch.frigate_camerajardin_recordings # ← à adapter
- switch.frigate_camerajardin_detect # ← à adapter
conditions:
condition: state
entity_id: input_select.sonnette_mode_enregistrement
state: « Voie publique (interdit) »
sequence:
service: switch.turn_off
target:
entity_id:
- switch.frigate_camerajardin_recordings # ← à adapter
tu peux laisser detect ON si tu veux juste “live + détection sans enregistrement”
ou couper aussi detect si tu préfères:
service: switch.turn_off
target:
entity_id:
- switch.frigate_camerajardin_detect # ← à adapter
###########################################################################
3) Pas de réponse (30s) → notif + (option) TTS sur une enceinte HA
###########################################################################
“no answer” (30s) → message “laissez un message”
déclenches esphome.doorbell_no_answer. Là on peux :
notifier le téléphone
lancer une annonce TTS quelque part
ou faire jouer un WAV sur la sonnette
Exemple notif + TTS sur un media_player HA (pas l’ESP) :
alias: « Sonnette - Pas de réponse → notifier »
mode: single
trigger:
platform: event
event_type: esphome.doorbell_no_answer
action:
service: notify.notify
data:
title: « Sonnette »
message: « Pas de réponse, le visiteur peut laisser un message. »
(Optionnel) TTS sur un media_player HA (à adapter)
- service: tts.google_translate_say
target:
entity_id: media_player.salon
data:
message: « Pas de réponse, vous pouvez laisser un message après le bip. »
###############################################################################
SCRIPTS (actions manuelles / dashboard)
###############################################################################
Ensuite, quand “décroches” (ex: tu appuies sur un bouton dans HA, ou un dashboard), tu appelles ton service ESPHome call_answered.
script:
sonnette_repondre:
alias: « Sonnette - Répondre »
sequence:
- service: esphome.sonnette_call_answered
- service: input_boolean.turn_on
target:
entity_id: input_boolean.sonnette_appel_en_cours
quelques photos du boitier qui a déjà évoluer, 2 versions une avec anneaux du bouton RGB et une autre sans anneaux, je vous partagerais les fichiers lorsque la conception serra stabilisé.
version SANS anneaux RGB:
version AVEC anneaux RGB:
la base commune aux 2 versions:
modelisation du bouton dans lequel se logera le LD2420 afin de gagner un max de place, vous remarquerez le leger airgap de 1mm devant les antennes radar afin de ne pas faussé la detection, idem pour les composants et les pins de soudure ils ne seront pas contrains. Les cotes sont TRES ajustées afin de ne pas avoir besoin de coller le capteur, l’effort d’appuis est du coup reparti sur les rebords grâce a la croix centrale qui permet de consolidé un peu tout ca. Le capteur aura une place definie ( ne pas se tromper d’orientation ) mais le bouton lui pourra être mis dans le sens que vous voulez selon votre câblage.
déflecteur qui viens chercher la led rgb au plus prêt de la source une version normale et une version fibre optique en PMMA de 1,6mm.
Il devra être imprimé en matière translucide PETG, remplissage a 100% vitesse pour tout: 30mm/s 50mm/s MAX au plus chaud possible de votre filament pour avoir une bonne cohésion de couche et éviter les effet de blanchiment. a imprimer seul ou si plusieurs objets choisir découpage par objet et non par couche. vous devrez peindre en noir MAT les faces non visible afin de bien “emprisonner” la lumière dans la pièce.









