auto-sync 2026-07-09 18:00

This commit is contained in:
Leopoldo Rodríguez 2026-07-09 18:00:14 -06:00
parent 5db46d9092
commit 0b984b6a0f
51 changed files with 1417 additions and 382 deletions

View File

@ -0,0 +1,90 @@
# Respuesta a observaciones — Proyecto Drogheda (H-BOX RTK)
**Borrador para revisión de Leo antes de enviarse.** Destinatario: Agustín Alfonseca
(ICAVE). Helgen Technologies · 8 de julio de 2026.
> **⚠️ Nota para Leo (no forma parte del correo) — confirmar antes de enviar:**
> - **Fechas comprometidas:** recepción de PCBs impresos **~13–17 jul**; comparativa/
> pruebas de confiabilidad en ICAVE **17 jul**; **30 unidades operativas en agosto**.
> Ajusta si el proveedor de PCB movió la ventana.
> - **Backend:** el correo afirma que las 3 correcciones ya están **desplegadas y
> verificadas** (consistente con el update del 20-jun). Confirmar que sigue vigente.
> - **Térmico:** lo dejo como *verificación en curso* (falta la medición con termopar),
> no como resuelto — para no sobre-prometer.
> - Decidir si adjuntas el nuevo deck de Avance / render del PCB EinarBoard 1.0.
---
**Asunto:** Proyecto Drogheda (H-BOX RTK) — Respuesta a tus observaciones, estado actual y próximos pasos
Estimado Agustín:
Gracias por la revisión tan detallada y por los puntos que nos compartiste. Los tomamos
uno por uno; abajo respondo a cada observación con el estado actual y las fechas
comprometidas. En resumen: **el software y el backend ya están estabilizados y
verificados**, y la electrónica de campo **pasa esta semana de prototipo a su versión
industrial definitiva**.
**1. Electrónica interna (cableado Dupont / aspecto de prototipo).**
Aceptamos la observación. Ese armado fue una etapa **deliberada de la Fase 2**: nos
permitió congelar la lógica del *Watchdog* y el firmware en el entorno más exigente
(ICAVE) sin arriesgar una manufactura prematura. Esa etapa ya cumplió su función. **El PCB
industrial unificado (EinarBoard 1.0) está cerrado y auditado**, y la orden de fabricación
está liberada; **recibimos los primeros prototipos impresos la semana del 13–17 de julio.**
Con ello eliminamos por completo los cables sueltos, el estrés de soldadura y cualquier
vulnerabilidad por vibración — y será el estándar idéntico para ICAVE, TIMSA, EIT y LCT.
**2. Protección eléctrica (fusible).**
La quema del fusible ocurrió bajo la demanda real medida en ICAVE. Se aplicó una
corrección recalibrando su capacidad a esa demanda, y el H-BOX conserva su **protección
nativa contra sobrecarga con recuperación automática (Modo Hiccup)** en la fuente. Estamos
además **cuantificando la temperatura interna real del gabinete con un termopar** durante
un turno completo de sol, para blindar el diseño térmico contra la temperatura medida —
no contra la de ficha técnica.
**3. Disponibilidad y confiabilidad (desconexiones / módulo 4G).**
Aquí separamos dos causas distintas:
- **Backend (resuelto y desplegado).** El análisis de causa raíz identificó y **corrigió
tres defectos de software del servidor** que sacaban unidades de Wialon —incluidas
unidades que transmitían bien pero la plataforma descartaba—: bloqueo en cadena,
filtro anti-salto sin auto-recuperación, e identidad por IP bajo CGNAT. **Las tres
correcciones están desplegadas en producción y verificadas** (10/10 pruebas de extremo
a extremo). El tablero ahora distingue una unidad *sin señal* de una unidad *en línea
que el backend no reenviaba*.
- **Módulo 4G (en aislamiento).** Persisten intermitencias físicas del módulo; el
*Watchdog* de la Blackpill las mitiga reiniciando el hardware de forma autónoma para que
el sistema no muera en campo. **Desmontamos dos unidades para aislar la causa en
laboratorio**, y presentaremos la **comparativa de precisión de rutas GPS** que muestra
que, cuando el módulo transmite, la exactitud es de nivel centimétrico.
**4. Versión final del gabinete.**
El diseño del gabinete está finalizado y en espera de materiales. La electrónica interna
será **idéntica para las 4 unidades de negocio**; sólo los herrajes de sujeción externa se
adaptan a la maquinaria específica de cada operadora. El chasis mantiene su resistencia a
vibración industrial.
**5. Estación base.**
La estación base principal está **operativa y lista**; se enviará e instalará en el primer
paquete logístico para asegurar la red RTK de alta precisión.
**6. Integración con VERONICA (retranslator).**
La retransmisión nativa **ya funciona correctamente para ICAVE**. Para habilitar el reenvío
directo en TIMSA, EIT y LCT, **requerimos formalmente que la administración nos libere las
credenciales de acceso de esas tres unidades de negocio** — es el único insumo que nos
falta de su lado para replicar la integración.
**7. Plan de despliegue y fechas.**
La meta se mantiene: **30 unidades operativas para agosto.** La estrategia es escalonada y
deliberada para proteger la inversión: consolidamos primero el bloque inicial en ICAVE con
los PCBs industriales de esta quincena y, una vez verificado el ensamble final ahí,
replicamos el envío e instalación en TIMSA, EIT y LCT — sin retrabajos simultáneos en
varios puertos. La **comparativa de confiabilidad en ICAVE la tenemos el 17 de julio.**
Quedamos atentos a tus comentarios y a la gestión de las credenciales de las tres unidades
restantes. Con gusto agendamos una llamada para revisar la comparativa en cuanto esté.
Saludos cordiales,
**Leo Rodríguez**
Helgen Technologies
leo@helgen.tech

View File

