# Cluster Digital OBD-II ESP32 CYD (Ford Ka Endura 1.3) Instrumento digital automotriz de alta precisión basado en la placa **ESP32 CYD (ESP32-2432S028)** con pantalla táctil resistiva TFT de 2.8" (320x240). Se comunica de forma inalámbrica vía Bluetooth SPP con un escáner **ELM327 v1.5** conectado al puerto OBD-II del vehículo. El sistema fue diseñado y calibrado a medida para el motor **Ford Ka Endura-E 1.3** (y es compatible con instalaciones de GNC). --- ## Características Principales ### 1. Cuadrante de 4 Instrumentos Simultáneos * **Temperatura de Refrigerante (PID 0105):** Rango 60°C a 120°C. Color dinámico (verde en rango normal, amarillo de advertencia y rojo a partir de 110°C con alarma sonora y visual). * **Velocidad del Vehículo (Cálculo GPS Satelital + Fallback OBD-II):** Velocidad real de avance medida por satélite con precisión milimétrica (`gps.speed.kmph()`). Muestra el distintivo `[ GPS ]` en el cuadrante. Si se pierde señal (túnel o estacionamiento subterráneo), conmuta de forma transparente al sensor del vehículo (PID 010D). * **Revoluciones por Minuto (PID 010C):** Rango 0 a 6.000 RPM. * **Voltaje de Batería (Comando ATRV):** Rango 10.0V a 16.0V en tiempo real directo del borne del ELM327. ### 2. Modo Pantalla Completa (Full Screen) * Tocando cualquier cuadrante, la pantalla se expande a vista completa para ese parámetro. * Escala curvada de 20 bloques con **antialiasing de subpíxel** para bordes ultra suaves sin efecto serrucho. * Tipografía digital retrofuturista **DSEG7 Modern 80pt** con coma decimal integrada y actualización veloz sin parpadeo (*flicker-free*). * Alarma visual sincronizada: el icono, el arco y el título parpadean en rojo de forma simultánea ante sobretemperatura o sobretensión. ### 3. Badge Táctico de Máxima Eficiencia `[ ECO ]` * Calcula en tiempo real el punto óptimo de funcionamiento y entrega de torque (Sweet Spot) para el Ford Ka Endura 1.3: * **RPM:** Entre 1.900 y 2.550 RPM (pico de par motor y mejor rendimiento volumétrico). * **Carga de Motor (PID 0104 en segundo plano):** Entre 45% y 82% (apertura de mariposa con mínimas pérdidas por bombeo, antes del enriquecimiento a plena carga). * **Diseño táctico:** Pastilla rectangular con bordes redondeados en verde esmeralda brillante (`[ ECO ]`) que se ilumina en el cuadrante de RPM y en el encabezado de pantalla completa. * Al salir del rango óptimo, se apaga de inmediato restaurando de forma invisible el degradado del fondo. ### 4. Pantalla Tri-Temperatura (Página 2) * Tres tarjetas tácticas con barra de progreso y lectura numérica digital: * **Refrigerante:** Lectura en vivo de ECU OBD-II. * **Habitáculo (Interior):** Sensor digital Dallas DS18B20 #1 en bus 1-Wire (GPIO 22). * **Ambiente (Exterior):** Sensor digital Dallas DS18B20 #2 en bus 1-Wire (GPIO 22). ### 5. Pantalla Reloj Digital GPS & Fecha (Página 3) * **Hora Satelital Atómica:** Dígitos gigantes en tipografía **DSEG7 Modern 80pt** perfectamente centrados en la tarjeta superior, sincronizados con satélites GPS en huso horario UTC-3 (Argentina). * **Dos Puntos Parpadeantes:** Pulso rítmico continuo entre horas y minutos. * **Badge Calendario y Fecha:** Estructurado en dos bloques: * **Badge Calendario (Izquierda):** Cabecera en color de tema con el mes abreviado a 3 letras (`SEP`, `OCT`, `NOV`...) y número del día en 34pt 7 segmentos. * **Información Textual (Derecha):** Día de la semana completo en mayúsculas (`VIERNES`), línea divisoria bitono y año (`2026`). ### 6. Pantalla de Telemetría GPS y Navegación (Página 4) * **Altitud (msnm):** Elevación respecto al nivel del mar en metros con lectura digital en 34pt. * **Rumbo y Brújula:** Dirección de avance en grados (0° a 359°) y punto cardinal completo en tiempo real (`NORTE`, `NORESTE`, `ESTE`, `SURESTE`, `SUR`, `SUROESTE`, `OESTE`, `NOROESTE`). * **Satélites GPS en Grande:** Icono satelital vectorizado a gran escala, número de satélites en seguimiento en 34pt, índice de precisión HDOP y diagnóstico de señal. * **Coordenadas Geográficas:** Latitud y Longitud con precisión de 5 decimales. * **Transiciones Fluidas:** Navegación táctil deslizante (*Swipe*) o desvanecida (*Fade*) entre las 4 pantallas mediante indicador de páginas `[● ○ ○ ○]`, `[○ ● ○ ○]`, `[○ ○ ● ○]`, `[○ ○ ○ ●]`. ### 7. Gestión Inteligente de Energía para GPS (Comandos UBX) * Integración total con el sistema de **Auto-Sleep**: * Al suspender el sistema por inactividad o parada de motor, transmite la trama binaria `UBX-RXM-PMREQ` para apagar la etapa de radiofrecuencia del módulo GPS (consumo inferior a 0.5 mA). * Al reactivarse por toque en pantalla o botón, envía una ráfaga serie *Wake-on-UART* para reanudar el seguimiento satelital de inmediato. ### 7. Audio y Melodías de Alarma * Control de volumen independiente: Silencio, Ultra Bajo, Bajo (Casio suave), Medio y Alto. * Selector de sonidos y tonos de alarma: * Chime BMW (doble tono sincronizado). * Casio Digital (doble chirp suave no invasivo). * Tono bitonal clásico. * Alarma continua urgente. ### 8. Menú de Configuración Táctil * **Gestión de Alarmas:** Conmutadores táctiles independientes ON/OFF para cada parámetro con guardado persistente en NVS (Preferences). * **Temas Visuales:** 6 paletas de color con degradados ambientales de fondo (*Cyan, Emerald, Amber, Violet, Ice Blue, Graphite*). * **Brillo Automático:** Regulación inteligente mediante sensor de luz ambiente (LDR) integrado en la placa, o selección manual (5% a 100%). * **Auto-Sleep:** Apagado automático de pantalla y suspensión ligera al detener el motor (RPM <= 300) tras el tiempo configurado (30s, 1m, 2m, 5m u OFF). --- ## Hardware Requerido 1. **Placa ESP32 CYD 2.8" (ESP32-2432S028):** * Pantalla TFT 320x240 con controlador ILI9341 / ST7789. * Pantalla táctil resistiva con controlador XPT2046. * Sensor de luz LDR en pin analógico. * LED RGB integrado. 2. **Módulo GPS Satelital N32+ / U-blox NEO-7M / NEO-6M:** * Conexión: Ficha de 4 pines al conector rotulado **UART** (o P1). * Pin 1 (Vin 5V), Pin 2 (GPIO 1 TX0 hacia RX GPS), Pin 3 (GPIO 3 RX0 desde TX GPS), Pin 4 (GND). * Comunicación: UART0 Hardware Serial nativo a 9600 bps (8N1). * Nota para programación: Al flashear por cable USB, desconectar la ficha de 4 pines del GPS para evitar colisión con el grabador USB. 3. **Escáner OBD-II Bluetooth:** * Adaptador ELM327 v1.5 (muy recomendado con chip PIC18F25K80, evitar clones v2.1 de baja calidad). 4. **Sensores de Temperatura Digitales DS18B20:** * Hasta 2 sensores en bus 1-Wire conectado a Pin 3 del conector CN1 (`GPIO 22`). 5. **Buzzer / Parlante:** * Parlantito o buzzer pasivo de 8 ohms conectado al pin de audio del CYD (controlado por canal PWM con modulación de volumen). 6. **Alimentación:** * Módulo convertidor 12V a 5V USB (conectado a positivo bajo llave o directo si se utiliza auto-sleep). --- ## Compilación y Carga de Firmware El proyecto se encuentra preparado para compilarse tanto con `arduino-cli` como con Arduino IDE: ### Requisitos de Software * **ESP32 Arduino Core:** Versión 2.0.17 (las ramas 3.x no son compatibles con el esquema de partición). * **Librería TFT_eSPI:** 2.5.43 o superior con la configuración de pines del CYD. * **Esquema de Partición:** `huge_app` (3MB APP / No OTA / LittleFS). ### Compilación desde Terminal ```bash arduino-cli compile -b esp32:esp32:esp32:PartitionScheme=huge_app sketch/obd2_gauge ``` ### Carga al Dispositivo ```bash arduino-cli upload -p /dev/ttyUSB0 --fqbn esp32:esp32:esp32:PartitionScheme=huge_app sketch/obd2_gauge ``` --- ## Emulador de Pruebas Bluetooth en Banco En la carpeta `emulator/` se incluye el script `obd2_emulator.py` para simular un adaptador ELM327 v1.5 y la ECU del auto en Linux vía Bluetooth SPP: ### Modo ECO Fijo (Recomendado para calibración visual) Mantiene los parámetros fijados en el punto dulce (2.250 RPM, 58% carga, 14.2V, 90°C) con el badge `[ ECO ]` permanentemente encendido: ```bash python3 emulator/obd2_emulator.py --eco ``` ### Modo Ciclo de Demostración Ejecuta un ciclo dinámico de 36 segundos que incluye batería baja, ralentí, 10 segundos continuos en crucero ECO, aceleración exigida y fondo de escala con alarmas: ```bash python3 emulator/obd2_emulator.py ``` *Nota: Mientras el emulador corre en la terminal, podés presionar `e` + Enter para activar el modo ECO fijo o `c` + Enter para volver al ciclo dinámico.*