hardware 5 min • intermediate

ESP32-S3 Permite Detección de Obstáculos en Tiempo Real de 50–100 ms para Rovers Económicos

Una estrategia para 2026 con ESP-IDF/FreeRTOS: medición en 1D + fusión ligera como núcleo de seguridad, visión QQVGA opcional en S3, y un protocolo estandarizado que hace que los resultados sean repetibles

Por AI Research Team
ESP32-S3 Permite Detección de Obstáculos en Tiempo Real de 50–100 ms para Rovers Económicos

ESP32‑S3 habilita detección de obstáculos en tiempo real de 50–100 ms para rovers económicos

Subtítulo: Un plan de acción para 2026 con ESP‑IDF/FreeRTOS: medición 1D + fusión liviana como núcleo de seguridad, visión QQVGA opcional en S3 y un protocolo estandarizado que hace que los resultados sean repetibles

En 2026, los rovers económicos ya no tienen que elegir entre la asequibilidad y la detección rápida y confiable de obstáculos. Los microcontroladores de la clase ESP32—especialmente el ESP32‑S3—ahora cumplen con el estándar de tiempo real sub-100 ms con sensores comerciales, algoritmos pragmáticos y un protocolo de evaluación que convierte las anécdotas en números comparables. La receta es poco glamorosa pero efectiva: colocar un sensor de medición hacia adelante de alta frecuencia en la punta de lanza, ampliar la cobertura con ultrasonidos angulados, fusionar evidencia en sectores con temporización ajustada y, en el S3, agregar una pequeña cámara para visión clásica QQVGA o tiny‑ML para detectar vidrio y objetos delgados. El resultado es una pila robusta y reproducible que escala desde kits de enseñanza de bajo costo a corredores de pasillo impresos en 3D capaces de 1.5–2.0 m/s con márgenes de parada medidos.

Por qué el hardware de la clase ESP32 ahora cumple con el estándar de tiempo real

Dos cambios hacen que la detección de extremo a extremo de 50–100 ms sea realista en la familia ESP32. Primero, las latencias de los sensores son cortas y predecibles. Un LiDAR 1D TF‑Luna transmite a 100–250 Hz con una latencia de detección de aproximadamente 4–10 ms; el VL53L1X ToF de ST puede funcionar con presupuestos de tiempo de 20–33 ms; los ultrasonidos están limitados por microsegundos de tiempo de vuelo de eco por metro. En segundo lugar, la cadena de herramientas y periféricos del ESP32‑S3 eliminan cuellos de botella en la CPU: las instrucciones SIMD/NN aceleran tiny‑ML a través de ESP‑NN; el periférico LCD_CAM con DMA descarga la captura de cámara en paralelo; la PSRAM ampliamente disponible aumenta el margen de buffer mientras la SRAM todavía alberga datos en caliente.

El ESP32 clásico sigue siendo un sólido punto de referencia de doble núcleo para medición de alta tasa y fusión. El ESP32‑C3, un componente de un solo núcleo RISC‑V, maneja de manera confiable canales multisensor esbeltos pero carece de una ruta paralela de cámara y del margen para visión en tiempo real. En el S3, la visión clásica en QQVGA/QVGA y micro‑CNNs int8 a 96×96–160×160 alcanzan decenas de milisegundos por cuadro, manteniendo bucles completos en el rango de 50–100 ms cuando la exposición y el procesamiento están controlados.

Los periféricos importan. RMT proporciona disparos y capturas de eco de ultrasonido a nivel de microsegundos y baja fluctuación. PCNT y MCPWM ofrecen odometría y control del motor precisos para pruebas de frenado. Las marcas de tiempo esp_timer permiten registros de granularidad de microsegundos. En el S3, LCD_CAM y esp32‑camera DMA mantienen a la CPU enfocada en la percepción, no en los píxeles: una distinción esencial cuando cada milisegundo reduce la distancia de frenado.

La pila de sensores que cumple con los objetivos de latencia, cobertura y robustez

