A Python-based GUI application for performing multi-channel J–V (current–voltage) measurements on solar cells using PyMeasure and PyQt5. The tool supports both real and simulated instruments and can be packaged into native macOS and Windows installers.
- Features
- Requirements
- Development Installation
- Running the Application
- Building Standalone Applications
- Configuration
- Project Structure
- Future Extensions
- License
- Comprehensive Analysis: Automatically calculates key solar cell metrics (Voc, Isc, Fill Factor, Efficiency, etc.) after each measurement.
- GUI for configuring and running JV sweeps with PyMeasure
- Real or simulated instrument backends (Keithley SMU and serial MUX)
- Live plot and log display
- CSV data export with timestamped directories
- Cross-platform packaging into
.app/.dmgfor macOS and.msifor Windows
Optional for development:
git clone https://github.com/uni-stuttgart-ipv/jv_setup_keithley_controller.git
cd jv_setup_keithley_controller
git checkout v2
python -m venv .venv
source .venv/bin/activate # On Windows: .venv\Scripts\activate
pip install --upgrade pip
pip install -e .Launch in development mode:
python -m solarjv_analyzer.main
# or, if using hatch:
hatch run start- Install Briefcase and prerequisites:
pip install briefcase
- Create, build, and package:
briefcase create macOS briefcase build macOS briefcase package macOS
- Distribute the resulting
.dmgindist/macOS/.
- On a Windows host, install Briefcase:
pip install briefcase
- Create, build, and package:
briefcase create windows briefcase build windows briefcase package windows
- Distribute the resulting
.msiindist\Windows\.
Edit src/solarjv_analyzer/config.py to set:
MUX_PORT(serial port for multiplexer)GPIB_ADDRESS(address of Keithley SMU)RESULTS_ROOT(directory for saving CSV data)SIMULATION_MODE(toggle between real or simulated instruments)
jv_setup_keithley_controller/
├── LICENSE.txt
├── pyproject.toml
├── setup.py
├── README.md
├── src/
│ └── solarjv_analyzer/
│ ├── __init__.py
│ ├── __main__.py
│ ├── main.py
│ ├── config.py
│ ├── analysis/
│ │ ├── analysis.py
│ ├── gui/
│ │ ├── __init__.py
│ │ ├── app_controller.py
│ │ ├── jv_analyzer_window.py
│ │ ├── login_dialog.py
│ │ └── widgets/
│ │ ├── analysis_panel.py
│ │ ├── analysis_settings_tab.py
│ │ ├── file_panel.py
│ │ ├── instrument_tab.py
│ │ └── parameter_tab.py
│ ├── instruments/
│ │ ├── __init__.py
│ │ ├── instrument_manager.py
│ │ ├── mux_controller.py
│ │ └── simulated/
│ │ ├── simulated_keithley.py
│ │ └── simulated_mux.py
│ ├── procedures/
│ │ ├── __init__.py
│ │ └── jv_procedure.py
│ ├── utils/
│ │ ├── __init__.py
│ │ └── database.py
│ └── users.db
├── tests/
│ ├── conftest.py
│ ├── analysis/
│ ├── test_analysis.py
├── data/
├── logs/
└── reports/
- Sequence editor for complex experiment workflows
- Centralized database logging
- Plugin architecture for additional instruments
This project is licensed under the MIT License. See LICENSE.txt for details.