Skip to the content
4 layers135 × 92 mmMdx1, the printed circuit board in 3D

Open multi-frequency + pulse-induction metal detector: KiCad hardware, search coil, portable-C firmware, iOS/Android apps. Experimental, unbuilt.

Size
135 × 92 mm
Copper layers
4
Thickness
1.6 mm
Parts
325
Nets
352
Pads
1,402
Tracks, vias
3,065, 1,020
Pours
5
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
9 Sep 2026
Updated
18 Oct 2026

Overview

Mdx1 is an open-source printed circuit board by pingpongshow, from the pingpongshow/MDX-1 repository on GitHub. It is a 4-layer board of 135 × 92 mm with 325 parts on 352 nets, routed with 3,065 tracks and 1,020 vias.

It is built around the UCC27714D, BAS416 and SS34. Its parts include 121 capacitors, 100 resistors, 10 diodes, 4 ICs and 4 transistors.

Main components

3

README

README.md

MDX-1

An open, simultaneous multi-frequency + pulse-induction metal detector — hardware, search coil and firmware.

MDX-1 is a from-scratch detector design: a KiCad schematic and 4-layer main board, a 2-layer user-interface board, a hand-wound search coil, portable C firmware with a host simulator and test bench, and iOS/Android companion apps. The receive and transmit engine is specified around a coherent, DSP-first architecture:

  • Five simultaneous VLF frequencies — 5.12, 10.24, 15.36, 20.48 and 40.96 kHz (harmonics 1, 2, 3, 4, 8 of a 5.12 kHz fundamental) from a single optimised 3-level look-up-table waveform, so every line falls exactly on a DFT bin and demodulates with one coherent transform.
  • Two 24-bit, 512 kSPS converters — one digitises the receive coil, the second digitises the transmit current for exact VRX/ITX normalisation. Fixed gain, no AGC or blanking.
  • A 100 V bipolar pulse-induction mode on the same H-bridge, plus a hybrid mode that time-interleaves PI bursts between VLF periods.
  • STM32H743 (Cortex-M7, 480 MHz) with single-crystal-coherent timing, a Bluetooth audio module, a Sharp memory LCD, GNSS find-logging and an IMU for swing-aware ground tracking.

Status: experimental, design stage

This is a paper design that has not been built or field-tested. The schematic is ERC-checked, the PCBs are placed and routed, the firmware core passes its host test bench, and the STM32 target layer is written against the CubeH7 HAL but has not run on hardware. Nothing here has been fabricated, assembled or measured. Component values, footprints and firmware behaviour may be wrong. Verify everything against the primary datasheets before ordering or building.

The transmit stage switches up to 100 V through an H-bridge into an inductive load. Treat it as a hazardous-voltage circuit: it can injure you and destroy parts if mis-built. Build and power it only if you are competent with high-voltage switching electronics.

MDX-1 main board, 3D top view

Main board, populated (3D view). Per-layer plots for both boards are in hardware/mdx1/images/.

Layout

