capa
PythonControl & DAQ for a custom controlled-atmosphere pyrolysis instrument. Async workers drive NI-DAQ, Watlow heaters, Alicat MFCs, Sartorius balances, and cameras; every run seals into a self-contained bundle.
Building typed, async Python for scientific instruments and fire-science data.
I write open-source tooling for controlling lab instruments and turning their raw output into analyzable data — from serial/Modbus device drivers to file parsers and full acquisition applications.
Typed Python library for Alicat Scientific instruments over serial — flow & pressure, meters & controllers, gas & liquid, plus CODA.
Async Python client for Sartorius lab balances over RS-232/USB — SBI & xBPI protocols, streaming reads, persistent SQLite sinks, and a typed CLI.
Async Python driver for Servomex SERVOPRO 4000-series gas analysers — one channel-oriented API over Continuous ASCII, Modbus RTU, and Modbus ASCII.
Async Python driver for Watlow temperature controllers — one API over Standard Bus (BACnet MS/TP) and Modbus RTU, with auto-detect and drift-free streaming.
Typed, lifecycle-managed NI-DAQmx acquisition for Python — declarative task specs, async/sync APIs, TDMS/Parquet/SQLite logging, and hardware-free testing.
Typed async acquisition layer for Data Translation DT9805/DT9806 USB modules — ctypes binding to the DataAcq SDK with software thermocouple linearization.
Parse and analyze NETZSCH STA and dilatometer NGB files in Python.
Read and analyze Heat Flow Meter (HFM) data files in Python.
P-splines (penalized B-splines) implementation for Python.
Python interface to the NIST Fire Dynamics Simulator (FDS).