Phase 1: The Original Sensor (Spring Geophone + nerdaqII)

This was the starting point. It worked for local noise and events, but could not detect distant earthquakes. Understanding why is the key to everything that followed.

The Spring Pendulum Geophone

The original sensor was a DIY vertical geophone based on mircemk’s design. The core idea is elegantly simple: a small magnet on a spring suspended above a relay coil. When the ground moves, the coil (rigidly attached to the case) moves relative to the inertial mass (the magnet on its spring). By Faraday’s law, that relative motion induces a voltage in the coil proportional to velocity (V = Bl·dx/dt). It’s the same principle a professional geophone uses, just built from scrap parts for a few dollars.

DIY geophone sensor using relay coil and magnet
The original spring geophone: relay coil + magnet on a spring. A velocity sensor with limited low-frequency response.

The relay coil has a resistance of ~3KΩ. The magnet is a small neodymium type from an old PC hard drive. The assembly sits in a plastic enclosure to suppress air currents. Simple, cheap, and it produces data — but as it turned out, not the right kind of data for teleseismic detection.

The Preamp Evolution

The geophone coil produces tiny signals, on the order of microvolts. You need a lot of clean gain to bring that up to something an Arduino ADC can read, and the preamp design turned out to be a critical factor in system performance.

LM358: The Starting Point

I started with a cheap LM358 op-amp module. It worked, but the noise floor was terrible. The LM358 has input noise around 40 nV/√Hz. My noise floor with the LM358 was around 2.7 counts RMS, and most of that was amplifier noise, not signal.

OP27: The Real Workhorse

The upgrade was a custom OP27 dual op-amp preamp on a perfboard shield that plugs directly into the Arduino. The OP27 is a low-noise precision op-amp with 3 nV/√Hz input noise — roughly 60x quieter than the LM358.

  • Dual ±12V supply (external split power supply)
  • Two-stage amplifier with ~10,000x total gain
  • AC coupling between stages to eliminate DC drift
  • 2.5V bias divider for single-supply ADC compatibility
  • Offset null trim pots on both op-amps for zeroing
  • Noise floor: ~0.5 counts RMS (dominated by ADC quantization)
OP27 dual op-amp preamp on Arduino perfboard shield
OP27 dual op-amp preamp on Arduino perfboard shield
OP27 noise floor comparison
OP27 preamp noise floor: geophone overnight vs shorted input. The preamp contributes only ~0.5 counts RMS.

OPA2350: Rail-to-Rail Alternative

I also tested the OPA2350, a rail-to-rail CMOS op-amp that runs on a single 5V supply — much simpler wiring. Input noise is about 5 nV/√Hz, still far better than the LM358. A good option if you want to keep the build simple.

OPA2350 rail-to-rail op-amp alternative preamp
OPA2350 rail-to-rail op-amp alternative preamp

Schematic files: OP27 schematic, OPA2350 schematic.

nerdaqII Firmware: Squeezing 13 Bits from a 10-bit ADC

The Arduino runs nerdaqII, firmware originally written by Martin L. Smith in 2012 for the TC1 seismometer project. This is a brilliant piece of code that squeezes remarkable performance out of the Arduino’s modest ATmega328 ADC.

  • Oversampling: The ADC free-runs at 9.6 kHz, averaging 2048 samples per output — 2048x oversampling for ~3 extra bits of effective resolution, bringing the 10-bit ADC up to roughly 13-bit performance.
  • Three-stage digital filtering: Denoise FIR → detrend IIR Butterworth high-pass → optional long-period boost.
  • Output: 18.78 samples per second, 16-bit unsigned integers over serial.

I run mode 3, which disables the long-period boost for a flat, honest response curve in the microseism band.

WiFi Bridge and Data Pipeline

An ESP8266 WeMos D1 R2 sits between the Arduino and the network. It reads serial data from the Arduino’s TX pin, batches 19 samples (one second’s worth), and POSTs them via WiFi to a Raspberry Pi logger. The Pi runs a Flask API on port 8905 that writes to both InfluxDB (real-time querying) and flat CSV files (archival). The seismometer sits in the crawl space; everything else talks over the LAN.

WeMos WiFi bridge remote control interface
The WeMos WiFi bridge includes a web interface for remotely switching ADC settings — no USB connection required.

