Open source seismograph · GPL-3.0
3-Axis
Seismo
graph

A ground-up seismic monitoring system built around three GD-4.5 geophones, a 24-bit ADS1256 ADC, and a Raspberry Pi. Full MiniSEED archiving, ObsPy-compatible instrument response, real-time dashboard.

Live · AIN0/AIN1 — CH1 100 SPS
CH1
CH2
CH3
ADC
ADS1256 24-bit
Link
RS-485 250k
Geophone
GD-4.5 4.5Hz
3ch
Geophone axes
24bit
ADC resolution
100sps
Default / configurable
250k
RS-485 baud
4.5Hz
Geophone resonance
Hardware design
Two-Board
Architecture

All analog electronics co-located with the geophones to eliminate interference. Only clean digital RS-485 data travels over the Cat5/6 cable back to the host.

Sensor side

Sensor PCB

01

Co-located with the geophones to keep analog paths as short as possible. Differential instrumentation amplifiers feed a 24-bit ADS1256. An MCU samples all channels and streams framed packets over RS-485.

  • 3x differential inst. amp — gain x100
  • ADS1256 — 24-bit, PGA up to x64
  • Arduino / ESP32 / RP2040 MCU
  • THVD1406 RS-485 transceiver
  • 12 V input, onboard regulation
  • JST XH2.54 geophone connectors
ADS1256 INA(TBD) gain x100 THVD1406 12 V → 3.3/5 V
Host side

Host Interface

02

Compact interface board sitting between the Cat5/6 cable and the Raspberry Pi. Handles RS-485 conversion, power injection, and remote sensor-board control via DTR/RTS signals.

  • RS-485 → UART at ≥250k baud
  • MOSFET — remote power switch
  • DTR/RTS control lines
  • RJ45 + 12 V barrel jack input
  • USB-C to host (Raspberry Pi)
RS-485 → UART DTR/RTS MOSFET PWR RJ45
Interconnect
Cat5/6 Cable
Wiring

Four pairs: two for RS-485 data, two paralleled for 12 V power delivery.

Sensor PCB
  • 3x GD-4.5 geophone
  • 3x Inst. amp (gain x100)
  • ADS1256 24-bit ADC
  • MCU (Arduino / ESP32)
  • THVD1406 RS-485 TX/RX
Pair TBD
RS-485 data
Pair TBD
12 V power (x2 parallel)
Host Interface
  • RS-485 → UART
  • PWR MOSFET
  • 12 V power inject
  • USB-C to Raspberry Pi
Validation
Test Log

Incremental hardware validation from first prototype to best configuration.

T-01
AD620 Module + Oscilloscope
Geophone connected to AD620 module, powered from Pi 5 V rail. Offset trimmed to 2.5 V. Output clipped at ~3.8 V (non-rail-to-rail swing). Signal significantly noisier than raw geophone output due to flying wires and single-ended measurement.
FAIL
T-02
AD620 + ADS1256 Single-Ended
AD620 Vout → AIN0, GND → AGND. PGA=1, 30k SPS. Signal clipped below 0 V — AINCOM tied to GND via PCB via, not modifiable without desoldering. MiniSEED recording confirmed working. Clipping makes data unusable.
FAIL
T-03
Geophones Directly into ADS1256 — Differential
AD620 bypassed. Two geophones differential on AIN0/AIN1 and AIN2/AIN3. PGA=64, 2000 SPS internal, read via Arduino Nano at 100 SPS/ch, 250000 baud. Significantly cleaner signal. Negative values correct. Heartbeat watchdog implemented. PGA=64 alone insufficient for distant events — external gain stage required on final PCB.
BEST
Firmware protocol
Data Link
Protocol

The serial protocol between the MCU and the Raspberry Pi acquisition daemon.

Baud rate
250,000 bps
RS-485 over Cat5/6, reliable up to 50 m. Half-duplex, differential signalling.
Packet frame
HDR · CH · DATA · CRC
Header, channel ID, raw 24-bit ADC value, checksum. Ensures integrity over the RS-485 link.
Heartbeat watchdog
≤ 1 s timeout
Host sends a heartbeat each second. If absent, MCU halts the data stream automatically.
Runtime config
Sent at connect
PGA, ADC data rate, MUX assignments, and output SPS sent by host at first connection — nothing hardcoded in firmware.
Sample rate
100 SPS / ch *
Default, software-configurable at connect time. ADS1256 internal rate up to 30k SPS, decimated in firmware.
* no reflashing required
Archive format
MiniSEED / SDS
SeisComp SDS archive on host. StationXML with GD-4.5 PAZ instrument response. ObsPy / SeisComP compatible.
ADS1256 — VREF = 2.5 V
Input Range
by PGA Setting

External amplifier gain x100 applied before the ADC. Absolute pin range: -100 mV < AINx < AVDD + 100 mV.

PGA x 1
± 5 V
PGA x 2
± 2.5 V
PGA x 4
± 1.25 V
PGA x 8
± 625 mV
PGA x 16
± 312 mV
PGA x 32
± 156 mV
PGA x 64
± 78 mV
max
Source code
Repositories

Five repositories covering the full stack from MCU firmware to web frontend.