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.

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)


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.

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.

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)
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.

- 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.

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.

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.


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.

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.

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

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

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

6-Panel Station Comparison

Detailed Event Analysis

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

