Electrical/PCB: - LTC4040 Block B sized to the 12 Ah 1S4P pack (RPROG 825R -> 2.42 A ~ C/5, RS 8 mR -> 3.1 A input limit, PFI 4.60 V, backup 4.79 V, charge 4.00 V Li-ion via VSYS-referenced straps) + Block E cutoff (P11) + Block F PA4->VEH5V re-tap + Block H fail-safe Modo-B bypass (K1 normally-closed relay) + Block I NTC->PB1. - CARRIER-BOARD conversion: simpleRTK2B Pro on UNO-pattern female headers (MOD1; D0/D1=UART1, D2=RX2, D8=TX2, IOREF=3V3, 5V=SW_5V) + 4G NTRIP Master on on-board XBee socket (J7/J8; VCC=3V3_MODEM via new Block K MP1584 buck off SW_5V - the HP XBee socket is 3.3 V not 5 V). Board 120x100, placement + GND pour + DRC baselines. Custom symbols: LTC4040EUFD, AO4406A, SimpleRTK2B_Pro_Socket. - Fixed duplicated U2, stale no-connects, A4->A3 sheet; ERC 0 errors. Docs: - Canonical electrical-design-state + production delta (Block B values table, 5b/5c/5d/5e) + design/rationale/connections/BOM swept to the Jul-2 assumptions ledger (Conexiones-por-Bloque xlsx). - Guia de Conexion Protoboard: LaTeX source now maintained in-repo -> v2.1 PDF. - CircuiTikZ sheet + wiring Beamer: block 11 (NTC->PB1) + guinda ignition legend. - Client decks: Avance v1.1 (overclaims fixed) + RCA v1.1 (2-jul addendum). Repo hygiene: - .gitignore: live rtk-config (SIM/APN/NTRIP creds) now ignored and REMOVED from tracking (NOTE: rotate those credentials - they exist in prior commits); KiCad .bak/snapshots/.history, LaTeX intermediates, Office locks ignored+purged. - Removed rogue .history gitlinks that broke git status.
514 lines
28 KiB
TeX
514 lines
28 KiB
TeX
% Helgen Technologies — HBOX RTK · RCA + Plan de Robustez (Project Drogheda)
|
||
% Audiencia: ICAVE (cliente, supervisor tecnico). Tono: responsable, tecnico, honesto.
|
||
% Compilar con XeLaTeX: latexmk -xelatex -interaction=nonstopmode <file>.tex (pdflatex tambien funciona, con fuentes fallback)
|
||
% v1.1 (2026-07-02): REGISTRO HISTORICO INTACTO — el contenido entregado el 22-jun no se modifica
|
||
% (verificado contra el ledger 2026-07-02: ASA correcto, rectificacion master-14 presente, sin
|
||
% "40 Ah"/"PLA"/tach, honestidad termica presente). Unico cambio: se AGREGA una lamina de adenda
|
||
% al final (sin numero de pagina) con el avance al 2-jul. v1.0 se conserva intacta.
|
||
\documentclass[10pt,aspectratio=169]{beamer}
|
||
|
||
\usetheme[progressbar=frametitle, numbering=fraction, block=fill]{metropolis}
|
||
|
||
% ---------- Paleta oficial Helgen (Guia de Identidad v1.5, 2026) ----------
|
||
\definecolor{HelgenIndigo}{HTML}{2C3C5B} % Indigo — color primario
|
||
\definecolor{HelgenCyan}{HTML}{51F3DA} % Verde cian — acento
|
||
\definecolor{HelgenTeal}{HTML}{17A08C} % derivado: cian oscurecido para TEXTO sobre blanco
|
||
\definecolor{HelgenMist}{HTML}{EFF1F5} % derivado: tinte indigo 8% para rellenos
|
||
\definecolor{HelgenAmber}{HTML}{C0392B} % rojo de alerta (umbrales/peligro)
|
||
|
||
\setbeamercolor{normal text}{fg=HelgenIndigo, bg=white}
|
||
\setbeamercolor{alerted text}{fg=HelgenTeal}
|
||
\setbeamercolor{frametitle}{bg=HelgenIndigo, fg=white}
|
||
\setbeamercolor{progress bar}{fg=HelgenCyan, bg=HelgenMist}
|
||
\setbeamercolor{title separator}{fg=HelgenCyan}
|
||
\setbeamercolor{block title}{bg=HelgenMist, fg=HelgenIndigo}
|
||
\setbeamercolor{block title alerted}{bg=HelgenIndigo, fg=white}
|
||
|
||
% ---------- Fuentes de marca + idioma ----------
|
||
\usepackage{iftex}
|
||
\ifXeTeX
|
||
\usepackage{fontspec}
|
||
\IfFontExistsTF{League Spartan}{%
|
||
\newfontfamily\helgentitle{League Spartan}[BoldFont={* Bold}]
|
||
\setbeamerfont{title}{family=\helgentitle, series=\bfseries}
|
||
\setbeamerfont{frametitle}{family=\helgentitle, series=\bfseries}
|
||
\setbeamerfont{section title}{family=\helgentitle, series=\bfseries}
|
||
\setbeamerfont{standout}{family=\helgentitle, series=\bfseries}
|
||
}{}
|
||
\IfFontExistsTF{MADE Evolve Sans}{\setsansfont{MADE Evolve Sans}}{}
|
||
\else
|
||
\usepackage[T1]{fontenc}
|
||
\fi
|
||
% babel-spanish no esta en este TeX Live; XeLaTeX maneja acentos UTF-8 nativamente.
|
||
\usepackage{booktabs}
|
||
\usepackage{graphicx}
|
||
\usepackage{array}
|
||
\newcolumntype{L}[1]{>{\raggedright\arraybackslash}p{#1}}
|
||
\usepackage{tikz}
|
||
\usetikzlibrary{arrows.meta, positioning, shapes.misc, fit, backgrounds}
|
||
\usepackage{listings}
|
||
\lstset{
|
||
basicstyle=\ttfamily\scriptsize,
|
||
keywordstyle=\color{HelgenIndigo}\bfseries,
|
||
commentstyle=\color{gray},
|
||
stringstyle=\color{HelgenTeal},
|
||
showstringspaces=false, breaklines=true, frame=single,
|
||
framerule=0.2pt, rulecolor=\color{HelgenMist}
|
||
}
|
||
|
||
% ---------- Estilos TikZ ----------
|
||
\tikzset{
|
||
box/.style={rounded rectangle, draw=HelgenIndigo, fill=HelgenMist,
|
||
font=\scriptsize, minimum height=7mm, inner xsep=2mm, align=center},
|
||
st/.style={rounded rectangle, draw=HelgenIndigo, fill=HelgenMist,
|
||
font=\scriptsize, minimum height=7mm, inner xsep=2mm, align=center},
|
||
hot/.style={rounded rectangle, draw=HelgenAmber, fill=HelgenMist, very thick,
|
||
font=\scriptsize, minimum height=7mm, inner xsep=2mm, align=center},
|
||
arr/.style={-{Stealth}, thick, HelgenTeal},
|
||
arrb/.style={-{Stealth}, thick, HelgenIndigo}
|
||
}
|
||
|
||
% ---------- Vinetas + separador (la fuente de marca no trae bullet ni middot) ----------
|
||
\setbeamertemplate{itemize item}{\textcolor{HelgenTeal}{\rule[0.25ex]{0.85ex}{0.85ex}}}
|
||
\setbeamertemplate{itemize subitem}{\textcolor{HelgenTeal}{\rule[0.25ex]{0.6ex}{0.6ex}}}
|
||
\setbeamertemplate{itemize subsubitem}{\textcolor{HelgenTeal}{\rule[0.25ex]{0.5ex}{0.5ex}}}
|
||
\newcommand{\sep}{\raisebox{0.35ex}{\rule{0.45ex}{0.45ex}}}
|
||
% Pie de figura con ancho acotado (evita desbordes al centrar texto largo)
|
||
\newcommand{\figcap}[1]{\par\vspace{1.2mm}\centerline{\begin{minipage}{0.92\textwidth}\footnotesize\centering #1\end{minipage}}}
|
||
|
||
% ---------- Pie de pagina ----------
|
||
\setbeamertemplate{frame footer}{%
|
||
\scriptsize\color{gray}\insertshortauthor\ \sep\ \insertshorttitle\ \sep\ Confidencial — Helgen Servicios Especializados}
|
||
|
||
% ---------- Metadatos ----------
|
||
\title[RCA HBOX RTK \sep\ ICAVE]{HBOX RTK — Análisis de Causa Raíz y Plan de Robustez}
|
||
\subtitle{Fallas de campo en ICAVE (Veracruz) \sep\ Camino a HBOX v3.0}
|
||
\author[Helgen Technologies]{Helgen Technologies — Ingeniería de Producto}
|
||
\date{22 de junio de 2026}
|
||
|
||
\begin{document}
|
||
|
||
\maketitle
|
||
|
||
\begin{frame}{Agenda}
|
||
\setbeamertemplate{section in toc}[sections numbered]
|
||
\tableofcontents[hideallsubsections]
|
||
\end{frame}
|
||
|
||
% =====================================================================
|
||
\section{Contexto y hallazgo principal}
|
||
|
||
\begin{frame}{¿Qué pasó?}
|
||
\begin{itemize}
|
||
\item 5 HBOX RTK instalados en equipo pesado de ICAVE (RTG, reach stackers, montacargas, tractoplana).
|
||
\item Operación intermitente desde el arranque y, después, una \alert{falla casi simultánea} en toda la flota.
|
||
\item En paralelo, durante semanas: \alert{desconexiones recurrentes} en Wialon.
|
||
\item Escalamiento del cliente (17 jun). Unidades retiradas: 4 en mano (3 fuera de servicio, 1 funcional) en Veracruz; equipo en Querétaro.
|
||
\end{itemize}
|
||
\vfill
|
||
\begin{alertblock}{Lo primero: transparencia}
|
||
Nuestra primera hipótesis fue el calor. El análisis con datos revela un cuadro más complejo, y este informe \textbf{corrige el diagnóstico con evidencia}.
|
||
\end{alertblock}
|
||
\end{frame}
|
||
|
||
\begin{frame}{Hallazgo principal}
|
||
\begin{itemize}
|
||
\item \textbf{No hay una causa única.} La evidencia apunta a \alert{al menos dos causas independientes}, amplificadas por una tercera.
|
||
\item \textbf{(1) Backend} — \alert{confirmado en el código}: puede retirar de Wialon a unidades que en realidad están \emph{sanas}.
|
||
\item \textbf{(2) Hardware / térmico} — causa física probable de las unidades genuinamente dañadas (a confirmar con desmontaje + termopar).
|
||
\item \textbf{(3) Firmware} — convierte interrupciones breves en cortes prolongados (ya corregido en v2).
|
||
\end{itemize}
|
||
\vfill
|
||
\begin{block}{Una consecuencia favorable}
|
||
Varias unidades reportadas como «caídas» pueden tener el \textbf{radio sano} y ser \textbf{víctimas del servidor}: esa parte es de corrección inmediata y de bajo costo.
|
||
\end{block}
|
||
\end{frame}
|
||
|
||
\begin{frame}{En una línea}
|
||
\begin{block}{Síntesis}
|
||
\large Los radios \textbf{funcionan}: entregamos posición GPS estándar (SPS) de forma confiable, \alert{todavía no RTK}. Los frentes por cerrar son la \textbf{fuente de correcciones}, la \textbf{observabilidad}, el \textbf{térmico} y la \textbf{vibración} — los cuatro, en corrección.
|
||
\end{block}
|
||
\end{frame}
|
||
|
||
% =====================================================================
|
||
\section{Metodología de diagnóstico}
|
||
|
||
\begin{frame}{Cómo diagnosticamos}
|
||
\begin{itemize}
|
||
\item \textbf{Principio:} validar primero las causas \alert{más probables y de comprobación inmediata} —sin desmontar unidades— antes que las hipótesis exóticas.
|
||
\item \textbf{3 vistas de log independientes por unidad:} receptor u-blox (\texttt{.ubx}), consola del 4G-NTRIP-Master (\texttt{.log}) y captura del retranslator en el servidor (\texttt{tcpdump}).
|
||
\item \textbf{+} archivos de configuración (caster NTRIP y ZED-F9P) \textbf{+} un \alert{baseline sano} de referencia (\texttt{RTK14\_440}).
|
||
\item \textbf{Herramientas propias} (\texttt{hbox-log-tools}): Log Explorer en navegador, analizador por lotes y dashboard.
|
||
\end{itemize}
|
||
\end{frame}
|
||
|
||
\begin{frame}{Diagnóstico diferencial (H1–H8)}
|
||
\centering\scriptsize
|
||
\setlength{\tabcolsep}{4pt}\renewcommand{\arraystretch}{1.15}
|
||
\begin{tabular}{@{}c L{0.42\textwidth} c c L{0.18\textwidth}@{}}
|
||
\toprule
|
||
\# & Hipótesis & A: simult. & B: descon. & Estado / Prior \\
|
||
\midrule
|
||
H1 & Térmico (batería / booster / módem en gabinete sellado + Mean Well) & Sí & Sí & Alto \\
|
||
H2 & Backend HOL (retranslator bloqueante) & Sí & Sí & \textbf{Confirmado (código)} \\
|
||
H2b & Filtro anti-salto (bloqueo permanente) & No & Sí & \textbf{Confirmado (código)} \\
|
||
H3 & Vibración (Dupont / SMA / soldadura) & No & Sí & Alto \\
|
||
H4 & Módulo 4G NTRIP (cuelgue / falla) & Parc. & Sí & Alto \\
|
||
H5 & Fusible sub-dimensionado & Sí* & Parc. & Medio \\
|
||
H6 & Lógica de watchdog (reset / loop) & No & Sí & Alto (para B) \\
|
||
H7 & Brownout de batería (caída de tensión por calor) & Sí & Sí & Medio-alto \\
|
||
H8 & Riel de potencia / EMI de la máquina & Parc. & Sí & Medio \\
|
||
\bottomrule
|
||
\end{tabular}
|
||
\vfill
|
||
\footnotesize Las dos comprobaciones \alert{más rápidas} (backend H2, fusible H5) se confirman en una hora, \textbf{sin desmontar una sola unidad}.
|
||
\end{frame}
|
||
|
||
% =====================================================================
|
||
\section{Evidencia: los datos}
|
||
|
||
\begin{frame}{Dos fallas, probablemente \emph{dos} causas}
|
||
\begin{columns}[T]
|
||
\column{0.5\textwidth}
|
||
\textbf{(A) Falla casi simultánea}
|
||
\begin{itemize}\small
|
||
\item Apunta a un estresor de \alert{modo común}.
|
||
\item Candidatos: calor, backend / caster / SIM, servidor.
|
||
\end{itemize}
|
||
\column{0.5\textwidth}
|
||
\textbf{(B) Desconexión crónica}
|
||
\begin{itemize}\small
|
||
\item Apunta a \alert{intermitencias}.
|
||
\item Candidatos: vibración, cuelgue del 4G, watchdog lento.
|
||
\end{itemize}
|
||
\end{columns}
|
||
\vfill
|
||
\begin{alertblock}{Por qué no reducirlo todo a «calor»}
|
||
Atribuir todo al calor pierde una corrección barata de \textbf{backend}, y un rediseño térmico \textbf{no} detendría las intermitencias por \textbf{vibración}. Se atienden ambas.
|
||
\end{alertblock}
|
||
\end{frame}
|
||
|
||
\begin{frame}{Ninguna unidad alcanzó RTK}
|
||
\centering
|
||
\includegraphics[width=\linewidth,height=0.76\textheight,keepaspectratio]{figs/fig_fix_compare.pdf}
|
||
\vfill
|
||
\figcap{Todas las capturas en \textbf{SPS (calidad 1)}; \alert{cero en RTK (4/5)}. El posicionamiento centimétrico nunca se entregó.}
|
||
\end{frame}
|
||
|
||
\begin{frame}{El receptor está sano — el problema no es el ZED-F9P}
|
||
\centering
|
||
\includegraphics[width=\linewidth,height=0.76\textheight,keepaspectratio]{figs/fig_baseline_gnss.pdf}
|
||
\vfill
|
||
\figcap{Baseline \texttt{RTK14\_440}: \textbf{12 satélites, HDOP 0.75}, C/N0 sano — pero atrapado en SPS. El receptor funciona.}
|
||
\end{frame}
|
||
|
||
\begin{frame}{La entrega extremo-a-extremo es sana}
|
||
\centering
|
||
\includegraphics[width=\linewidth,height=0.74\textheight,keepaspectratio]{figs/fig_delivery.pdf}
|
||
\vfill
|
||
\figcap{\texttt{RTK14\_440}: \textbf{984 paquetes, 1 Hz estable, cero caídas} al servidor. Lección clave: \alert{«entrega sana» $\neq$ «RTK»}.}
|
||
\end{frame}
|
||
|
||
\begin{frame}{Las correcciones son marginales}
|
||
\centering
|
||
\includegraphics[width=\linewidth,height=0.70\textheight,keepaspectratio]{figs/fig_ntrip_delay.pdf}
|
||
\vfill
|
||
\figcap{\textbf{Causa:} caster público gratuito \texttt{rtk2go} (sin SLA) + configuración del F9P \alert{solo en RAM} + cielo interior (banco). El cliente NTRIP rara vez alcanza el estado «conectado».}
|
||
\end{frame}
|
||
|
||
\begin{frame}{La trampa diagnóstica (y una rectificación)}
|
||
\begin{itemize}
|
||
\item La \textbf{consola del 4G-NTRIP-Master no es un indicador de salud confiable}: el baseline \emph{sano} registra la misma consola escasa que las unidades que «parecían» falladas.
|
||
\item \alert{Rectificación:} la supuesta «falla de ingest en master-14» queda \textbf{retirada} — master-14 \emph{es} el baseline y demuestra reenvío.
|
||
\item \textbf{Solo master-21} es una falla confirmada (el módem nunca registra: \texttt{0xFFFFF} + 511 errores del parser AT).
|
||
\end{itemize}
|
||
\vfill
|
||
\begin{block}{Lección}
|
||
La salud por unidad debe provenir de un componente que \textbf{interpreta el fix} —el Blackpill— registrado en un formato confiable.
|
||
\end{block}
|
||
\end{frame}
|
||
|
||
% =====================================================================
|
||
\section{Causas raíz}
|
||
|
||
\begin{frame}{Térmico (H1 / H7) — qué es real y qué falta probar}
|
||
\begin{itemize}
|
||
\item \textbf{Trampa térmica anidada:} el HBOX va sellado dentro de un gabinete ABS IP67 que \emph{además} aloja la fuente Mean Well, a pleno sol en Veracruz (interior estimado 60–80\,°C).
|
||
\item \textbf{La carcasa ASA fue una elección correcta:} UV-estable y reblandece a $\sim$95–100\,°C, con margen frente a esa temperatura. \alert{El gabinete no es el eslabón débil.}
|
||
\item \textbf{El eslabón débil son los componentes de potencia de grado prototipo} en ese espacio caliente: batería 18650 (carga $\leq$45\,°C $\rightarrow$ caída de tensión / hinchamiento), PowerBoost 1000C (booster \emph{hobby}) y el módem 4G (throttling térmico).
|
||
\item El \textbf{ZED-F9P} ($-40\ldots+85$\,°C) \alert{no} es la víctima.
|
||
\end{itemize}
|
||
\vfill
|
||
\begin{alertblock}{Honesto}
|
||
En banco las fallas se reproducen \textbf{en frío} $\rightarrow$ el calor \emph{no} explica lo observado en estos logs. La hipótesis térmica de \textbf{campo} sigue \alert{abierta} (falta soak con termopar).
|
||
\end{alertblock}
|
||
\end{frame}
|
||
|
||
\begin{frame}[fragile]{Backend (H2 / H2b) — confirmado en el código}
|
||
\begin{itemize}\small
|
||
\item \textbf{H2:} el envío a Wialon (con \texttt{connect} de 20\,s y espera de ACK) ocurre \alert{dentro} del único bucle UDP $\rightarrow$ un upstream lento detiene el bucle y \textbf{toda la flota cae a la vez}.
|
||
\item \textbf{H2b:} el filtro anti-salto no actualiza su referencia tras un «salto» rechazado $\rightarrow$ una unidad sana queda \alert{fuera de Wialon de forma permanente}.
|
||
\end{itemize}
|
||
\begin{lstlisting}
|
||
# retranslator.py (defecto): envio sincrono en el bucle de recepcion
|
||
for pkt in udp_recv_loop(): # un solo hilo, toda la flota
|
||
wialon.connect(timeout=20) # bloquea a TODOS si el upstream tarda
|
||
wialon.send(pkt); wialon.wait_ack() # head-of-line stall
|
||
\end{lstlisting}
|
||
\footnotesize Triage \alert{sin costo}: ONLINE en htracker pero OFFLINE en Wialon $\Rightarrow$ víctima del backend, no hardware dañado.
|
||
\end{frame}
|
||
|
||
\begin{frame}{Firmware (H6) — convierte una interrupción breve en un corte largo}
|
||
\begin{itemize}
|
||
\item v1 reacciona a la pérdida de correcciones con un \texttt{hot-reset} del \textbf{GNSS} (\texttt{UBX-CFG-RST}) $\rightarrow$ reinicia el ZED-F9P, \alert{no} el módem 4G colgado (la falla \#1 reportada). 5 min en una acción sin efecto.
|
||
\item v1: reset duro cada $\sim$10 min \alert{sin backoff} $\rightarrow$ \textbf{ciclo de reinicios}; cada ciclo equivale a varios minutos de desconexión. Una flota así produce «desconexiones recurrentes».
|
||
\end{itemize}
|
||
\vfill
|
||
\begin{block}{v2 (ya disponible)}
|
||
Recupera \textbf{ciclando el stack 4G}, detecta silencio de NMEA en $\sim$60\,s, aplica \textbf{backoff exponencial} y cae a \textbf{modo LIMP} (sigue reportando GPS estándar) en lugar de desaparecer.
|
||
\end{block}
|
||
\end{frame}
|
||
|
||
\begin{frame}{La revisión de ICAVE es correcta (H3 / H4)}
|
||
\centering\scriptsize
|
||
\setlength{\tabcolsep}{4pt}\renewcommand{\arraystretch}{1.18}
|
||
\begin{tabular}{@{}L{0.27\textwidth}L{0.33\textwidth}L{0.32\textwidth}@{}}
|
||
\toprule
|
||
Punto del cliente & Mecanismo & Corrección permanente \\
|
||
\midrule
|
||
Conectores Dupont & la vibración los afloja $\rightarrow$ apertura intermitente & conectores con seguro (JST / Molex) \\
|
||
Esfuerzo en soldaduras & flexión + ciclos térmicos los agrietan & PCB con alivio de esfuerzos \\
|
||
Sin diseño anti-vibración & la resonancia afloja todo & PCB + standoffs + grommets + coat \\
|
||
SMA / terminales flojos & se aflojan con la vibración & SMA con torque, conectores retenidos \\
|
||
Fallas de la tarjeta 4G & térmico + mecánico + sin recuperación & fix térmico + v2 + módem calificado \\
|
||
Cambio de SIM difícil & SIM enterrada en el stack & SIM en panel frontal / eSIM \\
|
||
«No apto para producción» & cableado a mano, piezas únicas & PCB diseñada, documentada, repetible \\
|
||
\bottomrule
|
||
\end{tabular}
|
||
\vfill
|
||
\footnotesize Nada de esto se resuelve con firmware: es el núcleo del trabajo de \textbf{PCB + ruggedización}.
|
||
\end{frame}
|
||
|
||
% =====================================================================
|
||
\section{Acciones ya tomadas}
|
||
|
||
\begin{frame}{Backend — reescrito}
|
||
\begin{itemize}
|
||
\item Retranslator + monitor: \alert{envío asíncrono}, sin bloqueo de cabeza de línea (HOL).
|
||
\item \textbf{Identidad por \texttt{cell\_id}} (no por orden de llegada) $\rightarrow$ la trazabilidad por unidad deja de depender del orden de los paquetes.
|
||
\item Filtro anti-salto \textbf{corregido}: ya no deja fuera de forma permanente a una unidad sana.
|
||
\end{itemize}
|
||
\vfill
|
||
\begin{block}{Resultado esperado}
|
||
Una unidad sana \textbf{ya no puede quedar fuera por el servidor}. Esto descarta una de las dos causas de modo común antes de la próxima prueba de campo.
|
||
\end{block}
|
||
\end{frame}
|
||
|
||
\begin{frame}{Observabilidad — Blackpill v2.1 + herramientas}
|
||
\begin{itemize}
|
||
\item \textbf{Spec de logging v2.1:} reemplaza el dashboard ANSI auto-sobrescrito por un flujo \alert{estructurado, con marca de tiempo y parseable}: estado, fix, paquetes, batería, \textbf{temperatura del MCU}, recuperación y \textbf{causa del reset}.
|
||
\item \textbf{\texttt{hbox-log-tools}:} Log Explorer (parseo + graficado automático + comparación contra baseline + export PNG/SVG), analizador por lotes y dashboard.
|
||
\end{itemize}
|
||
\vfill
|
||
\begin{block}{Efecto}
|
||
La salud por unidad deja de ser ambigua: proviene de la \textbf{propia unidad}, no de una consola que no es confiable.
|
||
\end{block}
|
||
\end{frame}
|
||
|
||
\begin{frame}[fragile]{GNSS / correcciones — persistencia y caster}
|
||
\begin{itemize}\small
|
||
\item Persistir la configuración del F9P en \alert{FLASH} (hoy es \textbf{solo RAM} $\rightarrow$ se pierde en un ciclo de energía y rompe el feed de forma silenciosa).
|
||
\item Migrar las correcciones de \texttt{rtk2go} (gratuito, sin SLA) a un \textbf{caster dedicado (HelgenSRV)} con disponibilidad garantizada.
|
||
\item Reverificar el switch \texttt{XBEE$\leftrightarrow$UART2} del simpleRTK2B Pro.
|
||
\end{itemize}
|
||
\begin{lstlisting}
|
||
; Persistir configuracion en BBR + FLASH (no solo RAM) -- ilustrativo
|
||
UBX-CFG-CFG saveMask = ioPort | msgConf | navConf
|
||
devices = devBBR | devFlash
|
||
; GGA en UART2 @1 Hz -> verificado correcto
|
||
\end{lstlisting}
|
||
\end{frame}
|
||
|
||
% =====================================================================
|
||
\section{Camino a HBOX v3.0}
|
||
|
||
\begin{frame}{Estrategia fásica}
|
||
\begin{columns}[T]
|
||
\column{0.5\textwidth}
|
||
\begin{block}{Fase 1 — Ruggedizar ahora}
|
||
\small Sobre los módulos actuales, sin esperar la PCB: eliminar Dupont, buck industrial 24$\rightarrow$5\,V $\geq$3\,A (retira el PowerBoost), fijación mecánica + conformal coat, SIM frontal, conducción térmica al plato + parasol, flashear v2.
|
||
\end{block}
|
||
\column{0.5\textwidth}
|
||
\begin{block}{Fase 2 — PCB de producción}
|
||
\small Una placa \emph{carrier} industrial que reemplaza todo el cableado a mano y las placas \emph{hobby}. La corrección \textbf{de fondo}, en paralelo.
|
||
\end{block}
|
||
\end{columns}
|
||
\vfill
|
||
\footnotesize Estabilización «permanente-suficiente» de la flota \textbf{ahora}; la PCB se fabrica en paralelo.
|
||
\end{frame}
|
||
|
||
\begin{frame}{Térmico v3.0 — gestión activa con ducto impermeable}
|
||
\begin{itemize}
|
||
\item \textbf{Hecho de ingeniería:} un ventilador dentro de una caja \emph{sellada} no enfría — solo agita el aire atrapado.
|
||
\item \textbf{v3.0:} un \alert{ducto impermeable} (membrana hidrófoba tipo Gore / laberinto sellado) crea una trayectoria de aire controlada que \emph{sí} extrae calor \textbf{sin comprometer el ingreso} (agua / polvo / salitre).
|
||
\item \textbf{Control inteligente del ventilador} gobernado por el Blackpill: sensa la temperatura interior $\rightarrow$ modula el flujo.
|
||
\item \textbf{La carcasa ASA se mantiene} (es adecuada); el foco es \textbf{conducir el calor} al plato metálico, reducir la ganancia solar (parasol) y bajar el calor interno (buck eficiente, retirar / reubicar la batería).
|
||
\end{itemize}
|
||
\vfill
|
||
\footnotesize \alert{Abierto:} definir la membrana / ducto y validar con soak de termopar. Opcional: gabinete metálico como disipador.
|
||
\end{frame}
|
||
|
||
\begin{frame}{PCB de producción (Fase 2) — diagrama de bloques}
|
||
\centering
|
||
\begin{tikzpicture}[node distance=4.5mm and 6mm]
|
||
\node[box] (vin) {24\,V gabinete\\(ya protegido)};
|
||
\node[box, right=of vin] (prot) {TVS +\\FET anti-inv.};
|
||
\node[box, right=of prot] (buck) {Buck 24$\rightarrow$5\,V\\$\geq$3\,A};
|
||
\node[box, right=of buck] (rail) {Riel 5\,V};
|
||
\node[box, above=of rail] (mcu) {STM32\\watchdog};
|
||
\node[box, right=of rail] (sw) {Load switch\\/ eFuse};
|
||
\node[box, right=of sw] (stack){Stack RTK\\+ 4G};
|
||
\node[box, below=of buck] (sense){Sense: Vin / 5\,V / batt / \alert{temp}};
|
||
\draw[arrb] (vin)--(prot); \draw[arrb] (prot)--(buck); \draw[arrb] (buck)--(rail);
|
||
\draw[arrb] (rail)--(sw); \draw[arrb] (sw)--(stack);
|
||
\draw[arr] (rail)--(mcu); \draw[arr] (mcu) -| (sw) node[midway,above,font=\tiny,text=HelgenIndigo]{enable};
|
||
\draw[arr] (sense)-- (mcu.south west);
|
||
\draw[arr] (mcu.east) -- ++(0.6,0) |- (stack.north) node[near start,above,font=\tiny,text=HelgenIndigo]{UART/UBX};
|
||
\end{tikzpicture}
|
||
\vfill
|
||
\footnotesize Conectores con seguro \sep\ SMA bulkhead con torque \sep\ SIM en panel frontal / MFF2 \sep\ test points en cada riel.
|
||
\end{frame}
|
||
|
||
\begin{frame}{Vibración — mitigación del módulo 4G NTRIP}
|
||
\begin{itemize}
|
||
\item Standoffs con \textbf{aisladores / grommets}; retención del módulo XBee 4G en su socket con bracket o clip.
|
||
\item Conformal coat del cableado discreto; conectores con seguro; SMA con thread-lock + torque.
|
||
\end{itemize}
|
||
\vfill
|
||
\begin{alertblock}{Abierto — en definición}
|
||
Definir el \textbf{esquema de amortiguación específico del módulo 4G} (montaje aislado vs. retención rígida), a confirmar con una \textbf{prueba de vibración} controlada. Este es el punto que todavía estamos cerrando.
|
||
\end{alertblock}
|
||
\end{frame}
|
||
|
||
\begin{frame}{Watchdog — FSM de recuperación (v2 $\rightarrow$ v3)}
|
||
\centering
|
||
\begin{tikzpicture}[node distance=8mm and 14mm]
|
||
\node[st] (normal) {NORMAL\\(reporta RTK/SPS)};
|
||
\node[hot, right=of normal] (cycle) {CICLAR STACK 4G\\(backoff exp.)};
|
||
\node[st, right=of cycle] (limp) {LIMP\\(GPS estándar,\\sigue reportando)};
|
||
\node[st, below=of cycle] (temp) {SENSAR TEMP\\$\rightarrow$ CTRL VENTILADOR};
|
||
\draw[arr] (normal) -- node[above,font=\tiny,text=HelgenIndigo]{silencio NMEA 60\,s} (cycle);
|
||
\draw[arr] (cycle) -- node[above,font=\tiny,text=HelgenIndigo]{persiste} (limp);
|
||
\draw[arr] (limp.north) to[bend right=35] node[above,font=\tiny,text=HelgenIndigo]{enlace OK} (normal.north);
|
||
\draw[arr] (cycle.south west) to[bend right=20] node[left,font=\tiny,text=HelgenIndigo]{recupera} (normal.south);
|
||
\draw[arrb, dashed] (normal) -- (temp);
|
||
\draw[arrb, dashed] (temp) -- (limp);
|
||
\end{tikzpicture}
|
||
\vfill
|
||
\footnotesize Invariantes: \textbf{nunca desaparecer, nunca ciclo infinito}; el estado seguro por defecto es \alert{OFF}. v3 añade el lazo térmico (líneas punteadas).
|
||
\end{frame}
|
||
|
||
% =====================================================================
|
||
\section{Estado honesto y plan a una semana}
|
||
|
||
\begin{frame}{Dónde estamos — sin adornos}
|
||
\begin{columns}[T]
|
||
\column{0.34\textwidth}
|
||
\begin{block}{Confirmado}
|
||
\scriptsize
|
||
\begin{itemize}
|
||
\item Backend HOL + anti-salto (en código)
|
||
\item Receptores GNSS sanos; SPS, no RTK
|
||
\item Consola 4G no es indicador de salud
|
||
\item master-21: módem caído
|
||
\end{itemize}
|
||
\end{block}
|
||
\column{0.32\textwidth}
|
||
\begin{block}{Hipótesis}
|
||
\scriptsize
|
||
\begin{itemize}
|
||
\item Térmico de \textbf{campo} (falta termopar / soak)
|
||
\item Fusible sub-dimensionado
|
||
\item Brownout de batería
|
||
\end{itemize}
|
||
\end{block}
|
||
\column{0.34\textwidth}
|
||
\begin{alertblock}{Abierto}
|
||
\scriptsize
|
||
\begin{itemize}
|
||
\item ¿Resuelto? — pendiente reflash v2 + análisis en entorno controlado (QRO)
|
||
\item Anti-vibración del 4G
|
||
\item Fix RTK $\geq$4 con caster dedicado en cielo abierto
|
||
\end{itemize}
|
||
\end{alertblock}
|
||
\end{columns}
|
||
\end{frame}
|
||
|
||
\begin{frame}{Plan a una semana $\rightarrow$ viernes 26 de junio}
|
||
\centering\footnotesize
|
||
\setlength{\tabcolsep}{6pt}\renewcommand{\arraystretch}{1.25}
|
||
\begin{tabular}{@{}l L{0.78\textwidth}@{}}
|
||
\toprule
|
||
Ventana & Actividad \\
|
||
\midrule
|
||
Lun–Mar & Desplegar \textbf{watchdog v2} y analizar en \textbf{entorno controlado (QRO)}; persistir F9P en FLASH + caster dedicado \\
|
||
Mar–Mié & \textbf{Retest RTK en cielo abierto} (confirmar fix $\geq$4/5); kit de ruggedización Fase 1 sobre 1 unidad de referencia \\
|
||
Mié–Jue & Definir \textbf{ducto + ventilador inteligente} + esquema anti-vibración del 4G; soak térmico con termopar \\
|
||
\textbf{Vie 26} & \alert{Enviar la versión más robusta del HBOX a Veracruz} para continuar las pruebas \\
|
||
\bottomrule
|
||
\end{tabular}
|
||
\vfill
|
||
\footnotesize El objetivo de esta semana no es «cerrado»: es un \textbf{HBOX medible y más robusto} de vuelta en el campo.
|
||
\end{frame}
|
||
|
||
\begin{frame}{Compromisos — responsable y fecha}
|
||
\centering\footnotesize
|
||
\setlength{\tabcolsep}{6pt}\renewcommand{\arraystretch}{1.25}
|
||
\begin{tabular}{@{}lll@{}}
|
||
\toprule
|
||
Acción & Responsable & Fecha \\
|
||
\midrule
|
||
Watchdog v2 + análisis controlado (QRO) & Leo / Daniel & 23–24 jun \\
|
||
Persistir F9P en FLASH + caster dedicado & Gibran & 24 jun \\
|
||
Retest RTK en cielo abierto & Gibran & 25 jun \\
|
||
Kit de ruggedización Fase 1 (unidad ref.) & Adriana & 25 jun \\
|
||
Diseño ducto + fan + anti-vibración 4G & Leo & 25–26 jun \\
|
||
Envío del HBOX robusto a Veracruz & Adriana & 26 jun \\
|
||
\bottomrule
|
||
\end{tabular}
|
||
\end{frame}
|
||
|
||
% =====================================================================
|
||
\begin{frame}[standout]
|
||
Diagnóstico con datos.\\
|
||
Corrección en ejecución.\\[2mm]
|
||
{\normalsize HBOX v3.0 — más robusto — a prueba el \textbf{26 de junio}.}
|
||
\vfill
|
||
{\footnotesize Gracias \sep\ Preguntas}
|
||
\end{frame}
|
||
|
||
% =====================================================================
|
||
% v1.1 — ADENDA (2026-07-02). El contenido anterior es el registro entregado
|
||
% el 22-jun y se conserva sin cambios; esta lámina documenta el avance.
|
||
% [noframenumbering] preserva la numeración original del deck entregado.
|
||
\begin{frame}[noframenumbering]{Actualización al 2 de julio de 2026 — adenda}
|
||
\footnotesize El diagnóstico entregado el 22 de junio \textbf{se mantiene vigente, sin fe de erratas}: carcasa ASA adecuada, rectificación de master-14 sostenida (solo master-21 confirmada) e hipótesis térmica de campo aún por confirmar con soak instrumentado. Avance desde la entrega:
|
||
\vfill
|
||
\centering\scriptsize
|
||
\setlength{\tabcolsep}{4pt}\renewcommand{\arraystretch}{1.12}
|
||
\begin{tabular}{@{}L{0.15\textwidth} L{0.30\textwidth} L{0.47\textwidth}@{}}
|
||
\toprule
|
||
Frente & Estado al 22 jun & \textbf{Estado al 2 jul} \\
|
||
\midrule
|
||
Backend & Reescritura lista (asíncrono + anti-salto corregido) & \textbf{Desplegado en producción} y estable \\
|
||
Térmico & Hipótesis de campo abierta & Cámara a 50\,°C: el RTK opera \textbf{normal}; la víctima es la \textbf{energía} (respaldo ${\sim}30\,\%$ con celda caliente); 2 soluciones en prueba (ducto impermeable / disipador de aluminio) \\
|
||
Watchdog v3 / PCB & Diagrama de bloques (plan) & Esquemáticos verificados (\textbf{ERC: 0 errores}); circuito \textbf{operando en protoboard} (campaña de banco en curso); \textbf{cierre de esquemático de producción y layout de PCB inician el 2 jul} \\
|
||
Batería de respaldo & 18650 + booster \emph{hobby} & Pack 1S4P ${\sim}$12\,Ah con cargador de grado industrial y \textbf{carga calificada por temperatura} — cierra el eslabón \#1 del RCA \\
|
||
\bottomrule
|
||
\end{tabular}
|
||
\vfill
|
||
\footnotesize Cronograma vigente: unidades nuevas a ICAVE \textbf{7 jul} \sep\ comparativa de disponibilidad al \textbf{17 jul} \sep\ despliegue a las 4 BUs desde \textbf{mediados de julio} \sep\ meta: 30 unidades operando hacia agosto.
|
||
\end{frame}
|
||
|
||
\end{document}
|