En ingeniería de hardware, la estética previene fallas. Un cableado "feo" (spaghetti wiring) es propenso a engancharse con la herramienta de un técnico, sufre estrés mecánico en los conectores y actúa como antena captando Interferencia Electromagnética (EMI). El proceso de Wire Looming (Peinado de Cables) utiliza mallas expandibles (Braided Sleeving) y anclajes adhesivos para guiar los arneses paralelos a las paredes del gabinete, cruzando siempre a 90 grados (Día 296).
En la interfaz hombre-máquina (HMI), un LED que parpadea abruptamente de ON a OFF genera alerta psicológica y fatiga visual (es el comportamiento reservado para alarmas). Un estado de "Espera/Listo" (IDLE) debe sentirse orgánico. Utilizaremos el hardware de PWM (Modulación por Ancho de Pulso) del STM32 para variar gradualmente el brillo del LED verde, creando un efecto de "respiración" (Breathing LED) característico de los equipos médicos y de consumo de gama alta.
Paso 1: Etiquetado Industrial (Wire Labeling).
En caso de una reparación en dos años, el técnico no recordará si el cable azul era de 24V o de la señal del sensor. Utiliza etiquetas termo-contráctiles (Heat Shrink Labels) impresas en ambos extremos de cada cable. Nomenclatura estándar: [Origen]-[Destino] (Ej: PSU-VCC / MCU-PA0).
Paso 2: Fijación y Peinado (Zip-Ties & Anchors).
Agrupa los cables del mismo tipo usando cinchos plásticos (Zip-Ties) cada 10 cm. Utiliza bases adhesivas con anclaje para fijar el mazo de cables a las paredes del gabinete de acero. Consejo de QA: Corta el sobrante del cincho al ras con pinzas de corte diagonal; dejar una punta afilada lastimará las manos del técnico.
Paso 3: Atenuación Nocturna del LCD.
Si tu pantalla LCD tiene la retroiluminación alimentada directamente a 5V, será un faro molesto de noche. Conecta el pin LED+ o BL (Backlight) de la pantalla a un transistor NPN/MOSFET controlado por un pin PWM del STM32 para atenuarlo por software.
En lugar de bloquear la CPU con retardos HAL_Delay() para encender y apagar un LED, configuraremos el Periférico Timer (TIM) del STM32 en modo PWM. El hardware cambiará el voltaje automáticamente en el fondo.
/**
* @file ui_aesthetics.c
* @brief Funciones de pulido visual HMI (Breathing LED y Backlight)
*/
#include "stm32f4xx_hal.h"
// Asumiendo que htim3 está configurado para PWM en el Canal 1 (LED Verde de READY)
// y htim4 en el Canal 2 (Backlight de la Pantalla LCD)
extern TIM_HandleTypeDef htim3;
extern TIM_HandleTypeDef htim4;
// =========================================================================
// EFECTO "BREATHING LED" (ESTADO IDLE/READY)
// =========================================================================
/**
* @brief Actualiza dinámicamente el Duty Cycle del PWM para simular respiración.
* @note Esta función debe llamarse cada ~20ms en el bucle principal o desde un Timer Interrupt.
*/
void UI_Update_Breathing_LED(void) {
static uint16_t duty_cycle = 0;
static bool is_inhaling = true;
// El Auto-Reload Register (ARR) del Timer está configurado a 1000
const uint16_t PWM_MAX = 1000;
const uint16_t STEP = 20; // Velocidad de respiración
if (is_inhaling) {
duty_cycle += STEP;
if (duty_cycle >= PWM_MAX) {
duty_cycle = PWM_MAX;
is_inhaling = false; // Cambiar dirección
}
} else {
if (duty_cycle <= STEP) {
duty_cycle = 0;
is_inhaling = true; // Cambiar dirección
} else {
duty_cycle -= STEP;
}
}
// Actualizar el registro Compare del hardware (Modifica el ancho del pulso instantáneamente)
__HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_1, duty_cycle);
}
// =========================================================================
// ATENUADOR AUTOMÁTICO DE PANTALLA (NIGHT MODE)
// =========================================================================
/**
* @brief Ajusta el brillo del LCD basado en el estado de la máquina.
* @param is_active: TRUE si despachando (100% brillo), FALSE si en reposo (30% brillo).
*/
void UI_Set_LCD_Backlight(bool is_active) {
// ARR del Timer 4 está a 100 (Porcentaje directo)
if (is_active) {
__HAL_TIM_SET_COMPARE(&htim4, TIM_CHANNEL_2, 100); // 100% Brillo
} else {
__HAL_TIM_SET_COMPARE(&htim4, TIM_CHANNEL_2, 30); // 30% Brillo (Modo Nocturno)
}
}
Objetivo del día: Control de Calidad (QA), Ergonomía Cognitiva y Acabado Comercial.
Una tesis universitaria tradicional termina cuando el hardware no se quema y los números cuadran. Un producto comercial apenas comienza ahí. Cuando un auditor de calidad o un cliente abre el gabinete NEMA de tu Despachador, la disposición del cableado le grita qué tipo de ingeniero eres. Al implementar mallas expandibles, termo-contráctiles y etiquetas unificadas, has eliminado la posibilidad de fallos mecánicos por vibración y has facilitado enormemente el mantenimiento futuro. El hardware ahora luce tan ordenado como el código fuente.
A nivel de Firmware, la implementación de señales **PWM (Modulación por Ancho de Pulso)** para el LED de estado y la retroiluminación de la pantalla demuestra dominio del hardware periférico del STM32. En lugar de desperdiciar ciclos de CPU haciendo *bit-banging* manual, has delegado la estética a los Timers de hardware. Tu interfaz ahora comunica sutileza: el equipo "respira" suavemente en estado de espera sin causar fatiga visual, y reduce su consumo eléctrico (y contaminación lumínica) atenuando la pantalla cuando no hay clientes. Estos son los "Ajustes Menores" que elevan un proyecto de 90 puntos a la calificación perfecta de excelencia.