AmaSeis Integration

The seismometer also feeds AmaSeis, the standard seismology software for amateur stations, via com0com virtual serial ports. A custom auto-backfill script checks the Pi’s archive and fills any gaps in AmaSeis’s local record.

The Problem: Why Phase 1 Couldn’t Detect Earthquakes

Despite clean preamps and careful construction, Phase 1 could not detect distant earthquakes. Multiple M5+ teleseismic events came and went with nothing visible above the noise floor. The reason is fundamental physics:

  • Velocity sensor at long periods: The relay coil produces voltage proportional to velocity (V = Bl·dx/dt). At a 13-second teleseismic period, the pendulum velocity is tiny, so the coil output is tiny. The signal vanishes into the noise floor before it ever reaches the ADC.
  • Insufficient ADC resolution: The nerdaqII achieves ~13 effective bits. That sounds like a lot, but teleseismic surface waves at 6,900 km are tiny perturbations — often less than 1 count at this resolution.
  • Wrong natural frequency: The spring geophone has a natural frequency around 3.6 Hz (fn ≈ 3.6 Hz). Teleseismic signals are 0.05–0.2 Hz (5–20 second periods). The sensor is deaf to exactly the frequencies that carry earthquake energy.

Three problems, and fixing just one wouldn’t be enough. I needed to rethink the entire sensor chain.

Phase 2: The Lehman Pendulum (Current System)

Lehman pendulum seismometer in crawlspace

The Lehman pendulum in the crawlspace. 48-inch boom on guitar-string wire flexure pivot, with aluminum plate damping and SS49E Hall sensor.

Wire flexure pivot detail

Pivot detail: high-E guitar string wire flexure through L-bracket, with turnbuckle for fine tilt adjustment.

This is the working system. It detects teleseismic surface waves, secondary microseisms, and has recorded a confirmed M5.8 event at 6,900 km distance.

Lehman Horizontal Pendulum

The sensor is now a Lehman horizontal pendulum with a 48-inch boom, supported by a guitar-string wire flexure pivot (a vertical tension wire that acts as a near-frictionless hinge). The boom has a natural period of 10–14 seconds (natural frequency fn ≈ 0.07–0.09 Hz), which puts the sensor’s peak sensitivity right in the middle of the teleseismic surface wave band.

At the end of the boom sits the mass, and positioned below it is the critical upgrade that changed everything.

SS49E Hall Effect Sensor: Displacement, Not Velocity

The relay coil is gone. In its place is an SS49E Hall effect sensor — a $0.70 part that measures the magnetic field of a small magnet on the boom. The Hall sensor measures position (displacement), not velocity. Its response is flat down to DC. This is the fundamental difference that makes teleseismic detection possible:

  • Coil (velocity): V = Bl·dx/dt — output drops with frequency. At 13s period, velocity is nearly zero, so output is nearly zero.
  • Hall sensor (displacement): V = k·x — output is independent of frequency. A slow 13-second displacement produces the same signal as a fast 1-second one.

The SS49E has a sensitivity of 1.8 mV/Gauss. It directly measures boom position relative to the fixed sensor mount. No moving parts, no contacts, no friction. Just a solid-state magnetic field measurement.

ADS1256: 24-Bit ADC

The nerdaqII is gone too. The ADS1256 is a 24-bit delta-sigma ADC with a programmable gain amplifier, running at 30 samples per second. Compared to the nerdaqII’s ~13 effective bits, the ADS1256 delivers ~23 effective bits — that’s roughly 1000x better resolution. Teleseismic signals that were buried in 1-count quantization noise are now clearly visible.

The data pipeline is: ADS1256 → Arduino (SPI read) → WeMos D1 Mini (WiFi, TCP) → Raspberry Pi (InfluxDB + Flask API) → PC Dashboards. The same network architecture from Phase 1, just carrying far better data.

Key Improvements: Phase 1 vs Phase 2

Parameter Phase 1 (Original) Phase 2 (Current)
Sensor type Spring geophone (vertical) Lehman pendulum (horizontal)
Transducer Relay coil (velocity) SS49E Hall sensor (displacement)
Natural frequency ~3.6 Hz 0.07–0.09 Hz (10–14s period)
ADC nerdaqII / Arduino 10-bit (≈13-bit eff.) ADS1256 24-bit (≈23-bit eff.)
Sample rate 18.78 sps 30 sps
DC response No (AC-coupled coil) Yes (Hall sensor flat to DC)
Microseism detection No Primary + secondary (clear)
Teleseismic detection None confirmed M5.8 at 6,900 km confirmed

