Savia FlowOpen instrument ← back to the unit
The build spec · v1.0 · CERN-OHL-S hardware · MIT firmware

Every decision already
made, and every place
we need a pair of hands

Savia Flow reads the electrical rhythm of a living plant and turns its changes into music — live, on a battery, with nothing proprietary anywhere in the chain. This page is how it gets built: the option chosen at each of the four stages, sixteen steps with the test each one has to pass, the parts list in full, and the six roles still open.

3
Instruments
10
Workshop kits
2
Mesh nodes
16
Steps
6
Roles open
01

The chain

Every unit is the same four stages. The options differ only in how each stage is built.

PLANTelectrodes on tissueSENSEanalog front-endBRAINESP32 firmwareVOICEMIDI / synth / CVNETWORKLoRa / ReticulumEvery stage is swappable. Every connector is standard. Nothing in the chain is proprietary.

A plant is not a sensor with a datasheet. What we measure is its change: the 555 path hears bulk resistance shift as water and ions move, the biopotential path sees genuine action potentials. Both are honest, and they answer different questions — which is why v1 carries both.

02

Decisions already made

Highlighted is what gets built now. The rest stays in the spec so a fork can choose differently.

Sense

S-A
Pulse — 555 resistance oscillatorall units, and the kits
S-B
Wave — AD8232 biopotentialone science prototype
S-C
Both on one boardthe v1 target

Brain

M-A
ESP32 DevKitC · ~€83 instruments + 10 kits
M-B
Heltec LoRa32 V3 · ~€202 node prototypes
M-C
LilyGo T-Beam · ~€30later, the sentinels

Voice

V-1
BLE MIDI to a phone synthevery unit, zero extra parts
V-3
CV/gate and serial MIDIthe 3 performance units
V-2
I2S amp and speakerthe nodes, so they sing alone
V-4
Features over the radiothe nodes

Network

N-1
RNode pair, directthe residency demo
N-2
Mesh through a Pi transportif there is time
N-3
Solar sentinel fieldthe October experiment

Enclosure

E-1
Laser-cut birch ply, engravedthe 3-unit edition
E-2
Printed PETG snap casethe 10 kits
E-3
Garden stake, O-ring lidmodelled now, built later
03

The build

Sixteen steps, four phases. A step is done when its exit test passes in front of you — not when it was attempted.

Phase 0

Bench validation

2 days, before travel
01Breadboard the 555 front-endANALOG

Build against a dummy plant rig — a 470 kΩ fixed resistor in series with a 1 MΩ potentiometer. Turning the pot is “the plant responds”. No living plant is needed to develop firmware, and no plant gets stressed by a bug.

Exit testThe 555 oscillates across the whole pot range and the ESP32 sees clean edges.
02F1 — interval captureFW

Interrupt on the rising edge, rolling buffer of the last 32 Δt, serial plot. Work in interval deltas, never absolute values — that is what cancels the drift.

Exit testTurning the pot visibly changes the plotted rhythm.
03F2 — mapping engine → BLE MIDIFW

The threshold, pitch, velocity and CC algorithm from section 04, out over standard MIDI-over-BLE. Pair with a phone synth.

Exit testPot movements play musical, non-random phrases in C-minor pentatonic — and a still pot is nearly silent.
04First real plantSCIANALOG

Swap the dummy rig for a houseplant, gel electrodes, and wait out the full 15-minute settle before judging anything.

Exit testAudible change on watering and on touching a leaf; near-silence at rest.
05Flash every board before packingFW

All fifteen ESP32s carry F2 out of the box, tagged fw-v0.2-instrument. A board that needs a laptop at the Hub is a board that eats a residency morning.

Exit testEvery board boots, advertises BLE and plays from the dummy rig.
Phase 1

Instruments

residency days 1–3
06Kerf comb → test box → 3 enclosuresCAD

The kerf comb is cut first, on day one. Every finger-joint dimension in E-1 is downstream of that one measurement, and the Hub laser’s kerf is unknown to us.

Exit testA test box closes with hand pressure and no glue, then three boxes cut from the same file.
07Solder 3 perfboard unitsANALOGDOCS

Photograph every stage while you solder. There is no separate documentation pass — these frames are the kit build guide.

Exit testThree units powered, no shorts, all jacks continuity-tested.
08F3 — config portal and CV outFW

Captive portal at savia.local: scale, root, MIDI channel, thresholds, output toggles, OTA. MCP4725 pitch CV on the performance units.

