ZORIA
Web-Based Interactive Dashboard for Impedance Analysis and Circuit Characterization
📋 Overview
ZORIA is an open-source web platform that transforms the EVAL-ADMX2001 impedance analyzer (Analog Devices) into a modern measurement system with real-time scientific visualization. It integrates a measurement dashboard and an RLC simulator in a responsive web interface built with Dash-SPA.
Key Features
- 🔌 Automatic communication with EVAL-ADMX2001 via serial port
- 📊 Real-time visualization with Bode and Nyquist diagrams
- 🔄 Automatic frequency sweeps (linear/logarithmic, 0.2 Hz - 10 MHz)
- 💾 Session persistence with automatic graph restoration
- 📤 CSV export for post-processing and external analysis
- 🧮 RLC simulator for circuit design and experimental planning
- 📱 Responsive design optimized for desktop, tablet, and mobile
- 📖 Integrated documentation with comprehensive user guides
- 🌐 Multi-language support (English/Spanish)
🚀 Quick Start
Prerequisites
Hardware
- EVAL-ADMX2001 Evaluation Kit:
- ADMX2001B impedance analyzer module
- EVAL-ADMX2001EBZ evaluation board
- UART-to-USB cable (included)
- LCR test probes
Software
- Python 3.8 or higher
- Operating System: Linux, Windows, or macOS
- Serial port access permissions
Installation
From PyPI (recommended)
pip install zoria
From source
- Clone the repository
git clone https://github.com/mario1027/ZORIA.git
cd ZORIA
- Create and activate virtual environment
python -m venv .venv
source .venv/bin/activate # On Windows: .venv\Scripts\activate
- Install
pip install .
Running the Application
zoria # after `pip install zoria`
# or, from a source checkout:
python app.py
The application will be available at: http://localhost:8050
🏗️ Architecture
ZORIA implements a modular three-layer architecture for scalability and maintainability:
1. Hardware Layer
- Serial communication with EVAL-ADMX2001 via UART protocol
- Command parsing and validation
- Data acquisition and sweep control
- Automatic device detection and connection handling
2. Backend (Python)
lib/
├── admx2001.py # Main device control class with UART interface
├── calibration.py # Calibration management (open/short/load)
├── utils.py # Validation, parsing, and processing utilities
├── enums.py # Constants, modes, and configuration enums
└── exceptions.py # Custom exception hierarchy
3. Frontend (Dash-SPA)
pages/
├── dashboard/ # Real-time measurement interface
├── simulator/ # RLC impedance calculator
├── documentation/ # Integrated user documentation
└── common/ # Reusable UI components (sidebar, navigation, footer)
📊 Features
Measurement Dashboard
- ✅ Automatic device connection with error handling
- ✅ Single-point impedance measurements
- ✅ Frequency sweeps (linear/logarithmic, 0.2 Hz - 10 MHz)
- ✅ Interactive Bode plots (magnitude and phase)
- ✅ Interactive Nyquist plots (complex plane)
- ✅ Real-time parameter control (frequency, amplitude, averaging)
- ✅ Data export to CSV format with timestamps
- ✅ Browser session persistence and graph restoration
RLC Simulator
- ✅ Theoretical impedance calculation for circuit design
- ✅ Series and parallel configurations
- ✅ Individual components: R, L, C
- ✅ Combined circuits: RC, RL, LC, RLC
- ✅ Outputs: magnitude, phase, real/imaginary parts
- ✅ Side-by-side comparison with experimental measurements
- ✅ Interactive Bode and Nyquist visualization
Integrated Documentation
- ✅ Quick start guide with hardware setup
- ✅ Hardware specifications and limitations
- ✅ Command reference and API documentation
- ✅ Calibration procedures (open, short, load)
- ✅ Practical measurement examples
- ✅ External resources and references
📁 Project Structure
ZORIA/
├── app.py # Legacy entry point (python app.py)
├── pyproject.toml # Packaging metadata (PyPI)
├── requirements.txt # Python dependencies
│
├── zoria/ # Installable package (pip install zoria)
│ ├── __init__.py # Package version (__version__)
│ ├── app.py # Application entry point (zoria command)
│ ├── themes.py # Bootstrap theme configuration
│ │
│ ├── lib/ # ADMX2001 control library
│ │ ├── __init__.py
│ │ ├── admx2001.py # Main device class
│ │ ├── calibration.py # Calibration manager
│ │ ├── enums.py # Constants and enums
│ │ ├── exceptions.py # Custom exceptions
│ │ └── utils.py # Utility functions
│ │
│ ├── pages/ # Application pages
│ │ ├── dashboard/ # Measurement dashboard
│ │ ├── simulator/ # RLC simulator
│ │ ├── documentation/ # Integrated docs
│ │ └── common/ # Shared components (sidebar, footer, ...)
│ │
│ ├── assets/ # Static resources (css, js, images)
│ └── config/ # Configuration files
│
└── data/ # Data storage (auto-generated, in CWD)
└── sweep_data_*.csv # Exported measurements
🔧 Usage
1. Connect to Device
from zoria.lib import ADMX2001
# Initialize and connect to device
device = ADMX2001(port='/dev/ttyUSB0', baudrate=115200)
device.connect()
# Verify connection
identity = device.get_identity()
print(f"Connected to: {identity}")
2. Perform Single Measurement
# Configure measurement parameters
device.set_frequency(1000) # 1 kHz
device.set_magnitude(1.0) # 1 V peak
device.set_average(10) # Average 10 samples
# Measure impedance
measurement = device.measure_impedance()
print(f"Z = {measurement['magnitude']:.2f} Ω")
print(f"θ = {measurement['phase']:.2f}°")
print(f"R = {measurement['real']:.2f} Ω")
print(f"X = {measurement['imaginary']:.2f} Ω")
3. Execute Frequency Sweep
from zoria.lib import SweepType, SweepScale
# Configure logarithmic frequency sweep
device.configure_sweep(
sweep_type=SweepType.FREQUENCY,
scale=SweepScale.LOGARITHMIC,
start=100, # 100 Hz
stop=100000, # 100 kHz
points=100
)
# Execute sweep and get results
results = device.execute_sweep()
# Export to CSV
device.export_csv('measurement_data.csv', results)
4. Use RLC Simulator
from zoria.pages.simulator.impedance_calculator import ImpedanceCalculator
# Create calculator with frequency range
calc = ImpedanceCalculator(
freq_start=10,
freq_end=100000,
points=1000
)
# Calculate impedance for RC series circuit
Z = calc.rc_series(R=1000, C=1e-6) # 1kΩ, 1µF
# Get Bode plot data
bode_data = calc.get_bode_data(Z)
magnitude = bode_data['magnitude']
phase = bode_data['phase']
# Get Nyquist plot data
nyquist_data = calc.get_nyquist_data(Z)
real = nyquist_data['real']
imag = nyquist_data['imaginary']
5. Calibration Procedures
from zoria.lib.calibration import CalibrationManager
# Initialize calibration manager
cal_manager = CalibrationManager(device)
# Perform open calibration
print("Remove all connections from test terminals")
cal_manager.calibrate_open()
# Perform short calibration
print("Connect short circuit to test terminals")
cal_manager.calibrate_short()
# Perform load calibration (50Ω)
print("Connect 50Ω load to test terminals")
cal_manager.calibrate_load(50)
# Save calibration data
cal_manager.save_calibration('my_calibration.json')
🧪 Use Cases
1. RLC Resonator Characterization
Measure resonance frequency, quality factor (Q), and bandwidth in resonant circuits for RF applications and filter design.
Example: Characterize a series RLC resonator at 10 kHz with Q > 100.
2. Battery Analysis (EIS)
Electrochemical Impedance Spectroscopy to determine State of Health (SOH) and State of Charge (SOC) for battery management systems.
Example: Analyze lithium-ion battery impedance across 0.1 Hz - 10 kHz to detect aging effects.
3. Material Characterization
Measure dielectric properties, conductivity, and loss tangent of materials as a function of frequency.
Example: Characterize dielectric constant of PCB substrate material from 1 MHz to 10 MHz.
4. Filter and Matching Network Design
Verify characteristic impedance, insertion loss, and S-parameters of filters and impedance matching networks.
Example: Validate 50Ω matching network for antenna tuning in the 100-200 MHz range.
5. Sensor Development
Impedance-based sensor characterization for biosensors, chemical sensors, and environmental monitoring.
Example: Develop impedimetric biosensor with detection range optimization.
📊 Measurement Modes
ZORIA supports all EVAL-ADMX2001 measurement modes:
| Mode | Parameter 1 | Parameter 2 | Application |
|---|---|---|---|
| Z-θ | Magnitude | Phase | General impedance |
| R-X | Resistance | Reactance | Circuit analysis |
| Cp-D | Parallel C | Dissipation | Capacitor testing |
| Cs-D | Series C | Dissipation | Capacitor testing |
| Lp-Q | Parallel L | Quality factor | Inductor testing |
| Ls-Q | Series L | Quality factor | Inductor testing |
| Y-θ | Admittance | Phase | Network analysis |
🛠️ Configuration
Serial Port Configuration
Edit config/spa_config.ini:
[hardware]
port = /dev/ttyUSB0 # Windows: COM3, macOS: /dev/cu.usbserial
baudrate = 115200
timeout = 1.0
Application Settings
[application]
host = 127.0.0.1
port = 8050
debug = False
Measurement Defaults
[measurement]
default_frequency = 1000 # Hz
default_amplitude = 1.0 # V
default_averaging = 10
auto_range = True
🧪 Testing
Run Unit Tests
pytest tests/ -v
Run Integration Tests
pytest tests/integration/ -v --hardware
Note: Integration tests require connected EVAL-ADMX2001 hardware.
🤝 Contributing
Contributions are welcome! Please follow these steps:
- Fork the repository
- Create a feature branch
git checkout -b feature/amazing-feature
- Commit your changes
git commit -m 'Add amazing feature'
- Push to the branch
git push origin feature/amazing-feature
- Open a Pull Request
Contribution Guidelines
- Follow PEP 8 style guide for Python code
- Add unit tests for new features
- Update documentation for API changes
- Ensure all tests pass before submitting PR
- Use descriptive commit messages
📜 License
This project is licensed under the MIT License - see the LICENSE file for details.
👥 Authors
- Mario Ricardo Montero - Lead Developer - GitHub
- Juan Carlos Alvarez - Contributor
- Francisco J. Racedo N. - Contributor
📧 Contact & Support
- Email: mariomontero942@gmail.com
- Issues: GitHub Issues
- Documentation: Available at http://localhost:8050/documentation when app is running
- Discussions: GitHub Discussions
🙏 Acknowledgments
- Analog Devices for the EVAL-ADMX2001 platform and documentation
- Plotly Dash for the excellent visualization framework
- Bootstrap (Volt theme) for UI components
- Open-source community for the tools and libraries that made this possible
📚 Citations
If you use ZORIA in your research, please cite:
@software{zoria2025,
author = {Montero, Mario Ricardo and Alvarez, Juan Carlos and Racedo, Francisco J.},
title = {ZORIA: Web-Based Interactive Dashboard for Impedance Analysis},
year = {2025},
publisher = {GitHub},
url = {https://github.com/mario1027/ZORIA}
}
📅 Version History
v1.0.0 (January 2026)
- ✅ Initial release
- ✅ Functional measurement dashboard
- ✅ Complete RLC simulator
- ✅ Integrated documentation
- ✅ Automatic frequency sweeps
- ✅ Real-time Bode/Nyquist visualization
- ✅ Session persistence
- ✅ CSV data export
Roadmap (v1.1.0)
- 🔄 Automated calibration wizard
- 🔄 Advanced curve fitting tools
- 🔄 Batch measurement processing
- 🔄 REST API for remote control
- 🔄 Extended file format support (JSON, HDF5)
🔗 Related Projects
- PyMeasure - Scientific instrument automation
- SciPy - Scientific computing tools
- Plotly - Interactive graphing library
⚠️ Disclaimer
This software is provided "as is" without warranty of any kind. Use at your own risk. Always verify measurements with calibrated equipment for critical applications.
⭐ If you find this project useful, please consider giving it a star on GitHub!
Metadata
Release files for zoria 1.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| zoria-1.0.0.tar.gz | 21.5 MB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| zoria-1.0.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 43.0 MB
Release files / zoria-1.0.0.tar.gz
| Download URL | zoria-1.0.0.tar.gz |
|---|---|
| Size | 21.5 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
cb0422f7449698222539870d626a894077ed6f7961bc094b80f504a76cd98339
|
|
BLAKE2b-256 checksum How to use checksums |
7d7dba48d7261d715b21c376368f77bf955228a47ac32a5077ea5794f55ab39f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.7
|
Release files / zoria-1.0.0-py3-none-any.whl
| Download URL | zoria-1.0.0-py3-none-any.whl |
|---|---|
| Size | 21.5 MB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
b109ae1c8f7a7daf7c5f3141efce44310434e1dbd515baa93590d591366fa11a
|
|
BLAKE2b-256 checksum How to use checksums |
57e8e3a2a5f205d23d7ad7759579973d1508c8da9efc685ca6769f02a9af13dc
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.7
|