El núcleo de una pila robusta y de baja latencia es un rango hacia adelante rápido y estrecho, además de una redundancia de amplio campo de visión (FoV):

  • Rango hacia adelante: Benewake TF‑Luna a 100–250 Hz (4–10 ms de detección a esas tasas) ofrece la mejor combinación de velocidad, rango (0.2–8 m) y robustez, comunicándose por UART/I2C. Como opción de menor costo, VL53L1X mantiene presupuestos de tiempo de 20–33 ms con FoV configurable y hasta aproximadamente 4 m en interiores.
  • Cobertura amplia: Ultrasonidos angulados HC‑SR04 o JSN‑SR04T‑2.0 proporcionan un haz más amplio (≈15° típico) para llenar puntos ciegos. Son excelentes a corta distancia, con una latencia de eco por metro de solo unos pocos milisegundos, pero requieren controles de interferencia y amortiguación.
  • Redundancia a corta distancia: Sensores de proximidad infrarrojos analógicos económicos (por ejemplo, rango de 10–80 cm) sirven como detectores de último recurso pero son sensibles a la IR ambiental y a la reflectancia de la superficie, por lo que no pueden anclar un bucle de seguridad.
  • Visión opcional: Una cámara OV2640 en QQVGA/QVGA (en escala de grises) en S3, alimentada a través de LCD_CAM/I2S DMA, complementa la detección 1D. Puede resaltar voladizos, bordes de paneles de vidrio y obstáculos delgados que desafían a los ultrasonidos y ToF. Las canalizaciones de cámara de extremo a extremo suelen situarse entre 50–120 ms dependiendo de la frecuencia de cuadros, la exposición y la complejidad del algoritmo/modelo.

Los modos de falla difieren según la modalidad. Los ultrasonidos pueden dar falsos positivos por interferencia y fallar en superficies blandas o muy anguladas; ToF y LiDAR 1D pueden tener dificultades en vidrio y materiales muy oscuros a largas distancias o bajo luz solar intensa; las cámaras se ven afectadas por baja luz y desenfoque de movimiento. Fusionar geometría complementaria y características de error es la apuesta pragmática.

Algoritmos que caben en el dispositivo: umbrales, ocupación, fusión y visión ligera

Las victorias más rápidas comienzan simple:

  • Umbralización con histéresis: En sensores de rango de alta tasa, los umbrales amortiguados reaccionan en milisegundos individuales a unas pocas decenas. Eso es tan rápido como el sensor lo permite y consume un CPU insignificante. Filtros de mediana/votación calman el ruido de valores atípicos ocasionales.
  • Ocupación del sector: Tres a cinco sensores fijos angulados para cubrir ±60° a ±90° pueden poblar una cuadrícula de ocupación de 12–24 sectores cada ciclo. Cada lectura actualiza las probabilidades de ocupación con una decaída temporal corta. La carga computacional es mínima, alrededor de 1–3 ms por ciclo, y el contexto angular mejora tanto las decisiones de frenado como la selección de camino.
  • Fusión ligera: Los filtros alfa-beta por sector o una simple actualización Bayesiana estabilizan la percepción en materiales y fallos esporádicos, especialmente al combinar ultrasonido, ToF/LiDAR, IR y odometría de ruedas. Las implementaciones con primitivas ESP‑DSP añaden aproximadamente 1–3 ms por bucle de 50–100 Hz para una cuadrícula de 12–24 sectores.

En ESP32‑S3, la visión complementa inteligentemente:

  • CV clásica: Con captura DMA, remuestreo en escala de grises y gradientes rápidos, S3 ejecuta bordes, diferencia de cuadros o flujo óptico grueso en cuadros de 160×120 a 320×240 en aproximadamente 10–50 ms de tiempo de cómputo, permitiendo bucles de extremo a extremo dentro de los 50–100 ms cuando la configuración de la cámara está optimizada para baja latencia.
  • Tiny‑ML: Micro‑CNNs int8 a 96×96–160×160—como clasificadores binarios de obstáculos o detectores de centroides estilo FOMO—pueden inferir en aproximadamente 20–90 ms en S3 cuando son acelerados por ESP‑NN. El ESP32 clásico es típicamente 1.5–3× más lento para las CNN, ajustando modelos y frecuencias de cuadros hacia abajo; ESP32‑C3 generalmente no es adecuado para visión en tiempo real más allá de clasificadores muy pequeños a bajas tasas.

La visión no debe reemplazar la capa de parada 1D; llena casos marginales como vidrio, postes delgados y voladizos.

De la latencia a la velocidad segura: modelado y números prácticos