PathWhat
hardware/mdx1/mdx1.kicad_proKiCad project. Open this.
hardware/mdx1/*.kicad_schRoot sheet + hierarchical sheets (power, tx_driver, rx_frontend, adc, mcu, ui_audio_rf, coil).
hardware/mdx1/mdx1.kicad_pcb135 × 92 mm 4-layer main board — footprints, nets, pours, routing, outline.
hardware/mdx1/mdx1_ui.kicad_pcb82 × 60 mm 2-layer UI board (LCD, keypad, pinpoint trigger, power key, LEDs, front-light).
hardware/mdx1/MDX*.kicad_sym, MDX.pretty/Project-local symbol/footprint libraries.
hardware/mdx1/fab/Fabrication packages: Gerbers, drill, assembly BOM and pick-and-place for both boards (Gerbers/, BOM/, PNP/); interconnect BOM; enclosure DXFs (Case/).
hardware/mdx1/images/Rendered board views: per-layer plots (copper, silkscreen) and a 3D top view of each board.
firmware/Portable core (core/), host physics simulator + test bench (sim/), STM32H743 target layer (stm32/). make test runs the bench.
app/ios/SwiftUI companion app (BLE): live status, on-detector menu, finds map, diagnostics; built-in demo detector.
app/android/Kotlin/Compose port of the companion app.
docs/MDX-1_design_report.htmlHardware design report.
docs/MDX-1_coil_manual.htmlSearch-coil build manual and off-the-shelf coil path.
docs/MDX-1_firmware_guide.htmlFirmware guide with test evidence and screen renders.
docs/MDX-1_assembly.mdBoard population guide (build order, critical parts, mounting).
docs/MDX-1_bringup.mdStaged first-power procedure — populate/verify one subsystem at a time.
docs/MDX-1_link_protocol.mdPhone-link protocol (frames, item table, status packet, actions).
docs/MDX-1_schematic.pdfAll schematic sheets.
docs/datasheets/Third-party component datasheets used during the design review — not included in this repository (vendor copyright); part numbers are in the BOM under hardware/mdx1/fab/.
tools/Design toolchain — see below.

The toolchain

The KiCad schematic and boards are the source of truth — they are hand-placed and hand-routed. The remaining tools are read-only against the boards or operate on design inputs; none of them modify the .kicad_pcb / .kicad_sch files. (The original placement/schematic generators were removed to prevent accidental overwrites of the finished layout.)

ToolPurpose
tools/fab_jlc.pyReads the boards and writes the JLCPCB fabrication package: Gerbers + drill, assembly BOM and CPL for both boards. Does not modify the boards.
tools/bom_data.jsonMaintained part database (manufacturer part numbers, packages, pricing) read by fab_jlc.py and build_review.py.
tools/tx_waveform_opt.pySimulated-annealing optimiser for the 3-level, 5-line transmit waveform → tx_waveform.json.
tools/coil_calc.pyCoil electromagnetics (Neumann self/mutual inductance, null geometry, field) → coil_calc.json.
tools/build_review.py, build_coil_manual.pyRegenerate the BOM-review and coil-manual documents under docs/.
tools/gen_fonts.py, pbm2png.pyLCD bitmap fonts; simulator screen-render conversion.

To regenerate the fabrication package after any board change (from KiCad's bundled Python):

bash
/Applications/KiCad/KiCad.app/Contents/Frameworks/Python.framework/Versions/Current/bin/python3 tools/fab_jlc.py

Firmware

bash
cd firmware
make test        # build the portable core against the host simulator and run the test bench
make screens     # render the UI screens from the simulator

The core (firmware/core/) is target-independent C: DSP, detector logic, UI, phone link, audio. The simulator (firmware/sim/) provides a synthetic coil/target/ground model so the whole signal chain runs and is tested on a desktop. The STM32 layer (firmware/stm32/) maps the core onto the H743 peripherals.

Before fabricating

  • Run DRC to clean and re-confirm the design rules for your fab.
  • Get a live distributor quote against the current BOM (part availability changes).
  • Re-verify every configuration strap and value against the primary datasheets in docs/datasheets/.

License

Copyright © 2026 Stephen Packer.

This project — hardware, search-coil design, firmware, apps and documentation — is licensed under the Creative Commons Attribution-NonCommercial 4.0 International License (CC BY-NC 4.0). See LICENSE for the full text.

In short, you are free to share and adapt the material for non-commercial purposes, as long as you give appropriate credit. Commercial use is not permitted without separate written permission from the copyright holder.

Note: CC licenses are not designed specifically for software. CC BY-NC 4.0 is applied here to express a single non-commercial intent across the whole project (hardware, firmware and docs together). For commercial licensing of any part, contact the author.

Disclaimer

Provided as-is, with no warranty. This is an unbuilt, untested hobby design involving hazardous voltages. You are responsible for verifying correctness and safety before building or powering anything. Comply with the radio-emissions and other regulations in your jurisdiction before operating a transmitter of any kind.

Parts

325
QtyValueFootprintReferences
29100nCapacitor_SMD:C_0402_1005MetricC4, C10, C28, C44, C45, C100, C114, C117, C118, C119, C120, C121, C122, C123, C124, C125 +13
201uCapacitor_SMD:C_0603_1608MetricC5, C24, C25, C70, C72, C73, C74, C75, C77, C79, C80, C81, C82, C108, C109, C110 +4
1310kResistor_SMD:R_0402_1005MetricR10, R11, R16, R19, R37, R49, R50, R53, R54, R60, R64, R98, R200
10100kResistor_SMD:R_0402_1005MetricR7, R8, R14, R15, R24, R46, R69, R70, R107, R110
101k 0.1%Resistor_SMD:R_0402_1005MetricR71, R72, R74, R75, R76, R77, R80, R81, R82, R83
810uCapacitor_SMD:C_0805_2012MetricC68, C69, C76, C84, C97, C111, C112, C113
647kResistor_SMD:R_0402_1005MetricR17, R36, R101, R102, R103, R104
5100RResistor_SMD:R_0402_1005MetricR78, R79, R84, R85, R106
510u 10VCapacitor_SMD:C_0805_2012MetricC2, C3, C6, C9, C26
54u7Capacitor_SMD:C_0603_1608MetricC20, C23, C29, C35, C86
41MResistor_SMD:R_0402_1005MetricR21, R62, R67, R68
4220nCapacitor_SMD:C_0402_1005MetricC11, C34, C104, C105
422kResistor_SMD:R_0402_1005MetricR18, R29, R39, R63
42u2Capacitor_SMD:C_0603_1608MetricC89, C90, C106, C107
4330p C0GCapacitor_SMD:C_0402_1005MetricC59, C60, C63, C64
44R7Resistor_SMD:R_0402_1005MetricR47, R48, R51, R52
4BAS416Package_TO_SOT_SMD:SOT-23D10, D11, D12, D13
4BSC320N20NS3 GPackage_SON:Infineon_PG-TDSON-8_6.15x5.15mmQ4, Q5, Q6, Q7
4MountingHole_3.2mm_M3MountingHole_3.2mm_M3H1, H2, H3, H4
31uCapacitor_SMD:C_0402_1005MetricC67, C102, C103
31u 25VCapacitor_SMD:C_0603_1608MetricC17, C40, C42
322u 25VCapacitor_SMD:C_1210_3225MetricC14, C15, C16
32u2 250VCapacitor_SMD:C_2220_5750MetricC38, C39, C48
34k7Resistor_SMD:R_0402_1005MetricR12, R13, R109
2100k (FORMAT=1 frame-sync)Resistor_SMD:R_0402_1005MetricR91, R96
2100k (FSMODE=0 slave)Resistor_SMD:R_0402_1005MetricR90, R95
2100k (HR=1)Resistor_SMD:R_0402_1005MetricR92, R97
210RResistor_SMD:R_0402_1005MetricR34, R44
210k (int LDO)Resistor_SMD:R_0402_1005MetricR89, R94
210p C0GCapacitor_SMD:C_0402_1005MetricC93, C94
210u 25VCapacitor_SMD:C_0805_2012MetricC19, C22
21kResistor_SMD:R_0402_1005MetricR56, R59
21u C0G/filmCapacitor_SMD:C_1210_3225MetricC51, C52
2220n 50VCapacitor_SMD:C_0603_1608MetricC41, C43
222u 6.3VCapacitor_SMD:C_0805_2012MetricC7, C8
23n3 C0GCapacitor_SMD:C_0402_1005MetricC58, C62
2442kResistor_SMD:R_0402_1005MetricR30, R35
247RResistor_SMD:R_0402_1005MetricR65, R66
249k9 0.1% SET (100uA)Resistor_SMD:R_0402_1005MetricR25, R26
24n7Capacitor_SMD:C_0402_1005MetricC30, C101
24u7 10VCapacitor_SMD:C_0603_1608MetricC1, C27
24u7 25VCapacitor_SMD:C_0805_2012MetricC18, C21
24u7 XAL4020Inductor_SMD:L_Coilcraft_XAL4020-XXXL2, L3
25k1Resistor_SMD:R_0402_1005MetricR1, R2
26.8p C0GCapacitor_SMD:C_0402_1005MetricC95, C96
260k4 (HR mode)Resistor_SMD:R_0402_1005MetricR88, R93
2619kResistor_SMD:R_0402_1005MetricR40, R41
2680p C0GCapacitor_SMD:C_0402_1005MetricC55, C56
29k1Resistor_SMD:R_0402_1005MetricR57, R58
2NSVBAT54SWT1GPackage_TO_SOT_SMD:SOT-323_SC-70D8, D9
2SS34Diode_SMD:D_SMAD2, D3
2THS4551 (G=1)Package_DFN_QFN:VQFN-16-1EP_3x3mm_P0.5mm_EP1.68x1.68mmU16, U17
2UCC27714DPackage_SO:SOIC-14_3.9x8.7mm_P1.27mmU10, U11
2US1D (200V fast)Diode_SMD:D_SMAD6, D7
10R (addr)Resistor_SMD:R_0402_1005MetricR108
1100R (VIN filter)Resistor_SMD:R_0402_1005MetricR20
1100n 250VCapacitor_SMD:C_1206_3216MetricC49
1100u 50VCapacitor_THT:CP_Radial_D8.0mm_P3.50mmC31
1105R 0.1% (Rg)Resistor_SMD:R_0402_1005MetricR73
110R (LCD supply)Resistor_SMD:R_0402_1005MetricR27
110k (TS, DNP w/ NTC)Resistor_SMD:R_0402_1005MetricR6
110k 0.1%Resistor_SMD:R_0402_1005MetricR87
110k 1W (bleed)Resistor_SMD:R_2512_6332MetricR45
110m 1% (gauge)Resistor_SMD:R_1206_3216MetricR9
110nCapacitor_SMD:C_0402_1005MetricC36
110n (CP)Capacitor_SMD:C_0402_1005MetricC12
110nFCapacitor_SMD:C_0402_1005MetricC128
110u 50VCapacitor_SMD:C_1210_3225MetricC32
1113kResistor_SMD:R_0402_1005MetricR22
1140k (100kHz)Resistor_SMD:R_0402_1005MetricR38
116.384 MHz 3225Crystal:Crystal_SMD_3225-4Pin_3.2x2.5mmY1
11k1 (IIN 1.4A)Resistor_SMD:R_0402_1005MetricR3
11nCapacitor_SMD:C_0402_1005MetricC50
11n 250VCapacitor_SMD:C_1206_3216MetricC47
11u5 XAL4020Inductor_SMD:L_Coilcraft_XAL4020-XXXL1
120k0Resistor_SMD:R_0402_1005MetricR42
120m (sense)Resistor_SMD:R_1206_3216MetricR33
120m 1% shuntResistor_SMD:R_2512_6332MetricR55
122RResistor_SMD:R_0402_1005MetricR105
122u XAL7050Inductor_SMD:L_Coilcraft_XAL7050-XXXL4

The 248 most common of 325 parts.

More from pingpongshow/MDX-1

1
  • 2 layers82 × 60 mmMdx1 ui, the printed circuit board in 3D

    Mdx1 ui

    pingpongshow/MDX-1

    Open multi-frequency + pulse-induction metal detector: KiCad hardware, search coil, portable-C firmware, iOS/Android apps. Experimental, unbuilt.

    19 parts

Similar boards

  • 4 layers70.7 × 134 mmLed supply nucleo, the printed circuit board in 3D

    Led supply nucleo

    jreeve-nl/led-supply

    Nice power factor corrected switching LED lighting driver.

    86 parts1
  • 2 layers77 × 100 mmBeamer1, the printed circuit board in 3D

    Beamer1

    shufps/diy-projector-clock

    DIY Projector Clock

    283 parts172
  • 4 layers140 × 120 mmPianoMatrice, the printed circuit board in 3D

    PianoMatrice

    manvalan/MuonScope

    Piano di rivelazione MuonScope con 16 fotodiodi VBPW34S in matrice 4×4 a passo 10 mm, per il bus MIKILAB REV5.1.

    490 parts
  • 4 layers40 × 40 mmCAM MK2.1, the printed circuit board in 3D

    CAM MK2.1

    ISSUIUC/ISS-PCB

    Building custom flight computers

    114 parts33
  • 2 layers29 × 100 mm02 loop env, the printed circuit board in 3D

    02 loop env

    bmurauer/cynthia

    Plans for my modular synthesizer

    61 parts
  • 4 layers95 × 95 mmCube motherboard, the printed circuit board in 3D

    Cube motherboard

    willem-pennings/balancing-cube

    A cube that balances itself in a corner or edge using reaction wheels

    52 parts1.1kGPL-3.0
  • 6 layers235.1 × 213.7 mmQuiver PT3 Main PCB rounded, the printed circuit board in 3D

    Quiver PT3 Main PCB rounded

    Arrow-air/project-quiver

    Project Quiver documentation, designs, and project artifacts.

    164 parts617CERN-OHL-S-2.0
  • 2 layers103.3 × 63.7 mmUsb power hub, the printed circuit board in 3D

    Usb power hub

    dilshan/usb2-power-hub

    4-Port High Power USB 2.0 Hub

    100 parts189MIT

Questions

How big is the Mdx1 PCB?

It measures 135 × 92 mm and has 4 copper layers, 1.6 mm thick.

What parts does the Mdx1 use?

325 parts, built around the UCC27714D, BAS416 and SS34. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the Mdx1 KiCad files?

From the pingpongshow/MDX-1 repository on GitHub, at the commit this page was made from: the board is hardware/mdx1/mdx1.kicad_pcb and its schematic hardware/mdx1/adc.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Mdx1 design in my own project?

Its repository states no licence, so its author keeps all rights: ask pingpongshow before reusing the design.