Custom Dashboards

With real data flowing, I built a suite of custom dashboards that run on my PC, pulling live data from the Pi’s Flask API.

Helicorder Dashboard

The classic seismologist’s tool: a strip-chart showing hours of data stacked vertically so patterns and events are visible at a glance.

Custom helicorder dashboard showing 24 hours of seismic data
Custom helicorder dashboard: 24-hour view with click-to-zoom, USGS earthquake overlay with predicted P/S arrival times, real-time updates, and SeisSound audio synthesis for “listening” to seismic events.
  • Configurable time window from 1 to 48 hours
  • Click-to-zoom on any time range
  • USGS earthquake overlay with predicted P and S wave arrival times
  • Adjustable gain control
  • Real-time updates from the Pi API
  • SeisSound audio: speed up seismic audio to audible frequencies to “hear” earthquakes

Spectral Analysis

A real-time FFT tool showing both a spectrogram (time-frequency waterfall) and a power spectral density plot. In this example the natural resonant frequency of the Lehman pendulum (~12 seconds) is clearly visible as the bright signal on the far left of the spectrogram. Just to the right of the ~12 second signal is a much weaker and diffused band of noise, this is the Secondary microseism signal. The mechanism that generates this signal comes from wind-driven ocean waves of similar frequencies, which travel in nearly opposite directions (such as during a storm or when waves reflect off a coastline), and then crash into each other. This collision creates standing waves. Unlike typical surface waves, standing waves create a second-order pressure fluctuation that extends all the way down to the ocean floor. This pulsating pressure repeatedly pounds the seafloor, vibrating the Earth’s crust. Because the opposing waves meet and interact, the pressure fluctuations on the seafloor occur at exactly twice the frequency of the ocean waves themselves. The Primary microseism, which I have yet to confirm detection on my system, is generated by a different yet related mechanism. When large ocean waves or swells roll over shallow water (such as continental shelves), the pressure fluctuations created by the waves in the water column couple directly with the seafloor topography. This physical pushing and pulling vibrates the bedrock, sending seismic waves (primarily Rayleigh waves) radiating through the Earth’s crust. Primary microseisms have oscillation periods typically ranging from 10 to 30 seconds which directly corresponds to the periods of the ocean waves that generate them. The Primary microseism signal is generally weaker than the Secondary microseism and if you are able to detect them you know you have reached the natural seismic noise floor of the Earth. The event between 03:20 and 05:16 centered around the ~12 second period is the M5.8 Earthquake discussed in the next section below.

Real-time spectral analysis page with spectrogram and PSD
Real-time spectral analysis: spectrogram waterfall (top) and power spectral density (bottom), both updating live.

PSD Analysis and Microseism Detection

The stacked PSD tool fetches hours of data, computes a McNamara & Buland (2004) PSD, and overlays the Peterson NHNM/NLNM noise models. The results are genuinely exciting: both primary (~15s period, direct ocean wave action) and secondary (~6s period / 0.24 Hz, wave-wave interactions near coastlines) microseism peaks are clearly resolved between the Peterson curves.

24-hour stacked PSD with Peterson NHNM/NLNM noise model overlay
24-hour stacked PSD with Peterson NHNM/NLNM noise model overlay. Primary and secondary microseism peaks are both clearly resolved.

Detecting secondary microseisms means this instrument is in a qualitatively different category from where it started. The spring geophone in Phase 1 could not resolve the primary peak. The Lehman + Hall sensor + 24-bit ADC resolves both, comfortably between the Peterson curves.

Earthquake Detection: M5.8 Atka, Alaska (July 26, 2026)

On July 26, 2026, the system recorded its first confirmed teleseismic event — an M5.8 earthquake 99 km SE of Atka, Alaska. This is the validation of everything that went into the Phase 2 redesign.

Event Details

