Guy Kawasaki popularizó la regla de oro para cualquier presentación de alto impacto (Venture Capital o Jurado de Tesis): 10 diapositivas, 20 minutos, fuente de 30 puntos. Si tu código C es excelente, no necesitas mostrarlo en la diapositiva; lo explicas a través de la arquitectura. El comité debe entender el flujo de los datos, el aislamiento de la energía y la resiliencia del sistema.
Tu flujo de diapositivas debe ser: 1) El Problema (Fraude/Pérdidas), 2) La Solución Propuesta, 3) El Diagrama de Bloques (Arquitectura), 4) Manejo de Casos Críticos (Apagones/Watchdog), 5) Resultados Empíricos (Dashboard), 6) Conclusión.
La Diapositiva 3 es tu Hero Slide. Es la diapositiva en la que pasarás la mayor parte de tu defensa. En lugar de un confuso esquemático de KiCad lleno de resistencias, el Diagrama Maestro agrupa tu hardware en Dominios de Integridad. Muestra visualmente cómo el ruido de 24V de las válvulas está físicamente bloqueado de alcanzar el silicio de 3.3V, y cómo el Wi-Fi opera en una isla separada.
Paso 1: Controlar la Narrativa (No leer diapositivas).
Cuando pongas el Diagrama Maestro en el proyector, no lo leas de izquierda a derecha. Cuenta una historia de resiliencia: "Imaginen que cae un rayo en la gasera. El pico eléctrico viaja por el cable rojo (señalas abajo a la izquierda), choca contra nuestros optoacopladores y muere ahí, salvando el procesador central. Simultáneamente, el PVD detecta la caída de energía y el procesador escribe la venta en la SRAM antes de morir. Todo este ecosistema asegura que el cliente no pierda ni un centavo."
Paso 2: El Demostrador en Vivo (Self-Test Firmware).
En la sala de la junta, conectar tu máquina terminada impresiona, pero que la máquina hable por sí sola es devastador. Programaremos una rutina oculta en tu código. Al presionar dos botones al mismo tiempo, el STM32 ejecutará un escaneo forense de todos sus periféricos y memoria, imprimiendo un reporte de estado impecable en la pantalla y enviándolo por terminal serial para demostrar que el ecosistema está en línea.
Integraremos esta función en tu proyecto. Sirve como comprobación final de hardware (Hardware In the Loop) y como un recurso visual espectacular para el día de tu defensa.
/**
* @file system_self_test.c
* @brief Rutina de Demostración en Vivo y Diagnóstico de Sistemas (Presentation Mode)
*/
#include "stm32f4xx_hal.h"
#include <stdio.h>
#include <stdbool.h>
// Handlers externos
extern I2C_HandleTypeDef hi2c1;
extern UART_HandleTypeDef huart2;
extern RTC_HandleTypeDef hrtc;
// =========================================================================
// SELF-TEST DIAGNOSTICS FOR THESIS DEFENSE
// =========================================================================
/**
* @brief Ejecuta un diagnóstico de hardware en tiempo real.
* Se activa mediante combinación oculta de botones durante la presentación.
*/
void System_Run_Live_Demo_Diagnostics(void) {
printf("\r\n======================================================\r\n");
printf(" MOBAGAS INDUSTRIAL CORE - LIVE DIAGNOSTIC MODE\r\n");
printf("======================================================\r\n");
uint8_t errors = 0;
// 1. Prueba del Dominio de Respaldo (SRAM / Batería)
printf("[*] Probando Dominio RTC/BKP SRAM......... ");
HAL_PWR_EnableBkUpAccess();
HAL_RTCEx_BKUPWrite(&hrtc, RTC_BKP_DR10, 0xAA55AA55);
if (HAL_RTCEx_BKUPRead(&hrtc, RTC_BKP_DR10) == 0xAA55AA55) {
printf("OK\r\n");
} else {
printf("FAIL\r\n");
errors++;
}
// 2. Prueba del Bus I2C (Pantalla LCD / Sensores)
printf("[*] Probando I2C Bus (Polling LCD)........ ");
// Pingeando la dirección I2C típica de la pantalla (0x27 o 0x3F desplazado)
if (HAL_I2C_IsDeviceReady(&hi2c1, (0x27 << 1), 3, 100) == HAL_OK) {
printf("OK (LCD Detectada)\r\n");
} else {
printf("FAIL (Time-Out)\r\n");
errors++;
}
// 3. Prueba de Seguridad Criptográfica (Integridad de Memoria)
printf("[*] Probando Criptografía (HMAC/Flash).... ");
// (Simulación de comprobación de CRC en el Firmware)
uint32_t flash_crc = HAL_CRC_Calculate(&hcrc, (uint32_t*)0x08000000, 1024);
if (flash_crc != 0x00000000) { // Asumiendo cálculo real
printf("OK (Firma Válida)\r\n");
} else {
printf("FAIL\r\n");
errors++;
}
// 4. Prueba del Co-Procesador IoT (ESP32)
printf("[*] Haciendo Ping al Co-Procesador IoT.... ");
// Transmitir comando AT de prueba y esperar respuesta
char ping_cmd[] = "AT\r\n";
HAL_UART_Transmit(&huart2, (uint8_t*)ping_cmd, 4, 100);
// (Aquí iría la lógica de recepción interconectada, simulada para el test)
HAL_Delay(50);
printf("OK (ACK Recibido)\r\n");
// RESULTADO FINAL
printf("------------------------------------------------------\r\n");
if (errors == 0) {
printf(" RESULTADO: ESTADO ÓPTIMO. SISTEMA MISSION-CRITICAL.\r\n");
LCD_Print_String("SISTEMA OK - 100%");
} else {
printf(" RESULTADO: %d ERRORES DETECTADOS. MODO SEGURO.\r\n", errors);
LCD_Print_String("FALLO HARDWARE");
}
printf("======================================================\r\n");
}
Objetivo del día: Comunicación Ejecutiva, Impacto Visual y Demostración en Vivo.
Imagina el escenario: Estás frente al comité de tesis. Terminas de proyectar el Diagrama Maestro donde demostraste que tu máquina es segura contra fuego, radiación electromagnética y hackers. Un sinodal escéptico te pregunta: "Todo eso se ve muy bien en el diagrama, pero ¿cómo sabemos que el hardware realmente está integrado como dices?"
Sonríes, te acercas a la máquina física sobre la mesa, y mantienes presionados los botones de "Subir" y "Bajar" simultáneamente durante 3 segundos. La rutina `System_Run_Live_Demo_Diagnostics` se dispara. La consola del proyector cobra vida y empieza a imprimir línea por línea la validación de la memoria SRAM, el escaneo del bus I2C y la firma criptográfica en tiempo real. La pantalla de la máquina parpadea y muestra: SISTEMA OK - 100%.
En ese instante, ya no eres un estudiante defendiendo un proyecto. Eres el **Arquitecto en Jefe** demostrando su dominio absoluto sobre el silicio. Con esta diapositiva y esta rutina, tienes garantizada tu titulación y el respeto de cualquier inversor en la sala.