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:
- Accelerometer (Strong Motion)
- Short-Period Seismograph
- Broadband Seismograph
The differences between these are quite significant. Let's break down each option:
Accelerometer
- Cost: Extremely cheap (starting around $3).
- Best for: Locations where you frequently feel noticeable earthquakes, or if you don't care about capturing micro-quakes or teleseismic events.
- Sensor Recommendations:
- LSM6DS3: Overall cheap and decent performance.
- ADXL345: Very affordable and standard performance.
- ADXL355: The best option in this category, though slightly more expensive.
Short-Period Seismograph
- Cost: Relatively cheap ($35–$50).
- Best for: Catching micro-quakes, regional earthquakes, and teleseismic interference (with appropriate filtering).
- Sensor Recommendation: 4.5 Hz vertical geophone (ideally rated at 100 V/m/s).
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
- Microcontroller: Grab an ESP32. They’re cheap, fast enough for SPI, and have built-in Wi-Fi and Bluetooth.
- Analog-to-Digital Converter (ADC): If you're using a passive sensor like a geophone, you’ll need a separate ADC to convert those analog signals into data your computer can read.
- A 24-bit ADC handles most setups great-I recommend the ADS1256.
- If you want maximum sensitivity and lower noise, go with a 32-bit ADC.
- Note: If you’re using an accelerometer like the LSM6DS3 or ADXL355, it already has an ADC built in, so you can connect it straight to your ESP32.
Wires & Prototyping
- Jumper Wires & Breadboard: Essential for quick bench testing before soldering.
- Ethernet Cable Wires: Stripping out twisted wire pairs from a standard Cat5e or Cat6 ethernet cable works surprisingly well for longer sensor runs since it cuts down on noise.
Pinout Mapping (ESP32 + ADS1256)
If you're using an ESP32 alongside an ADS1256 ADC, hook them up using this default pinout:
| ESP32 Pin | ADS1256 Pin | Function | Notes |
|---|---|---|---|
| 5V / VIN | 5V / VCC | Power | Main 5V power supply |
| GND | GND | Ground | Common ground |
| GPIO 18 | SCLK | SPI Clock | Hardware SPI Clock |
| GPIO 23 | DIN | SPI Data In (MOSI) | Master Out / Slave In |
| GPIO 19 | DOUT | SPI Data Out (MISO) | Master In / Slave Out |
| GPIO 16 | DRDY | Data Ready | Interrupt pin |
| GPIO 5 | CS | Chip Select | Active-low SPI select |
| 5V / VIN | PDWN | Power Down / Reset | Tied HIGH to keep the module awake |
| Unconnected | SYNC | Sync | Leave unconnected |
Connecting Your Sensor to the ADC:
- Sensor (+) goes to AIN0
- Sensor (-) goes to AIN1
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:
- NexaSeis - 1 Axis Channel (ADS1256)
- NexaSeis - LSM6DS3 Accelerometer (not tested yet)
- AnyShake - 1 Axis Channel
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:
- Real-time Data Only: A standard microcontroller (e.g., ESP32) is all you need.
- 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.)
- 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:
- Discord: Join the community Discord server
- Email: [email protected]
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!