Magnitude M5.8
Location 99 km SE of Atka, Alaska (51.4994°N, 173.306°W)
Origin time 03:35:19 CDT (08:35:19 UTC), July 26, 2026
Depth 10 km (shallow crustal)
USGS ID us7000t3fm
Distance 6,902 km (62° angular distance) from our station in Tennessee (~35.0°N, 85.5°W)

What We Detected

The instrument recorded three distinct phases of the earthquake’s energy arriving at our station, matching theoretical predictions remarkably well:

  • Surface waves (Rayleigh): Detected at 04:08:34 CDT — 33.2 minutes after origin. Predicted arrival at 3.5 km/s was 04:08:10 CDT. The match is within 24 seconds. RMS amplitude jumped from ~560 to 2,034 counts (3.6× above noise floor). Peak amplitude: 6,255 counts versus noise peaks of ~1,500.
  • S wave (probable): At low frequencies (0.02–0.2 Hz), RMS jumped from 263 to 537 counts (2.04×, +5.5 dB) right at the predicted S arrival time (+18.8 min after origin). Visible in the envelope analysis.
  • P wave: NOT detected. Signal below our noise floor. The professional station V48A, 5 km away, detected it clearly — a reminder that we still have room to improve.
M5.8 Atka Alaska earthquake: 3-panel analysis with raw seismogram, filtered trace, and spectrogram showing phase arrivals
Three-panel analysis of the M5.8 Atka earthquake. Top: Raw seismogram showing the full event (DC drift not removed). Middle: Band-pass filtered (0.02–0.2 Hz) trace showing the S-wave and surface wave arrivals. Bottom: Spectrogram with phase arrival markers — the surface wave energy is clearly visible as the red/orange band arriving ~33 minutes after origin.
Annotated M5.8 Alaska earthquake helicorder trace with phase arrival markers
Annotated Spectrogram of the M5.8 event. The top spectrogram is our station and the bottom is the V49A USGS professional sensor. The surface wave arrival is clearly visible as a large amplitude pulse, matching the predicted Rayleigh wave arrival time within 24 seconds.

Comparison with Professional Station V48A

V48A is a professional broadband station in the USArray N4 network, located in Spring Hill, Tennessee — only 5 km from our station. It uses a STS-2 triaxial sensor sampling at 100 sps. Comparing our homemade instrument against a $50,000 professional station 5 km away is a stringent test.

Side-by-side comparison: our Lehman seismometer vs V48A professional station for the M5.8 Atka earthquake
Side-by-side comparison of the M5.8 Atka earthquake as recorded by our homemade Lehman seismometer (left) and the professional V48A Sts-2 station 5 km away (right). The z-scored overlay shows remarkably similar surface wave waveforms despite the vast difference in instrumentation cost. Top left plot is the raw data from our sensor with DC drift not removed. 

The results:

  • Both stations detected surface waves strongly. The waveform shapes are remarkably similar when z-scored and overlaid, despite the difference in instrumentation.
  • S wave: Marginal on our station but clear on V48A. Their lower noise floor makes the difference.
  • V48A noise floor: ~12× lower than ours. This is the main remaining gap — better isolation, better environmental shielding, and possibly a feedback sensor design could close it further.
  • P wave: V48A detected it clearly; we did not. At this distance and magnitude, the P-wave amplitude is simply below our noise floor.

SeisSound Audio

Hear the earthquake! These audio files time-compress one hour of seismic data (04:00-05:00 CDT) by 500x, shifting infrasonic earthquake frequencies into audible range.

  • Unfiltered (0.1-15 Hz, 500x speedup) – Full-band signal including the earthquake and background noise
  • Bandpass Filtered (0.02-2 Hz, 500x speedup) – Same event with a bandpass filter applied, isolating the seismic body and surface wave frequencies

The deep rumble near the end is the Rayleigh surface wave train arriving from 6,900 km away.

July 28, 2026: A Very Active Night

Two days after the Atka detection, the station recorded a remarkable sequence of earthquakes spanning the globe. The annotated spectrogram below shows six events detected in a single overnight session, including two M5.8 earthquakes from the same source region in China, plus events from Mexico, Iceland, Russia, and a major M6.8 from Japan.

Annotated spectrogram showing all earthquakes detected July 28, 2026
Annotated spectrogram of all detected earthquakes on July 28, 2026. Each event shows distinct frequency signatures across the 0-5 Hz band.

