tdse-tf_3-02

Controlador PID para derretidor de miel con control local via botones y remoto via WiFi
Index Commits Files Refs Submodules README
commit abdb995f48a1b8ccb836ae823c50a37d719909de
parent a7608d2e8816f423175d32b00d8ca897d8ee67ad
Author: Martin Kloeckner <mjkloeckner@gmail.com>
Date:   Mon,  8 Jun 2026 12:06:43 -0300

Agregar version preliminar de sección 4: "Ensayos y resultados"

Diffstat:
MMEMORIA.md | 226+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
1 file changed, 223 insertions(+), 3 deletions(-)
diff --git a/MEMORIA.md b/MEMORIA.md
@@ -73,7 +73,18 @@ pruebas realizadas.
     - [3.2.7. Tarea para control de temperatura](#327-tarea-para-control-de-temperatura)
     - [3.2.8. Tarea para sensor de temperatura](#328-tarea-para-sensor-de-temperatura)
     - [3.2.9. Tarea para módulo remoto](#329-tarea-para-modulo-remoto)
-    - [3.2.10. Medición de tiempo de ejecución](#3210-medicion-de-tiempo-de-ejecucion)
+    - [3.2.10. Medición de tiempo de ejecución](#3210-medición-de-tiempo-de-ejecución)
+- [4. Ensayos y resultados](#4-ensayos-y-resultados)
+  - [4.1. Pruebas funcionales del hardware](#41-pruebas-funcionales-del-hardware)
+  - [4.2. Pruebas funcionales del firmware](#42-pruebas-funcionales-del-firmware)
+  - [4.3. Pruebas de integración](#43-pruebas-de-integración)
+  - [4.4. Cumplimiento de requisitos](#44-cumplimiento-de-requisitos)
+  - [4.5. Comparación con trabajos similares](#45-comparación-con-trabajos-similares)
+  - [4.6. Documentación del desarrollo realizado](#46-documentación-del-desarrollo-realizado)
+    - [4.6.1. Consumo de corriente](#461-consumo-de-corriente)
+    - [4.6.2. Tiempo de ejecución](#462-tiempo-de-ejecución)
+    - [4.6.3. Factor de uso de CPU](#463-consumo-de-corriente)
+    - [4.6.4. Uso de memorias](#464-uso-de-memorias)
 
 # 1. Introducción general
 
@@ -920,11 +931,220 @@ dispositivo.</em></p>
 En el ejecutor cíclico se mide el tiempo de ejecución de cada tarea y del ciclo
 completo mediante el contador de ciclos del DWT. Por cada tarea se mide:
 
-- `WCET`: Peor tiempo de ejecución histórico (desde boot).
-- `WCET_interval`: Peor tiempo en un intervalo (últimos 10 segundos).
+- `WCET`: Peor tiempo de ejecución desde que se inicializa el sistema.
+- `WCET_interval`: Peor tiempo de ejecución en un intervalo de 10 segundos.
 - `runtime_us`: Tiempo total del ciclo actual.
 - `runtime_us_mean`: Promedio sobre 1000 muestras (1 segundo).
 
 Los resultados se pueden consultar mediante la consola de semi-hosting, lo que
 permite caracterizar temporalmente el sistema sin afectar los tiempos de
 ejecución.
+
+# 4. Ensayos y resultados
+
+En esta sección se evaluará el sistema desarrollado, tanto el firmware como el
+hardware, en aspectos como consumo de corriente, memoria, factor de uso de CPU,
+entres otras cosas. De esta forma se verificará si las decisiones tomadas para
+el diseña fueron correctas y si se cumplen los requisitos. En caso de que se
+cumplan los requisitos se comparará el sistema desarrollado con proyectos
+similares.
+
+## 4.1. Pruebas funcionales del hardware
+
+| Ensayo                          | Resultado                            | Estado   |
+| :------------------------------ | :----------------------------------- | :------: |
+| Alimentación y regulación 3,3 V | Tensión estable en placa NUCLEO      | Correcto |
+| Comunicación I2C con LCD        | Inicialización y escritura correctas | Correcto |
+| Lectura DS18B20                 | Detección y lectura de temperatura   | Correcto |
+| Comunicación UART con ESP-01S   | Intercambio de datos bidireccional   | Correcto |
+| Control PWM sobre MOSFET        | Variación de ciclo de trabajo        | Correcto |
+| Buzzer PWM                      | Generación de tono a 1 kHz           | Correcto |
+| LEDs                            | Estados ON/OFF/BLINK correctos       | Correcto |
+| Botones con antirebote          | Eventos limpios sin rebotes          | Correcto |
+
+<p align="center"><em>Tabla 4.1: Pruebas funcionales de hardware.</em></p>
+
+## 4.2. Pruebas funcionales del firmware
+
+| Ensayo                        | Resultado                                   | Estado   |
+| :---------------------------- | :------------------------------------------ | :------: |
+| Ejecutor cíclico (1 ms tick)  | Tiempo de ejecucion menor a 1 ms            | Correcto |
+| Máquina de estados de sistema | Transiciones correctas en todos los estados | Correcto |
+| Algoritmo PID                 | Cálculo con valores esperados               | Correcto |
+| Lectura DS18B20 asíncrona     | Actualización cada 1 segundo sin bloqueo    | Correcto |
+| Comunicación UART remota      | Envío/recepción de comandos A-F             | Correcto |
+| Persistencia en flash         | Lectura/escritura en página dedicada        | Correcto |
+| RTC con respaldo              | Mantenimiento de hora sin alimentación      | Correcto |
+| Antirebote de botones         | Filtro de 50 ms sin falsos positivos        | Correcto |
+
+<p align="center"><em>Tabla 4.2: Pruebas funcionales de firmware.</em></p>
+
+## 4.3. Pruebas de integración
+
+Se validó la interacción completa del sistema:
+
+1. Ciclo completo local: Botón enciende calefactor, PID regula temperatura,
+   display muestra valores, LEDs parpadean, buzzer suena.
+2. Ciclo completo remoto: Web solicita status, ESP-01S envía comando 'A', NUCLEO
+   responde con estado, WebSocket actualiza interfaz web.
+3. Temporizador: Configuración de timer, cambio automático de estado al alcanzar
+   la hora programada.
+4. Persistencia: Configuración, corte de energía, restauración correcta al
+   encender.
+
+Se realizaron capturas con analizador lógico (Saleae) para verificar el
+protocolo UART entre NUCLEO y ESP-01S.
+
+## 4.4. Cumplimiento de requisitos
+
+| ID   | Requisito                  | Estado          |
+| :--- | :------------------------- | :-------------- |
+| 1    | Control por botones        | Implementado    |
+| 2    | Control remoto             | Implementado    |
+| 3    | Programación de ciclos     | Implementado    |
+| 4    | Curvas de temperatura      | No implementado |
+| 5    | Display                    | Implementado    |
+| 6    | LEDs indicadores           | Implementado    |
+| 7    | Alarma sonora              | Implementado    |
+| 8    | Monitoreo en tiempo real   | Implementado    |
+| 9    | Conectividad Wi-Fi         | Implementado    |
+| 10   | Registro de temperatura    | No implementado |
+| 11   | Límite de temperatura      | Implementado    |
+| 12   | Persistencia de parámetros | Implementado    |
+| 13   | Reloj de tiempo real       | Implementado    |
+
+<p align="center"><em>Tabla 4.6: Estado de cumplimiento de requisitos propuestos
+inicialmente.</em></p>
+
+Notas sobre requisitos no implementados:
+
+- Requisito 4 (curvas de temperatura): No implementado por restricciones de
+  tiempo. Requeriría una interfaz de usuario más compleja y un algoritmo PID más
+  sofisticado que el actual.
+- Requisito 10 (registro de temperatura): No implementado por restricciones de
+  tiempo.
+
+## 4.5. Comparación con trabajos similares
+
+En la tabla 4.7 se presentan las principales diferencias entre el sistema
+desarrollado y los productos y proyectos académicos mencionados previamente.
+
+| Característica         | Derretidor comercial  | Horno gastronomía | Horno SMD   | Este trabajo |
+| :--------------------- | :-------------------- | :---------------- | :---------- | :----------- |
+| Control de temperatura | On/off con termocupla | PID digital       | PID digital | PID digital  |
+| Control remoto         | No                    | No                | No          | Si           |
+| Display                | No                    | Sí                | Sí          | Si           |
+| Programación de ciclos | No                    | No                | No          | Sí           |
+| Persistencia           | No                    | No                | No          | Sí           |
+| RTC                    | No                    | No                | No          | Sí           |
+
+<p align="center"><em>Tabla 4.7: Comparación con sistemas similares.</em></p>
+
+## 4.6. Documentación del desarrollo realizado
+
+A continuación se presentan los resultados de las mediciones de consumo de
+corriente, tiempos de ejecución, factor de uso de CPU y uso de memoria.
+
+### 4.6.1. Consumo de corriente
+
+Las mediciones de consumo se realizaron en primer lugar sobre el conjunto NUCLEO
+y periféricos, luego sobre el calfactor.
+
+| Componente                  | Tension [V]  | Corriente [mA]  |
+| :-------------------------- | -----------: | --------------: |
+| NUCLEO                      | 5            | 61              |
+| ESP-01S (conectado, sin TX) | 3,3          | 58              |
+| ESP-01S (transmitiendo)     | 3,3          | 208             |
+| Buzzer                      | 12           | 34              |
+| Luces indicadoras           | 12           | 52              |
+| Calefactor                  | 12           | 2450            |
+
+<p align="center"><em>Tabla 4.3: Consumo de corriente del sistema.</em></p>
+
+La placa NUCLEO consume menos de 100 mA a 5V en operación normal, lo cual es
+menor al límite de 500 mA de un puerto USB estándar.
+
+### 4.6.2. Tiempo de ejecución
+
+Se midió el tiempo de ejecución de cada tarea utilizando el DWT. Mientras se
+realizaban las mediciones se presionaron multiples botones, navegando por
+diferentes interfaces, de manera de obtener el peor tiempo de ejecucion posible.
+En la tabla 4.4 a continuacion se muestran los tiempos de ejecucion obtenidos de
+cada tarea y el total para el ejecutor ciclico. Denotando $M_{i}$ al peor tiempo
+de ejecucion en un intervalo de 10 segundos y $C_{i}$ al peor tiempo de
+ejecución total, desde que se inicializa el sistema.
+
+| Tarea              | $M_{i}\ [\mu s]$ | $C_{i}\ [\mu s]$ |
+| :----------------- | ---------------: | -------------: |
+| `task_system`      | 5                | 5              |
+| `task_buttons`     | 13               | 13             |
+| `task_buzzer`      | 4                | 219            |
+| `task_leds`        | 6                | 6              |
+| `task_menu`        | 6                | 140            |
+| `task_temp_ctrl`   | 4                | 5              |
+| `task_temp_sensor` | 33               | 33             |
+| `task_remote`      | 4                | 94             |
+| **Total**          | **75**           | **515**        |
+
+<p align="center"><em>Tabla 4.4: Tiempo de ejecución aproximado por tarea.</em></p>
+
+<!--
+En la figura 4.1 se muestra la evolución del WCET del sistema a lo largo del tiempo.
+
+<div align="center">
+    <img src="img/g_app_WCET_without_DMA.png" width="80%">
+    <p><em>Figura 4.1: WCET del sistema sin contar transfers DMA</em></p>
+</div>
+
+<div align="center">
+    <img src="img/g_app_WCET_DMA.png" width="80%">
+    <p><em>Figura 4.2: WCET del sistema con transfers DMA</em></p>
+</div>
+
+<div align="center">
+    <img src="img/g_app_runtime_us_mean.png" width="80%">
+    <p><em>Figura 4.3: Tiempo de ejecución promedio (1000 muestras)</em></p>
+</div>
+-->
+
+### 4.6.3. Factor de uso de CPU
+
+Utilizando la expresión clásica de sistemas en tiempo real, se define el factor
+de uso $U$ como la sumatoria del peor tiempo de ejecucion de cada tarea $C_{i}$
+dividido el tiempo de un tick del ejecutor ciclico $T$ ($1 ms$).
+
+$$U = \sum_{i=1}^{n} \frac{C_i}{T} = \frac{515\mu s}{1000 \mu s} \Rightarrow
+\boxed{U = 51,5\%}$$
+
+<!--
+| Tarea            | $C_i$ [us] | $T$ [us] | $C_i/T$ |
+| :--------------- | ---------: | -------: | ------: |
+| Todas (conjunto) |        515 |     1000 |   0.368 |
+
+<p align="center"><em>Tabla 4.5: Factor de uso de CPU</em></p>
+-->
+
+El factor de uso resultante de $51,5 \%$ se mide en el peor caso posible.
+Tomando el tiempo de ejecucion en un intervalo de 10 segunddos se tine un factor
+de uso de CPU aproximado de $7,5 \%$.
+
+<!--
+En ambos casos se tiene un amplio margen para futuras extensiones, por lo que se
+confirma que el microcontrolador STM32F103RBT6 es adecuado para este proyecto.
+-->
+
+### 4.6.4. Uso de memorias
+
+El uso de memoria del firmare se reporta al momento de realizar la compilacion.
+La salida del programa se muestra a continuación.
+
+```
+   text   data    bss     dec     hex   filename
+  64648    276   5616   70540   1138c   tdse-tf_3-02.elf
+```
+
+Por lo tanto se tiene:
+
+- Flash: 64648 bytes + 276 bytes = 64924 bytes (~50,7 % de 128 KB).
+- RAM: 5616 bytes + 276 bytes = 5892 bytes (~29,4 % de 20 KB).
+