El funcionamiento seguro es un problema matemático, no una intuición. Una regla conservadora es:

D_detect ≥ v · T_latency + D_brake(v) + margin

Donde D_detect es la distancia de detección confiable al percentil 95, T_latency es la latencia de percepción de extremo a extremo, y D_brake(v) es la distancia de frenado desde la velocidad v, además de un margen. En la práctica:

  • Con TF‑Luna a 100 Hz y 10–15 ms de latencia de detección y decisión de extremo a extremo, y una desaceleración de rover alrededor de 1.5 m/s², son factibles velocidades de 1.5–2.0 m/s en corredores interiores con un margen de 0.5 m, asumiendo detección confiable desde aproximadamente 0.25–6 m dependiendo del material y la geometría.
  • Con VL53L1X en presupuestos de tiempo de 20–33 ms, las velocidades máximas cercanas a 1.0–1.5 m/s son realistas bajo márgenes similares.
  • Las pilas solo ultrasónicas deberían apuntar a velocidades más bajas y márgenes más grandes debido a la longitud de la zona ciega, la geometría del haz y las tasas de fallos en obstáculos angulados/blandos.

Estos no son promesas de papel; son puntos de partida para validar en la geometría de su rover, masa, llantas, controlador y superficies. El protocolo correcto (debajo) vincula números a la realidad.

Patrones de implementación en ESP‑IDF/FreeRTOS que cumplen con los plazos

Cumplir con los objetivos de tiempo real en microcontroladores es un problema de programación y E/S tanto como un problema algorítmico:

  • Gráfica de tareas y afinidad de núcleo: En partes de doble núcleo, fije la medición de alta tasa y fusión a un núcleo y cámara/ML al otro. Dé prioridad alta a la fusión/control y apílelo explícitamente. Use esp_timer_get_time() para marcas de tiempo de microsegundos y registros de latencia por etapa.
  • Ultrasonidos con RMT: Active disparos y capture ecos en hardware para precisión en microsegundos sin esperar ocupando. Aleatorice el escalonamiento de activación entre sensores para evitar la interferencia.
  • E/S ToF/LiDAR: Ejecute VL53L1X en modo continuo sobre I2C a 400 kHz o 1 MHz (donde sea compatible) para minimizar la sobrecarga y fluctuación. Transmita TF‑Luna sobre UART con DMA.
  • Odometría y actuación: Alimente los codificadores de ruedas en PCNT y accione los motores a través de MCPWM. El rendimiento de frenado es parte de la ecuación de seguridad; la temporización precisa es obligatoria.
  • Cámara en S3: Use esp32‑camera con LCD_CAM DMA; capture en escala de grises a QQVGA/QVGA con doble buffer. Mantenga los buffers de cuadro en PSRAM si es necesario, pero procese azulejos en SRAM para conservar la eficiencia del caché.
  • Higiene Tiny‑ML: Integre TFLM con kernels ESP‑NN; asigne arenas de activación a SRAM interna; evite asignaciones dinámicas en el bucle de tiempo real; coloque los pesos en flash/PSRAM si las huellas de activación permanecen en el chip; perfile en hardware objetivo para confirmar aceleraciones del operador.
  • CV clásica: Aproveche ESP‑DSP para filtros rápidos, gradientes y remuestreo; limite el procesamiento a regiones de interés (por ejemplo, campo de visión inferior-central donde ocurren colisiones inminentes).

Estos patrones mantienen la adquisición de sensores, la fusión y el control dentro de presupuestos deterministas mientras permiten que la cámara/ML coexista sin privar de recursos a las tareas de seguridad.

Un protocolo de evaluación estandarizado para resultados comparables

