Open-source coin metal analyzer using inductive sensing Identifies metal alloy composition via attenuation curve fingerprinting
Author: Yuriy Kachmaryk | Location: Lviv, Ukraine | First published: 2026-03-08
- What is CoinTraceβ’?
- How It Works
- vs Competitors
- Hardware
- Wiring
- Getting Started
- Supported Metals
- Fingerprint Database
- Project Roadmap
- Prior Art
- Contributing
- License
CoinTraceβ’ measures the attenuation curve of a coin's electromagnetic response across 4 controlled distances using an LDC1101 inductive sensor. This creates a unique "fingerprint" that identifies the coin's metal composition β without touching, scratching or damaging the coin.
| Commercial verifiers (~$250β600) | CoinTraceβ’ (~$40) | |
|---|---|---|
| Method | Single resistivity value | Attenuation curve (4 points) |
| Frequency sweep | Fixed or single frequency | Single frequency (extensible) |
| Database | Closed, proprietary | Open community database |
| Coin identification | Metal type only | Specific coin fingerprint |
| Source code | Closed | GPL v3 open source |
| Price | $250β600 | ~$40 components |
CoinTraceβ’ takes 4 measurements at different distances and builds an attenuation curve unique to each metal:
Step 1: Baseline (no coin) β Rpβ, Lβ
Step 2: Coin at 0mm (direct) β Rpβ, Lβ
Step 3: Coin + 1mm spacer β Rpβ, Lβ
Step 4: Coin + 3mm spacer β Rpβ, Lβ
Size-independent normalization (key innovation):
ΞRpβ = Rpβ - Rpβ (absolute change)
ΞRpβ = Rpβ - Rpβ
ΞRpβ = Rpβ - Rpβ
k1 = ΞRpβ / ΞRpβ β independent of coin size!
k2 = ΞRpβ / ΞRpβ β independent of coin size!
Fingerprint vector:
F = [ΞRpβ, k1, k2, slope, ΞLβ]
Identification via Euclidean distance to known fingerprints:
dist = β((ΞRpβ - ref_ΞRpβ)Β² + (k1 - ref_k1)Β² + (k2 - ref_k2)Β²)
confidence = 1 - (dist / max_dist)
Different metals have different conductivity β different skin depth:
| Metal | Conductivity | Skin depth @ 1MHz | Curve shape |
|---|---|---|---|
| Silver 999 | 63 MS/m | ~67 Β΅m | Steepest |
| Copper | 59 MS/m | ~69 Β΅m | Very steep |
| Gold 999 | 45 MS/m | ~80 Β΅m | Medium |
| Aluminum | 37 MS/m | ~88 Β΅m | Medium |
| Steel | 6β10 MS/m | ~200 Β΅m | Flattest |
| Component | Model | ~Price |
|---|---|---|
| Main controller | M5Stack Cardputer-Adv (ESP32-S3) | ~$30 |
| Inductive sensor | LDC1101 Click Board (MIKROE-3240) | ~$27 |
| Spacers (1mm, 3mm) | 3D printed or cardboard | free |
| Total | ~$57 |
- ESP32-S3FN8 @ 240 MHz dual-core
- 1.14" TFT color display (240Γ135)
- 56-key keyboard
- 1750 mAh built-in battery
- microSD card slot (fingerprint database storage)
- WiFi + BLE 5.0
- BMI270 IMU (detects level positioning)
- USB-C (Serial + OTA updates)
LDC1101 Click EXT Header Pin GPIO
βββββββββββββββββββββββββββββββββββββββββ
SCK β Pin 7 β G40
MOSI β Pin 9 β G14
MISO β Pin 11 β G39
CS β Pin 13 β G5
INT (INTB) β Pin 3 β G4
GND β Pin 4 β GND
3.3V β Stamp-S3A 3V3 β 3V3
β οΈ Note: G40/G14/G39 are shared with microSD SPI bus. Use separate CS pins. Managed automatically in firmware.
βββββββββββββββββββββββββββββββ
β 1 (G3/RST) β β 2 (5VIN)β
β 3 (G4/INT) β β 4 (GND) β β LDC INT + GND
β 5 (G6) β β 6 (5VOUTβ
β 7 (G40/SCK) β β 8 (G8) β β LDC SCK
β 9 (G14/MOSI)β β 10(G9) β β LDC MOSI
β 11(G39/MISO)β β 12(G13) β β LDC MISO
β 13(G5/CS) β β 14(G15) β β LDC CS
βββββββββββββββββββββββββββββββ
Want to customize CoinTrace firmware or contribute code?
π Development Setup Guide β Complete guide for setting up VS Code + PlatformIO on Windows. Covers:
- Install development tools (VS Code, PlatformIO, drivers)
- Clone and build CoinTrace firmware
- Upload to M5Stack Cardputer-Adv
- Understand project structure and M5Stack API
- Troubleshooting and debugging
Beginner-friendly: Never coded before? The guide walks you through everything step-by-step.
β οΈ CoinTrace replaces the factory firmware and flash partition layout. Restoring to stock M5Stack firmware is always possible and takes ~5 minutes using M5Burner (free, no command line needed). Full restore instructions: STORAGE_ARCHITECTURE.md Β§18
Already have PlatformIO? Quick setup:
- PlatformIO already installed
- M5Stack Cardputer-Adv board
- LDC1101 Click Board (MIKROE-3240)
- 7 jumper wires
- USB-C cable (data + power)
# Clone repository
git clone https://github.com/xkachya/CoinTrace.git
cd CoinTrace/firmware
# Build and upload (PlatformIO)
pio run --target upload
# Monitor serial output
pio device monitor --baud 115200[env:cointrace-dev]
platform = espressif32@6.7.0
board = m5cardputer-adv ; Custom board JSON in boards/m5cardputer-adv.json
framework = arduino
upload_speed = 921600
build_flags =
-DESP32S3
-DARDUINO_USB_CDC_ON_BOOT=1
-DARDUINO_USB_MODE=1
-DCOINTRACE_VERSION=\"1.0.0-dev\"
lib_deps =
m5stack/M5Cardputer @ ^1.0.0
Wirecd tools/
pip install -r requirements.txt
python serial_monitor.py --port COM3 --baud 115200Outputs real-time CSV + live attenuation curve plot.
These 8 metal classes are implemented in the current firmware DB (FingerprintCache):
| Metal | DB code | Conductivity | Notes |
|---|---|---|---|
| Silver 999 | XAG999 |
63 MS/m | Steepest attenuation curve |
| Silver 925 | XAG925 |
~60 MS/m | Sterling silver |
| Silver 833 | XAG833 |
~53 MS/m | European 13-lot silver |
| Copper | XCU |
59 MS/m | |
| Nickel silver (zinc alloy) | XZNNIP |
~4 MS/m | Cu-Zn-Ni alloy; close to XCU in 5D space |
| Nickel | XNI |
14 MS/m | |
| Aluminum | XAL |
37 MS/m | |
| Steel (ferromagnetic) | XFE |
6β10 MS/m | Detected via ΞL axis; requires CLKIN HW |
| Metal | Conductivity | Notes |
|---|---|---|
| Gold 999 | 45 MS/m | Wave 9+ β requires calibrated samples |
| Gold 585 | ~27 MS/m | Wave 9+ |
| Silver 900 | ~57 MS/m | Wave 9+ |
Note: Gold is intentionally excluded from the current DB β it is physically similar to Silver 925 in RP space and requires high-quality reference samples to distinguish reliably. It will be added after S-5 (ferro-detection) and S-6 (Gold separation) research tasks.
CoinTraceβ’ uses a tiered fingerprint database:
π Community tier (free, open source): Common metals and popular coins. Schema + basic dataset published under CC BY-SA 4.0. Works fully offline.
π Premium tier (subscription, future): Extended database of 5000+ coins via cloud API. The service is commercial β the protocol stays open. GPL v3 requires open code, not free services.
Each fingerprint is a normalized measurement vector that is device-independent β k1 and k2 values are the same across all CoinTraceβ’ devices.
{
"version": 1,
"coin": {
"name": "Austrian Maria Theresa Thaler",
"year": 1780,
"country": "Austria",
"denomination": "1 Thaler",
"diameter_mm": 39.5,
"weight_g": 28.06,
"metal": "Silver 833"
},
"fingerprint": {
"dRp1": 312.4,
"k1": 0.714,
"k2": 0.388,
"slope": -89.2,
"dL1": 724.1
},
"metadata": {
"device": "CoinTraceβ’ v1.0",
"temp_c": 23.4,
"date": "2026-03-21",
"contributor": "ykachmaryk"
}
}- Measure your coin with CoinTraceβ’
- Export via keyboard:
SAVEβEXPORT - Copy JSON from microSD
- Submit via Pull Request to
database/samples/
V1 β Basic Prototype (current)
β
LDC1101 + Cardputer-Adv
β
4-distance measurement
β
Logger system (Serial + RingBuffer, 40 unit tests)
β
Serial data output
β¬ Python analysis tools
β¬ OLED/TFT display UI
β¬ Local fingerprint database (microSD)
V2 β CoinTraceβ’ Device
β¬ Full keyboard UI
β¬ WiFi sync with cloud database
β¬ OTA firmware updates
β¬ Temperature compensation (NTC)
β¬ 50+ coin fingerprints
V3 β Community Platform
β¬ Web API for fingerprint database
β¬ Free tier: common coins (open dataset, CC BY-SA)
β¬ Premium tier: 5000+ coins (subscription service)
β¬ Community contribution system
β¬ Mobile companion app
Future Research
β¬ Advanced measurement techniques
β¬ Enhanced classification algorithms
β¬ Additional sensor capabilities
First published: 2026-03-08 Repository: https://github.com/xkachya/CoinTrace
This repository serves as a formal prior art disclosure for the following novel concepts:
- Attenuation curve method β measuring LDC1101 Rp parameter at 4 controlled distances to build a distance-attenuation curve
- Size-independent coefficients k1, k2 β normalized ratios enabling cross-device comparison without recalibration
- Fingerprint vector [ΞRpβ, k1, k2, slope, ΞLβ] β unique identifier compared via Euclidean distance metric
- Community fingerprint database β crowd-sourced normalized vectors for coin identification across multiple devices
Full disclosure: docs/concept/prior_art_disclosure.md
Contributions are welcome! See CONTRIBUTING.md.
- π¬ Add coin fingerprints β most valuable contribution!
- π Report bugs β open an issue
- π‘ Suggest features β open an issue with
[FEATURE] - π§ Submit code β fork β branch β PR
- β Star the repo β helps others find CoinTraceβ’
By contributing you certify you have the right to submit
under GPL v3. Sign your commits: git commit -s
| Component | License |
|---|---|
| Firmware (code) | GNU GPL v3.0 |
| Hardware (schematics) | CERN OHL v2 |
| Documentation | CC BY-SA 4.0 |
Copyright Β© 2026 Yuriy Kachmaryk, Lviv, Ukraine
CoinTraceβ’ is a trademark of Yuriy Kachmaryk. The software, hardware designs, and documentation are open source under GPL v3 / CERN OHL v2 / CC BY-SA 4.0 licenses, but the CoinTraceβ’ name and brand are protected. See LICENSE-BRAND.md for usage guidelines.
- π Repository: https://github.com/xkachya/CoinTrace
- π Issues: https://github.com/xkachya/CoinTrace/issues
- π¬ Discussions: https://github.com/xkachya/CoinTrace/discussions
- π Prior Art: https://github.com/xkachya/CoinTrace/blob/main/docs/concept/prior_art_disclosure.md
CoinTraceβ’ is an independent open-source project not affiliated with any commercial coin verification company or MikroElektronika. CoinTraceβ’ is a trademark of Yuriy Kachmaryk. LDC1101 is a trademark of Texas Instruments. All product comparisons are based on publicly available specifications.