English (primary) · Русский · Deutsch · Português · Español · Français · Italiano · Polski · Türkçe · Українська · Tiếng Việt · 中文 · 日本語 · 한국어 · हिन्दी
An open platform for ultrasonic power and data transfer through solid metal walls — "through steel without a single hole", built with garage-grade means.
Try it now (no hardware needed): python3 software/sweep-map/sweep_map.py --mock
Paths in:
- A — dry-run: mock sweep + simulator (no bench)
- B — build stage 1: QUICKSTART.md → experiments/001
- C — contribute without hardware: prior-art / docs / translations / ADR comments (CONTRIBUTING.md)
Status: stage 0 — preparation · no hardware validation yet (simulator only; bounty for the first build) · 💰 250ドル bounty · shopping list: QUICKSTART.md
Docs are multilingual: English is primary and lives at the canonical paths; every other language mirrors the tree under translations/. Edit any language — CI translates and commits the rest (see CONTRIBUTING.md).
Stage 1 rig: Pi → DDS → half-bridge → transformer → piezo TX | steel | piezo RX → bridge → ADC → Pi
Radio waves don't pass through metal (Faraday cage), and a cable penetration means a hole, a seal, and a point of failure. Ultrasound, on the other hand, travels through metal just fine: a piezo element on each side of the wall turns it into a channel for power and data. Lab literature already proved the physics at serious levels (RPI: 50 W + 12 Mbit/s through 63.5 mm of steel; NASA JPL: up to ~kW through 5 mm of titanium) — those are existence proofs with specialized hardware, not this repo's garage BOM. The foundational patents have expired, and no open, reproducible platform exists yet — this repository is building one, starting at watts-class power and kbit/s data through 3–5 mm steel once stage 2 is measured.
| Stage | Deliverable | Success criterion | Expectation |
|---|---|---|---|
| 1. Sweep map | frequency response of the "Langevin–3 mm steel–Langevin" channel | pair resonance found, plot in experiments/001 | sim1, sim2 |
| 2. Watts | power into the load at resonance | ≥0.5 W through 3 mm of steel, protocol in experiments/002 | sim4 |
| 3. Data | FSK/OOK over the same pair | ≥1 kbit/s error-free | sim5 |
| 4. Node | ESP32 + sensor in a welded-shut box, powered and telemetered by sound alone | ≥1 h of autonomous operation | sim4 |
| 5. Publication | first independent replication + article/how-to + Zenodo snapshot | third-party reproduction documented | — |
Every block below expands: inside is a digest sufficient to work from, plus a link to the full document.
🛒 From zero to a working rig: what to buy and in what order — QUICKSTART.md
Budget: (削除) 210ドル minimum, 20ドル). Optional but strongly recommended: a USB oscilloscope (~60ドル–80).300ドル comfortable (knock off 70,ドル full BOM), mechanics (120ドル if you already own a Pi, a soldering iron, and a bench power supply). Three baskets: tools ( (削除ここまで)120ドル), rig electronics (
Critical path — AliExpress shipping (3–4 weeks): order the electronics on day one. Key decision: buy 4 Langevin transducers from the same batch — the sweep will pick the best pair (why).
While it ships: dry-run the pipeline with no hardware —
python3 software/sweep-map/sweep_map.py --mock
Done when (by stage): stage 1 — sweep peak reproduces across two runs to within <200 Hz (experiments/001); stage 2 — ≥0.5 W into a known load through 3 mm of steel and an LED lit from the RX side (experiments/002).
📚 Theory in a minute — docs/00-theory.md
The piezo TX is pressed against the wall and drives a longitudinal wave into it; the piezo RX on the other side turns it back into electricity. Speed of sound in steel: ~5900 m/s.
Two operating modes:
| Mode | Frequency | Resonance set by | Yields | Status |
|---|---|---|---|---|
| A — Langevin transducers | 40 kHz | the transducer pair (wall ≪ λ — a "membrane") | watts, kbit/s | starting mode (stages 1–4, ADR-0001) |
| B — discs | 0.6–1 MHz | thickness resonance of the wall (comb) | hundreds of mW, hundreds of kbit/s | branch after the first watts; needs automatic frequency tracking |
The main losses: resonance mismatch within the pair (±1 kHz for cheap Langevin transducers), acoustic contact quality (epoxy > grease couplant + clamp > dry pressure), misalignment, resonance drift with temperature. The answer to all of them is the same: a sweep map before every change to the setup.
📈 What the rig should show: expectation plots from the simulator — software/simulator/channel_sim.py
A semi-empirical channel model (not FEM, not lab data — intuition for "what the sweep should look like and what to aim at"). Assumptions are explicit in channel_sim.py (loaded Q≈40, contact k-factors, chain η≤40%). Regenerate with: python3 channel_sim.py --out ../../docs/img.
Stage 1 — sweep. A narrow peak near ~40 kHz; the model’s placeholder contact multipliers are grease:dry:gap = 1 : 0.25 : 0.02 (i.e. grease ×ばつ dry and ×ばつ air gap). No peak means a problem with the contact or the pair:
Why 4 Langevin transducers, not 2. Under Q≈40, a 1.5 kHz resonance mismatch within the pair drops model power ×ばつ:
Stage 3 — data. OOK runs into resonator ringing (model Q~40 → τ≈0.3 ms): 1 kbit/s is clean, at 5 kbit/s the eye is closed. Going faster takes mode B:
Receiver power budget. Shaded bands are targets (mode A 0.5–5 W if stage 2 lands; mode B lower). Realistic first loads are duty-cycled ESP32 / BLE / LED; Wi-Fi is shown as a peak-draw marker, not a continuous promise:
For later (mode B). The plate turns transparent at a comb of thickness resonances — the frequency has to be tracked:
⚠️ Safety — read before first power-up — docs/02-safety.md
- Tens to hundreds of volts on the piezo once the stage-2 driver is online — the TVS on the receive side goes in BEFORE the first powered run; keep your hands off the leads.
- Mains — only through a bench power supply / isolation; ultrasonic-cleaner driver boards are galvanically tied to the mains.
- Ears — at non-trivial power, operate transducers pressed against metal; never run high-power airborne ultrasound without an enclosure.
- Heat — an unclamped Langevin transducer overheats in minutes at power; clamp before raising current (brief low-current electrical bring-up only — see driver README).
- Shards — piezoceramic is brittle: an overtightened bolt or an impact means shards; wear safety glasses for any mechanical work.
First driver power-up: bench supply current limit 0.2 A; full sequence in hardware/driver/ and docs/02-safety.md.
🧭 Prior art and patent hygiene — docs/01-prior-art.md
Every technical decision must trace back to a "free" source (expired patents, papers). The foundation: US5982297 (Aerospace Corp — the basic recipe for a through-wall piezo pair), US7902943 (Caltech/JPL — Sherrit's feed-through), US9361877 (Univ. Oklahoma — a complete transceiver system); all dead. Key papers: Lawry 2013 (50 W + 12.4 Mbit/s through 63.5 mm of steel), Sherrit/NASA (a 100 W lamp), Yang 2015 (survey).
Not to be copied while still alive: RPI's OFDM allocation and full-duplex scheme and Drexel's conformal transducers (US, to ~2032–2033 — stages 1–4 need none of them), plus the families a 2026-08 search added: US8594572B1 (US Navy — reads on the bare power channel itself; US, to 2032; Welle 1997 is the prior-art answer), EP3723304B1 (ABB — power spectrum below the data spectrum; DE/GB, to 2039; the planned same-carrier load-modulation uplink stays outside it), Ultrapower (in-pipe sensor with convex/concave arrays, or a rod through the wall; US, to 2035 — we use flat pads and no rod). Claim readings, statuses and design-arounds: docs/01-prior-art.md.
Architecture decisions are recorded in docs/decisions/ (ADR).
🔌 Hardware and firmware — hardware/, firmware/
- hardware/bom/bom-stage1.csv — stage 1 shopping list.
- hardware/schematics/ — circuit schematics (generated from code): driver, receiver, Pi pinout, harvester node.
- hardware/driver/ — TX driver: IR2110 half-bridge + ×ばつIRF540, matching transformer (a Langevin transducer is a capacitive load!). KiCad board comes after the breadboard prototype checks out.
- hardware/receiver/ — receiver, stage by stage: Schottky bridge → ADC (stage 1) → load (stage 2) → LTC3588 + supercapacitor + ESP32 (stage 4).
- firmware/node-esp32/ — stage 4 node (stub): deep sleep, sensor readout, BLE advertising, budget of 1–5 mW average.
💻 Software: measurements and the simulator — software/
- software/sweep-map/sweep_map.py — the stage 1 workhorse: DDS sweep → ADC readings → CSV + frequency-response plot. Has
--mockfor a run without hardware. On the Pi:raspi-config→ enable SPI and I2C;pip install spidev smbus2 matplotlib. - software/simulator/channel_sim.py — generator of the expectation plots (
pip install numpy matplotlib). - software/simulator/material_map.py — the same channel model across wall materials — titanium, aluminum, glass, ceramics, plastics, concrete; the study and verdicts: docs/06-materials.md.
- data/ — raw logs; CSV/PNG stay out of git, only curated plots go into git inside the experiment's directory.
🗺️ Where to apply this: barriers, channels, niches — [docs/04-hybrid-channels.md](docs/04-hybrid-channels.md), docs/05
There is no universal channel — the platform matches the physics to the barrier: piezo-acoustics (primary: steel/aluminum with contact — watts and kbit/s), EMAT (dirty/hot metal, no contact — data), low-frequency magnetics (vacuum sandwich walls of dewars — bits/s). Honest dead ends: rubber-lined/composite walls, bubbling liquid in the path.
Niche priority: (1) lab vacuum chambers and cryostats — the open-source-hardware audience, no certifications; (2) fermentation tanks — a proving ground within walking distance; (3) sealed battery packs — the flagship case (thermal-runaway detection without a penetration into the pack). The receiver discovery and auto-tuning protocol (a Qi analog): docs/03-discovery-protocol.md.
📁 Directory layout
docs/ theory, prior art, safety, applications, decision log (ADR)
docs/img/ expectation plots (generated by software/simulator/channel_sim.py)
hardware/ BOM, driver (half-bridge), receiver (rectifier/harvester)
firmware/ node firmware (ESP32 — stub until stage 4)
software/ measurement scripts (frequency-response sweep map) and channel simulator
experiments/ experiment protocols — from the template, one directory = one experiment
data/ raw logs (large files stay out of git)
- Reproducibility from zero. Anyone with a soldering iron and ~210ドル can reproduce the result from this repo alone.
- Every experiment is a protocol. No "it kind of worked": experiments/TEMPLATE.md is mandatory.
- Patent hygiene. We build on the expired layer (docs/01-prior-art.md); decisions are recorded in docs/decisions/.
- Measurement first, opinion second. A sweep map before any conclusions about the channel.
Code — Apache-2.0, hardware — CERN-OHL-W v2, documentation — CC-BY-4.0; full texts in LICENSES/. Anyone may fork and build on this, commercially included; patent protection comes from the grants and retaliation clauses in the licenses plus a prior-art strategy. The full scheme and the defensive-publication protocol: LICENSES.md; contribution rules: CONTRIBUTING.md.