Skip to content

Diagramas UML

Carvaa-7 edited this page Oct 3, 2026 · 1 revision

Diagramas UML

Diagrama de clases / estructuras principales del firmware

classDiagram
    class SensorData {
        +float temperatura
        +float humedad
        +float presion
        +float lux
        +float nivel_cm
        +float nivel_pct
        +float peso_g
        +bool bme_ok
        +bool bh1750_ok
        +bool hcsr04_ok
        +bool hx711_ok
        +unsigned long timestamp_ms
    }

    class ResultadoFusion {
        +float riesgo_nivel
        +float riesgo_peso
        +float riesgo_base
        +bool discrepancia_sensores
        +float IEE
        +bool escalado
        +float riesgo_final
        +EstadoRiesgo estado
    }

    class EstadoRiesgo {
        <<enumeration>>
        RIESGO_NORMAL
        RIESGO_PREVENTIVO
        RIESGO_ALTO
        RIESGO_CRITICO
    }

    class ResultadoEvaporacion {
        +float ET0_mm_dia
        +float evap_calc_ml
        +float evap_medida_ml
        +float error_pct
        +bool disponible
    }

    class VentanaEvaporacion {
        +float t_min
        +float t_max
        +float t_suma
        +unsigned long muestras
        +float nivel_inicio_cm
        +unsigned long inicio_ms
        +bool bomba_activada_en_ventana
    }

    ResultadoFusion --> EstadoRiesgo
    VentanaEvaporacion --> ResultadoEvaporacion : procesarVentanaCompleta()
    SensorData --> ResultadoFusion : calcularFusion()
Loading

Diagrama de secuencia — ciclo de fusión y notificación

sequenceDiagram
    participant T as Tarea Sensores (core 0)
    participant M as Mutex/SensorData
    participant L as Loop principal (core 1)
    participant F as calcularFusion()
    participant A as actualizarAlarma()
    participant W as Servidor Web
    participant U as Usuario (tablero web)

    T->>M: Escribe lectura (cada 1s)
    L->>M: Toma copia protegida (cada 2s)
    L->>F: calcularFusion(copia)
    F-->>L: ResultadoFusion (riesgo, estado)
    L->>A: actualizarAlarma(estado)
    A->>A: Actualiza LEDs + patrón de buzzer
    L->>W: Expone estado en /api/data
    U->>W: GET /api/data (polling cada 3s)
    W-->>U: JSON con riesgo, estado, sensores, bomba
    U->>W: POST /api/silenciar
    W->>A: silenciado = true (10 min)
    U->>W: POST /api/bomba?accion=on
    W->>T: digitalWrite(PIN_BOMBA, HIGH)
Loading

Diagrama de estados — máquina de riesgo

stateDiagram-v2
    [*] --> Normal
    Normal --> Preventivo: riesgo_final >= 25%
    Preventivo --> Alto: riesgo_final >= 50%
    Alto --> Critico: riesgo_final >= 75%
    Critico --> Alto: riesgo_final < 75%
    Alto --> Preventivo: riesgo_final < 50%
    Preventivo --> Normal: riesgo_final < 25%

    note right of Preventivo
        Escalado climático: si IEE > 0.7
        y riesgo_base >= 25%, se suman
        +25 puntos al riesgo_final
    end note
Loading

Diagrama de tareas (concurrencia)

flowchart LR
    subgraph Core0["Core 0"]
        TS["tareaSensores()<br/>periodo 1s<br/>xTaskCreatePinnedToCore"]
    end
    subgraph Core1["Core 1"]
        LP["loop()<br/>server.handleClient()<br/>gestionarWiFi()<br/>fusión cada 2s<br/>histórico cada 5s<br/>LCD cada 3s<br/>ventana evap. cada 1h"]
    end
    MTX[("mutexDatos<br/>SemaphoreHandle_t")]
    TS --> MTX
    LP --> MTX
Loading

Clone this wiki locally