★ N.I.C. ★
The hardware side of NIC: one self-contained, multi-phenomenon measuring station — the sensing fronts that watch the solid Earth, the atmosphere and the ionosphere, and the head, clock, cards, power and cabling that carry them. Commodity parts, light enough to process on a home machine.
⚠️ Design-stage concept — NOT hardware-validated. The architecture, the wire protocol and the archive are worked in depth, and the archive's reference codec is host-tested; nothing has been built or run on real hardware — no board fabricated, no firmware written, no sensor calibrated. Written for experienced builders: it gives the topology and the reasoning, not a tutorial. A concept this size WILL contain mistakes — consistency between documents is not correctness. Found one? That is the system working — check it against the record and fix the record.
Part numbers on our own boards are worked reference points, not a mandate. The documents fix the topology and the target values; the exact vendor part is whoever builds it's choice. Bought sensors are never named by type at all — a named part is the one a builder in another country cannot get. Every bought unit is specified by what it must meet (What is bought, below).
There is no schematic yet — the description is the schematic. A concept this size moves in the documents, not in EDA: every board's
HARDWARE.mdcarries its parts, values, pins and the arithmetic behind them. Schematics belong to the step from concept to build, andschematics/is waiting for them. Whoever draws the first board starts from a finished description, not a blank page — and if that is you, the folder is yours. There is no station-wide numbering; a board is found under its project by its name.
(The archive — HMC, the container, and HCC, the codec — is the station's own, in
core/archive/.)
| if you want to know | read |
|---|---|
| what it measures | The units, below — one row a unit, each linking to its folder |
| how a station fits together | What a station is, then core/ and core/COMMS.md — the bus, the clock, every link in one table |
| how the data is kept and shared | core/archive/HMC.md, EXPORTERS.md and core/INTEROP.md — the archive, its readers, and who takes the data |
| how it is built | daedalus/ for the station as a structure, each board's HARDWARE.md for the board, schematics/ for the drawings to come |
| why it is the way it is | the WHY.md in every folder — what was tried, what was dropped, and the reason |
| how to help, and how to cite it | CONTRIBUTING.md · CITATION.cff |
A station is one enclosure and whatever fronts a site needs. Inside the enclosure: the head
(Mayak), the clock (Kronos), one or more cards (Bifrost / Argus), the BMS/MPPT converter (Hermes), a
battery and a solar charger. Every cable that leaves the enclosure crosses a Galvani board —
isolation, surge protection and the feed. Outside: the units, each its own board in its own box,
hanging on a point-to-point spur (copper to 500 m, glass beyond), plus the bought sensors on
Palatine's ModBus arms. Swap the fronts and it is a different instrument on the same bus and the
same code. Membership of a network is a property of deployment, not of the station: data is
handed to the networks that already exist (core/INTEROP.md).
sky
│
▼
┌────────┐ PPS + label ┌────────┐ 4 trunks ┌──────────────┐ 4 spurs ┌─────────┐
│ KRONOS │────────────────▶│ MAYAK │─────────────▶│ BIFROST ×4 │────────────▶│ UNITS │
│ │ network clock │ store │ point-to- │ an ARGUS │ │ Quake │
│ the │ │ uplink │ point │ behind a port│ │ Gauss │
│ second │ │ │ │ 1 up + 4 down│ │ Tesla… │
└────────┘ └───┬────┘ └──────────────┘ └─────────┘
▲ │
POLARIS or SPUTNIK ▼ LP I²C BIFROST and ARGUS are ONE BOARD, one firmware — a
(the GNSS receiver) HERMES ──▶ BMS · MPPT · battery · panel
card pressed on Kronos's time bus ribbon is a Bifrost
Every cable that leaves the enclosure crosses a GALVANI board — isolation, protection and
the spur's feed. Inside the enclosure there is no 485 at all and a unit's link is a CABLE; Kronos's time
bus to the cards is M-LVDS (kronos/HARDWARE.md).
Time comes from one place. Kronos disciplines the network clock to GNSS and every node counts that, never its own crystal. Remote units hang behind a card on point-to-point spurs, each spur its own ranged timing domain; the delivered precision is ±1 µs across the station.
| bus | frame | who carries it | who hangs on it |
|---|---|---|---|
| NodBus | 40 B frame, 32 B payload, TDMA, clocked | a Bifrost card: one trunk up, four spur ports down | the full-size units — Quake, Tesla, Marconi, Sputnik, Palatine, Photon, Positron, Pip, Steinmetz, Argus |
| NodBus mini | 16 B frame, 8 B payload, TDMA, clocked | an Argus card: one link up, four segments down | the small clocked units — Gauss, Quark-Tubes, Pascal |
| ModBus | Modbus RTU, polled, 9 600 or 19 200 | Palatine, four isolated arms and PWR EXT, one rate per arm |
every bought sensor, and the house MODs — Pluvius, Ceres, Sakura, Babel |
Identity is the address: TYPE«4 | NUMBER on NodBus and mini, TYPE«2 | NUMBER on ModBus, one
byte, self-describing, never translated. NodBus types: 1 Mayak · 2 Bifrost · 3 Argus · 4 Marconi ·
5 Quake · 6 Palatine · 7 Tesla · 8 Sputnik · 9 Photon · 10 reserved for Neutron · 11 Positron · 12 Pip · 13 Steinmetz. Mini: 1 Gauss ·
2 Quark-Tubes · 3 Pascal. ModBus: 4 Babel, bare · 5 Pluvius · 6 Ceres · 7 Sakura, then one type per bought quantity at a
position (core/PROTOCOL.md).
| MCU | ||
|---|---|---|
| Mayak | the head — datalogger, uplink (the modem · Wi-Fi · BLE to the handset), the four trunk links every card hangs off; no bus ports of its own | ESP32-S31 |
| Kronos | the timekeeper — TCXO disciplined to GNSS, the network clock at 2²³ Hz, PPS and the second to every card on one M-LVDS ribbon | STM32H523 |
| Polaris | Kronos's GNSS front, bought — a time-only receiver module and an active antenna on a carrier with one connector and two resistors; no processor. Fitted when the station has no Sputnik | — |
| Bifrost · Argus | one card, one firmware: on Kronos's ribbon it is a Bifrost and formats 40 B NodBus spurs with the absolute second; off it, an Argus carrying four 16 B mini segments | STM32H523 |
| Hermes | the BMS/MPPT converter — polls the pack and the panel on whatever bus they come with (485 Modbus RTU, TTL, I²C, CAN), hands the head one register block on I²C | STM32H523 |
| Galvani | the transport layer — eleven boards, no populations: G-I-N-025 (485, NodBus) · G-I-M-005 (485, ModBus arm) · G-O-10-10 (glass 10 Mb/s, 10 km) · G-O-2-100 (glass 2 Mb/s, 1 m to 100 km) · G-12-S (isolated 12 V for a bought device) · G-24-S (the switched 24 V on Palatine's PWR EXT, for a load that is not a sensor — a pump) · G-48-S · G-300-S (the station's feed cells) · G-48-U · G-300-U-6 · G-300-U-40 (the unit end, 12 V out). Everything that leaves the enclosure crosses one |
— |
| Daedalus | the station as a structure — mast, seat, vault, earthing, enclosure, cable routing; a build guide | — |
| Gaia | the siting atlas — where stations go on the planet | — |
| Handset | the commissioning app — the phone at the open enclosure, over BLE | — |
| Mimir (mini-Heimdall) | Mayak, Kronos, a Bifrost, an Argus, Palatine and Hermes on one PCB, each section as its document draws it, the ribbon taps and the crossed cables as traces; two NodBus ports, four mini segments, four arms, a spare MasterNOD, Ethernet and USB | ESP32-S31 + 5× STM32H523 |
| Proteus | Mayak, Kronos, a Bifrost and Hermes on one small PCB, Polaris plugged in, an LTE-M modem on the backup cell, one copper NodBus run on the board, an isolated DC/DC brick at the input, Ethernet and USB-C — a whole station head in a 1-DIN slot | ESP32-S31 + 3× STM32H523 |
| Atlantis | the water build — the Galvani boards in their pressure build and a cable chosen for the environment; no unit of its own. Tier 1 (Pascal and Gauss a few hundred metres out) is built from the Galvani family; Tier 2 (a magnetometer 50–100 km out on 300 V) is shelved | — |
NodBus units (40 B frame, 32 B payload, behind a Bifrost):
| measures | the sensing part | MCU | |
|---|---|---|---|
| Quake | ground motion and local events, plus tilt; optionally the slow magnetic field | MEMS ADXL355 + ICM-42688-P on independent SPIs, SCL3300 for inclination, an RM3100 population — strong-motion, not an observatory seismometer; the DoubleBarrel tube for burial |
STM32H523 |
| Tesla | VLF sferics — lightning, the fast B-field, TGF timing; the same board is Pip and Steinmetz under their own images | three ferrite rods at 120° on a frustum, a differential transimpedance front end, a quad 24-bit ΔΣ converter (ADS127L14) at 2²⁰ SPS, its own DSP |
STM32H7A3 |
| Pip | the D-region — VLF/LF carrier levels (SID), and longwave time for a station without GNSS | Tesla's board under its own image; NodBus type 12. Held back by transmitter coverage, finished as a description | STM32H7A3 |
| Steinmetz | line faults on power lines — arc, corona, partial discharge — from a vehicle at 80–100 km/h or a site | Tesla's board under its own image; NodBus type 13. In a vehicle it hangs on a Proteus in the cabin over one hybrid cable | STM32H7A3 |
| Marconi | the F-region — HF carrier levels 0,5–16 MHz, MUF / foF2, a passive ionogram | one vertical air-core loop into direct sampling, AD9265 at 2²⁶ |
STM32H7A3 |
| Sputnik | the integrated ionosphere — Total Electron Content; and the station's time when fitted | UM980 multi-band GNSS receiver; five node slots on one board |
STM32H523 |
| Palatine | the meteo base — air T/RH at 2 m and 5 cm above the grass, pressure, wind, solar radiation, UV, snow depth, rain, soil moisture and temperature, leaf wetness; and Chinook, what the air is made of — bought air units on the same arms | no sensor of its own — four isolated ModBus arms, bought RS-485 probes specified by what they must meet, and the house MODs below | STM32H523 |
| Photon | γ / X-ray — count, energy sum, largest event, twelve energy bands, every frame, accumulated over the second | Quark-Photon board: CsI(Tl) cube + SiPM and a PIN diode as one measurement switched by energy |
STM32H7A3 |
| Positron | beta, both signs — and the two neutron counts of the same box | Quark-Neutron/Positron board: a 25 mm plastic scintillator block + SiPM; Neutron's ⁶LiF/ZnS(Ag) screens read by a photomultiplier as its first channel — type 10 reserved for it |
STM32H7A3 |
| Argus | nothing — it carries four mini segments and tiles their 8 B records into its own | the card (above) | STM32H523 |
NodBus mini units (16 B frame, 8 B payload, behind an Argus):
| measures | the sensing part | MCU | |
|---|---|---|---|
| Gauss | the slow geomagnetic field — the standalone form, when a station runs no Quake or one without the magnetometer | RM3100 in a sealed tube, oil-filled in the sea build, the Barrel family's pipe |
STM32H523 |
| Quark-Tubes | radiation by tubes — every tube channel counted on one board, counts only | Quark-Tubes board: the counting H523; the tube heads (Photon's GM tubes behind graded lead, Helion's He³/BF₃ tube, Gadolin's Gd capture + GM tubes with Rhodion, Rh activation) carry no MCU and feed it pulses |
STM32H523 |
| Pascal | the water column above it — a tsunami gauge on the sea floor | a 30 bar piezoresistive depth gauge, potted in an oil-filled tube | STM32H523 |
ModBus house MODs (on a Palatine arm, fed the arm's isolated 12 V, own THVD1450 front):
| measures | the sensing part | MCU | |
|---|---|---|---|
| Pluvius | precipitation, weighed — grams in and grams drained | a 200 cm² catch into a vessel on a 30 kg load cell, ADS1235, a counted 24 V peristaltic drain on Palatine's switched EXT body |
STM32H523 |
| Ceres | soil volumetric water content and the soil temperature at its depth, one unit per depth in a patrona | a comb reading through borosilicate glass, the board potted in a borosilicate bowl — built because no bought coating survives the dirt | STM32H523 |
| Sakura | leaf wetness and the temperature at the plate | Ceres's board in the same bowl, hung in the canopy at 45°, glass to the sky | STM32H523 |
| Babel | any sensor not sold as RS-485 Modbus — converted at the sensor, so no foreign bus ever rides the station | I²C · SPI · UART · 1-Wire in, Modbus RTU out; up to four positions, each answering as its quantity's type | STM32H523 |
Radiation, in two builds: Quark is the radiation part, measuring the same quantities two ways — Quark-Tubes, high voltage, every tube counted on one board (Photon's GM tubes, Helion and Gadolin are tube heads on it, not units of their own), and Quark-Scintillation, low voltage — Photon, Positron and its Neutron channel.
MCUs, and there are three. ESP32-S31 at the head · STM32H523 (LQFP100, the one footprint) on nodes, Kronos, the card and every slave module · STM32H7A3IIT6 (LQFP176) on the DSP tier — Tesla/Pip, Marconi and the two scintillation boards. The four H7A3 boards share one digital half: the same LQFP176, the APS25608N-OBR-BD position on OCTOSPI1 port 2 on the same eleven pins (fitted where the image wants it — Marconi always, Tesla for the classifier, Photon for the burst records, Positron open), the same Galvani output. What differs is the analogue front and the converter's data path — the ADS127L14's frame-sync port on SAI on Tesla/Pip, a parallel port on PSSI on the other three.
The rule: a finished unit costs a few dollars more than the bare sensor inside it, and the sensing element is the same part at every price — so nothing that can be bought is built. The station's own boards are the ones the market does not sell in a form that lasts: the head, the clock, the card, the Galvani family, the units above. Everything else is a purchase, and it is specified by what it must meet; where a document names a type, it is a recommendation a builder can start from, never a requirement.
Bought sensors — on Palatine's ModBus arms (palatine/SENSORS.md). All of them RS-485
Modbus RTU, 9 600 or 19 200 8N1, powered from the arm's 12 V (10–30 V input), rated to −40 °C,
in one housing with a cable:
| quantity | qty | what the unit must meet |
|---|---|---|
| air temperature + humidity | 2 — at 2 m in a shield, at 5 cm above the grass without one | ≤ ±0,3 °C, ≤ ±2 % RH, stainless IP6x probe, in a radiation shield |
| soil temperature | the Ceres depths | Ceres reports it, always — the second value of every Ceres; a thermometer at any other depth or height is the site's own bought RS-485 unit on an arm, not the base |
| pressure | 1 | absolute 300–1100 hPa, ≤ ±1 hPa; on an arm like everything else |
| wind | 1 | speed + direction; mechanical or ultrasonic by climate |
| solar radiation | 1 | pyranometer 0–2000 W/m² |
| UV | 1 | UV index, 290–390 nm; UVA + UVB in W/m² where the unit gives them; no UVC |
| snow depth | 1 | 80 GHz FMCW radar level sensor, ≤ 3° beam, ±1 mm, blanking under ~10 cm, IP67, solids-rated, −40 °C standard |
| soil moisture | 2, two depths | Ceres is the house build — the moisture and the soil temperature from one unit; a bought capacitive RS-485 probe only where nobody builds it |
| air quality (optional) | as wanted | none in the base — a site fits by setting (forest CO at fire level, city PM/NO₂/O₃, industry its own gas), every one a finished RTU unit and a consumable (palatine/chinook/) |
Bought parts elsewhere in the station:
| what | where | what it must meet |
|---|---|---|
| GNSS receiver, time-only | Polaris, on Kronos's socket | a bought u-blox NEO-M8N, the one typed kind, with an active antenna on the mast; typed, never detected, and configured by Kronos at every boot |
| GNSS receiver, TEC + time | Sputnik | UM980, multi-band |
| battery | the enclosure | LiFePO4, 2P4S of 314 Ah, 8,0 kWh — the ceiling; charged between 20 and 80 %, ~5 days of the full load — the station does not save power |
| BMS and MPPT | behind Hermes | any pair that speaks 485 Modbus RTU, TTL, I²C or CAN; the BMS must switch itself back on when the pack recharges |
| solar panel | the mast | sized by the site (gaia/) |
| data cable | every fed run | outdoor UTP Cat 6, all four pairs: data TX · clock · ground · data RX — full duplex |
| power cable | every fed run | 2-core, 2× 1,5 or 2,5 mm², 300/500 V class, on its own on land — a hybrid cable the option, the data cable's own jacket under water |
| optical modules | G-O-10-10 · G-O-2-100 |
the 10 Mb/s DC-coupled class to 10 km; OPT2-55A03STR (1550 nm, 1 m to 100 km) on the 2 Mb/s board |
| transformers | the Galvani feed cells | six catalogue windings — 750310988 · 750311607 · 750310349 · 11328-T078 · 11338-T195 · 750311592 |
| enclosure, mast, earthing | Daedalus | daedalus/CONSTRUCTION.md |
The battery rail is the station's 12 V, a star from the enclosure's fuse field, one fuse a board;
every board makes its own low rails from it. A fed run leaves the enclosure at 48 V, or 300 V where 48 does not carry
the load that far, made by a Galvani source cell and converted back to 12 V by the unit board at the
far end. A run's trip point is measured at commissioning and programmed into an INA238 at the
source end, under the cell's ceiling — ~26 W at 48 V, ~47 W at 300 V. Copper to 500 m, glass beyond.
The concept is built on what is normally on sale: stock outdoor Cat 6, not a specialist cable
(galvani/README.md).
- Seismic — local ground motion and event detection; a dense grid is the basis of earthquake early-warning-style alerting.
- Ionospheric TEC — multi-frequency GNSS measures Total Electron Content directly: space weather, HF propagation, positioning correction, and the transients that shock the upper atmosphere.
- Radiation & lightning — cheap relative monitors: the statistics of many nodes, not one precise instrument.
- Cross-coupling — a big seismic event sends acoustic-gravity waves up into the ionosphere minutes later; running a Quake and a Sputnik at one site captures both ends.
- Density is the instrument. The satellites move and the air moves, so a network samples an evolving 4-D volume rather than a set of static points — mesoscale spacing already resolves what a sparse net cannot.
The tempting "simple" station streams its raw signal out and lets a server think. It is a false economy on the one budget that binds an unattended solar node: power. DSP at the edge costs a few milliamps on a processor that is running anyway; streaming raw keeps the radio busy, and the radio is the glutton. So the complex node is the low-power node — and power is not a battery-life number, it is the price of the station, because consumption scales solar and storage linearly.
The same doctrine on the data: store the change, not the raw · detection, not metrology — knowing that something happened is one threshold, absolute flux is where cost multiplies. The network is the instrument. And because the edge already produces the finished per-station product, joining an existing aggregator is a trivial insertion on their side, not a new pipeline.
Back-of-envelope, on purpose. Order-of-magnitude figures meant to show a ratio. Station costs vary ±2×; the point survives the error bars by a wide margin.
One rough model, parts only, and every other figure in the project is read against it:
| what | about |
|---|---|
| the base — Mayak, Kronos, a card, Palatine, Hermes; the 8 kWh pack and the 570 W panel; the enclosure, the vault, the mast and the earthing; a bought weather set | ~$3–4 k, half of it the pack, the panel and the structure |
| a DSP-tier unit — Tesla, Marconi, a Quark-Scintillation board — with its Galvani pair and its cable | ~$0,5–0,8 k each |
| an H523 unit — Quake, Gauss, Pascal, Pluvius — with its Galvani pair and its cable | ~$0,2–0,5 k each |
| a full station, the base and five or six units | ~$7–9 k |
| scope | stations | spacing | @ ~$4 k (base) … ~$8 k (full) | = of global military spend |
|---|---|---|---|---|
| one country (ČR) | 100 | ~28 km | ~$0,4–0,8 M | ~5–10 seconds |
| Baltic–Adriatic corridor | 1 000 | ~28 km | ~$4–8 M | ~1–1,5 minutes |
| all of Eurasia | 65 535 | ~29 km | ~$0,26–0,52 B | ~0,8–1,7 hours |
| whole planet, mesoscale | ~178 000 | ~29 km | ~$0,7–1,4 B all-in | ~2,3–4,6 hours |
That Eurasia row is not a typo: a 2-byte station domain at mesoscale spacing blankets essentially the whole landmass, putting ~2,7 million simultaneous rays through the atmosphere at once. A planet-wide civil geophysical instrument is one large infrastructure project — a metro line, a long bridge — not a moonshot. (Global military spending ≈ $2,7 T/year, SIPRI public figures. A yardstick, not a political position.)
Not money, and not physics. At continental scale the binding constraint is cross-border coordination. NIC is architected to grow bottom-up: every station is autonomous, the network assembles piece by piece, and you do not need permission from a continent to start with a hundred stations in one.
No firmware is written yet, and none is in this repository. A unit's firmware is described in
its FIRMWARE.md — boot, states, the bus, time, registers, faults — and is written against that
description once the board's HARDWARE.md has settled: the board first, the firmware second.
The code that is here is of two kinds, both plain Python 3:
| the archive's reference codec | core/archive/ref/ — HCC as HCC.md fixes it, the Steim-2 it is measured against, and its tests (python3 tests/test_hcc.py, and tests/test_damaged.py for streams that are not whole) |
| the calculations behind the documents | gaia/tools/ the siting maps · gauss/models/ the shallow-water siting model · marconi/models/ the loop's pointing · tesla/design/ the rod worksheet, its field solve and the chain's clip and floor |
Every project is a folder, and a part that belongs to another sits in a subfolder of it. The right-hand column is the bus and the type.
NIC-Heimdall/
├── mayak/ Mayak — the head: datalogger and uplink NodBus 1
│ └── handset/ Handset — the commissioning app, over BLE
├── kronos/ Kronos — the clock
│ └── polaris/ Polaris — Kronos's GNSS front, bought
├── hermes/ Hermes — the BMS/MPPT converter
├── bifrost/ Bifrost — the card, NodBus master NodBus 2
│ └── argus/ Argus — the same card, NodBus mini master NodBus 3
├── galvani/ Galvani — the eleven transport boards
├── mimir/ Mimir — mini-Heimdall, the station on one board
├── proteus/ Proteus — the smallest whole station head
├── quake/ Quake — seismograph NodBus 5
├── tesla/ Tesla — lightning and sferics NodBus 7
│ ├── pip/ Pip — longwave carriers: SID and time NodBus 12
│ └── steinmetz/ Steinmetz — line faults on power lines NodBus 13
├── marconi/ Marconi — the HF ionosphere NodBus 4
├── sputnik/ Sputnik — GNSS TEC, and the station's time NodBus 8
├── palatine/ Palatine — the meteo base, ModBus master NodBus 6
│ └── chinook/ Chinook — air quality, bought units
├── quark/ Quark — the radiation part
│ ├── tubes/ Quark-Tubes — high voltage mini 2
│ │ ├── helion/ Helion — He³ / BF₃ neutron head
│ │ └── gadolin/ Gadolin — Gd neutron head, with Rhodion
│ └── scintillation/ Quark-Scintillation — low voltage
│ ├── photon/ Photon — γ / X-ray NodBus 9
│ ├── positron/ Positron — beta NodBus 11
│ └── neutron/ Neutron — the photomultiplier channel type 10 reserved
├── gauss/ Gauss — the magnetometer sonde mini 1
├── pascal/ Pascal — the pressure sonde, tsunami mini 3
├── pluvius/ Pluvius — the weighing rain gauge ModBus 5
├── ceres/ Ceres — soil moisture ModBus 6
│ └── sakura/ Sakura — leaf wetness ModBus 7
├── babel/ Babel — any sensor → Modbus ModBus 4 bare
├── atlantis/ Atlantis — the water build
├── daedalus/ Daedalus — the station as a structure
├── gaia/ Gaia — the siting atlas
├── schematics/ the drawings to come, one folder a board
└── core/ the node core — bus, frame, clock, archive
| the node core, the bus, the frame, the clock | core/ |
| what talks to what, over what | core/COMMS.md |
| names, MCU assignment, who is a NOD and who a MOD | NAMING.md |
| who takes our data and in what format | core/INTEROP.md |
| the archive — HMC, the container, and HCC, the codec | core/archive/ |
| the exporters — every format the world takes, written from the archive | core/archive/EXPORTERS.md |
Hardware under CERN-OHL-S v2, software under MIT. Build it, change it, ship it — how to
help is CONTRIBUTING.md, and how to cite it CITATION.cff.
★ Viva La Resistánce ★