3.6 KiB
3.6 KiB
Marine Compass Display — Estado del Proyecto
Qué funciona
Ventana principal (ui/main_window.py)
- Layout 60/40: rosa de los vientos (izq) + panel de info (der)
- Modo fullscreen con F para toggle, Escape para cerrar
- Modo kiosk (
--kiosk): cursor oculto, screensaver desactivado (Linux/RPi) - Smoothing de rumbo configurable en
config.py(HEADING_SMOOTHING)
Rosa de los vientos (ui/compass_widget.py)
- Tarjeta giratoria: el norte siempre apunta al norte real
- Línea lubber fija en rojo (arriba = rumbo del barco)
- Readout digital del rumbo arriba de la rosa, justo bajo la línea lubber
- Formato:
045.0°Mo045.0°Tsegún modo seleccionado
- Formato:
- Estrella de 16 puntas: N=rojo, cardinales=blanco, intercardinales=oro
- Ring de ticks cada 5°, números cada 10°
- Modo noche / día
- Ball central muestra pitch+roll del buque
Panel de información (ui/info_panel.py)
- HDG grande: muestra °M o °T según el botón HDG seleccionado ← bug corregido hoy
- Filas de datos: HDG(T), ROT, PITCH, ROLL, VAR, HEAVE, YAW RATE
- ROT Arc: semicírculo animado, azul=estribor, rojo=babor, escala ±60°/min
- Siluetas de barco animadas (motor-cruiser 40ft):
- PITCH (vista lateral): hull completo, cabina, flybridge, radar arch, línea de boot roja, línea de vida punteada, arco de proa
- ROLL (vista de proa): casco V, francobordo con curvatura, raíl de rociada, windshield en V con cristales azules separados, arco radar, luces de navegación rojo/verde
- YAW (vista de planta): casco cúbico bezier, cockpit con bancadas, cabina, flybridge, escotillas de cubierta, púlpito de proa, luces de nav
- Botones táctiles: HDG °M/°T, NIGHT, PORTS
- Marcos separados por gaps (para case con compartimentos físicos)
- Responsive: se adapta a cualquier tamaño de pantalla
Simulador NMEA (simulator/nmea_simulator.py)
- Secuencia realista: INITIAL → TURN_STBD → COMP_STBD → STEADY_STBD → TURN_PORT → COMP_PORT → NORMAL
- Genera: HCHDG (rumbo), IIROT (ROT), IIXDR (pitch, roll, aceleración, giroscopio)
- Servidor TCP en 127.0.0.1:10110
- Variación magnética: -7.5° (Stuart, FL)
- SOG: 8.5 kn, ROT máx: 60°/min
Lanzamiento (launch.bat)
launch.bat --sim→ usapython(con consola), se ven logs del simulador en tiempo reallaunch.bat→ usapythonw(sin consola), modo kiosk limpio para hardware
Parser NMEA (core/nmea_parser.py)
- Parsea HCHDG, IIROT, IIXDR
NavData.hdg_true_calc= hdg_mag + variation (calculo automático)
Pendiente / Mejoras posibles
- Silueta ROLL (vista de proa): el usuario quiere más detalle y mejores proporciones
- Test en hardware real con puerto serial
- Modo RPi: probar con
--kiosken Raspberry Pi con pantalla táctil - NMEA: agregar soporte para VHW, MWV, GGA si se necesita más datos
Cómo probar
# Simulador (muestra logs en consola):
launch.bat --sim
# Con hardware real en COM3:
launch.bat --port COM3 --baud 4800
# Puerto configurado en config.py:
launch.bat
# Python directo (más control):
python main.py --sim
python main.py --port COM3
Archivos clave
| Archivo | Función |
|---|---|
main.py |
Entry point, args, QApplication |
config.py |
Puertos serial, smoothing, FPS |
ui/main_window.py |
Ventana principal, layout, timer |
ui/compass_widget.py |
Rosa de los vientos (QPainter) |
ui/info_panel.py |
Panel derecho: datos, siluetas, botones |
ui/styles.py |
Colores y helpers de tema |
core/nmea_parser.py |
Parser NMEA 0183 |
core/serial_reader.py |
Lector serial (QThread) |
simulator/nmea_simulator.py |
Simulador de maniobras + TCP server |