Evaluar la percepción sin un protocolo es una excelente manera de engañarse a uno mismo. Una metodología práctica y repetible incluye:

  • Cursos y objetivos: Postes estáticos (2–5 cm), paneles planos a incidencia de 15–75°, negro mate, acrílico/vidrio transparente, tejido suave, corredores de 0.5–1.0 m de anchura, y voladizos bajos a 20–30 cm. Desafíos dinámicos: cruce de maniquí a 0.5–1.5 m/s, péndulo oscilante y trayectorias de rover en intersección.
  • Iluminación e interferencia: Fluorescente/LED en interiores, baja iluminación y parches solares; nublado al aire libre y sol brillante. Escalone las activaciones de ultrasonido para probar el manejo de interferencias.
  • Diseño de prueba: Parametrizar velocidad a 0.3, 0.6, 1.0, 1.5 y 2.0 m/s. Realice ≥30 pruebas por configuración para estimar falsos positivos y negativos con intervalos de confianza. Evalúe paso a paso: sensor delantero único; multi-sensor; fusión; con visión aumentada; a través de ESP32, S3 y C3 donde sea factible.
  • Verdad de terreno: Cámara aérea con AprilTags en rover y obstáculos, procesada a ≥60 fps para recuperar trayectorias; sincronizar con un flash o aplauso visible en el dispositivo; opcionalmente use NTP/PTP si está disponible Wi‑Fi. Registro redundante de codificadores de ruedas a través de PCNT.
  • Métricas y registros: Mida la latencia de detección desde la entrada en la zona de peligro de terreno de referencia hasta la primera detección en el dispositivo; calcule tasas de FP/FN, distancia de detección confiable por material/ángulo, velocidad máxima segura vs. distancia de frenado, utilización de CPU por tarea, huella de memoria (incluido el modelo/área de TFLM) y energía a través de un medidor de corriente en línea o medidor de potencia USB. Persista CSV/CBOR con marca temporal con pose, velocidad, valores de sensor brutos/filtrados, banderas de detección, decisiones, CPU%, heap libre y latencia del modelo. Almacene cuadros de cámara de forma esparcida con hash; siempre persista miniaturas pequeñas o máscaras para salidas de ML.
  • Plataforma de repetición: Ingesta de registros y verdad de terreno fuera del dispositivo; recompute la detección con parámetros alternativos; produzca curvas ROC/PR y histogramas de latencia. Mantenga manifiestos de escenario (JSON), sdkconfig, flags de compilación y scripts de flasheo bajo control de versiones para reproducibilidad.
  • Guía del conjunto de datos de visión: Prefiera entradas en escala de grises pequeñas (96×96–160×160), positivos/negativos equilibrados en entornos, etiquetas alineadas con el modelo (por ejemplo, centroides para detectores estilo FOMO) y aumentos de brillo, contraste y desenfoque de movimiento. Use divisiones conscientes del entorno para verificar la generalización. Exporte artefactos int8 TFLM; el despliegue en S3 se alinea con las herramientas y ejemplos existentes.

Configuraciones recomendadas por objetivo y presupuesto

  • Mínima, de ultra bajo costo (cualquier variante ESP32): Dos ultrasonidos angulados más un sensor IR de corto alcance; umbralización con histéresis y una cuadrícula de ocupación de 12 sectores. Una respuesta típica de sub-30 ms en el camino del rango, apoyando aproximadamente 0.6–1.0 m/s con márgenes conservadores. Espere un mayor riesgo de fallos en objetivos angulados/blandos; valide cuidadosamente.
  • Robusta, base rápida (ESP32 o S3): TF‑Luna hacia adelante, dos ultrasonidos angulados, opcionalmente VL53L1X en los lados. Umbralización, filtrado alfa‑beta por sector y ocupación con decaimiento temporal ofrecen una latencia de detección hacia adelante de 5–20 ms y bajas tasas de negativos falsos en interiores y exteriores, permitiendo 1.5–2.0 m/s con márgenes de frenado medidos.
  • Ampliada con visión (ESP32‑S3): Agregue OV2640 en escala de grises QQVGA; ejecute bordes/flujo clásicos para espacio libre y opcionalmente un detector de obstáculos tiny‑ML; fusione con evidencia de sector. Espere 60–110 ms de extremo a extremo, mejor manejo de vidrio y obstáculos delgados, y 30–70% de utilización de CPU S3 si los buffers de activación ML residen en SRAM.