Exit testTwo plants, two MIDI channels, one synth — the duet works.
09Calibration, per unitSCI

Thirty minutes logged on the dummy rig for baseline noise, then thirty on a plant. Both CSVs into /calibration, named by unit number.

Exit testSix CSVs committed, and the noise floor of each unit is a number we can quote.
Phase 2

Node pair

days 4–7
10Radio approach — timeboxed spikeRADIO

Two hours, then decide and nobody reopens it. Either RNode firmware on one Heltec acting as the radio for a Pi or laptop running RNS, or both boards native SX1262 with RNS over serial.

Exit testA written decision with the reason, in the repo. The timer stops at two hours either way.
11F4 — SaviaPacket end to endRADIOFW

A ≤48-byte CBOR feature packet every 60 s; the receiver feeds it into its own mapping engine and out to the speaker. Features travel, audio never does.

Exit testTouch a leaf in the greenhouse, the unit in the garden sings the change within 90 s — WiFi off, phones in airplane mode.
12Range walkRADIO

Log RSSI and SNR at 100, 500 and 1000 m along the valley, and publish the map. The Höllental walls decide the real number, not the datasheet.

Exit testA range map in the repo with the duty-cycle budget stated next to it.
Phase 3

Kits, docs, science

days 8–12
13Assemble 10 kit bagsDOCSANALOG

Labeled parts, a pre-flashed ESP32, and a printed two-page build guide using the photographs from step 07.

Exit testSomeone who has never soldered builds one in under two hours, unaided.
14F5 — the science prototypeSCIFW

AD8232 and ADS1115 on one node, mains notch in firmware — 50 Hz here. Record a real cut-leaf action potential.

Exit testThat CSV and its plot, as the first entry of the open dataset.
15Repo release v0DOCS

/firmware /cad /hardware /guide /calibration /dataset and a README, with a licence file in every folder — CERN-OHL-S for hardware, MIT for firmware.

Exit testA stranger can clone it and build the instrument without asking us anything.
16QA, per shipped unitANALOG

Charge test · two-hour soak on the dummy rig without a crash · BLE pair from cold boot under 15 s · all jacks continuity · enclosure number engraved.

Exit testA signed checklist travelling with each unit.
04

Hands wanted

Six roles. Come to the Commons Hub fablab, or write to us from the front page — say which tag is yours.

Firmware

FW

ESP32 and Arduino C++: interrupt capture, the mapping engine, BLE MIDI, the captive config portal.

two wanted

Analog & assembly

ANALOG

The 555 front-end, three perfboards, jack wiring, continuity and QA.

two wanted

CAD & fabrication

CAD

FreeCAD or Onshape, the laser kerf test, the E-1 box, the E-2 snap case, printed accessories.

one wanted

Radio

RADIO

LoRa and Reticulum, RNode flashing, SaviaPacket, the range walk.

one wanted

Docs & photography

DOCS

Shoot the build as it happens, write the two-page kit guide, translate between Spanish, English and German.

one wanted

Plant science

SCI

Electrode protocol, settle-time discipline, the cut-leaf action potential, dataset metadata.

one wanted

No experience bar beyond wanting to do the thing. Every step above was written so that someone who has not seen the project can pick it up, and the exit test tells you when you are finished.

05

Open questions

These get answered in Phase 0, not later. Each one blocks work downstream of it.

What is the exact kerf of the Hub laser?Every E-1 panel dimension is downstream of it, so the test comb is cut before any panel.
SX1262-native, or RNode over serial?Two hours of spike, then the decision is closed for the residency and nobody reopens it.
Which phone synth honours CC1 and CC74?Test three apps; the winner goes into the build guide as the recommendation.
06

Reference

The full spec for each stage — open the one you are building.

Sense — reading the plant

three options, one default

S-A · Pulse — 555 resistance oscillator

The plant’s tissue sits in the timing path of a 555 running astable. Its changing resistance — typically 50 kΩ to 2 MΩ between electrodes — changes the pulse rate. The microcontroller timestamps every rising edge on an interrupt pin and works with pulse-interval deltas, not absolute values, which is what cancels most of the drift.

  • NE555, a 4.7 nF film cap, two 10 kΩ resistors, a protection diode and electrode leads — about €1.50.
  • A 1–10 kHz pulse train. The jitter is the data.
  • It measures bulk resistance — water, ions, temperature — not true biopotentials, and leaves no waveform to log.

Verdict: every residency unit and every kit. This is the musical instrument.

S-B · Wave — biopotential front-end