@ -0,0 +1,86 @@
---
title: 4G Modem — Bench Bridge & Cheap Alternatives to the Ardusimple 4G NTRIP Master
tags: [project-drogheda, hardware, 4g, ntrip, modem, sourcing]
project: Project Drogheda
author: Helgen CTO
date: 2026-07-08
status: Decision support — bench (Block 9B) + production outlook
---
# 4G Modem — Bench Bridge & Cheap Alternatives
> **Why this doc.** Block 9B (Modo B, watchdog in-line between the F9P and the 4G) needs the
> 4G NTRIP Master out of the Pro's socket and on the protoboard — but its XBee pins are
> **2.0 mm pitch** (not 1.27 mm; re-measure center-to-center: 10 pins span 18 mm) vs the
> protoboard's 2.54 mm. Two questions answered here: (1) how to bridge it **this week**, and
> (2) whether a **cheaper 4G module** can replace the €156 Ardusimple unit — bench now,
> production later. Technician instructions live in the Guía v3.0 §9a–9c; this is the
> engineering/sourcing record.
## 1. Bridge options (bench, this week)
| # | Option | Price (MXN) | Source / lead | Verdict |
|---|--------|------------|----------------|---------|
| A ★ | SparkFun **BOB-08276** breakout + 2× **PRT-08272** 2.0 mm sockets + 2.54 mm male headers | ≈$100 | [SANDOROBOTICS CDMX](https://sandorobotics.com.mx/producto/bob-08276/) — in stock, 1–2 days to QRO | **Buy today.** One soldering session; matches the Guía 9b procedure |
| B | Generic "adaptador XBee" pre-assembled | $80–250 | Amazon MX / [MercadoLibre](https://listado.mercadolibre.com.mx/adaptador-xbee), 1–3 days | Fine fallback; verify DIP pins in photos |
| C | XBee Arduino shield (HR0440) + Dupont F-F | $50–150 | SANDOROBOTICS, 1–2 days | Works as a fixed base next to the protoboard |
| D | 2.0 mm F-F jumpers direct onto pins | $60–120 | AliExpress, 2–4 weeks | Last resort — fragile, slow to arrive |
Power rule (already in the Guía): XBee **pin 1 VCC = 3.3 V, never 5 V**, ≥1.5 A peak →
second LM2596/MP1584 set to 3.3 V, fed **from SAL** (so a stack power-cycle also reboots the
modem — mirrors the PROD 3V3_MODEM rail), with 100 µF + 100 nF at the pin.
Caution: SparkFun's *Explorer Regulated* uses a ~500 mA LDO — not enough for LTE bursts;
use the bare breakout + our own buck.
## 2. Cheap 4G module alternatives
Telcel LTE bands to match: **B2/B4/B5/B7/B28/B66**. Key finding: **none of the cheap modules
has a built-in NTRIP client** — the Ardusimple's real value is the on-module NTRIP client
firmware (zero MCU work, proven in the field). Every alternative below buys hardware savings
with firmware/integration cost.
| Module | Price | Buy | Telcel bands | NTRIP path | Effort (1–5) |
|--------|-------|-----|--------------|-----------|--------------|
| **LILYGO T-A7670SA** (ESP32 + A7670SA) | ≈US$33 | [lilygo.cc](https://lilygo.cc/products/t-sim-a7670e) / AliExpress | ✔ (SA = LATAM, incl. B2/B4/B66) | ESP32 sketch: TinyGSM ([lewisxhe fork](https://github.com/lewisxhe/TinyGSM-fork)) + [Arduino NTRIP client](https://github.com/GLAY-AK2/NTRIP-client-for-Arduino); ESP32 does the client, streams RTCM out its UART | **2** — best bench experiment |
| **A7670SA raw module** | **US$9.39** | [LCSC](https://www.lcsc.com/product-detail/2G-3G-4G-5G-Modules_SIMCom-Wireless-Solutions-A7670SA-LASC_C18548276.html) / MercadoLibre | ✔ | AT commands (CIPOPEN/CIPSEND) — NTRIP handshake + reconnect/watchdog logic on the Blackpill | **4** — the cost end-game for the hundreds-of-cabinets phase |
| SIM7600SA-H (Waveshare HAT / LILYGO T-SIM7600) | US$40–77 | Waveshare / LILYGO | ✔ | Same AT/ESP32 paths | 2–4 — Cat-4 is overkill, no cost win vs A7670SA |
| SIM7670G (Cat-1 bis) | US$30–45 | [Waveshare ESP32-S3 combo](https://www.waveshare.com/esp32-s3-sim7670g-4g.htm) | ✔ | Same | 2–3 |
| SIM7000G (Cat-M1/NB-IoT) | US$40–69 | Botletics | Bands ✔ but **LTE-M is a Telcel enterprise product** — SIM provisioning risk | AT/TCP | 4 — **avoid** |
| **A7670E / SIM7600E** (Europe variants on MercadoLibre) | — | — | ✘ **no B2/B4/B66** | — | **Do not buy** |
| Quectel EC25-AUX / EG25-G (mPCIe) | €44–60 | Sixfab/Waveshare | ✔ | AT/PPP + mPCIe carrier plumbing | 4 |
| USR-G771 4G DTU | ≈US$43 | [usr.cn](https://en.usr.cn/RS232-RS485-To-4G-modem) / Amazon | **verify variant** (-E = Europe) | Transparent TCP + "registration packet" carrying the NTRIP GET — no MCU firmware | 2–3 — closest cheap drop-in *if* a MX-band variant exists |
| **Digi XBee 3 Global LTE Cat 1** | ≈US$76 | [Digi-Key](https://www.digikey.com/en/product-highlight/d/digi-intl/xbee-3-global-lte-cat-1) | ✔ (global) | **MicroPython NTRIP client runs ON the module** (sockets API; [precedent](https://www.ardusimple.com/question/digi-xbee-3g-lte-micropython-ntrip-server-esp32-xbee-module/)) | 3 — the only true XBee-socket drop-in; keeps the EinarBoard footprint |
Reference: Ardusimple's own WiFi NTRIP Master firmware is open source
([nebkat/esp32-xbee](https://github.com/nebkat/esp32-xbee), ESP-IDF NTRIP client/caster) —
an ESP32-as-NTRIP-bridge is a solved problem; 4G needs the WiFi transport swapped for
TinyGSM/PPP. Industrial NTRIP DTUs (Tersus TR600, Hi-Target) exist but run US$300–800 —
*more* than the Ardusimple, not less.
For scale reference: **Ardusimple 4G NTRIP Master = €156** (≈MX$3,250), in stock, DHL 2–5
days, **€112 at ≥50 units** ([product page](https://www.ardusimple.com/product/4g-ntrip-master/)).
LTE Cat 4, NA variant covers Telcel B2/B4/B5.
## 3. Recommendation
1. **This week (bench, keeps 17-Jul comparison on track):** order Option A (~MX$100,
SANDOROBOTICS) and breadboard the 4G NTRIP Master we already own per Guía v3.0 §9a–9c.
Zero firmware risk.
2. **Parallel experiment (~US$35):** one **LILYGO T-A7670SA** + TinyGSM NTRIP sketch
(~1 day of firmware). If it holds RTK for a week on the bench, it becomes the certified
cost-reduction candidate to qualify properly.
3. **30 units / August:** stay on the Ardusimple (€112 @ ≥50). It is the only zero-firmware,
field-proven option and the timeline doesn't absorb a bearer swap. Invariant #3
(corrections ride the 4G; recover by power-cycling) is already engineered around it.
4. **Hundreds-of-cabinets phase:** A7670SA soldered onto the EinarBoard successor
(~16× cheaper bearer) **budgeting real firmware** (NTRIP-over-AT + reconnect watchdog —
the part Ardusimple already does well) + carrier homologation; or the **Digi XBee 3 Cat 1**
(US$76) as the middle path that drops into the existing XBee socket with the NTRIP client
in MicroPython on-module. Decide after the LILYGO experiment.
## 4. Cross-references
- Technician instructions (Spanish): `Drogheda_Guia-Conexion-Protoboard_ES_v3.0.pdf` §9a–9c.
- PROD context: 3V3_MODEM rail (Block K) + K1 NC bypass — `watchdog-electrical-design-state.md`.
- Invariants touched: #1 (power-off safe), #2/#3 (never vanish; corrections ride the 4G —
any replacement bearer must keep the power-cycle recovery path).

View File

@ -1,6 +1,7 @@
% cuerpo.tex — Guía de Conexión en Protoboard v2.2 (bloques 1–11)
% cuerpo.tex — Guía de Conexión en Protoboard v3.0 (bloques 1–11)
% Fuente de datos autoritativa: ../Drogheda_Conexiones-por-Bloque_Proto_v1.xlsx
% (hojas: Conexiones · Mapa de pines · Fuentes y convertidores · Estado y cambios)
% v3.0: catálogo visual (modulos-pinout.tex) + puente XBee 2.0→2.54 mm en el Bloque 9.
\section{Cómo usar esta guía}
@ -10,6 +11,13 @@ firmware v2.3), organizado en \textbf{11 bloques} que se arman y prueban uno por
No armes los bloques en el orden en que aparecen: sigue el \textbf{orden de armado} de la
sección~\ref{sec:orden}, que va de lo más simple (solo USB) a lo más delicado (stack RTK).
\medskip
\noindent\textbf{¿Primera vez con electrónica, o alguna pieza no se parece a lo que
esperabas?} Empieza por la sección~\ref{sec:identifica} (\emph{Identifica cada pieza}): ahí
está dibujado cada módulo y componente como se ve físicamente, con el nombre de cada patita
y a dónde va. Cada bloque incluye una línea «\textbf{Piezas de este bloque}» que te regresa
a esos dibujos.
\begin{helgennotice}[Documentos compañeros — dónde está cada cosa]
\begin{itemize}
\item \textbf{Lista de conexiones autoritativa:}
@ -17,9 +25,13 @@ sección~\ref{sec:orden}, que va de lo más simple (solo USB) a lo más delicado
\textit{Mapa de pines}, \textit{Fuentes y convertidores}, \textit{Estado y cambios}).
Si esta guía y el XLSX difieren, \textbf{manda el XLSX}.
\item \textbf{Diagramas por bloque (CircuiTikZ):} \textbf{incrustados en esta guía} al final
de cada bloque (v2.2). Los mismos dibujos, por separado: carpeta \texttt{circuitikz-wiring/} —
de cada bloque. Los mismos dibujos, por separado: carpeta \texttt{circuitikz-wiring/} —
\texttt{Drogheda\_Diagrama\_CircuiTikZ.pdf} (lámina completa) y
\texttt{Drogheda\_Diagrama\_Beamer.pdf} (una diapositiva por bloque).
\item \textbf{Catálogo visual de piezas (nuevo en v3.0):} sección~\ref{sec:identifica} de
esta misma guía — vista física de cada módulo (LM2596, MT3608, TP4056, AHT10, DFR1015,
Blackpill, simpleRTK2B Pro, 4G) y patitas de cada componente (transistores, diodos, LEDs,
capacitores, resistencias por color).
\item \textbf{Estado eléctrico canónico del diseño:}
\texttt{watchdog-electrical-design-state.md} (léelo antes de cambiar cualquier cosa).
\item \textbf{Listas de compra:} \texttt{watchdog-LISTA-DE-COMPRAS-ES.xlsx} y
@ -76,10 +88,13 @@ GUINDA & \redI & Ignición cruda 12--24\,V (a la entrada del DFR1015)\\
\bottomrule
\end{tabularx}}
\section{Mapa de pines del Blackpill}
% ===== Catálogo visual de módulos y componentes (v3.0) =====
\input{modulos-pinout}
Busca cada etiqueta impresa en la tarjeta. (Hoja \textit{Mapa de pines} del XLSX;
incluye PA8 y PC13, que no aparecían en la guía v2.)
\section{Mapa de pines del Blackpill (tabla)}
La misma información del dibujo de la sección~\ref{sec:blackpill}, ahora en tabla. Busca
cada etiqueta impresa en la tarjeta. (Hoja \textit{Mapa de pines} del XLSX.)
\hwtab{%
\begin{tabularx}{\textwidth}{@{}l X l l@{}}
@ -127,13 +142,17 @@ LTC4040 (PCB) & Battery-backup manager: carga + power-path + boost + NTC. Carga
\end{tabularx}}
\section{Conexiones por bloque (1--11)}
\label{sec:bloques}
Cada tabla lista las conexiones como \textbf{desde $\rightarrow$ vía $\rightarrow$ hacia}, con la
red (color de cable) a la izquierda. Arma y prueba \textbf{un bloque a la vez}, en el orden de
la sección~\ref{sec:orden}.
la sección~\ref{sec:orden}. La línea «Piezas de este bloque» te lleva al dibujo físico de
cada componente; antes de energizar, corre el checklist de la sección~\ref{sec:protoboard}.
\bloque{1}{Rieles de alimentación}
\queprueba{arma los rieles 5\,V / GND / 3.3\,V que alimentan todo.}
\compbloque{Blackpill (§\ref{sec:blackpill}) · fuente 5\,V · apagador (§\ref{sec:botones}) ·
capacitores 100\,$\mu$F$+$100\,nF (§\ref{sec:diodos}) · protoboard (§\ref{sec:protoboard})}
\hwtab{%
\begin{tabularx}{\textwidth}{@{}l X L{4.4cm}@{}}
@ -153,6 +172,7 @@ la sección~\ref{sec:orden}.
\bloque{2}{LED de estado (PB0)}
\queprueba{los códigos de parpadeo cambian con el estado.}
\compbloque{LED y R 330\,$\Omega$ (§\ref{sec:diodos}, §\ref{sec:resistencias})}
\hwtab{%
\begin{tabularx}{\textwidth}{@{}l X L{4.4cm}@{}}
@ -168,6 +188,7 @@ la sección~\ref{sec:orden}.
\bloque{3}{Interruptor de carga del «stack» (PA1) — EL CORAZÓN}
\queprueba{APAGADO al reset (estado seguro), ON cuando PA1 activa.}
\compbloque{2N3904 e IRF9540N (§\ref{sec:transistores}) · R 1\,k y 10\,k (§\ref{sec:resistencias})}
\hwtab{%
\begin{tabularx}{\textwidth}{@{}l X L{4.4cm}@{}}
@ -191,6 +212,8 @@ seguro»: sin MCU (o durante el reset) el stack queda \textbf{apagado}.}}
\bloque{4}{Sensado: batería / 5\,V / ignición}
\queprueba{\texttt{veh}/\texttt{ign}/\texttt{vbat} cambian en el log (TLM).}
\compbloque{DFR1015 (§\ref{sec:dfr1015}) · diodo clamp 1N5819/BAT54 (§\ref{sec:diodos}) ·
R 10\,k y 100\,$\Omega$ (§\ref{sec:resistencias})}
\hwtab{%
\begin{tabularx}{\textwidth}{@{}l X L{4.4cm}@{}}
@ -215,6 +238,8 @@ seguro»: sin MCU (o durante el reset) el stack queda \textbf{apagado}.}}
\bloque{5}{Ventilador (2 hilos)}
\queprueba{el ventilador arranca/sube con la temperatura.}
\compbloque{LM2596 «FAN 5.0\,V» (§\ref{sec:lm2596}) · IRLZ44N (§\ref{sec:transistores}) ·
1N5819 (§\ref{sec:diodos}) · R 220 y 100\,k (§\ref{sec:resistencias}) · ventilador (§\ref{sec:botones})}
\hwtab{%
\begin{tabularx}{\textwidth}{@{}l X L{4.4cm}@{}}
@ -237,6 +262,7 @@ seguro»: sin MCU (o durante el reset) el stack queda \textbf{apagado}.}}
\bloque{6}{Sensor de temperatura y humedad I\textsuperscript{2}C — AHT10}
\queprueba{el log reporta temperatura + humedad del aire; al calentar el sensor, el ventilador sube.}
\compbloque{AHT10 (§\ref{sec:aht10}) · R 4.7\,k $\times$2 (§\ref{sec:resistencias})}
\hwtab{%
\begin{tabularx}{\textwidth}{@{}l X L{4.4cm}@{}}
@ -263,6 +289,8 @@ la da solo el AHT10.}}
\bloque{7}{Reset y gauge de batería}
\queprueba{el botón reinicia; los 4 LEDs quedan listos para el firmware. Botones y LEDs \textbf{en mano} — van todos en el protoboard.}
\compbloque{botón de 4 patitas — truco de la diagonal (§\ref{sec:botones}) · LEDs $\times$4 y
R 330\,$\Omega$ (§\ref{sec:diodos}, §\ref{sec:resistencias})}
\hwtab{%
\begin{tabularx}{\textwidth}{@{}l X L{4.4cm}@{}}
@ -277,43 +305,112 @@ la da solo el AHT10.}}
\diagramabloque{7}{\blkResetGauge}
\bloque{8}{Conexión del stack RTK (modo por defecto)}
\queprueba{el watchdog observa; solo 4 cables al stack.}
\queprueba{el watchdog observa; solo 5 cables al stack.}
\compbloque{simpleRTK2B Pro y 4G NTRIP Master (§\ref{sec:stackfisico}) — en este modo el 4G
va \textbf{dentro del socket XBee del Pro}: aquí NO se necesita el breakout ni ningún adaptador}
\hwtab{%
\begin{tabularx}{\textwidth}{@{}l X L{4.4cm}@{}}
\toprule
\theadconex
\midrule
\redV & SAL (5\,V conmutado, Bloque 3) $\rightarrow$ simpleRTK2B Pro · 5V & Alimenta el stack RTK\\
\redG & GND del sistema $\rightarrow$ simpleRTK2B Pro · GND & \\
\redS & PA2 (USART2 TX) $\rightarrow$ F9P UART1 RX & NMEA · cruce TX$\rightarrow$RX\\
\redS & PA3 (USART2 RX) $\rightarrow$ F9P UART1 TX & NMEA · cruce RX$\leftarrow$TX\\
\redN & 4G NTRIP Master (XBee) $\rightarrow$ socket XBee del Pro (UART2) & 5\,V + datos por el socket (\textbf{no} al Blackpill)\\
\redV & SAL (5\,V conmutado, Bloque 3) $\rightarrow$ Pro · pin \texttt{5V} & Alimenta el stack RTK\\
\redG & GND del sistema $\rightarrow$ Pro · pin \texttt{GND} & \\
\redT & Blackpill 3V3 $\rightarrow$ Pro · pin \texttt{IOREF} & Fija el nivel (3.3\,V) de los pines
\texttt{TX1/RX1/TX2/RX2} — \textbf{sin este cable los UART del Pro no responden} (fila faltante en v2.2)\\
\redS & PA2 (USART2 TX) $\rightarrow$ Pro · pin \texttt{RX1} (F9P UART1 RX) & NMEA · cruce TX$\rightarrow$RX\\
\redS & PA3 (USART2 RX) $\rightarrow$ Pro · pin \texttt{TX1} (F9P UART1 TX) & NMEA · cruce RX$\leftarrow$TX\\
\redN & 4G NTRIP Master (XBee) $\rightarrow$ socket XBee del Pro · switch en \texttt{UART2} & 3.3\,V + datos se los da el socket (\textbf{no} al Blackpill)\\
\redN & Antena GNSS (SMA) $\rightarrow$ F9P & \\
\redN & 2$\times$ antenas LTE $\rightarrow$ 4G NTRIP Master & \\
\redN & 2$\times$ antenas LTE $\rightarrow$ 4G NTRIP Master & Conéctalas \textbf{antes} de energizar\\
\redN & Relé \texttt{\$PHLG} (PA9/PA10) = DNP / apagado & Config por defecto (solo monitor)\\
\bottomrule
\end{tabularx}}
\diagramabloque{8}{\blkStack}
\bloque{9}{Modo B — Diagnóstico por NTRIP (relé, opcional)}
\queprueba{inyecta \texttt{\$PHLG} al servidor por 4G. Requiere breakout XBee.}
\bloque{9}{Modo B — Diagnóstico por NTRIP (relevo, opcional)}
\queprueba{inyecta \texttt{\$PHLG} al servidor por 4G. Requiere el puente XBee de abajo.}
\compbloque{4G NTRIP Master en breakout XBee (§\ref{sec:stackfisico}) · segunda LM2596 o
MP1584 «MODEM 3.3\,V» (§\ref{sec:lm2596}) · R 22\,k (§\ref{sec:resistencias}) ·
C 100\,$\mu$F$+$100\,nF (§\ref{sec:diodos})}
\subsubsection*{9a · El problema del paso (pitch): el 4G NO entra en la protoboard}
Las patitas del 4G NTRIP Master son formato \textbf{XBee: paso de 2.0\,mm} (de centro a
centro de patita), y la protoboard es de \textbf{2.54\,mm}. Por eso el módulo no encaja: a
la cuarta patita ya perdió medio hoyo. Comprobación rápida con regla: 10 patitas del XBee
ocupan \textbf{18\,mm}; 10 hoyos de la protoboard ocupan \textbf{22.9\,mm}. (Si mides otra
cosa, vuelve a medir de \emph{centro a centro} — el estándar XBee es 2.0\,mm, no 1.27\,mm.)
\textbf{Nunca fuerces el módulo ni sueldes cables directo a sus patitas}: es la pieza más
cara del banco.
\hwtab{%
\begin{tabularx}{\textwidth}{@{}L{0.7cm} L{5.2cm} X L{2.6cm}@{}}
\toprule
\rowcolor{HelgenIndigo}\textcolor{white}{\textbf{Op.}} & \textcolor{white}{\textbf{Solución}} &
\textcolor{white}{\textbf{Notas}} & \textcolor{white}{\textbf{Costo / entrega}}\\
\midrule
\textbf{A} $\star$ & Breakout XBee (SparkFun BOB-08276 o genérico) $+$ 2 headers hembra de
2.0\,mm (10 pos.) $+$ pines macho 2.54\,mm & \textbf{La recomendada.} Requiere soldar los dos
headers y los pines (ver 9b). SANDOROBOTICS (CDMX): BOB-08276 $\approx$MX\$30 $+$ 2$\times$
PRT-08272 $\approx$MX\$35 c/u & $\approx$MX\$100 · 1--2 días\\
\textbf{B} & «Adaptador XBee» genérico ya armado (Amazon MX / MercadoLibre) & Busca
«adaptador XBee 2.54»; verifica en las fotos que traiga las dos filas de pines DIP hacia
abajo. Algunos traen regulador y LEDs (no estorban, pero alimenta VCC igual con 3.3\,V) &
$\approx$MX\$80--250 · 1--3 días\\
\textbf{C} & Shield XBee formato Arduino (p.\,ej.\ HR0440) $+$ cables Dupont H-H & No entra a la
protoboard, pero expone las señales en headers 2.54. Funciona como base fija junto a la
protoboard & $\approx$MX\$50--150 · 1--2 días\\
\textbf{D} & Jumpers hembra-hembra de 2.0\,mm (AliExpress) directo a las patitas & Solo como
último recurso: sin soldar, pero frágil y fácil de conectar corrido. Entrega lenta &
$\approx$MX\$60--120 · 2--4 semanas\\
\bottomrule
\end{tabularx}}
\subsubsection*{9b · Armado del puente (opción A) — se suelda UNA vez}
\begin{enumerate}[itemsep=2pt]
\item Suelda los \textbf{2 headers hembra de 2.0\,mm} (10 posiciones c/u) en las dos filas
\emph{interiores} del breakout, por el lado de arriba (donde está la serigrafía del
contorno XBee). Fíjate en la marca de \textbf{pin 1} (ver dibujo en §\ref{sec:stackfisico}).
\item Suelda \textbf{pines macho de 2.54\,mm} en las dos filas \emph{exteriores}, apuntando
hacia abajo — así el breakout se enchufa a la protoboard como cualquier módulo.
\item Revisa cada punto de soldadura con lupa/luz: brillante y cónico, sin puentes entre
pads vecinos. Con el multímetro en continuidad: cada socket 2.0\,mm debe pitar con su
pin 2.54 de al lado, y \textbf{no} con el vecino.
\item Enchufa el 4G NTRIP Master en los sockets respetando la orientación del contorno
(solo entra bien de una forma si sigues la marca de pin 1).
\item \textbf{Alimentación — la regla dura: el pin 1 (VCC) del XBee es de 3.3\,V. NUNCA le
conectes 5\,V.} Prepara la segunda LM2596/MP1584, ajústala \textbf{en vacío} a
\textbf{3.3\,V} (§\ref{sec:lm2596}), márcala «MODEM 3.3\,V», y ponle a la salida un
capacitor de 100\,$\mu$F $+$ 100\,nF lo más cerca posible del pin VCC (el módem pide
picos de $\sim$1--1.5\,A al transmitir; sin ese capacitor se reinicia solo).
\item La entrada de esa buck viene de \textbf{SAL} (el 5\,V conmutado del Bloque~3), no del
riel fijo: así, cuando el watchdog reinicia el stack, \textbf{también reinicia el
módem} — igual que en el PCB de producción (riel 3V3\_MODEM).
\end{enumerate}
\subsubsection*{9c · Conexiones del Modo B}
\hwtab{%
\begin{tabularx}{\textwidth}{@{}l X L{4.4cm}@{}}
\toprule
\theadconex
\midrule
\redV & SAL / GND (Bloque 3) $\rightarrow$ F9P · watchdog · 4G & IOREF = 3.3\,V (nivel de los UART del F9P)\\
\redN & switch XBee del Pro $\rightarrow$ UART1 & Libera UART2 para el relé\\
\redS & PA2 $\rightarrow$ F9P UART1 RX & Monitor de fix\\
\redS & PA3 $\rightarrow$ F9P UART1 TX & Monitor de fix\\
\redS & F9P TX2 (UART2) $\rightarrow$ PA10 (USART1 RX) & Relé: la subida entra al MCU\\
\redS & PA9 (USART1 TX) $\rightarrow$ 4G DIN & El MCU releva + inyecta \texttt{\$PHLG}\\
\redS & 4G DOUT $\rightarrow$ F9P RX2 (UART2) & RTCM3 \textbf{DIRECTO} (no pasa por el MCU) $\rightarrow$ correcciones intactas\\
\redV & SAL (Bloque 3) $\rightarrow$ Pro · pin \texttt{5V} (y GND común) & El F9P sí es de 5\,V\\
\redV & SAL $\rightarrow$ LM2596 «MODEM» IN$+$ (ajustada a 3.3\,V) & IN$-$/OUT$-$ al GND común\\
\redT & LM2596 «MODEM» OUT$+$ $\rightarrow$ XBee \textbf{pin 1 (VCC)} & \textbf{3.3\,V — nunca 5\,V} ·
C 100\,$\mu$F$+$100\,nF junto al pin\\
\redG & XBee \textbf{pin 10 (GND)} $\rightarrow$ GND & GND común con todo\\
\redT & Blackpill 3V3 $\rightarrow$ Pro · pin \texttt{IOREF} & Nivel 3.3\,V de los UART del Pro\\
\redN & switch XBee del Pro $\rightarrow$ \texttt{UART1} & Libera UART2 para el relevo (el socket queda vacío)\\
\redS & PA2 $\rightarrow$ Pro · \texttt{RX1} \quad / \quad PA3 $\rightarrow$ Pro · \texttt{TX1} & Monitor de fix (NMEA)\\
\redS & Pro · \texttt{TX2} (F9P UART2) $\rightarrow$ PA10 (USART1 RX) & Relevo: la subida entra al MCU\\
\redS & PA9 (USART1 TX) $\rightarrow$ XBee \textbf{pin 3 (DIN)} & El MCU releva + inyecta \texttt{\$PHLG}\\
\redS & XBee \textbf{pin 2 (DOUT)} $\rightarrow$ Pro · \texttt{RX2} & RTCM3 \textbf{DIRECTO} (no pasa por el MCU) $\rightarrow$ correcciones intactas\\
\redT & PA10 $\rightarrow$ R 22\,k$\Omega$ $\rightarrow$ 3V3 & DFU-safe (idle high)\\
\redN & 4G NTRIP Master $\rightarrow$ breakout XBee (SparkFun BOB-08276), fuera del socket & Para interponer el MCU\\
\redN & 2$\times$ antenas LTE (u.FL) $\rightarrow$ 4G & \textbf{Antes} de energizar — sin antena el transmisor sufre\\
\redN & 4G NTRIP Master $\rightarrow$ servidor (4G/NTRIP) & \texttt{\$PHLG} llega \textit{en banda} al backend\\
\bottomrule
\end{tabularx}}
@ -332,6 +429,9 @@ MCU debe interrumpirlas.)
\bloque{10}{Respaldo de batería (proto): TP4056 + MT3608 + corte de carga (PA8) + apagador}
\queprueba{reproduce carga / respaldo; PA8 corta la carga; el apagador mata todo. El PCB usa el LTC4040.}
\compbloque{TP4056 (§\ref{sec:tp4056}) · MT3608 (§\ref{sec:mt3608}) · 2N3904 e IRF9540N
(§\ref{sec:transistores}) · 1N5819 $\times$2 (§\ref{sec:diodos}) · apagador (§\ref{sec:botones}) ·
R 1\,k y 10\,k (§\ref{sec:resistencias})}
\hwtab{%
\begin{tabularx}{\textwidth}{@{}l X L{4.4cm}@{}}
@ -379,6 +479,8 @@ con R\textsubscript{PROG} $\approx$ C/5 $\le$ 2.5\,A.
\bloque{11}{Temperatura analógica: NTC 10\,k $\rightarrow$ PB1 + LM35 $\rightarrow$ PA7}
\queprueba{dos canales analógicos independientes; con el AHT10 (Bloque~6) completan la triple ruta.}
\compbloque{NTC 10\,k (§\ref{sec:botones}) · LM35 — ¡ojo con la orientación! (§\ref{sec:transistores}) ·
R 10\,k 1\,\% (§\ref{sec:resistencias}) · C 100\,nF (§\ref{sec:diodos})}
\hwtab{%
\begin{tabularx}{\textwidth}{@{}l X L{4.4cm}@{}}
@ -405,9 +507,10 @@ solo el AHT10.}}
\diagramabloque{11}{\blkTempA}
\section{Patitas de los componentes}
\section{Patitas de los componentes (resumen rápido)}
Míralos de frente, patitas hacia abajo.
Tabla-resumen para consulta veloz; \textbf{los dibujos} de cada uno están en la
sección~\ref{sec:identifica}. Míralos de frente, patitas hacia abajo.
\hwtab{%
\begin{tabularx}{\textwidth}{@{}L{4.6cm} X@{}}
@ -441,7 +544,9 @@ Capacitor electrolítico & \textbf{CON polaridad}: la franja/pata corta = negati
6 & Temperatura / humedad & Bloques 6 y 11: AHT10 (0x38, \textbf{solo} en el bus) + LM35 $\rightarrow$ PA7 + NTC $\rightarrow$ PB1. Verifica las tres lecturas en el log.\\
7 & Respaldo de batería & Bloque 10. TP4056 + MT3608 (ajusta el MT3608 apenas $<$ 5\,V del vehículo) + corte de carga PA8 (CHRG\_RUN) + \textbf{apagador} SYS $\rightarrow$ MAIN5V. Prueba: PA8 en bajo = el LED CHRG del TP4056 se apaga; el apagador mata todo.\\
8 & Stack RTK & Bloque 8. Solo 4 cables (SAL, GND, PA2, PA3); el 4G va en el socket XBee del Pro.\\
9 & (Opcional) Modo B & Bloque 9. Relé por breakout XBee — solo si vas a probar el diagnóstico por NTRIP.\\
9 & (Opcional) Modo B & Bloque 9. Relevo por breakout XBee — solo si vas a probar el
diagnóstico por NTRIP. \textbf{Prepara antes el puente 2.0$\rightarrow$2.54\,mm} (compra y
soldadura de la sección 9a/9b) y la buck «MODEM 3.3\,V».\\
\bottomrule
\end{tabularx}}
@ -459,6 +564,14 @@ Capacitor electrolítico & \textbf{CON polaridad}: la franja/pata corta = negati
\item El 4G va en el \textbf{socket XBee del Pro} (no al Blackpill), salvo el Modo B.
En el PCB v3, el bypass UART2 \textbf{normalmente cerrado} garantiza que un MCU
muerto/ausente nunca corte el RTCM3 (ver Bloque~9).
\item \textbf{Fuera del socket, el 4G se alimenta con 3.3\,V — NUNCA 5\,V} (pin 1 del
XBee), desde la buck «MODEM 3.3\,V» con su capacitor de 100\,$\mu$F al lado, y sus
patitas son de paso \textbf{2.0\,mm}: usa el puente de la sección 9a/9b, no lo
fuerces en la protoboard. Antenas LTE conectadas \textbf{antes} de energizar.
\item \textbf{USB del Blackpill y riel 5\,V nunca al mismo tiempo}: el pin \texttt{5V} está
unido directo al USB. Para flashear, desconecta el riel; para operar, desconecta el USB.
\item El pin \texttt{IOREF} del Pro debe ir al 3V3 del Blackpill en los Bloques 8 y 9 —
sin él, los pines \texttt{TX1/RX1/TX2/RX2} del Pro no responden.
\item \textbf{AHT10 solo a 3V3} (1.8--3.6\,V, se quema a 5\,V) y \textbf{solo él} en el bus
I\textsuperscript{2}C (restricción Aosong); dirección \textbf{0x38 fija}.
\textbf{LM35 al revés:} necesita $\ge$4\,V $\rightarrow$ va al \textbf{5\,V}, nunca al 3V3.
@ -490,6 +603,17 @@ convertidores». Nuevo: tabla «Estado y cambios», aviso del \textbf{bypass UAR
cerrado} del PCB (Bloque 9), aclaración \textbf{NTC del cargador vs TMP102 vs NTC$\rightarrow$PB1},
pack 1S4P $\sim$12\,Ah (nunca 40\,Ah), leyenda con colores de los diagramas CircuiTikZ,
figura del Bloque 3 y referencias cruzadas.\\
v3.0 & 2026-07-08 & \textbf{Catálogo visual de piezas} (sección~\ref{sec:identifica}): vista
física con patitas rotuladas de los módulos con CI (LM2596, MT3608, TP4056, AHT10, DFR1015),
pinout completo del Blackpill de frente (40 pines, usados en color), simpleRTK2B Pro con sus
rótulos \texttt{RX1/TX1/RX2/TX2/IOREF}, 4G NTRIP Master + breakout, transistores TO-92/TO-220,
diodos, LEDs, capacitores, código de colores de resistencias, protoboard por dentro y
checklist antes de energizar. Línea «Piezas de este bloque» en los 11 bloques. \textbf{Bloque
9 rehecho:} el 4G es paso \textbf{2.0\,mm} (no cabe en protoboard 2.54\,mm) $\rightarrow$
opciones de puente (breakout $+$ sockets $\approx$MX\$100), armado 9b, y alimentación del
módem \textbf{3.3\,V desde SAL} vía buck dedicada (espejo del riel 3V3\_MODEM del PCB) con
capacitor de ráfaga. Nuevo en tablas 8/9: fila \texttt{IOREF} $\rightarrow$ 3V3 (faltaba) y
números de pin XBee (1 VCC · 2 DOUT · 3 DIN · 10 GND). Aviso USB$+$riel 5\,V simultáneos.\\
v2.2 & 2026-07-03 & \textbf{Suite de sensores realineada a las partes en mano:} AHT10
(0x38, solo en el bus, a 3V3) sustituye al SHT40 en el Bloque 6 (SHT40/TMP102 quedan para
el PCB); \textbf{LM35 $\rightarrow$ PA7} nuevo en el Bloque 11 $\rightarrow$ \textbf{triple
@ -504,6 +628,6 @@ AHT10 y electrolíticos; capacitores en mano (100\,nF / 10\,$\mu$F / 100\,$\mu$F
\vspace{6pt}
\noindent{\footnotesize Helgen Technologies · Proyecto Drogheda · Guía de conexión en
protoboard v2.2 (bloques 1--11) · Firmware v2.3 · Documento para el técnico de armado.
protoboard v3.0 (bloques 1--11) · Firmware v2.3 · Documento para el técnico de armado.
Datos de conexión: \texttt{Drogheda\_Conexiones-por-Bloque\_Proto\_v1.xlsx} · Diagramas:
\texttt{circuitikz-wiring/}.}

View File

@ -1,5 +1,6 @@
% Helgen Drogheda — Guía de Conexión en Protoboard · DRG-PROTO-001 (es-MX)
% Watchdog HBOX v3 · tarjeta DEV STM32F411 Blackpill · bloques 1–11 · v2.2
% Watchdog HBOX v3 · tarjeta DEV STM32F411 Blackpill · bloques 1–11 · v3.0
% v3.0 agrega modulos-pinout.tex (catálogo visual de piezas) + Bloque 9 con puente XBee.
%
% Compilar (preferido, con fuentes de marca): latexmk -xelatex main.tex
% Compilar (fallback sin fuentes de marca): latexmk -pdf main.tex (pdfLaTeX)
@ -39,9 +40,11 @@
\newcommand{\redI}{\redsw{netIgn}{12--24\,V}}
\newcommand{\redN}{{\footnotesize —}}
% ---- Encabezado de bloque + línea «Qué prueba» ----
% ---- Encabezado de bloque + línea «Qué prueba» + línea «Piezas de este bloque» ----
\newcommand{\bloque}[2]{\subsection*{Bloque #1 · #2}}
\newcommand{\queprueba}[1]{\noindent{\small\textit{\textbf{Qué prueba:} #1}}\par\smallskip}
\newcommand{\compbloque}[1]{\noindent{\small\textbf{\textcolor{HelgenTeal}{Piezas de este
bloque:}} {\small #1}}\par\smallskip}
% ---- Diagrama CircuiTikZ incrustado por bloque (mismas macros que la lámina) ----
\newcommand{\diagramabloque}[2]{%
@ -62,8 +65,8 @@
\helgenportada{Guía de Conexión en Protoboard}{HBOX Watchdog v3 — tarjeta DEV / protoboard · bloques 1--11}{%
\begin{tabular}{@{}ll@{}}
\textbf{Documento} & DRG-PROTO-001 — Guía de Conexión en Protoboard\\
\textbf{Versión} & 2.2 (suite de sensores en mano: AHT10 + LM35 + NTC; corte de carga PA8; apagador general)\\
\textbf{Fecha} & 3 de julio de 2026\\
\textbf{Versión} & 3.0 (catálogo visual de piezas y pinouts; Bloque 9 con puente XBee 2.0$\rightarrow$2.54\,mm)\\
\textbf{Fecha} & 8 de julio de 2026\\
\textbf{Firmware} & v2.3 · MCU STM32F411 «Blackpill»\\
\textbf{Dirigido a} & Técnico de armado — sigue el orden de la sección~\ref{sec:orden}\\
\textbf{Fuente de datos} & \texttt{Drogheda\_Conexiones-por-Bloque\_Proto\_v1.xlsx} (autoritativa)\\

View File

@ -0,0 +1,670 @@
% modulos-pinout.tex — Identificación física de módulos y componentes (v3.0)
% Vistas superiores de los módulos con CI (LM2596, MT3608, TP4056, AHT10, DFR1015),
% pinout físico del Blackpill y del stack RTK, y patitas de cada componente discreto.
% Se \input{} desde cuerpo.tex. Requiere tikz (ya cargado por el estilo) y los colores
% net* de ../circuitikz-wiring/wiring-blocks.tex (ya cargado por main.tex).
% ---- Estilos compartidos de esta sección ----
\tikzset{
modbody/.style={draw=HelgenIndigo, fill=HelgenMist, rounded corners=3pt, line width=1.1pt},
chip/.style={draw=HelgenIndigo, fill=HelgenIndigo!85, rounded corners=1pt},
chiptxt/.style={font=\tiny\bfseries, text=white},
pad/.style={circle, draw=black!55, fill=white, inner sep=2.1pt, line width=0.7pt},
padu/.style={circle, draw=HelgenIndigo, fill=HelgenCyan, inner sep=2.1pt, line width=1pt},
silk/.style={font=\scriptsize\bfseries, text=HelgenIndigo},
silkg/.style={font=\scriptsize, text=black!45},
destino/.style={font=\scriptsize, align=left},
destinog/.style={font=\scriptsize, text=black!45, align=left},
patanum/.style={font=\tiny, text=black!55},
cablef/.style={-{Stealth[length=2mm]}, line width=1.1pt},
}
% Swatch de red para las anotaciones de los dibujos
\newcommand{\sw}[1]{\textcolor{#1}{\rule[-0.12ex]{0.62em}{0.62em}}}
% Mini-resistencia con bandas de color (4 y 5 bandas)
\definecolor{resBody}{HTML}{E8D8B0}
\definecolor{cCafe}{HTML}{8B5A2B}\definecolor{cNegro}{HTML}{1A1A1A}
\definecolor{cRojo}{HTML}{C62828}\definecolor{cNaranja}{HTML}{EF6C00}
\definecolor{cAmarillo}{HTML}{F0C419}\definecolor{cVioleta}{HTML}{6A1B9A}
\definecolor{cDorado}{HTML}{C9A227}
\newcommand{\resfour}[4]{\begin{tikzpicture}[baseline=-0.6ex]
\draw[black!60,line width=0.8pt] (-0.28,0)--(0,0); \draw[black!60,line width=0.8pt] (1.52,0)--(1.8,0);
\draw[fill=resBody,draw=black!45,rounded corners=2pt] (0,-0.16) rectangle (1.52,0.16);
\fill[#1] (0.20,-0.16) rectangle (0.34,0.16); \fill[#2] (0.50,-0.16) rectangle (0.64,0.16);
\fill[#3] (0.80,-0.16) rectangle (0.94,0.16); \fill[#4] (1.20,-0.16) rectangle (1.32,0.16);
\end{tikzpicture}}
\newcommand{\resfive}[5]{\begin{tikzpicture}[baseline=-0.6ex]
\draw[black!60,line width=0.8pt] (-0.28,0)--(0,0); \draw[black!60,line width=0.8pt] (1.52,0)--(1.8,0);
\draw[fill=resBody,draw=black!45,rounded corners=2pt] (0,-0.16) rectangle (1.52,0.16);
\fill[#1] (0.16,-0.16) rectangle (0.28,0.16); \fill[#2] (0.40,-0.16) rectangle (0.52,0.16);
\fill[#3] (0.64,-0.16) rectangle (0.76,0.16); \fill[#4] (0.88,-0.16) rectangle (1.00,0.16);
\fill[#5] (1.22,-0.16) rectangle (1.34,0.16);
\end{tikzpicture}}
\section{Identifica cada pieza ANTES de conectar}
\label{sec:identifica}
Esta sección es el \textbf{catálogo visual} del kit: cada módulo y componente dibujado
\textbf{como se ve de verdad}, con el nombre de cada patita y a dónde va. Las tablas de los
bloques (sección~\ref{sec:bloques}) te dicen \emph{qué} conectar; esta sección te enseña
\emph{dónde está} cada patita. Tres reglas de oro:
\begin{itemize}
\item \textbf{Confía en lo impreso, no en la posición.} Los módulos chinos cambian de un
lote a otro; los nombres serigrafiados (IN+, OUT$-$, B+, SDA\ldots) son los que valen.
Si el rótulo está por debajo, voltea el módulo y anótalo con marcador por arriba.
\item \textbf{En caso de duda, multímetro.} Continuidad (la escala que pita) para saber qué
está unido con qué; voltaje DC para verificar una fuente ANTES de conectarla a lo demás.
\item \textbf{Nada se conecta con la fuente energizada.} Cablea, revisa contra el dibujo,
revisa la polaridad, y hasta entonces enciende.
\end{itemize}
% =====================================================================
\subsection{Cómo leer la protoboard}
\label{sec:protoboard}
\begin{center}
\begin{adjustbox}{max width=0.98\textwidth}
\begin{tikzpicture}[x=1cm,y=1cm]
% board
\draw[modbody, fill=white] (-0.5,-3.2) rectangle (11.3,3.4);
% ---- power rails top ----
\draw[net5V,line width=1.4pt] (0,2.95) -- (10.8,2.95);
\draw[blue,line width=1.4pt] (0,2.45) -- (10.8,2.45);
\foreach \x in {0.3,0.9,...,10.5}{\fill[black!35] (\x,2.75) circle (0.055); \fill[black!35] (\x,2.25) circle (0.055);}
\node[font=\scriptsize\bfseries,text=net5V,anchor=south west] at (0,3.0){riel ROJO $=$ 5\,V (MAIN5V)};
\node[font=\scriptsize\bfseries,text=blue,anchor=south east,fill=white,inner sep=1.5pt] at (10.6,2.5){riel AZUL $=$ GND};
% ---- middle rows ----
\foreach \x in {0.3,0.66,...,10.5}{
\foreach \y in {1.5,1.2,0.9,0.6,0.3}{\fill[black!35] (\x,\y) circle (0.055);}
\foreach \y in {-0.5,-0.8,-1.1,-1.4,-1.7}{\fill[black!35] (\x,\y) circle (0.055);}}
\node[font=\tiny,anchor=east] at (0.12,1.5){a}; \node[font=\tiny,anchor=east] at (0.12,0.3){e};
\node[font=\tiny,anchor=east] at (0.12,-0.5){f}; \node[font=\tiny,anchor=east] at (0.12,-1.7){j};
% trench
\fill[black!12] (-0.5,-0.28) rectangle (11.3,0.08);
\node[font=\scriptsize\itshape,text=black!60,fill=white,inner sep=1.5pt] at (3.9,-0.11){canal central — parte cada columna en dos mitades};
% highlight one column group
\draw[HelgenTeal,line width=1.3pt,rounded corners=2pt] (1.32,0.16) rectangle (1.68,1.66);
\node[font=\scriptsize,text=HelgenTeal,anchor=west,fill=white,inner sep=1.5pt] at (1.85,1.35){estos 5 hoyitos están \textbf{unidos por dentro}};
\draw[HelgenTeal,line width=1.3pt,rounded corners=2pt,dashed] (1.32,-1.86) rectangle (1.68,-0.36);
\node[font=\scriptsize,text=HelgenTeal,align=center,anchor=north,fill=white,inner sep=1.5pt] at (1.7,-1.95){\ldots{}pero \textbf{NO} están unidos\\con la mitad de arriba};
% component straddling trench
\draw[chip] (7.3,-0.55) rectangle (9.1,0.35); \node[chiptxt] at (8.2,-0.1){módulo DIP};
\node[font=\scriptsize,align=center,anchor=north,fill=white,inner sep=1.5pt] at (8.2,-0.85){los módulos se montan\\\textbf{a caballo} del canal};
\end{tikzpicture}
\end{adjustbox}\\
{\small\itshape La protoboard por dentro: rieles laterales corridos (alimentación) y columnas
de 5 puntos unidos. Dos cables en la misma columna de 5 quedan conectados entre sí.}
\end{center}
\begin{helgennotice}[Checklist antes de energizar CUALQUIER bloque]
\begin{itemize}
\item Rieles: rojo $=$ 5\,V, azul $=$ GND, en \textbf{toda} la guía. Nada de excepciones.
\item Electrolíticos: franja al GND. Diodos: banda como diga la tabla. Transistores:
cara plana como en el dibujo (sección~\ref{sec:transistores}).
\item Multímetro en continuidad: pita GND$\leftrightarrow$GND, \textbf{no} debe pitar 5\,V$\leftrightarrow$GND.
\item Fuentes ajustables (LM2596 / MT3608): voltaje medido y ajustado \textbf{en vacío} antes de conectar su salida.
\item \textbf{USB del Blackpill y riel 5\,V: nunca al mismo tiempo.} El pin \texttt{5V} de la
tarjeta está unido \emph{directo} al USB (sin protección). Para flashear: desconecta el
riel MAIN5V del pin \texttt{5V}, flashea por USB, desconecta el USB y reconecta el riel.
\end{itemize}
\end{helgennotice}
% =====================================================================
\subsection{El Blackpill de frente (los 40 pines)}
\label{sec:blackpill}
Pon la tarjeta \textbf{con el USB-C hacia arriba y los componentes hacia ti}. Para confirmar
que no la tienes volteada: la esquina superior \textbf{izquierda} dice \texttt{VB} y la
superior \textbf{derecha} dice \texttt{B12} (los nombres están serigrafiados junto a cada pin
— gira la tarjeta hasta que coincida con el dibujo). Los pines rellenos de color
\textcolor{HelgenTeal}{\textbf{cian}} son los que usa esta guía; los grises no se tocan.
\begin{center}
\begin{adjustbox}{max height=0.88\textheight, max width=\textwidth}
\begin{tikzpicture}[x=1cm,y=1cm]
% ---- board body ----
\draw[modbody] (0,-0.75) rectangle (4.3,11.1);
% USB-C
\draw[draw=black!60,fill=black!25,rounded corners=2.5pt] (1.55,10.55) rectangle (2.75,11.35);
\node[font=\scriptsize\bfseries,text=black!60] at (2.15,11.6){USB-C};
% MCU + buttons + LEDs
\draw[chip] (1.35,4.9) rectangle (2.95,6.5); \node[chiptxt,align=center] at (2.15,5.7){STM32\\F411};
\draw[draw=black!55,fill=black!12] (1.15,7.4) rectangle (1.95,8.0); \node[font=\tiny] at (1.55,7.7){NRST};
\draw[draw=black!55,fill=black!12] (2.35,7.4) rectangle (3.15,8.0); \node[font=\tiny] at (2.75,7.7){BOOT0};
\draw[draw=black!55,fill=black!12] (1.75,3.9) rectangle (2.55,4.5); \node[font=\tiny] at (2.15,4.2){KEY};
\fill[blue!60] (1.5,9.9) rectangle (1.8,10.15); \node[font=\tiny,anchor=west,text=black!60] at (1.85,10.02){LED C13};
\fill[red!70] (1.5,9.4) rectangle (1.8,9.65); \node[font=\tiny,anchor=west,text=black!60] at (1.85,9.52){LED PWR};
% SWD header bottom
\foreach \x in {1.55,1.95,2.35,2.75}{\fill[black!45] (\x,-0.45) circle (0.07);}
\node[font=\tiny,text=black!55,anchor=west] at (2.95,-0.45){SWD (no se usa)};
% star corner markers
\node[font=\footnotesize\bfseries,text=HelgenTeal] at (0.28,10.85){$\star$};
\node[font=\footnotesize\bfseries,text=HelgenTeal] at (4.02,10.85){$\star$};
% ---- pins: base grey (all), then used overrides ----
% LEFT column silk names top->bottom
\foreach [count=\i] \nm in {VB,C13,C14,C15,R,A0,A1,A2,A3,A4,A5,A6,A7,B0,B1,B2,B10,3V3,G,5V}{
\node[pad] (L\i) at (0.42,{10.45-\i*0.52}) {};
\node[silkg,anchor=west] at (0.62,{10.45-\i*0.52}) {\nm};}
% RIGHT column silk names top->bottom
\foreach [count=\i] \nm in {B12,B13,B14,B15,A8,A9,A10,A11,A12,A15,B3,B4,B5,B6,B7,B8,B9,5V,G,3V3}{
\node[pad] (R\i) at (3.88,{10.45-\i*0.52}) {};
\node[silkg,anchor=east] at (3.68,{10.45-\i*0.52}) {\nm};}
% ---- LEFT used pins: re-draw pad + silk in indigo + destination note ----
\foreach \i/\nm/\cl/\txt in {%
5/R/netSig/{botón reset ext.\ $\rightarrow$ GND · \textbf{B7}},%
6/A0/netAna/{BAT\_SENSE — $\div$2 del 18650$+$ · \textbf{B4}},%
7/A1/netSig/{PWR\_CTRL $\rightarrow$ 1\,k $\rightarrow$ 2N3904 · \textbf{B3}},%
8/A2/netSig/{TX $\rightarrow$ pin \texttt{RX1} del Pro · \textbf{B8}},%
9/A3/netSig/{RX $\leftarrow$ pin \texttt{TX1} del Pro · \textbf{B8}},%
10/A4/netAna/{5V\_SENSE — $\div$2 del 5\,V veh.\ · \textbf{B4}},%
11/A5/netSig/{IGN\_SENSE — \textbf{máx 3.3\,V} · \textbf{B4}},%
12/A6/netSig/{FAN\_PWM $\rightarrow$ 220 $\rightarrow$ IRLZ44N · \textbf{B5}},%
13/A7/netAna/{LM35 OUT (10\,mV/\textdegree C) · \textbf{B11}},%
14/B0/netSig/{LED de estado $\rightarrow$ 330\,$\Omega$ · \textbf{B2}},%
15/B1/netAna/{nodo del divisor NTC · \textbf{B11}},%
18/3V3/net3V3/{\textbf{salida} 3.3\,V $\rightarrow$ AHT10, pull-ups},%
19/G/netGND/{GND $\rightarrow$ riel azul},%
20/5V/net5V/{\textbf{entrada} 5\,V $\leftarrow$ riel MAIN5V}}{%
\node[padu] at (0.42,{10.45-\i*0.52}) {};
\node[silk,anchor=west] at (0.62,{10.45-\i*0.52}) {\nm};
\node[destino,anchor=east] at (-0.25,{10.45-\i*0.52}) {\sw{\cl}\;\txt};}
% ---- RIGHT used pins ----
\foreach \i/\nm/\cl/\txt in {%
1/B12/netSig/{gauge LED 1 $\rightarrow$ 330\,$\Omega$ · \textbf{B7}},%
2/B13/netSig/{gauge LED 2 $\rightarrow$ 330\,$\Omega$ · \textbf{B7}},%
3/B14/netSig/{gauge LED 3 $\rightarrow$ 330\,$\Omega$ · \textbf{B7}},%
4/B15/netSig/{gauge LED 4 $\rightarrow$ 330\,$\Omega$ · \textbf{B7}},%
5/A8/netSig/{CHRG\_RUN $\rightarrow$ 1\,k $\rightarrow$ 2N3904 · \textbf{B10}},%
6/A9/netSig/{$\rightarrow$ 4G \texttt{DIN} (\$PHLG) · \textbf{B9}},%
7/A10/netSig/{$\leftarrow$ F9P \texttt{TX2} · 22\,k a 3V3 · \textbf{B9}},%
14/B6/netSig/{\texttt{SCL} $\rightarrow$ AHT10 · \textbf{B6}},%
15/B7/netSig/{\texttt{SDA} $\rightarrow$ AHT10 · \textbf{B6}},%
18/5V/net5V/{mismo riel 5\,V que el otro pin \texttt{5V}},%
19/G/netGND/{GND $\rightarrow$ riel azul},%
20/3V3/net3V3/{misma salida 3.3\,V}}{%
\node[padu] at (3.88,{10.45-\i*0.52}) {};
\node[silk,anchor=east] at (3.68,{10.45-\i*0.52}) {\nm};
\node[destino,anchor=west] at (4.55,{10.45-\i*0.52}) {\sw{\cl}\;\txt};}
% unused-but-noteworthy notes
\node[destinog,anchor=west] at (4.55,{10.45-8*0.52}) {A11/A12 $=$ USB — \textbf{no conectar}};
\node[destinog,anchor=west] at (4.55,{10.45-17*0.52}) {B10 $=$ tach (sin usar, vent.\ 2 hilos)};
\end{tikzpicture}
\end{adjustbox}\\
{\small\itshape Blackpill STM32F411 (WeAct), vista superior, USB arriba. Cian $=$ pin usado;
la nota dice a dónde va y en qué bloque («\textbf{B4}» $=$ Bloque~4). \textbf{Los dos pines
\texttt{5V} son el mismo riel} (igual los dos \texttt{G} y los dos \texttt{3V3}): usa el que
te quede más cerca.}
\end{center}
% =====================================================================
\subsection{Módulos con circuito integrado (vista superior)}
\label{sec:modulos}
Todos van montados en la protoboard o al lado de ella, con pines soldados (tira de pines
macho 2.54\,mm) o cables Dupont macho-hembra. \textbf{Antes de usar cualquier fuente
ajustable: conéctala sola, mide su salida y ajústala} (tornillito azul del potenciómetro).
% ---------- LM2596 ----------
\subsubsection*{LM2596 — reductor (buck) ajustable}
\label{sec:lm2596}
\begin{center}
\begin{adjustbox}{max width=0.95\textwidth}
\begin{tikzpicture}[x=1cm,y=1cm]
\draw[modbody] (0,0) rectangle (6.4,3.4);
% pads
\node[padu] (inp) at (0.45,2.9){}; \node[silk,anchor=west] at (0.62,2.9){IN$+$};
\node[padu] (inm) at (0.45,0.5){}; \node[silk,anchor=west] at (0.62,0.5){IN$-$};
\node[padu] (outp) at (5.95,2.9){}; \node[silk,anchor=east] at (5.78,2.9){OUT$+$};
\node[padu] (outm) at (5.95,0.5){}; \node[silk,anchor=east] at (5.78,0.5){OUT$-$};
% parts on board
\draw[chip] (1.6,1.1) rectangle (3.1,2.3); \node[chiptxt,align=center] at (2.35,1.7){LM2596S\\(el IC grande)};
\draw[draw=black!55,fill=black!20] (3.7,1.0) circle (0.62); \node[font=\tiny,align=center] at (3.7,1.0){bobina\\(dona)};
\draw[draw=black!55,fill=black!12] (1.0,2.35) circle (0.42); \draw[draw=black!55,fill=black!12] (5.15,2.5) circle (0.42);
\node[font=\tiny,text=black!55] at (1.0,2.35){cap}; \node[font=\tiny,text=black!55] at (5.15,2.5){cap};
% trimpot
\draw[draw=HelgenIndigo,fill=blue!25] (4.35,1.65) rectangle (5.55,2.15);
\fill[white] (4.65,1.9) circle (0.14); \draw[black!70] (4.55,1.8)--(4.75,2.0);
\node[font=\scriptsize\bfseries,text=HelgenIndigo,anchor=north] at (4.95,1.6){potenciómetro};
\node[font=\tiny,anchor=north,align=center] at (4.95,1.28){gira el tornillo\\para ajustar V\textsubscript{OUT}};
% external arrows
\draw[cablef,net5V] (-1.7,2.9) -- (inp); \node[destino,anchor=south,text width=2.5cm] at (-1.4,3.0){\textbf{24\,V} del gabinete/banco};
\draw[cablef,netGND] (-1.7,0.5) -- (inm); \node[destino,anchor=north] at (-1.35,0.4){GND};
\draw[cablef,net5V] (outp) -- (7.7,2.9); \node[destino,anchor=south,text width=3.1cm] at (8.0,3.0){salida ajustada $\rightarrow$ su riel};
\draw[cablef,netGND] (outm) -- (7.7,0.5); \node[destino,anchor=north] at (7.9,0.4){GND};
\end{tikzpicture}
\end{adjustbox}\\
{\small\itshape LM2596: entra voltaje alto por IN$\pm$, sale voltaje ajustado por OUT$\pm$.
Ambos GND (IN$-$ y OUT$-$) van al GND común del sistema.}
\end{center}
\begin{itemize}
\item \textbf{En esta guía se usan hasta dos unidades:} una a \textbf{5.0\,V} para el
ventilador (Bloque~5) y —solo si armas el Modo~B— otra a \textbf{3.3\,V} para el
módem 4G (Bloque~9). Márcalas con masking tape: «FAN 5.0\,V» y «MODEM 3.3\,V».
\item Ajuste: conecta \textbf{solo} IN$\pm$, pon el multímetro en OUT$\pm$ y gira el
potenciómetro hasta leer el voltaje objetivo. Vienen de fábrica en un voltaje
aleatorio (a veces $>$20\,V): \textbf{nunca} conectes la salida sin medirla antes.
\item El MP1584 (módulo más chico) es equivalente: mismos 4 rótulos IN$\pm$/OUT$\pm$,
mismo procedimiento.
\end{itemize}
% ---------- MT3608 ----------
\subsubsection*{MT3608 — elevador (boost) ajustable}
\label{sec:mt3608}
\begin{center}
\begin{adjustbox}{max width=0.9\textwidth}
\begin{tikzpicture}[x=1cm,y=1cm]
\draw[modbody] (0,0) rectangle (4.6,2.5);
\node[padu] (vinp) at (0.4,2.05){}; \node[silk,anchor=west] at (0.57,2.05){VIN$+$};
\node[padu] (vinm) at (0.4,0.45){}; \node[silk,anchor=west] at (0.57,0.45){VIN$-$};
\node[padu] (voutp) at (4.2,2.05){}; \node[silk,anchor=east] at (4.03,2.05){OUT$+$};
\node[padu] (voutm) at (4.2,0.45){}; \node[silk,anchor=east] at (4.03,0.45){OUT$-$};
\draw[chip] (1.7,0.5) rectangle (2.6,1.1); \node[chiptxt] at (2.15,0.8){MT3608};
\draw[draw=black!55,fill=black!20] (2.15,1.75) circle (0.45); \node[font=\tiny,align=center] at (2.15,1.75){bobina};
\draw[draw=HelgenIndigo,fill=blue!25] (3.0,1.35) rectangle (3.95,1.8);
\fill[white] (3.25,1.575) circle (0.12);
\node[font=\tiny,anchor=north,align=center] at (3.5,1.3){potenciómetro};
\draw[cablef,netAna] (-1.3,2.05) -- (vinp); \node[destino,anchor=south,text width=2.4cm] at (-1.05,2.15){\textbf{18650$+$} (nodo con TP4056 B+)};
\draw[cablef,netGND] (-1.3,0.45) -- (vinm); \node[destino,anchor=north] at (-1.0,0.35){GND};
\draw[cablef,net5V] (voutp) -- (5.9,2.05); \node[destino,anchor=south,text width=3.2cm] at (6.3,2.15){$\rightarrow$ 1N5819 $\rightarrow$ nodo SYS};
\draw[cablef,netGND] (voutm) -- (5.9,0.45); \node[destino,anchor=north] at (6.1,0.35){GND};
\end{tikzpicture}
\end{adjustbox}\\
{\small\itshape MT3608: \textbf{sube} el voltaje (pila 3.6\,V $\rightarrow$ $\approx$5\,V). La entrada
es la pila; la salida va al diodo de respaldo del Bloque~10.}
\end{center}
\begin{itemize}
\item Ajústalo \textbf{apenas por debajo} del 5\,V del vehículo (p.\,ej.\ 4.8--4.9\,V), para
que el vehículo tenga prioridad y la pila solo entre cuando el vehículo se va.
\item Truco del potenciómetro: si al girar no cambia nada, dale \textbf{muchas vueltas} en
sentido antihorario (hasta $\sim$20) mientras mides — así son estos trimmers multivuelta.
\item Nunca lo alimentes al revés (VIN$\pm$ invertido lo quema al instante).
\end{itemize}
% ---------- TP4056 ----------
\subsubsection*{TP4056 — cargador de la pila 18650 (módulo con protección)}
\label{sec:tp4056}
\begin{center}
\begin{adjustbox}{max width=0.95\textwidth}
\begin{tikzpicture}[x=1cm,y=1cm]
\draw[modbody] (0,0) rectangle (5.2,2.8);
% usb connector left
\draw[draw=black!60,fill=black!25,rounded corners=1.5pt] (-0.25,0.95) rectangle (0.55,1.85);
\node[font=\tiny\bfseries,text=black!60,rotate=90] at (0.15,1.4){USB};
\node[font=\tiny,text=black!45,align=center,anchor=north,text width=2.2cm] at (0.7,-0.12){USB: NO se usa aquí (entramos por IN+)};
% pads
\node[padu] (INp) at (1.15,2.45){}; \node[silk,anchor=west] at (1.32,2.45){IN$+$};
\node[padu] (INm) at (1.15,0.35){}; \node[silk,anchor=west] at (1.32,0.35){IN$-$};
\node[padu] (Bp) at (4.85,2.45){}; \node[silk,anchor=east] at (4.68,2.45){B$+$};
\node[padu] (Bm) at (4.85,0.35){}; \node[silk,anchor=east] at (4.68,0.35){B$-$};
\node[pad] (Op) at (4.85,1.75){}; \node[silkg,anchor=east] at (4.68,1.75){OUT$+$};
\node[pad] (Om) at (4.85,1.05){}; \node[silkg,anchor=east] at (4.68,1.05){OUT$-$};
\node[destinog,anchor=west,text width=2.1cm] at (5.5,1.4){OUT$\pm$: sin usar en el proto};
% chips + leds
\draw[chip] (2.2,1.3) rectangle (3.3,2.2); \node[chiptxt] at (2.75,1.75){TP4056};
\draw[chip] (2.3,0.45) rectangle (3.2,0.95); \node[chiptxt,font=\tiny] at (2.75,0.7){protección};
\fill[red!75] (3.75,2.05) circle (0.11); \fill[blue!65] (3.75,1.65) circle (0.11);
\node[font=\tiny,anchor=north,align=center] at (3.8,1.4){LEDs de\\estado};
% external arrows
\draw[cablef,net5V] (-1.6,2.45) -- (INp);
\node[destino,anchor=south,text width=3.2cm] at (-1.2,2.55){5\,V vehículo \textbf{vía IRF9540} (corte PA8) — \textbf{no} directo};
\draw[cablef,netGND] (-1.6,0.35) -- (INm); \node[destino,anchor=north] at (-1.3,0.25){GND};
\draw[cablef,netAna] (Bp) -- (6.6,2.45); \node[destino,anchor=south,text width=2.9cm] at (6.9,2.55){$\rightarrow$ 18650$+$ (nodo con MT3608 VIN+)};
\draw[cablef,netGND] (Bm) -- (6.6,0.35); \node[destino,anchor=north,text width=2.4cm] at (6.9,0.25){$\rightarrow$ 18650$-$ $\rightarrow$ GND};
\end{tikzpicture}
\end{adjustbox}\\
{\small\itshape TP4056: el 5\,V de carga entra por \textbf{IN$\pm$} (nunca por el USB en este
proyecto) y la pila se conecta en \textbf{B$\pm$}. LED \textbf{rojo} $=$ cargando; \textbf{azul/verde}
$=$ carga completa. Este módulo \textbf{no tiene pin TEMP}: el corte de carga por temperatura
lo hace el Blackpill (PA8) cortando IN$+$ — Bloque~10.}
\end{center}
% ---------- AHT10 ----------
\subsubsection*{AHT10 — sensor de temperatura y humedad (I\textsuperscript{2}C)}
\label{sec:aht10}
\begin{center}
\begin{adjustbox}{max width=0.85\textwidth}
\begin{tikzpicture}[x=1cm,y=1cm]
\draw[modbody] (0,0) rectangle (4.4,2.6);
\draw[chip] (1.6,1.35) rectangle (2.8,2.15); \node[chiptxt] at (2.2,1.75){AHT10};
\draw[draw=black!55] (1.95,1.6) rectangle (2.45,1.95);
\node[font=\tiny,text=black!45,anchor=south] at (2.2,2.2){ventanita del sensor};
% 4 pins bottom
\foreach \x/\nm in {0.7/VIN,1.7/GND,2.7/SCL,3.7/SDA}{\node[padu] (p\nm) at (\x,0.3){}; \node[silk,anchor=south] at (\x,0.48){\nm};}
\draw[cablef,net3V3] (pVIN) -- (0.7,-1.55); \node[destino,anchor=north,align=center] at (0.7,-1.65){\textbf{3V3}\\¡NUNCA 5\,V!};
\draw[cablef,netGND] (pGND) -- (1.7,-0.85); \node[destino,anchor=north] at (1.7,-0.95){GND};
\draw[cablef,netSig] (pSCL) -- (2.7,-1.55); \node[destino,anchor=north,align=center] at (2.7,-1.65){pin \textbf{B6}\\del Blackpill};
\draw[cablef,netSig] (pSDA) -- (3.7,-0.85); \node[destino,anchor=north] at (3.7,-0.95){pin \textbf{B7}};
\end{tikzpicture}
\end{adjustbox}\\
{\small\itshape AHT10 (breakout GY-AHT10). \textbf{El orden de los 4 pines cambia según el
fabricante}: guíate por los nombres impresos, no por la posición del dibujo.}
\end{center}
\begin{itemize}
\item \textbf{Solo 3.3\,V} (el chip es de 1.8--3.6\,V y el breakout no trae regulador): a 5\,V se quema.
\item \textbf{Solo él en el bus I\textsuperscript{2}C} (restricción del fabricante Aosong).
No agregues otro sensor a B6/B7.
\item Dirección fija \texttt{0x38}. Pull-ups de 4.7\,k a 3V3 (muchos breakouts ya los traen
soldados; ponerlos de todos modos no estorba).
\end{itemize}
% ---------- DFR1015 ----------
\subsubsection*{DFR1015 — acondicionador de la señal de ignición}
\label{sec:dfr1015}
\begin{center}
\begin{adjustbox}{max width=0.9\textwidth}
\begin{tikzpicture}[x=1cm,y=1cm]
\draw[modbody] (0,0) rectangle (4.4,2.3);
\draw[chip] (1.7,0.9) rectangle (2.8,1.6); \node[chiptxt,align=center] at (2.25,1.25){buck\\12--24$\rightarrow$5\,V};
\node[padu] (dinp) at (0.4,1.85){}; \node[silk,anchor=west] at (0.57,1.85){IN$+$};
\node[padu] (dinm) at (0.4,0.45){}; \node[silk,anchor=west] at (0.57,0.45){IN$-$};
\node[padu] (doutp) at (4.0,1.85){}; \node[silk,anchor=east] at (3.83,1.85){OUT$+$};
\node[padu] (doutm) at (4.0,0.45){}; \node[silk,anchor=east] at (3.83,0.45){OUT$-$};
\draw[cablef,netIgn] (-1.6,1.85) -- (dinp); \node[destino,anchor=south,text width=3.0cm] at (-1.2,1.95){ignición \textbf{cruda} 12--24\,V (GX16 pin 3)};
\draw[cablef,netGND] (-1.6,0.45) -- (dinm); \node[destino,anchor=north] at (-1.3,0.35){GND};
\draw[cablef,netSig] (doutp) -- (5.6,1.85); \node[destino,anchor=south,text width=3.0cm] at (5.9,1.95){$\rightarrow$ 100\,$\Omega$ $\rightarrow$ pin \textbf{A5}};
\draw[cablef,netGND] (doutm) -- (5.6,0.45); \node[destino,anchor=north] at (5.8,0.35){GND};
\end{tikzpicture}
\end{adjustbox}\\
{\small\itshape DFR1015 (DFRobot): convierte la ignición de la máquina (12 o 24\,V) en 5\,V
limpios. \textbf{Sus dos negativos (IN$-$ y OUT$-$) van al GND común.} En banco puedes
sustituirlo por un apagador de 3V3 $\rightarrow$ A5 (Bloque~4).}
\end{center}
% =====================================================================
\subsection{El stack RTK: simpleRTK2B Pro y 4G NTRIP Master}
\label{sec:stackfisico}
\begin{center}
\begin{adjustbox}{max width=\textwidth}
\begin{tikzpicture}[x=1cm,y=1cm]
% ---- Pro board ----
\draw[modbody] (0,0) rectangle (9.6,6.2);
\node[font=\small\bfseries,text=HelgenIndigo,anchor=west] at (0.7,0.85){simpleRTK2B Pro};
% XBee socket
\draw[draw=HelgenIndigo,fill=white,rounded corners=2pt] (0.7,1.6) rectangle (4.1,4.9);
\foreach \y in {1.95,2.25,...,4.65}{\fill[black!50] (1.0,\y) circle (0.06); \fill[black!50] (3.8,\y) circle (0.06);}
\node[font=\scriptsize\bfseries,text=HelgenIndigo,align=center] at (2.4,3.5){socket XBee\\{\normalfont\tiny (paso 2.0\,mm)}};
\node[font=\tiny,align=center,text=black!55] at (2.4,2.6){aquí vive el 4G\\en el modo normal\\(Bloque 8)};
% switch
\draw[draw=HelgenIndigo,fill=black!15] (4.5,2.45) rectangle (5.6,3.1);
\draw[fill=HelgenCyan] (4.6,2.55) rectangle (5.0,3.0);
\node[font=\scriptsize\bfseries,text=HelgenIndigo,anchor=north,align=center] at (5.05,2.3){switch XBee:\\UART1 $\leftrightarrow$ UART2};
% F9P chip
\draw[chip] (6.3,2.6) rectangle (8.3,4.4); \node[chiptxt,align=center] at (7.3,3.5){u-blox\\ZED-F9P};
% SMA
\draw[draw=black!60,fill=black!30] (9.6,3.2) rectangle (10.3,3.9); \node[font=\scriptsize,anchor=west] at (10.4,3.55){SMA $\rightarrow$ antena GNSS};
% USBs left
\draw[draw=black!60,fill=black!25] (-0.35,4.4) rectangle (0.35,5.2); \node[font=\tiny,anchor=east,align=right] at (-0.45,4.8){USB «POWER+GPS»\\(config con u-center)};
\draw[draw=black!60,fill=black!25] (-0.35,0.9) rectangle (0.35,1.7); \node[font=\tiny,anchor=east,align=right] at (-0.45,1.3){USB «POWER+XBEE»\\(no se usa en servicio)};
% top header pins (digital): only the ones we use — arrows staggered in height
\foreach \x/\nm in {1.2/{RX1},2.4/{TX1},3.6/{RX2},7.0/{TX2},8.4/{IOREF}}{
\node[padu] (T\nm) at (\x,5.75){}; \node[silk,anchor=north] at (\x,5.55){\nm};}
\foreach \x in {4.6,5.4,6.2}{\node[pad] at (\x,5.75){};}
\draw[cablef,netSig] (TRX1) -- ++(0,0.75) node[destino,anchor=south,align=center]{$\leftarrow$ pin \textbf{A2}\\(NMEA)};
\draw[cablef,netSig] (TTX1) -- ++(0,1.65) node[destino,anchor=south,align=center]{$\rightarrow$ pin \textbf{A3}\\(NMEA)};
\draw[cablef,netSig] (TRX2) -- ++(0,0.75) node[destino,anchor=south,align=center]{$\leftarrow$ 4G \texttt{DOUT}\\(RTCM3, Modo B)};
\draw[cablef,netSig] (TTX2) -- ++(0,1.65) node[destino,anchor=south,align=center]{$\rightarrow$ pin \textbf{A10}\\(Modo B)};
\draw[cablef,net3V3] (TIOREF) -- ++(0,0.75) node[destino,anchor=south,align=center]{$\leftarrow$ \textbf{3V3} del Blackpill\\(nivel de los UART)};
% bottom header (power) — arrows staggered
\foreach \x/\nm in {5.4/{5V},6.6/{GND}}{\node[padu] (B\nm) at (\x,0.45){}; \node[silk,anchor=south] at (\x,0.66){\nm};}
\foreach \x in {7.6,8.4}{\node[pad] at (\x,0.45){};}
\draw[cablef,net5V] (B5V) -- ++(0,-1.5) node[destino,anchor=north,align=center]{$\leftarrow$ \textbf{SAL}\\(5\,V conmutado, Bloq.~3)};
\draw[cablef,netGND] (BGND) -- ++(0,-0.65) node[destino,anchor=north]{GND común};
\end{tikzpicture}
\end{adjustbox}\\
{\small\itshape simpleRTK2B Pro, vista superior. Los nombres \texttt{RX1/TX1/RX2/TX2/IOREF}
están serigrafiados junto a los pines de los headers tipo Arduino — búscalos en tu tarjeta
(la posición exacta puede variar; el nombre no). El \textbf{switch} junto al socket elige a
quién conecta el XBee: modo normal $=$ \texttt{UART2}; Modo~B $=$ \texttt{UART1} (libera
UART2 para el relevo del MCU).}
\end{center}
\begin{center}
\begin{adjustbox}{max width=\textwidth}
\begin{tikzpicture}[x=1cm,y=1cm]
% ---- XBee 4G module ----
\draw[modbody] (0,0) -- (3.4,0) -- (3.4,3.6) -- (2.55,4.35) -- (0.85,4.35) -- (0,3.6) -- cycle;
\node[font=\small\bfseries,text=HelgenIndigo,align=center] at (1.7,3.0){4G NTRIP\\Master};
\node[font=\tiny,text=black!55,align=center] at (1.7,2.25){(formato XBee)};
\draw[draw=black!55,fill=black!12] (0.55,0.35) rectangle (2.85,1.1); \node[font=\tiny] at (1.7,0.72){porta-SIM (Telcel)};
\fill[black!45] (0.75,4.0) circle (0.09); \node[font=\tiny,anchor=west] at (0.9,4.05){u.FL $\times$2 $\rightarrow$ antenas LTE};
\fill[black!45] (0.75,3.6) circle (0.09);
% pins: left column 1-10 top->bottom, right column 11-20 bottom->top
\foreach [count=\i] \y in {3.42,3.11,2.80,2.49,2.18,1.87,1.56,1.25,0.94,0.63}{
\node[patanum,anchor=east] at (-0.5,\y){\i};
\ifnum\i=1 \node[padu] (X\i) at (-0.22,\y){}; \else\ifnum\i=2 \node[padu] (X\i) at (-0.22,\y){}; \else\ifnum\i=3 \node[padu] (X\i) at (-0.22,\y){}; \else\ifnum\i=10 \node[padu] (X\i) at (-0.22,\y){}; \else \node[pad] (X\i) at (-0.22,\y){}; \fi\fi\fi\fi}
\foreach [count=\j] \y in {0.63,0.94,1.25,1.56,1.87,2.18,2.49,2.80,3.11,3.42}{
\pgfmathtruncatemacro{\pn}{10+\j}
\node[pad] at (3.62,\y){}; \node[patanum,anchor=west] at (3.9,\y){\pn};}
% annotations for used pins (single line, no wrap)
\node[destino,anchor=east] at (-1.0,3.42){\sw{net3V3}\;\textbf{1 VCC $\leftarrow$ 3.3\,V} (¡nunca 5\,V!)};
\node[destino,anchor=east] at (-1.0,3.11){\sw{netSig}\;\textbf{2 DOUT} $\rightarrow$ \texttt{RX2} del Pro};
\node[destino,anchor=east] at (-1.0,2.80){\sw{netSig}\;\textbf{3 DIN} $\leftarrow$ pin A9};
\node[destino,anchor=east] at (-1.0,0.63){\sw{netGND}\;\textbf{10 GND}};
% ---- BOB-08276 breakout ----
\draw[modbody] (7.2,-0.1) rectangle (11.4,4.5);
\node[font=\small\bfseries,text=HelgenIndigo,align=center,anchor=north] at (9.3,4.35){breakout XBee\\{\normalfont\scriptsize (SparkFun BOB-08276 o similar)}};
% 2mm sockets (inner)
\foreach \y in {0.5,0.81,...,3.3}{\fill[black!60] (8.35,\y) circle (0.07); \fill[black!60] (10.25,\y) circle (0.07);}
\node[font=\tiny,align=center,text=black!55,rotate=90] at (8.05,1.9){header hembra 2.0\,mm};
% 2.54 rows (outer)
\foreach \y in {0.45,0.765,...,3.3}{\node[pad,inner sep=1.6pt] at (7.55,\y){}; \node[pad,inner sep=1.6pt] at (11.05,\y){};}
\node[font=\tiny,align=center,text=black!55,rotate=90] at (11.3,1.9){pines macho 2.54\,mm $\rightarrow$ protoboard};
\node[font=\scriptsize\bfseries,text=HelgenTeal,anchor=east] at (7.1,3.3){pin 1 $\star$};
\draw[HelgenTeal,line width=0.8pt,-{Stealth[length=1.6mm]}] (7.12,3.3) -- (8.2,3.3);
% arrow module -> breakout
\draw[-{Stealth[length=3mm]},HelgenTeal,line width=1.6pt] (4.6,2.0) -- (6.6,2.0);
\node[font=\scriptsize,align=center,text=HelgenTeal,anchor=south] at (5.6,2.1){se enchufa\\aquí};
\end{tikzpicture}
\end{adjustbox}\\
{\small\itshape El 4G NTRIP Master y el breakout que lo adapta a la protoboard. Solo se usan
\textbf{4 patitas}: 1 (VCC a 3.3\,V), 2 (DOUT), 3 (DIN) y 10 (GND). El pin~1 queda en la
esquina marcada en la serigrafía del breakout — el módulo solo entra en una orientación si
respetas esa marca. Cómo armar el puente 2.0\,mm $\rightarrow$ 2.54\,mm: Bloque~9.}
\end{center}
% =====================================================================
\subsection{Transistores y MOSFETs}
\label{sec:transistores}
Los cuatro «bichos de tres patas» del kit. \textbf{Regla:} cuerpo de plástico chico
redondeado $=$ TO-92 (se mira con la \emph{cara plana} hacia ti); cuerpo grande con placa
metálica y orificio $=$ TO-220 (se mira \emph{de frente}, con las letras hacia ti y la placa
metálica atrás). Patitas siempre hacia abajo.
\begin{center}
\begin{adjustbox}{max width=\textwidth}
\begin{tikzpicture}[x=1cm,y=1cm]
% ---------- TO-92 generic macro drawn twice ----------
% 2N3904
\begin{scope}[shift={(0,0)}]
\draw[draw=HelgenIndigo,fill=black!22,line width=1.1pt] (-1.05,0) -- (1.05,0) arc[start angle=0,end angle=180,radius=1.05] -- cycle;
\node[font=\small\bfseries] at (0,0.52){2N3904};
\node[font=\tiny,text=black!55] at (0,0.16){cara plana hacia ti};
\foreach \x/\nm in {-0.7/E,0/B,0.7/C}{
\draw[line width=1.6pt,black!65] (\x,0) -- (\x,-0.85);
\node[font=\footnotesize\bfseries,text=HelgenIndigo,anchor=north] at (\x,-0.95){\nm};}
\node[destino,anchor=north,align=center,text width=3.4cm] at (0,-1.55){E $\rightarrow$ GND\\B $\leftarrow$ 1\,k (A1 o A8)\\C $\rightarrow$ compuerta del IRF9540};
\end{scope}
% LM35
\begin{scope}[shift={(4.6,0)}]
\draw[draw=HelgenIndigo,fill=black!22,line width=1.1pt] (-1.05,0) -- (1.05,0) arc[start angle=0,end angle=180,radius=1.05] -- cycle;
\node[font=\small\bfseries] at (0,0.52){LM35};
\node[font=\tiny,text=black!55] at (0,0.16){cara plana hacia ti};
\foreach \x/\nm in {-0.78/{$+$V\textsubscript{S}},0/OUT,0.78/GND}{
\draw[line width=1.6pt,black!65] (\x,0) -- (\x,-0.85);
\node[font=\scriptsize\bfseries,text=HelgenIndigo,anchor=north] at (\x,-0.95){\nm};}
\node[destino,anchor=north,align=center,text width=3.6cm] at (0,-1.55){$+$V\textsubscript{S} $\rightarrow$ \textbf{5\,V} (nunca 3V3)\\OUT $\rightarrow$ pin A7\\GND $\rightarrow$ GND};
\node[font=\scriptsize\bfseries,text=red!70!black,align=center,anchor=north] at (0,-2.9){¡Al revés se quema\\y quema el dedo!};
\end{scope}
% ---------- TO-220: IRF9540N ----------
\begin{scope}[shift={(9.4,-0.6)}]
\draw[draw=black!60,fill=black!30] (-0.95,1.55) rectangle (0.95,2.45); % tab
\draw[fill=white] (0,2.1) circle (0.16);
\draw[draw=HelgenIndigo,fill=black!18,line width=1.1pt] (-0.95,0) rectangle (0.95,1.55);
\node[font=\small\bfseries] at (0,1.05){IRF9540N};
\node[font=\tiny,text=black!55] at (0,0.62){letras hacia ti};
\foreach \x/\nm in {-0.62/G,0/D,0.62/S}{
\draw[line width=1.6pt,black!65] (\x,0) -- (\x,-0.85);
\node[font=\footnotesize\bfseries,text=HelgenIndigo,anchor=north] at (\x,-0.95){\nm};}
\node[font=\tiny,text=black!55,anchor=south] at (0,2.5){placa metálica $=$ D (¡no la aterrices!)};
\node[destino,anchor=north,align=center,text width=4.0cm] at (0,-1.55){canal \textbf{P} (corta el lado de 5\,V)\\G $\leftarrow$ C del 2N3904 $+$ 10\,k a 5\,V\\S $\rightarrow$ 5\,V \quad D $\rightarrow$ carga};
\end{scope}
% ---------- TO-220: IRLZ44N ----------
\begin{scope}[shift={(14.2,-0.6)}]
\draw[draw=black!60,fill=black!30] (-0.95,1.55) rectangle (0.95,2.45);
\draw[fill=white] (0,2.1) circle (0.16);
\draw[draw=HelgenIndigo,fill=black!18,line width=1.1pt] (-0.95,0) rectangle (0.95,1.55);
\node[font=\small\bfseries] at (0,1.05){IRLZ44N};
\node[font=\tiny,text=black!55] at (0,0.62){letras hacia ti};
\foreach \x/\nm in {-0.62/G,0/D,0.62/S}{
\draw[line width=1.6pt,black!65] (\x,0) -- (\x,-0.85);
\node[font=\footnotesize\bfseries,text=HelgenIndigo,anchor=north] at (\x,-0.95){\nm};}
\node[destino,anchor=north,align=center,text width=4.0cm] at (0,-1.55){canal \textbf{N} «lógico» (ventilador)\\G $\leftarrow$ 220\,$\Omega$ de A6 $+$ 100\,k a GND\\S $\rightarrow$ GND \quad D $\rightarrow$ vent.\ ($-$)};
\end{scope}
\end{tikzpicture}
\end{adjustbox}\\
{\small\itshape Los dos TO-92 se distinguen solo por el texto grabado en la cara plana —
léelo con buena luz. Los dos TO-220 también: \textbf{IRF9540N} (canal P, interruptores de
5\,V) e \textbf{IRLZ44N} (canal N lógico, ventilador). Si los cruzas, el bloque no enciende o
el FET se calienta: verifica el texto antes de insertar.}
\end{center}
% =====================================================================
\subsection{Diodos, LEDs y capacitores}
\label{sec:diodos}
\begin{center}
\begin{adjustbox}{max width=\textwidth}
\begin{tikzpicture}[x=1cm,y=1cm]
% diode
\begin{scope}[shift={(0,0)}]
\draw[black!65,line width=1.4pt] (-1.2,0)--(1.2,0);
\draw[draw=black!60,fill=black!35,rounded corners=1pt] (-0.62,-0.3) rectangle (0.62,0.3);
\fill[white] (0.32,-0.3) rectangle (0.5,0.3);
\node[font=\small\bfseries,anchor=south] at (0,0.42){1N5819};
\node[font=\scriptsize,anchor=north east,align=right] at (-0.75,-0.42){ánodo (A)\\«entra»};
\node[font=\scriptsize\bfseries,anchor=north west,align=left,text=HelgenTeal] at (0.62,-0.42){BANDA $=$\\cátodo (K)};
\node[destino,anchor=north,align=center,text width=4.6cm] at (0,-1.6){la corriente pasa de A $\rightarrow$ K;\\la tabla siempre dice hacia dónde\\apunta la banda};
\end{scope}
% LED
\begin{scope}[shift={(5.6,-0.25)}]
\draw[draw=red!60!black,fill=red!30] (-0.5,0.3) -- (0.5,0.3) arc[start angle=0,end angle=180,radius=0.5] -- cycle;
\draw[red!60!black,line width=0.9pt] (-0.5,0.3)--(0.5,0.3);
\fill[white!0] (-0.5,0.3) rectangle (0.5,0.36);
\draw[line width=1.5pt,black!65] (-0.22,0.3)--(-0.22,-1.15);
\draw[line width=1.5pt,black!65] (0.22,0.3)--(0.22,-0.75);
\node[font=\small\bfseries,anchor=south] at (0,1.0){LED};
\node[font=\scriptsize,anchor=north east,align=right] at (-0.35,-1.25){pata larga\\$=$ ánodo ($+$)};
\node[font=\scriptsize,anchor=north west,align=left] at (0.35,-0.85){corta $=$ cátodo\\$\rightarrow$ GND};
\node[destino,anchor=north,align=center,text width=4.2cm] at (0.1,-2.55){el lado plano del vasito\\también marca el cátodo};
\end{scope}
% electrolytic
\begin{scope}[shift={(11.4,-0.2)}]
\draw[draw=black!60,fill=black!25] (-0.55,0) rectangle (0.55,1.4);
\fill[black!60] (-0.55,0) rectangle (-0.25,1.4);
\node[font=\footnotesize\bfseries,text=white] at (-0.4,0.7){$-$};
\draw[line width=1.5pt,black!65] (-0.3,0)--(-0.3,-0.75);
\draw[line width=1.5pt,black!65] (0.3,0)--(0.3,-1.05);
\node[font=\small\bfseries,anchor=south] at (0,1.5){10\,$\mu$F / 100\,$\mu$F};
\node[font=\scriptsize,anchor=north east,align=right] at (-0.45,-0.85){franja $+$ pata corta\\$=$ negativo $\rightarrow$ GND};
\node[font=\scriptsize,anchor=north west] at (0.45,-1.15){pata larga $=$ $+$};
\end{scope}
% ceramic
\begin{scope}[shift={(15.6,-0.2)}]
\draw[draw=orange!70!black,fill=orange!25] (0,0.55) ellipse (0.55 and 0.5);
\node[font=\scriptsize\bfseries] at (0,0.55){104};
\draw[line width=1.4pt,black!65] (-0.25,0.12)--(-0.25,-0.75);
\draw[line width=1.4pt,black!65] (0.25,0.12)--(0.25,-0.75);
\node[font=\small\bfseries,anchor=south] at (0,1.15){100\,nF};
\node[font=\scriptsize,anchor=north,align=center] at (0,-0.85){dice «104»\\\textbf{sin} polaridad};
\end{scope}
\end{tikzpicture}
\end{adjustbox}\\
{\small\itshape Diodos del kit: \textbf{1N5819} (Schottky — OR de respaldo, flyback del
ventilador y clamp de PA5; el BAT54 del plano es SMD, en protoboard usa el 1N5819).
Electrolíticos \textbf{siempre} con la franja a GND: al revés revientan.}
\end{center}
% =====================================================================
\subsection{Resistencias: código de colores}
\label{sec:resistencias}
Solo se usan \textbf{8 valores}. Antes de insertar una, confírmala aquí — y si tiene 5 bandas
o el color no se distingue, \textbf{mídela con el multímetro} (escala $\Omega$).
\hwtab{%
\begin{tabularx}{\textwidth}{@{}l c l X@{}}
\toprule
\rowcolor{HelgenIndigo}\textcolor{white}{\textbf{Valor}} & \textcolor{white}{\textbf{Bandas}} &
\textcolor{white}{\textbf{Colores}} & \textcolor{white}{\textbf{Dónde se usa}}\\
\midrule
100\,$\Omega$ & \resfour{cCafe}{cNegro}{cCafe}{cDorado} & café · negro · café & serie de la ignición al pin A5 (Bloque~4)\\
220\,$\Omega$ & \resfour{cRojo}{cRojo}{cCafe}{cDorado} & rojo · rojo · café & compuerta del IRLZ44N desde A6 (Bloque~5)\\
330\,$\Omega$ & \resfour{cNaranja}{cNaranja}{cCafe}{cDorado} & naranja · naranja · café & todos los LEDs (Bloques 2, 3 y 7)\\
1\,k$\Omega$ & \resfour{cCafe}{cNegro}{cRojo}{cDorado} & café · negro · rojo & base de los 2N3904 (Bloques 3 y 10)\\
4.7\,k$\Omega$ & \resfour{cAmarillo}{cVioleta}{cRojo}{cDorado} & amarillo · violeta · rojo & pull-ups I\textsuperscript{2}C del AHT10 (Bloque~6)\\
10\,k$\Omega$ & \resfour{cCafe}{cNegro}{cNaranja}{cDorado} & café · negro · naranja & divisores $\div$2, pull-ups de compuerta, divisor NTC (Bloques 3, 4, 10, 11)\\
22\,k$\Omega$ & \resfour{cRojo}{cRojo}{cNaranja}{cDorado} & rojo · rojo · naranja & pull-up de A10 a 3V3 (Bloque~9)\\
100\,k$\Omega$ & \resfour{cCafe}{cNegro}{cAmarillo}{cDorado} & café · negro · amarillo & compuerta del IRLZ44N a GND (Bloque~5)\\
\midrule
10\,k 1\,\% (NTC) & \resfive{cCafe}{cNegro}{cNegro}{cRojo}{cCafe} & café · negro · negro · rojo · café & pierna fija del divisor NTC (Bloque~11) — versión de 5 bandas\\
\bottomrule
\end{tabularx}}
% =====================================================================
\subsection{Botones, apagador, NTC y ventilador}
\label{sec:botones}
\begin{center}
\begin{adjustbox}{max width=\textwidth}
\begin{tikzpicture}[x=1cm,y=1cm]
% push button
\begin{scope}[shift={(0,0)}]
\draw[modbody,fill=black!12] (-0.9,-0.9) rectangle (0.9,0.9);
\draw[draw=black!60,fill=black!30] (0,0) circle (0.45);
\foreach \x/\y/\n in {-0.72/0.72/1,0.72/0.72/2,-0.72/-0.72/3,0.72/-0.72/4}{
\draw[line width=1.4pt,black!65] (\x,\y) -- ++({\x/2.4},{\y/2.4}); \node[patanum] at ({\x*1.7},{\y*1.7}){\n};}
\draw[HelgenTeal,line width=1.2pt,densely dashed] (-1.25,1.25) -- (1.25,-1.25);
\node[font=\small\bfseries,anchor=south] at (0,1.6){botón (reset)};
\node[destino,anchor=north,align=center,text width=4.4cm] at (0,-1.7){\textbf{truco:} usa dos patas\\\textbf{en diagonal} y siempre\\queda bien, gírelo como lo gires};
\end{scope}
% SPST switch
\begin{scope}[shift={(5.6,0)}]
\draw[modbody,fill=black!12] (-1.1,-0.55) rectangle (1.1,0.55);
\draw[draw=black!60,fill=HelgenCyan] (-0.65,-0.22) rectangle (0.0,0.22);
\draw[line width=1.5pt,black!65] (-0.55,-0.55)--(-0.55,-1.2); \draw[line width=1.5pt,black!65] (0.55,-0.55)--(0.55,-1.2);
\node[font=\small\bfseries,anchor=south] at (0,0.7){apagador SPST (corte general)};
\node[destino,anchor=north,align=center,text width=4.6cm] at (0,-1.35){2 terminales, sin polaridad:\\nodo SYS $\rightarrow$ apagador $\rightarrow$ riel MAIN5V\\(Bloque 10)};
\end{scope}
% NTC
\begin{scope}[shift={(11.0,0)}]
\draw[draw=black!60,fill=black!20] (0,0.35) circle (0.42);
\node[font=\tiny] at (0,0.35){10k};
\draw[line width=1.4pt,black!65] (-0.18,-0.02)--(-0.18,-0.9); \draw[line width=1.4pt,black!65] (0.18,-0.02)--(0.18,-0.9);
\node[font=\small\bfseries,anchor=south] at (0,0.95){NTC 10\,k (B3950)};
\node[destino,anchor=north,align=center,text width=4.2cm] at (0,-1.05){lenteja negra, \textbf{sin polaridad};\\pégala con cinta al punto caliente\\(pila / módem) — Bloque 11};
\end{scope}
% fan
\begin{scope}[shift={(15.6,-0.1)}]
\draw[modbody,fill=black!10] (-1.0,-1.0) rectangle (1.0,1.0);
\draw[draw=black!55,fill=white] (0,0) circle (0.72);
\foreach \a in {0,90,180,270}{\draw[black!45,line width=1.6pt] (0,0) -- ({0.62*cos(\a+25)},{0.62*sin(\a+25)});}
\draw[cablef,net5V] (0.35,-1.0) -- (0.75,-1.75); \node[font=\scriptsize,anchor=north west,align=left] at (0.6,-1.85){rojo $+$\\$\rightarrow$ 5\,V sep.};
\draw[cablef,netGND] (-0.35,-1.0) -- (-0.75,-1.75); \node[font=\scriptsize,anchor=north east,align=right] at (-0.6,-1.85){negro $-$ $\rightarrow$ D del\\IRLZ44N (¡no a GND!)};
\node[font=\small\bfseries,anchor=south] at (0,1.15){ventilador 2 hilos};
\end{scope}
\end{tikzpicture}
\end{adjustbox}\\
{\small\itshape El cable negro del ventilador \textbf{no} va directo a GND: pasa por el
IRLZ44N (drain), que es quien lo prende y apaga (Bloque~5).}
\end{center}

View File

@ -187,13 +187,13 @@
\node[draw,fill=black!8,rounded corners,minimum width=3.0cm,minimum height=2.3cm](G4) at (9.1,0.2){};
\node[font=\bfseries\scriptsize,align=center] at (9.1,0.7){4G NTRIP\\Master (XBee)};
\node[font=\tiny,align=center] at (9.1,-0.4){socket XBee del Pro\\(UART2 interno)};
\draw[densely dashed,line width=0.9pt] (6.05,0.2)--(7.6,0.2); \node[font=\tiny,anchor=south,align=center] at (6.82,0.3){socket XBee\\(5 V + datos)};
\draw[densely dashed,line width=0.9pt] (6.05,0.2)--(7.6,0.2); \node[font=\tiny,anchor=south,align=center] at (6.82,0.3){socket XBee\\(3.3 V + datos)};
% LTE antennas
\draw (8.5,1.35)--(8.5,1.95); \ant{8.5}{1.95} \draw (9.7,1.35)--(9.7,1.95); \ant{9.7}{1.95} \node[anchor=west,font=\tiny] at (9.95,2.15){2$\times$ ant. LTE};
% RTCM flow
\draw[-{Stealth},Indigo,thick] (7.6,-0.55)--(6.05,-0.55); \node[Indigo,font=\tiny,anchor=north] at (6.82,-0.6){RTCM3 (correcciones)};
% notes
\node[anchor=north west,font=\scriptsize,align=left,text width=11.4cm] at (-1.3,-2.5){\textbf{!} El 4G va en el \textbf{socket XBee del simpleRTK2B Pro}, no al Blackpill; ahí recibe 5 V y datos. Las \textbf{correcciones (RTCM3) llegan por 4G}, no por el GNSS.\\ \textbf{!} Cruce \textbf{TX$\leftrightarrow$RX}: PA2 (TX) $\rightarrow$ UART1 RX y PA3 (RX) $\leftarrow$ UART1 TX. GND común. Relé \$PHLG opcional (PA9/PA10) = DNP, apagado por defecto.};
\node[anchor=north west,font=\scriptsize,align=left,text width=11.4cm] at (-1.3,-2.5){\textbf{!} El 4G va en el \textbf{socket XBee del simpleRTK2B Pro}, no al Blackpill; ahí recibe \textbf{3.3 V} y datos (el socket del Pro es de 3.3 V, no de 5 V). Las \textbf{correcciones (RTCM3) llegan por 4G}, no por el GNSS.\\ \textbf{!} Cruce \textbf{TX$\leftrightarrow$RX}: PA2 (TX) $\rightarrow$ UART1 RX y PA3 (RX) $\leftarrow$ UART1 TX. GND común. Relé \$PHLG opcional (PA9/PA10) = DNP, apagado por defecto.};
}
% ===== 10 · RESPALDO DE BATERÍA (PROTO): TP4056 + MT3608 =====
@ -271,7 +271,7 @@
\node[font=\bfseries\scriptsize,align=center] at (10.6,0.8){4G NTRIP\\Master (XBee)};
\node[font=\tiny,align=center] at (10.6,-0.25){en breakout\\(BOB-08276)};
\draw (10.1,1.5)--(10.1,2.1); \ant{10.1}{2.1} \draw (11.1,1.5)--(11.1,2.1); \ant{11.1}{2.1} \node[anchor=west,font=\tiny] at (11.3,2.25){2$\times$ LTE};
\foreach \yy/\nm/\cc in {1.0/{VCC}/net5V,-0.8/{DIN}/netSig,-1.5/{DOUT}/netSig}{%
\foreach \yy/\nm/\cc in {1.0/{VCC}/net3V3,-0.8/{DIN}/netSig,-1.5/{DOUT}/netSig}{%
\draw[\cc,line width=0.9pt] (9.25,\yy)--(8.85,\yy); \node[anchor=west,font=\tiny] at (9.3,\yy){\nm};}
% ---------- data connections ----------
\draw[netSig,line width=0.9pt,{Stealth}-] (3.5,0.6)--(4.75,0.6); % UART1 RX <- PA2
@ -286,5 +286,5 @@
% to server
\draw[-{Stealth},Indigo,thick] (11.9,1.5)--(12.6,2.0); \node[Indigo,font=\tiny,anchor=west] at (12.0,1.9){$\rightarrow$ servidor};
% notes
\node[anchor=north west,font=\scriptsize,align=left,text width=13.4cm] at (-1.4,-3.2){\textbf{!} \textbf{5 V/GND} de F9P, watchdog y 4G $=$ SAL/GND (bloque 3). \textbf{IOREF $=$ 3.3 V}. El 4G va en \textbf{breakout} (fuera del socket) y el switch del Pro en \textbf{UART1}, dejando UART2 libre.\\ \textbf{!} El MCU queda \textbf{en línea} en la subida (F9P TX2 $\rightarrow$ PA10 $\rightarrow$ PA9 $\rightarrow$ 4G DIN) e inyecta \$PHLG. La bajada \textbf{RTCM3 (4G DOUT $\rightarrow$ F9P RX2) es directa} (punteada). \textbf{PCB:} bypass normalmente-cerrado en UART2 $\Rightarrow$ un MCU ausente/colgado nunca corta las correcciones.};
\node[anchor=north west,font=\scriptsize,align=left,text width=13.4cm] at (-1.4,-3.2){\textbf{!} \textbf{5 V/GND} de F9P y watchdog $=$ SAL/GND (bloque 3); \textbf{VCC del 4G $=$ 3.3 V} (buck «MODEM 3.3 V» desde SAL — nunca 5 V). \textbf{IOREF $=$ 3.3 V}. El 4G va en \textbf{breakout} (fuera del socket) y el switch del Pro en \textbf{UART1}, dejando UART2 libre.\\ \textbf{!} El MCU queda \textbf{en línea} en la subida (F9P TX2 $\rightarrow$ PA10 $\rightarrow$ PA9 $\rightarrow$ 4G DIN) e inyecta \$PHLG. La bajada \textbf{RTCM3 (4G DOUT $\rightarrow$ F9P RX2) es directa} (punteada). \textbf{PCB:} bypass normalmente-cerrado en UART2 $\Rightarrow$ un MCU ausente/colgado nunca corta las correcciones.};
}

View File

@ -1 +0,0 @@
{"hostname":"Leopoldos-MacBook-Pro","username":"leo"}

View File

@ -45,8 +45,12 @@ is a dedicated power-design pass — *not fabricated blind*.
B (LTC4040) + E (cutoff) + F (PA4→VEH5V) + new Block H (fail-safe UART2 bypass) being wired
on PROD; PCB layout kickoff follows.** Sized values live in the delta doc §4.
- **Latest proto-assumptions ledger** = `Drogheda_Conexiones-por-Bloque_Proto_v1.xlsx`
(sheet *Estado y cambios*) + `Drogheda_Guia-Conexion-Protoboard_ES_v2.2.pdf` (source:
`Guia-Conexion-Protoboard/`). Wiring diagrams: `circuitikz-wiring/` (sheet + Beamer, v2.1 2026-07-03).
(sheet *Estado y cambios*) + `Drogheda_Guia-Conexion-Protoboard_ES_v3.0.pdf` (source:
`Guia-Conexion-Protoboard/`; **v3.0 2026-07-08** adds the visual parts catalog
`modulos-pinout.tex`, the Bloque 9 XBee 2.0 mm→2.54 mm bridge with modem VCC = 3.3 V from
SAL, and the missing IOREF→3V3 rows). Wiring diagrams: `circuitikz-wiring/` (sheet + Beamer,
v2.1 2026-07-03; XBee-socket label fixed 5 V→3.3 V on 2026-07-08). 4G sourcing:
`2026-07-08_Drogheda_4G-Modem-Alternatives_v1.0.md`.
- **New this pass:** analog **NTC→PB1** hot-spot temperature (block 11 — no SHT40 in hand for
the proto, so PB1 is the proto's temperature path); **Modo B** NTRIP diagnostic (watchdog
in-line on the uplink, injects `$PHLG`; RTCM3 downlink stays direct); on the PCB a
@ -201,7 +205,7 @@ J1 = header P1, J2 = header P2. SWD (PA13/PA14) is **not** on the 2×20 → flas
sensing, fan/temp, gauge, reset, cutoff and backup all test without them).
- **Proto fan rail = LM2596 module** (24→5 V, *adjust to 5.0 V with a meter*) so fan inrush never
sags MAIN5V; the PCB uses the discrete MP1584 (U2). Fans are **2-wire** (no tach).
- **Assembly references:** `Drogheda_Guia-Conexion-Protoboard_ES_v2.2.pdf` (blocks 1–11, source in
- **Assembly references:** `Drogheda_Guia-Conexion-Protoboard_ES_v3.0.pdf` (blocks 1–11, source in
`Guia-Conexion-Protoboard/`) · `Drogheda_Conexiones-por-Bloque_Proto_v1.xlsx` (authoritative
connection list) · `circuitikz-wiring/` diagrams v2.1 (sheet + per-block Beamer).
@ -264,7 +268,7 @@ J1 = header P1, J2 = header P2. SWD (PA13/PA14) is **not** on the 2×20 → flas
- **Design doc:** [[watchdog-pcb-v3-design]] (sub-circuits, pin map, findings).
- **Connections:** `Drogheda_Conexiones-por-Bloque_Proto_v1.xlsx` (proto, authoritative) ·
`watchdog-connections.xlsx` (PCB list, H1 rows now DNP) + [[watchdog-connections-rationale]].
- **Assembly guide:** `Guia-Conexion-Protoboard/` (source) → `Drogheda_Guia-Conexion-Protoboard_ES_v2.2.pdf`.
- **Assembly guide:** `Guia-Conexion-Protoboard/` (source) → `Drogheda_Guia-Conexion-Protoboard_ES_v3.0.pdf`.
- **Diagrams:** `circuitikz-wiring/` — full sheet + per-block Beamer (v2, 2026-07-02, blocks 1–11).
- **BOMs:** [[BOM-master]] (production) · `watchdog-protoboard-BOM-3boards.xlsx` +
`watchdog-LISTA-DE-COMPRAS-ES.xlsx` (proto) · [[watchdog-protoboard-bringup]] (bench order).

View File

@ -88,7 +88,7 @@ HBOX/cabinet mechanicals (+ verify D2/D8=RX2/TX2 on a physical Pro), then routin
SW_5V ≥0.8 mm per kicad-guide). Fab gate unchanged: bench-validate the LTC4040 backup +
hot-cell charge cutoff on the proto first. Latest proto
assumptions ledger = `Drogheda_Conexiones-por-Bloque_Proto_v1.xlsx` (*Estado y cambios*) +
`Drogheda_Guia-Conexion-Protoboard_ES_v2.2.pdf` (LaTeX source in repo:
`Drogheda_Guia-Conexion-Protoboard_ES_v3.0.pdf` (LaTeX source in repo:
`Guia-Conexion-Protoboard/`). Wiring diagrams v2.1 (blocks 1–11) in `circuitikz-wiring/`;
client decks Avance + RCA refreshed to v1.1.
@ -123,6 +123,26 @@ the BOM source of truth) · `scripts/prep_order_release.sh` (safe cleanup + rele
dry-run default). KiCad sch↔board sync is **manual** (F8 retired). Vault note:
`EinarBoard 1.0 — System Overview & Toolchain`.
**Guía de protoboard v3.0 + 4G alternatives (2026-07-08).** Guía rewritten for a
low-experience technician: new **visual parts catalog** (`Guia-Conexion-Protoboard/`
`modulos-pinout.tex`) — physical top-views of every IC module (LM2596 · MT3608 · TP4056 ·
AHT10 · DFR1015), full **Blackpill 40-pin physical map** (used pins colored, VB/B12 corner
check), simpleRTK2B Pro with its real silk names (`RX1/TX1/RX2/TX2/IOREF` + XBee switch),
4G NTRIP Master + BOB-08276 breakout, TO-92/TO-220 pinouts, diode/LED/cap polarity, resistor
color codes, protoboard anatomy + pre-power checklist; per-block «Piezas de este bloque»
lines. **Bloque 9 reworked around the XBee pitch:** the 4G is **2.0 mm** (not 1.27 — 10 pins
= 18 mm) vs protoboard 2.54 mm → bridge options (★ BOB-08276 + 2× PRT-08272 ≈MX$100,
SANDOROBOTICS CDMX, 1–2 days) + soldering steps + **modem VCC = 3.3 V from SAL via dedicated
buck** (mirrors 3V3_MODEM; never 5 V) + bulk cap for LTE bursts. Also fixed: **IOREF→3V3 rows
added to Blocks 8/9** (missing in v2.2 — Pro UARTs are dead without it), Blackpill **USB +
5 V rail never simultaneous** warning, and the circuitikz socket label corrected 5 V→3.3 V
(`wiring-blocks.tex`; lámina + Beamer PDFs rebuilt, still content-v2.1). Cheap-4G survey →
**`2026-07-08_Drogheda_4G-Modem-Alternatives_v1.0.md`**: bench = keep Ardusimple on breakout;
experiment = LILYGO T-A7670SA (~US$33, TinyGSM NTRIP, ~1 day fw); Aug 30-unit run stays
Ardusimple (€112 @ ≥50); scale = A7670SA raw (US$9.4, NTRIP-over-AT fw) or Digi XBee 3 LTE
Cat 1 (US$76, socket drop-in, MicroPython NTRIP on-module). Avoid -E band variants, SIM7000G
(Telcel LTE-M provisioning risk).
---
## 1. System architecture (corrected from the BOM, 2026-06-20)
@ -198,7 +218,7 @@ these before presenting; if it breaks one, say so and propose the compliant fix.
| `00-Project-Management` | plan, ethos, hackathon, **financials**, **handover**, client comms, Drive tooling | [[00-Project-Management/PLAN\|PLAN]] · [[00-Project-Management/Engineering-Handover\|Engineering-Handover]] · `ethos.md` · `hackathon-plan.md` · `Financials.md` · `Drive-Upload/` · `client-comms/` |
| `01-Requirements` | what we build | `SRS.md` · `HBOX-product-spec.md` |
| `02-Architecture-Software` | backend/software analysis, ADRs | `backend-review.md` |
| `03-Architecture-Hardware` | HBOX/cabinet, wiring, BOM, **watchdog PCB v3** | `hardware-respec-and-pcb-brief.md` · `cabinet-electrical-bom.md` · `watchdog-schematic.md` · `watchdog-health-telemetry.md` · `firmware-review.md` · `BOM-master.md` (+§5 Block B/E/H/I parts) · **`watchdog-pcb-v3-design.md`** (schematic spec) · `watchdog-pcb-v3-bom.xlsx` · `watchdog-pcb-v3-kicad-guide.md` (KiCad→JLCPCB) · `watchdog-pcb-v3-blockdiagram.svg` · `watchdog-protoboard-bringup.md` + `watchdog-proto-bench-bringup-v3.md` · `watchdog-connections.xlsx` (PCB pin/net list; H1 DNP; +B/H/I rows) · `watchdog-connections-rationale.md` (+§7 additions 2026-07-02) · **`watchdog-electrical-design-state.md`** (CANONICAL — read first) · **`watchdog-production-schematic-delta.md`** (PROD build spec; LTC4040 §4 values) · `kicad/` — `hbox-watchdog-v3.kicad_sch` (**DEV/proto**) · `hbox-watchdog-v3-PROD.kicad_sch/.kicad_pcb` (**PRODUCTION**: ERC 0, layout started, DRC baseline) · `Drogheda-sym.kicad_sym` (MP1584EN · LTC4040EUFD · AO4406A) · `Drogheda_Conexiones-por-Bloque_Proto_v1.xlsx` (**proto assumptions ledger**) · `Guia-Conexion-Protoboard/` (LaTeX source) → `Drogheda_Guia-Conexion-Protoboard_ES_v2.2.pdf` · `circuitikz-wiring/` (sheet + Beamer v2.1, blocks 1–11) · `watchdog-protoboard-BOM-3boards.xlsx` + `watchdog-LISTA-DE-COMPRAS-ES.xlsx` (proto BOMs) · **`2026-07-06_Drogheda_EinarBoard-1.0-PreFab-Audit_v1.0.md`** (CLOSED — Rev 1.1 fixes) · `Assembly-BOM-Split.md` + `LCSC-search-list.md` (verified LCSC) + `JLCPCB-Order-Guide.md` (ordering runbook) · `harness-connector-pinout.md` + `Socket-Pinout-Silkscreen.md` · **`EinarBoard-Manual/`** (Rev 1.1 order-prep pack: `einarboard-manual.tex` → branded PDF · `helgen_einarboard_1.0_production_bom.xlsx` · `tools/generate_production_bom.py` + `tools/sync_bom.py` Excel→LaTeX BOM sync) — plus repo-root `scripts/prep_order_release.sh` (safe cleanup + release commit) |
| `03-Architecture-Hardware` | HBOX/cabinet, wiring, BOM, **watchdog PCB v3** | `hardware-respec-and-pcb-brief.md` · `cabinet-electrical-bom.md` · `watchdog-schematic.md` · `watchdog-health-telemetry.md` · `firmware-review.md` · `BOM-master.md` (+§5 Block B/E/H/I parts) · **`watchdog-pcb-v3-design.md`** (schematic spec) · `watchdog-pcb-v3-bom.xlsx` · `watchdog-pcb-v3-kicad-guide.md` (KiCad→JLCPCB) · `watchdog-pcb-v3-blockdiagram.svg` · `watchdog-protoboard-bringup.md` + `watchdog-proto-bench-bringup-v3.md` · `watchdog-connections.xlsx` (PCB pin/net list; H1 DNP; +B/H/I rows) · `watchdog-connections-rationale.md` (+§7 additions 2026-07-02) · **`watchdog-electrical-design-state.md`** (CANONICAL — read first) · **`watchdog-production-schematic-delta.md`** (PROD build spec; LTC4040 §4 values) · `kicad/` — `hbox-watchdog-v3.kicad_sch` (**DEV/proto**) · `hbox-watchdog-v3-PROD.kicad_sch/.kicad_pcb` (**PRODUCTION**: ERC 0, layout started, DRC baseline) · `Drogheda-sym.kicad_sym` (MP1584EN · LTC4040EUFD · AO4406A) · `Drogheda_Conexiones-por-Bloque_Proto_v1.xlsx` (**proto assumptions ledger**) · `Guia-Conexion-Protoboard/` (LaTeX source; `modulos-pinout.tex` = visual parts catalog) → `Drogheda_Guia-Conexion-Protoboard_ES_v3.0.pdf` · **`2026-07-08_Drogheda_4G-Modem-Alternatives_v1.0.md`** (XBee 2.0 mm bridge + cheap-4G survey) · `circuitikz-wiring/` (sheet + Beamer v2.1, blocks 1–11; XBee-socket 3V3 fix 07-08) · `watchdog-protoboard-BOM-3boards.xlsx` + `watchdog-LISTA-DE-COMPRAS-ES.xlsx` (proto BOMs) · **`2026-07-06_Drogheda_EinarBoard-1.0-PreFab-Audit_v1.0.md`** (CLOSED — Rev 1.1 fixes) · `Assembly-BOM-Split.md` + `LCSC-search-list.md` (verified LCSC) + `JLCPCB-Order-Guide.md` (ordering runbook) · `harness-connector-pinout.md` + `Socket-Pinout-Silkscreen.md` · **`EinarBoard-Manual/`** (Rev 1.1 order-prep pack: `einarboard-manual.tex` → branded PDF · `helgen_einarboard_1.0_production_bom.xlsx` · `tools/generate_production_bom.py` + `tools/sync_bom.py` Excel→LaTeX BOM sync) — plus repo-root `scripts/prep_order_release.sh` (safe cleanup + release commit) |
| `04-Source-Code` | firmware + backend repos | `firmware/` (**own git repo `hbox-firmware`**: `blackpillrtkcode_v2/` deploy · `legacy/` v1 · `docs/LOGGING-SPEC.md` v2.1) · `htracker/` · `notifications/` · `rtk-config/` |
| `05-Analytics-Reports` | SQL views, dashboards (VERONICA/PowerBI), **observability** | `2026-06-22_Drogheda_Manual-Logs-Grafana_v1.0.pdf` (Grafana/Loki log-consultation manual) |
| `06-Testing-Validation` | RCA, diagnostics, test evidence, **log analysis & tooling** | `RCA-2026-06-field-failures.md` · `remote-diagnostic-protocol.md` · `2026-06-20_Drogheda_Bench-Log-Analysis_v1.0.md` (rev-3) · `2026-06-20_Drogheda_GNSS-Findings-Summary.md` · `log-analysis/` (repo **`hbox-log-tools`**: `log-explorer.html` · `analyze_logs.py` · `build_dashboard.py` · `docs/manual.pdf`) |