Kadath

A soil impedance spectrometer.

A homemade EIS rig. A Pico 2 W drives AC through the ground and measures the voltage, from millihertz to about 100 kHz. Sweeps are logged with soil temperature, moisture and air.

Browse the data → Trends Compare sweeps
A typical Nyquist plot. One dot per frequency, high on the left.

From the archive ●

Summary unavailable. Browse the archive.

How it works

Why a spectrum

Soil conductivity depends on water and dissolved salts. How it changes with frequency separates effects at grain and electrode surfaces that a single DC reading can't.

Four rods

Contact resistance at a rod is often larger than the soil's own. The outer rods (C1, C2) carry the current; the inner pair (P1, P2) only sense voltage, so the contacts drop out. This is the Wenner layout: four rods in a line at spacing a, here 60 mm in a 3D-printed holder.

ρ = 2π a R  (R = V / I)

Push-pull drive

The DAC swings 0 to 3.3 V. An op-amp stage recentres that to a line A around 0 V, and an inverter makes B = −A. A drives C1 through a current-sense shunt, B drives C2, so the middle of the soil stays near 0 V.

C1 P1 P2 C2 A B = −A V a a a soil
Current (orange) flows between the outer rods; the inner rods (aqua) measure voltage.

One point

  • Play a sine at one frequency.
  • Record current (across a known shunt) and voltage (P1 to P2).
  • Lock-in demodulation gives amplitude and phase of each.
  • Z = V / I, corrected for timing skew, gain and fixture strays.
  • Step to the next frequency.

Hardware

The rig today

Next: a real board planned

4-layer board, fully fab-assembled, replacing the perfboard.

  • DC-coupled 24-bit codec (TAA5212 / TAD5212), millihertz to about 96 kHz
  • BUF634A drive per current rod, firmware DC servo
  • Relay-switched 0.1 % Kelvin shunts, 10 Ω to 100 kΩ; in-amp gains ×1, ×10, ×100
  • Onboard cal standards (open, short, three resistors, RC cell) and self-test
  • Isolated analog island
  • Electrometer inputs for pH, ORP and ISEs
  • microSD logging with RTC; battery or 6 to 24 V
  • Watchdog safe state: relays open, DAC to 0 V

Log

Aug 2026

First build: ADS1256 and AD9833

Perfboard. Added open-circuit cal, adaptive burst timing and salinity columns. Most of the early archive is from this board.

Sep 2026

Audio-ADC rebuild on a Pico 2 W

PCM1808 and MCP4921, firmware rewritten in Rust.

  • adaptive scanning
  • multitone excitation
  • simulated device
  • wireless streaming
  • soil temperature, moisture and air sensors
Oct 2026

A proper electrode holder, broadband and analysis

  • parametric 3D-printed Wenner holder
  • PRBS and log-chirp broadband excitation
  • multi-standard calibration
  • drift removal
  • analysis suite
  • millihertz low-frequency paths
Now

Open archive and remote operation

Every sweep is published here. A private control panel runs the rig remotely.

Data

Also: catalog.json, files.csv and lab_catalog.db.

Pico 2 WRust firmware. Sine out, samples in, sensors, USB or Wi-Fi.
MCP492112-bit DAC
Drive A / BOp-amp push-pull to the current rods
SenseBuffers and difference amps
PCM180824-bit stereo ADC: current and voltage
Low-f pathsPico ADC and ADS1115, below what the audio ADC reaches
SensorsBME680, DS18B20, HW-390
SoftwarePyQt6 app: sweeps, calibration, live scope, analysis