← Back to all posts

How to Build a Cheap DIY Seismometer

2026-08-12

Welcome! Today, I'll show you how to build a cheap DIY seismometer from scratch.

Choosing the Right Seismometer

There are many types of seismometers out there, but for a DIY build, I recommend starting with one of these three:

The differences between these are quite significant. Let's break down each option:

Accelerometer

Short-Period Seismograph

Warning

A standard 4.5 Hz geophone cannot catch raw teleseismic signals (which usually occur below 1 Hz) without specific filtering methods covered later in this guide.

Broadband Seismograph

I don't recommend buying a commercial broadband seismometer due to the cost. However, if you really want one, your best option is to build your own!

Because I struggled with building one myself, I won't cover it directly in this tutorial. Instead, here are some great resources online:

Tip

You can build a multi-channel setup! For example, you can use a geophone for the vertical axis and an accelerometer module for horizontal axes.


Required Components & Wiring

Once you’ve picked out a sensor, you’ll need a few extra parts to get everything up and running.

Microcontroller & ADC

Wires & Prototyping

Pinout Mapping (ESP32 + ADS1256)

If you're using an ESP32 alongside an ADS1256 ADC, hook them up using this default pinout:

ESP32 PinADS1256 PinFunctionNotes
5V / VIN5V / VCCPowerMain 5V power supply
GNDGNDGroundCommon ground
GPIO 18SCLKSPI ClockHardware SPI Clock
GPIO 23DINSPI Data In (MOSI)Master Out / Slave In
GPIO 19DOUTSPI Data Out (MISO)Master In / Slave Out
GPIO 16DRDYData ReadyInterrupt pin
GPIO 5CSChip SelectActive-low SPI select
5V / VINPDWNPower Down / ResetTied HIGH to keep the module awake
UnconnectedSYNCSyncLeave unconnected

Connecting Your Sensor to the ADC:


Flashing the Firmware

The easiest way to compile and flash your firmware is using VS Code with the PlatformIO extension installed.

I’ve put together pre-built firmware for these setups:

If you're using a different microcontroller or a custom setup, writing your own code isn't too hard-just make sure to follow the data structure defined in /include/utils/packet.h.

For complete code files and instructions, check out the NexaSeis GitHub repository. If you run into any issues along the way, feel free to text me on discord or email me!


Catching Teleseismic Activity: Digital Filtering & Response Extension

A standard 4.5 Hz geophone naturally attenuates low frequencies below 4.5 Hz. Teleseismic quakes (distant earthquakes across the globe) typically produce signals below 1 Hz.

To detect these distant events with a 4.5 Hz sensor, we use a combination of High-Pass Pre-Processing (to strip DC offset and baseline noise) and Direct Form I (DF1) Equalization to extend frequency response down into the low-frequency spectrum.

The digital filtering implementation used for this setup is taken directly from the AnyShake Explorer v1 repository, which provides the software routines for both second-order sections (SOS) pre-processing and DF1 response extension.

Warning

A Note on Waveform Distortion: While this filter allows a $35–$50 geophone to detect low-frequency teleseismic activity, real-time Infinite Impulse Response (IIR) filters introduce phase distortion. Because different frequencies experience slight differences in group delay, wave arrivals (like P-waves and S-waves) may appear visually smoothed or stretched. For real-time event detection on low-cost hardware, this trade-off is usually well worth it.


Computer / Microcontroller & Software

Processing and saving your seismic data can be done in a few ways:

  1. Real-time Data Only: A standard microcontroller (e.g., ESP32) is all you need.
  2. Real-time + Local Storage: You can attach an SD card module to a microcontroller to log past data locally. (Note: Accessing this data remotely can cause performance lag.)
  3. Real-time + Remote Access + High Performance: Use a single-board computer (SBC) like a Raspberry Pi, a spare PC, or a cloud server.

Software Platforms

My preferred approach is using a server alongside software I developed called NexaSeis (releasing soon!). NexaSeis allows you to host multiple stations on a free Oracle server instance. With this setup, all you need on-site is an ESP32 + ADC + Sensor.

You can check out the project at nexaseis.domiko.dev.

While NexaSeis is still in active development, here are several alternative self-hosted software platforms you can use today:

If you want to use AnyShake firmware on an ESP32, you can check out my repository: Domiko7/ESP32-anyshake-explorer


Join the NexaSeis Network

I currently operate a NexaSeis server and run my own citizen-science seismic network:

Citation: Dominik Stempel. (2026). NexaSeis Collaborative Network [Data set]. International Federation of Digital Seismograph Networks. https://doi.org/10.7914/fa5t-3w59

If you want a plug-and-play solution without managing server software yourself, I would be happy to host your station's data on my server network!

To add your station to the network, reach out to me via:

While the web interface is currently basic, core services are available via our API, SeedLink, and FDSNWS. We also plan to integrate support for IRIS in a future update.

Warning

Hosted server availability is maintained on a best-effort basis. If server access is interrupted, you may need to host your station software locally.


Note

Detailed physical assembly steps and firmware flashing instructions will be added in a future update!