Earthquake Detection: M5.9 Mexico (July 28, 2026)

At 00:35:18 CDT on July 28, an M5.9 earthquake struck 50 km WSW of Brisas Barra de Suchiate, Mexico. At 2,451 km from our station, this is a regional event, and we detected both S-waves and surface waves clearly on both our Lehman and the V48A reference station.

6-Panel Station Comparison

M5.9 Mexico station comparison: our Lehman vs N4.V48A
Six-panel comparison for the M5.9 Mexico event (2,451 km). Top three panels: our Lehman seismometer (highpass, 0.1-0.5 Hz body wave band, 0.02-0.1 Hz surface wave band). Bottom three panels: N4.V48A reference station with identical filters. Red dashed line = P-wave arrival, orange = S-wave, green = estimated surface wave arrival. Both stations show clear S-wave and surface wave detections at the predicted times.

SeisSound Audio

Hear the Mexico earthquake in two formats:

  • Time-compressed (500x) – Standard 500x speedup with highpass filtering. The surface wave rumble is clearly audible.
  • VCO Sonification (200x) – Includes a VCO (Voltage-Controlled Oscillator) layer that makes low-frequency seismic energy audible as pitch changes. The carrier tone rises and falls in pitch as the earthquake energy arrives, then goes silent during quiet periods.

What is VCO? Standard time-compression shifts high frequencies into the audible range, but the powerful low-frequency surface waves (0.02-0.1 Hz) barely move even at 200x speedup. The VCO layer solves this by modulating an 800 Hz carrier tone with the seismic waveform: the pitch rises when the ground moves one way and falls when it moves the other. This makes the surface wave train audible as a distinct pitch sweep, something you can actually hear rather than just feel as a rumble.

Earthquake Detection: M6.8 Japan (July 28, 2026)

At 02:27:15 CDT on July 28, a major M6.8 earthquake struck 5 km east of Uto, Japan. At 11,460 km from our station, this is our furthest confirmed detection to date. The surface wave train traveled roughly a third of the way around the Earth to reach us.

6-Panel Station Comparison

M6.8 Japan station comparison: our Lehman vs N4.V48A
Six-panel comparison for the M6.8 Japan event (11,460 km). The surface wave train (bottom of each surface band panel) arrives right at the predicted time and persists for over 40 minutes. Surface wave SNR reached 13.5x on our Lehman and 15x on V48A. Two ADC transient spikes were automatically removed before analysis. This is a world-class detection for a DIY instrument.

SeisSound Audio

Hear the Japan earthquake in two formats:

  • Time-compressed (500x) – Standard 500x speedup. The massive surface wave train dominates the second half of the clip.
  • VCO Sonification (200x) – The VCO tone sweeps dramatically in pitch as the surface waves arrive from 11,460 km away. Listen for the pitch change starting around the midpoint: that is the Rayleigh wave train, some of the most powerful waves on Earth, arriving from across the globe.

The pitch change in the VCO audio directly maps to ground motion direction. As the Rayleigh waves pass, the ground oscillates vertically and horizontally. The VCO translates this sub-audible motion into an audible tone that rises and falls, giving you an immediate sense of the wave’s character that raw seismograms cannot convey.

Earthquake Detection: M7.4 Colombia (August 10, 2026)

At 07:34:28 CDT on August 10, a major M7.4 earthquake struck Colombia at a depth of 110.3 km. At 3,603 km from our station, this is a powerful intermediate-depth event and our largest magnitude detection to date. The deep focal depth produced strong body waves that punched through clearly on both our Lehman and the V48A reference station.

Spectrogram Overview

M7.4 Colombia spectrogram comparison: our Lehman vs N4.V48A
Spectrogram comparison for the M7.4 Colombia event (3,603 km, 110.3 km deep). Top: our home Lehman seismometer in the crawlspace. Bottom: N4.V48A professional station 5 km away. Both show the characteristic energy burst below 1 Hz starting around 07:42 CDT. The professional station captures the onset more sharply, but the DIY instrument clearly resolves the same signal across the 0.01 to 1 Hz band.

6-Panel Station Comparison