An AD8232 single-lead ECG module (~€6) repurposed for plant surface potentials: a differential measurement between two tissue electrodes against a reference rod in the soil, the instrumentation-amp gain bringing µV–mV potentials into ADC range. Sample it with an ADS1115 at 128–250 SPS — the ESP32’s internal ADC is too noisy for this. Add an RC low-pass near 40 Hz and notch the mains in firmware: 50 Hz in Austria, 60 Hz in Mexico.

Fussier — gel quality matters, motion shows up as artifact, and it needs a fifteen-minute settle — but you can see an action potential when a leaf is cut, and the waveform is loggable for the open dataset.

S-C · Both on one board

The 555 plays music with no latency while the AD8232 logs science-grade waveforms. Two GPIOs and one extra module. This is the v1 architecture, and it is where the instrument and the sensor stop being different products.

Electrodes

  • Ag/AgCl ECG or TENS gel pads — leaves and stems. Best signal, hygienic per plant, available in any pharmacy. The default.
  • Gold or stainless clips with conductive gel — performance, where plants are swapped fast. Reusable; carry a gel tube.
  • A stainless rod, 3–5 cm — the soil reference for S-B. Any hardware store.

Leads are shielded audio cable into a 3.5 mm TRS jack on the enclosure: tip and ring are the electrodes, sleeve is the reference.

Brain — the microcontroller

M-A for instruments, M-B for nodes
 M-A · ESP32 DevKitCM-B · Heltec LoRa32 V3M-C · LilyGo T-Beam
ChipESP32ESP32-S3 + SX1262 + OLEDESP32 + SX1276/1262 + GPS + 18650
Price~€8~€20~€30
BLE MIDIyesyesyes
LoRa—built inbuilt in
Best forinstruments and kitsthe mesh nodesforest sentinels, solar

All three run the same firmware behind build flags. Fifteen M-A boards, two M-B, and M-C waits for the wildfire work.

Voice — signal to sound

four outputs, stackable

V-1 · BLE MIDI to a phone or laptop synth

The ESP32 advertises as a standard MIDI-over-BLE device and pairs straight with iOS, Android and macOS synth apps and DAWs. Latency lands around 10–20 ms. Zero extra hardware, and it is how the residency units ship.

V-2 · Standalone voice — I2S DAC and speaker

A MAX98357A amp (~€4) and a 3 W speaker, driven by a firmware wavetable synth: two oscillators, sine and triangle, one envelope, around three hundred lines. The unit sings by itself in the garden. A SAM2695 module does General MIDI in hardware for ~€15 if the crew would rather not write DSP.

V-3 · CV and gate — for the rig

An MCP4725 12-bit DAC gives 0–5 V pitch CV on a 3.5 mm mono jack, with a gate line from a GPIO through a transistor. It plugs into Eurorack, semi-modular and volca-class gear. One €3 module turns Savia into stage equipment. The H11L1 optocoupler circuit adds DIN-5/TRS serial MIDI for €2. Both go into the three performance units.

V-4 · Network voice

Features travel over LoRa and the far node re-synthesizes locally. The plant’s rhythm travels as a score, not a recording — which is also the engineering truth: LoRa cannot stream audio.

The mapping engine

how a pulse train becomes music

Input is timestamped rising edges from the 555, and on the science path a sampled waveform.

  • Keep a rolling buffer of the last N = 32 intervals.
  • Compute the absolute difference between consecutive intervals, with rolling mean and variance.
  • Threshold: emit a note when that change exceeds k·σ, k default 1.0. The plant’s changes play; a resting plant is nearly silent. That is both musically and philosophically correct.
  • Pitch: map the magnitude logarithmically onto a scale table — C-minor pentatonic over three octaves by default, with dorian, hirajoshi, whole-tone and chromatic-off selectable.
  • Velocity: the normalized change, so soft events are soft notes.
  • Gate: the current mean interval, clamped between 80 ms and 2 s.
  • Controllers: rolling variance to CC1, the five-minute baseline drift to CC74, spike density per minute to CC11. These make the plant’s state audible as timbre even between notes.
  • Root and key are externally settable over a BLE characteristic or serial — the hook that lets a performer set the key the plant plays in.

The science path adds a spike detector — derivative threshold with a 2 s refractory — that accents real action potentials, and logs (t, mV) CSV at 100 SPS with a session metadata file: species, location, weather, event tags.

Ensemble mode gives each unit a MIDI channel from 1 to 8 and a name — several plants into one DAW is the garden quartet. Configuration is a WiFi captive portal at savia.local: scale, root, channel, thresholds, output toggles, over-the-air update. There is no app to build.