Riesgos, escollos y mitigaciones que importan

  • Interferencia y resonancia ultrasónica: Aleatorice la temporización de activación, use tiempos de espera RMT, aplique verificaciones de anchura de eco y requiera conformación de sector en ventanas cortas.
  • Casos extremos ToF/LiDAR: Monitoree las banderas de estado/saturación; ajuste los presupuestos de tiempo o pesos de fusión por condiciones ambientales; espere reducción de margen de rango bajo luz solar intensa o en superficies de vidrio/muy oscuras.
  • Varianza de la cámara: Bloquee la exposición y ganancia para estabilizar la latencia; limite el procesamiento a regiones centrales-inferiores de la imagen; tenga cuidado con el desenfoque de movimiento y condiciones de baja luminosidad.
  • Fiabilidad Tiny‑ML: Evite la asignación dinámica dentro del bucle; fije arenas de activación a SRAM interna; perfile operadores en el objetivo para confirmar aceleraciones ESP‑NN; dimensione los modelos para ajustar presupuestos de activación SRAM.
  • Programación en tiempo real: Asigne prioridades explícitas FreeRTOS y afinidad de núcleo; mida la latencia en peor caso con esp_timer bajo carga; mantenga E/S en caminos DMA; evite PSRAM para tensores en caliente cuando sea viable.

Qué variante elegir y por qué cambia su mezcla de algoritmos

ESP32‑S3 es la opción clara para la fusión multisensor aumentada por CV clásica basada en cámara o tiny‑ML. Las instrucciones SIMD/NN, LCD_CAM DMA y la sólida disponibilidad de PSRAM elevan el techo de lo que cabe dentro de 50–100 ms sin privar la seguridad del bucle. El ESP32 clásico brilla para el rango multisensor y la fusión; el trabajo con cámara es posible con ajustes cuidadosos y frecuencias de cuadros más bajas; tiny‑ML debería limitarse a clasificadores muy pequeños con tiempos de inferencia más largos. ESP32‑C3 se destaca en el rango + fusión robusta y eficiente sin visión; si se requieren semánticas, considere un coprocesador.

Variantes ESP32 de un vistazo

AspectoESP32‑C3ESP32 (clásico)ESP32‑S3
Destacados CPU/aceleradoresNúcleo único RV32IMC @160 MHz; no cámara paralelaDoble núcleo Xtensa LX6 @240 MHz; cámara I2S/paralela a través de esp32‑cameraDoble núcleo Xtensa LX7 @240 MHz; SIMD/NN; LCD_CAM DMA; USB‑OTG
Algoritmos de mejor ajusteUmbralización, ocupación de sectores, fusión con TF‑Luna/ToF; sin visión/MLRango multisensor + fusión; cámara limitada y clasificadores pequeñosRango + fusión más bordes/flujo clásico o tiny‑ML en QQVGA/96×96
Viabilidad sub-100 msSí (basado en rango)Sí (basado en rango; marginal para visión/ML)Sí (basado en rango y cámara)
CPU típica para pipeline<25% (5–7 sensores @50–100 Hz)<30–50% (más carga de cámara si se usa)<30–70% con cámara + tiny‑ML
Opciones de sensor (adelante)VL53L1X o TF‑LunaVL53L1X o TF‑LunaTF‑Luna o VL53L1X + OV2640
Riesgos claveContención de un solo núcleoVarianza de latencia de cámaraComplejidad del sistema; necesidades del conjunto de datos ML

La conclusión para construcciones en 2026

El camino más rápido hacia un rover más seguro no es una red neuronal monolítica; es una pila disciplinada que explota las fortalezas de la familia ESP32. Coloque un sensor de rango hacia adelante de alta tasa en el centro, agregue ultrasonidos de amplio FoV y fusione con filtros livianos y una cuadrícula de ocupación de horizonte corto. En ESP32‑S3, augure con CV clásico QQVGA o un detector tiny int8 para detectar vidrio y casos extremos sin sobrepasar el presupuesto de latencia. Fije tareas a núcleos, empuje E/S a través de DMA, mantenga datos calientes en SRAM y registre todo con marcas de tiempo en microsegundos.

No omita el protocolo. Cursos de obstáculos estáticos y dinámicos, iluminación controlada, pruebas de interferencia ultrasónica, verdad de tierra sincronizada con etiquetas AprilTag y scripts reproducibles ESP‑IDF transmiten “funciona en mi banco” a datos que puede comparar. Vincule la latencia de detección a la distancia de frenado, luego establezca límites de velocidad con confianza.

Este es el plan de acción para 2026: sensores pragmáticos, bucles ajustados, modelos modestos y pruebas rigurosas. El ESP32‑S3 hace que la variante con cámara aumentada sea alcanzable; el ESP32 clásico y C3 todavía ofrecen seguridad de rango primero, delgada y confiable. Con la configuración correcta y la disciplina de medición, la detección de obstáculos sub-100 ms no solo es posible en MCUs económicos, es repetible. 🤖