M7.4 Colombia 6-panel waveform comparison
Six-panel waveform comparison for the M7.4 Colombia event. Top three rows: our Lehman seismometer (counts). Bottom three rows: N4.V48A (mm/s). Each pair shows 0.01 Hz highpass, 0.1 to 0.5 Hz body wave band, and 0.02 to 0.1 Hz surface wave band. Vertical dashed lines mark P-wave arrival (07:41:58 CDT, red), S-wave arrival (07:47:48 CDT, orange), and surface wave arrival (07:51:37 CDT, green). The DIY sensor tracks all three arrival types in near-perfect sync with the professional instrument despite being 5 km away and built from $15 in parts.

Detailed Event Analysis

M7.4 Colombia detailed waveform and PSD spectrogram
Detailed view of the M7.4 event from our Lehman seismometer. Top: 0.01 Hz highpass waveform showing P, S, and surface wave arrivals marked by dashed lines. Amplitude reaches approximately 1.5 million counts. Bottom: Power Spectral Density spectrogram showing the earthquake energy concentrated below 1 Hz. Because this was an intermediate-depth event (110.3 km) within the subducting Nazca plate, the bulk of the radiated energy appears in the S body wave band (0.1 to 0.5 Hz), producing the sharp, impulsive burst visible at the S-wave arrival (orange dashed line). Surface wave energy (green dashed line) is present but comparatively subdued, which is characteristic of deep-focus earthquakes. The sensor resolves frequencies from 0.01 to 5 Hz across the full event window.

SeisSound Audio

Hear the Colombia earthquake in two formats:

  • Time-compressed – Standard time-compression of the seismogram into audible range. The deep body waves and powerful surface wave train are clearly audible.
  • VCO Sonification – The VCO tone sweeps in pitch as the seismic waves arrive from 3,603 km away. Listen for the dramatic pitch shift as the surface waves pass through. At M7.4, this is the strongest earthquake recorded by our station to date.

At 110.3 km depth, this was an intermediate-depth earthquake. The deep focal depth means the seismic energy was released within the subducting Nazca plate beneath South America. These events typically produce stronger body waves relative to surface waves compared to shallow events, which is visible in the spectrogram: notice how the body wave band (0.1 to 0.5 Hz) shows a sharper, more impulsive onset than the surface wave band.

What This Proves

A homemade Lehman seismometer with a $0.70 Hall effect sensor and a $15 ADC has detected surface waves from an M5.8 earthquake at 6,900 km distance. The surface wave arrival time matched theoretical predictions within 24 seconds. The waveform morphology matched a professional broadband station 5 km away.

This is not a toy. It is a working scientific instrument that contributes real data. The instrument also continuously detects secondary microseisms (ocean wave energy at 0.24 Hz) — a signal that the original Phase 1 sensor could never resolve. The evolution from a spring geophone that couldn’t detect a single earthquake to a Lehman pendulum recording teleseismic surface waves is the story of this project.

Perhaps the most compelling demonstration of instrument capability is this: the Lehman can distinguish earthquake types by their spectral signature. The Colombia M7.4 event (110.3 km deep) produced a sharp, impulsive S body wave burst in the 0.1 to 0.5 Hz band with comparatively modest surface wave energy, while the Japan M6.8 event (shallow) produced the opposite: a massive, long-duration surface wave train dominating the 0.02 to 0.1 Hz band. That difference is not subtle. It is a direct fingerprint of focal depth and rupture mechanics, and a $15 ADC with a $0.70 Hall effect sensor resolved it clearly. A sensor that can tell you not just that an earthquake happened, but what kind of earthquake it was, has crossed the line from detection into characterization. That is seismology, not just monitoring.

References and Credits

  • nerdaqII firmware: Martin L. Smith, 2012 (TC1 seismometer project).
  • DIY seismometer design: mircemk’s Arduino seismometer on Hackster.io.
  • AmaSeis: Alan Jones’ seismology software.
  • com0com: Virtual serial port driver for Windows.
  • Peterson (1993): NHNM/NLNM noise models.
  • McNamara & Buland (2004): PSD-PDF methodology for seismic noise analysis.
  • IRIS WVT: IU.WVT.00.BHZ reference station, calibration comparison.
  • V48A: N4 network station, Spring Hill TN — professional reference for earthquake comparison.
  • USGS: Event us7000t3fm, M5.8 Atka Alaska, July 26 2026.
  • OP27 preamp schematic: View
  • OPA2350 preamp schematic: View