Network — the mycelial layer

Reticulum, not LoRaWAN

LoRaWAN needs gateways and a network server. Reticulum is serverless and encrypted end to end, and it matches how the rest of this project is built.

OptionTopologyHardwareUse
N-1node to node, direct2× Heltec V3 as RNodesthe residency demo: two plants, one message, no internet
N-2mesh via a transport nodePi Zero 2 W + RNodea multi-node garden; the Pi also logs the dataset
N-3sentinel fieldT-Beam + 18650 + 1 W solarthe research slope: wake every ten minutes, sample, send, sleep

The regulation writes the protocol

EU 868 MHz in Austria at roughly 1 % duty cycle means about 36 seconds of airtime per hour per node. Mexican and US builds use 915 MHz. So the unit of the protocol is a feature packet, never raw signal: a CBOR object of 48 bytes or less carrying an id, a timestamp, the mean interval, the variance, spikes per minute, baseline drift, battery, temperature and humidity — every 60 s in a garden, every 600 s for a sentinel, plus an event-triggered packet on spike bursts.

The receiving node feeds the packet into its own mapping engine, and the far plant plays here. Stock antennas give 1–5 km line of sight; valley walls will shape the real number, so we walk it and publish the map. Every node carries a BME280 — session data without weather context is scientifically worthless.

Power

a full evening, on a battery
BuildSourceRuntime
Instrument, BLE active2000 mAh LiPo with a TP4056 USB-C charger, MT3608 boost or a direct 3.3 V LDO10–14 h
Node, LoRa duty-cycledthe same celldays
Sentinel, deep sleep on a ten-minute cycle18650 and solarmonths

Hard rules: a power switch on the enclosure face; charging while playing must work; the battery lives in a printed cradle, never loose; a fuse or PTC on the cell.

Enclosure and CAD

what the fabrication crew produces

FreeCAD or Onshape, so the files are open and shareable. Export DXF and SVG for the laser, STL and 3MF for the printer, and STEP masters.

E-1 · Residency edition

3–4 mm birch ply, a finger-jointed six-panel box, roughly 110 × 70 × 35 mm. The face carries the power switch, the electrode jack, the CV jack, DIN/TRS MIDI, USB-C, two status-LED light pipes, and an engraved unit number. Inside: a printed standoff tray and a battery cradle. Panel thickness and kerf are parameters, not constants — the laser’s kerf is measured before any panel is cut.

E-2 · Kit edition

A two-part PETG snap fit, same port layout, printing in under three hours with no supports. Made to be remixed.

E-3 · Garden stake

A printed body with an O-ring lid, a ground spike, an antenna gland, and a solar lid variant. It is a later build, but the mounting gets modelled now.

Accessories, all printable: an electrode clip with strain relief, a soft TPU leaf clip, and a wall or tripod mount with a ¼-20 insert for performances.

07

Parts

Everything but the radios is over the counter. Buy 20 % spares on passives and two spare ESP32s.

#PartQty€ eachSourceGoes into
1ESP32-WROOM DevKitC18.00Conrad / AZ-Deliveryinstrument + kit
2NE555 timer, DIP10.50Conradinstrument + kit
3Film cap 4.7 nF + R/C assortment12.00Conradinstrument + kit
43.5 mm TRS panel jack32.00Conradinstrument + kit
5TENS/ECG gel electrodes, pack15.00pharmacyconsumable
6Shielded electrode lead12.00cut audio cableinstrument + kit
7LiPo 2000 mAh + TP4056 USB-C18.00Conrad / Amazon.deinstrument + kit
8MCP4725 12-bit DAC13.00Amazon.deperformance
9H11L1 + DIN/TRS MIDI parts12.00Conradperformance
10Switch, LEDs, perfboard, headers, wire—4.00Conradinstrument + kit
11Enclosure — birch ply or PETG12.00Hub fablabinstrument + kit
12Heltec LoRa32 V3120.00Amazon.denode
13BME28014.00Amazon.denode
14AD8232 front-end16.00Amazon.descience
15ADS1115 16-bit ADC14.00Amazon.descience
16MAX98357A I2S amp + 3 W speaker14.00Amazon.denode
17Stainless rod, 3–5 cm10.50hardware storescience
One instrument — S-A + M-A + V-1/V-3—30–38

Published in full because an open-hardware claim you cannot check is a slogan. Prices are indicative and want real supplier quotes before any run.