Fuentes y Referencias

docs.espressif.com
ESP‑IDF Programming Guide (ESP32 family) Documents FreeRTOS scheduling, timers, logging, and peripheral APIs used to meet real-time deadlines and instrumentation in this article.
www.espressif.com
ESP32 Product Overview Establishes the classic ESP32 capabilities (dual-core, camera via I2S) relevant to range-first pipelines and limited vision support.
www.espressif.com
ESP32‑S3 Product Overview Confirms S3 features—dual-core LX7 with SIMD/NN, LCD_CAM, PSRAM availability—that enable camera and tiny-ML within 50–100 ms.
www.espressif.com
ESP32‑C3 Product Overview Details the single-core RV32IMC architecture and reduced peripherals shaping a lean, non-vision pipeline recommendation.
github.com
Espressif ESP‑NN Provides optimized int8 kernels that deliver micro-CNN speedups enabling S3 tiny-ML inference in tens of milliseconds.
github.com
Espressif ESP‑DL and ESP‑DSP Supplies DSP primitives and ML utilities used for fast filtering, gradients, and lightweight fusion in real-time loops.
github.com
Espressif ESP‑WHO Demonstrates S3 camera/vision pipelines and supports feasibility of QQVGA/QVGA classical CV under LCD_CAM DMA.
github.com
esp32‑camera component Implements DMA camera capture paths (I2S/LCD_CAM) that reduce CPU overhead and enable real-time low-res processing.
github.com
TensorFlow Lite for Microcontrollers Framework underpinning on-device int8 inference for tiny detectors discussed for ESP32‑S3.
docs.edgeimpulse.com
Edge Impulse on ESP32‑S3 Corroborates deployment pipeline and practical benchmarks for S3 micro-vision models and int8 inference.
www.st.com
ST VL53L0X Datasheet Supports ToF ranges, FoV, and timing budget characteristics used in latency and coverage discussion.
www.st.com
ST VL53L1X Datasheet Details range, configurable FoV, and 20–33 ms timing budgets central to the recommended forward/side sensor choices.
www.terabee.com
Benewake TF‑Luna LiDAR Datasheet/Manual Provides the 0.2–8 m range, 1–250 Hz rates, and narrow FoV underpinning the fast forward detection claims.
cdn.sparkfun.com
HC‑SR04 Ultrasonic Sensor Datasheet Establishes beam angle, range, and echo timing that set ultrasonic latency and cross-talk considerations.
www.waveshare.com
JSN‑SR04T‑2.0 Waterproof Ultrasonic User Manual Corroborates outdoor suitability, blind zone, and cycle nuances for wide‑FoV coverage outdoors.
global.sharp
Sharp GP2Y0A21YK Datasheet Supports close-range IR sensor dynamics and limitations (ambient IR sensitivity) used as redundancy in the stack.
www.ovt.com
OmniVision OV2640 Product Page Confirms resolution modes (QQVGA–UXGA) and suitability for low-resolution, grayscale capture on ESP32 platforms.
docs.espressif.com
ESP‑IDF RMT Peripheral API Backs low-jitter ultrasonic triggering and echo capture required for microsecond timing.
docs.espressif.com
ESP‑IDF LCD_CAM (Parallel Camera/LCD) API (ESP32‑S3) Validates DMA-based, parallel camera capture used to keep CPU headroom for perception on S3.
docs.espressif.com
ESP‑IDF PCNT (Pulse Counter) API Supports precise wheel odometry used for braking curves and evaluation synchronization.
docs.espressif.com
ESP‑IDF MCPWM API Underpins accurate motor control and braking response needed in stopping-distance tests.
arxiv.org
TagSLAM: Robust SLAM System with AprilTag Landmarks Provides a ground-truth methodology via AprilTag trajectories for synchronized benchmarking.
arxiv.org
MCUNetV2: Memory‑Efficient Patch‑based Inference for Tiny Deep Learning Context for accuracy/efficiency of microcontroller vision models aligned with S3 capabilities.
arxiv.org
FOMO: Fast Oriented Minimal Object Detection Supports the feasibility of centroid-style tiny detectors on microcontrollers as described for S3.

Ad space (disabled)