Projects

Building a simple 3D printer (and what turned out to be not so simple)

14 Apr 2019 - tsp

This article describes some of the ideas and thoughts during building my first FDM printer a few years ago and which lessions have been learned from that project.

Building an I2C controllable stepper driver board with DRV8825 breakout boards and ATMega328p

23 May 2019 - tsp

This is the description of a small carrier board for two DRV8825 breakout boards (or compatible) that are controlled by an AVR (ATMega328p) which runs a small (linear) motion processor that gets it's commands via I2C.

Using piezo disks for automatic bed leveling on 3D printers

11 Sep 2019 - tsp

Description of an easy way of using piezo disks as touch sensors to perform bed leveling with 3D printers or other CNC machines. This blog entry describes the most basic possible way without much external circuits (only an ATtiny13A and two resistors are used)

Alpion - a LoRAWAN GPS tracking and monitoring project

01 Jan 2020 - tsp

We tried to do something useful using LoRAWAN and since a friend from VelocIT also liked the idea we started the development of GPS tracking and health monitoring for cattle (and other stuff) using LoRAWAN based GPS trackers. We started out developing using some 0815 breakout boards to play around, used ESP32 based custom hardware and now are moving towards a new STMicro platform supporting stuff like GPS tracking, motion analysis, detecting abnormal behaviour and are crunching data on Amazon webservices to provide some highly scaling solution. I'm doing software (architecture, AWS services, embedded firmware) and hardware development (RF frontend design, power management, etc.) for this project at this time.

Measuring the speed of light at Wiener Forschungsfest 2022

12 Sep 2022 - tsp

This article allows you to discover how we (a group from TU Vienna and University of Vienna) brought the fascinating world of physics to life at the Wiener Forschungsfest 2022! Using a visible range laser, a bicycle wheel, and modern photodiodes, we demonstrated how to measure the speed of light in an interactive and engaging setup designed mainly for children. This hands-on experiment highlighted the incredible speed of light while also conveying the fact that light is fast but not infinitly fast and allowed visitors to influence the accuracy of the measurement themselves. This article provides a short summary about the historical context, experimental setup, and the exciting outcomes of this educational outreach project.

Simple laser cutting and engraving capabilities for a 3D printer with a 450nm diode laser

04 Dec 2022 - tsp

This article summarizes some experiments using a simple 450nm laser diode on a 3D printer for some basic laser cutting and engraving in paper, plywood and other simple to cut materials.

Public GitHub repositories

sudokusolve

https://github.com/tspspi/sudokusolve

Languages: C99

Backtracking Sudoku (simple) solver for standard 9x9 sudokus in ANSI C99

jscadModels

https://github.com/tspspi/jscadModels

Languages: JavaScript

A small collection of some OpenJSCAD models I've created

DualDRV8825DrvStepperBoard

https://github.com/tspspi/DualDRV8825DrvStepperBoard

Languages: C99

Motion controller code for an AVR based dual stepper controller board

libcjson

https://github.com/tspspi/libcjson

Languages: C99

C JSON parser and serializer

libminor

https://github.com/tspspi/libminor

Languages: C99

Compression library

libstlio

https://github.com/tspspi/libstlio

Languages: C99

Simple library supporting reading and writing STL (stereolithography) files from ANSI C99

libccsv

https://github.com/tspspi/libccsv

Languages: C99

CSV parser library (including ACSL contracts)

stepperDriverULM2003RS485

https://github.com/tspspi/stepperDriverULM2003RS485

Languages: C99

Most simple (no acceleration) stepper driver firmware for ATMega328P to control two ULM2003 stepper drivers via RS485

LocalMarlin

https://github.com/tspspi/LocalMarlin

Languages: C

A local fork of Marlin 3D printer firmware including some modifications

rawsockscpitools

https://github.com/tspspi/rawsockscpitools

Languages: C99

A simple collection of rather crude CLI utilities to talk with specific lab devices using SCPI over Ethernet

eit2nfo

https://github.com/tspspi/eit2nfo

Languages: C99

A small tool to convert EIT (Event Information Table) files to Kodi compatible NFO files

libbaseencode

https://github.com/tspspi/libbaseencode

Languages: C99

Simple C99 Base16, Base32 and Base64 encode and decode library

SensorNodeFeather32u4IIDHT22

https://github.com/tspspi/SensorNodeFeather32u4IIDHT22

Languages: C++

Simple sensor node with DH22 temperature and humidity sensor based on the feather 32u4II-LoRA board

Feather32u4_BasicLoRA_OTAA

https://github.com/tspspi/Feather32u4_BasicLoRA_OTAA

Languages: C++

Basic OTAA code for feather 32u4

arduinoSimpleESP8266Lightswitch

https://github.com/tspspi/arduinoSimpleESP8266Lightswitch

Languages: C++

A simple alternative ESP8266 or ESP8265 firmware for Sonoff basic switches using the Arduino framework

arduinoOnewireMaster

https://github.com/tspspi/arduinoOnewireMaster

Languages: C++

Simple (non Assembly) 1-Wire Master implementation for Arduino

simpleFreeBSDPeriodicZFSSnapshotScripts

https://github.com/tspspi/simpleFreeBSDPeriodicZFSSnapshotScripts

Languages: Shellscript

Really simple scripts to produce periodic snapshots of ZFS filesystems on a FreeBSD system on daily, weekly and/or monthly basis

win32TrayUuid

https://github.com/tspspi/win32TrayUuid

Languages: C#

Small C# windows forms utility that generates UUIDs and C header inclusion guards into the clipboard from a tray icon

jcliargs

https://github.com/tspspi/jcliargs

Languages: Java

Simple Java command line argument parser

TJSON

https://github.com/tspspi/TJSON

Languages: Java

Simple JSON serializer and deserializer in Java

TTNClientJ2

https://github.com/tspspi/TTNClientJ2

Languages: Java

Simple client to get data feed from thethingsnetwork (TTN) inside an JavaEE application - uses the Eclipse Paho MQTT and RabbitMQ AMQP libraries

jebnfc

https://github.com/tspspi/jebnfc

Languages: Java

Java EBNF compiler (Recursive descent)

PhpJsonToken

https://github.com/tspspi/PhpJsonToken

Languages: PHP

A simple JSON based token implementation (JWT with HMAC and RSA signatures)

simplepycam

https://github.com/tspspi/simplepycam

Languages: C99

A simple wrapper around the Video4Linux subsystem on Unices as Python extension

pyavaspec

https://github.com/tspspi/pyavaspec

Languages: Python

Python script to access the AvaSpec 2048-2 spectrometer and a simple CLI utility

pysdg1032x

https://github.com/tspspi/pysdg1032x

Languages: Python

SDG1032X Python library

zfsexporter

https://github.com/tspspi/zfsexporter

Languages: Python

Simple Python ZFS exporter for Prometheus

avrTempPWMRegulator

https://github.com/tspspi/avrTempPWMRegulator

Languages: C99, C++

PWM Temperature regulator that controlled heatbands during vacuum bakeout utilizing an AVR and ESP8266

pfeifferpumps

https://github.com/tspspi/pfeifferpumps

Languages: Python

Python access to Pfeiffer vacuum pumps as well as a protocol analyzer (unofficial tool)

gammacli

https://github.com/tspspi/gammacli

Languages: Python

Access library and command line utility to access Gamma vacuum ion pumps via Ethernet on their QPC controller

webcamBlobEstimator

https://github.com/tspspi/webcamBlobEstimator

Languages: C99

Tool that has been used for a specific problem in the lab and estimates the size and dimension of a single found cluster on a webcam image

pylabdevs

https://github.com/tspspi/pylabdevs

Languages: Python

Lab device base classes

pyka3005p

https://github.com/tspspi/pyka3005p

Languages: Python

Unofficial Korad KA3005P power supply control library

quakesrrtdisplay

https://github.com/tspspi/quakesrrtdisplay

Languages: Python

A simple graphical frontend for an quantum klystron experiment using electron spin resonance

simplepycam

https://github.com/tspspi/simplepycam

Languages: Python

pymqttmicroservicebase

https://github.com/tspspi/pymqttmicroservicebase

Languages: Python

A base class to implement MQTT talking microservices in Python in the most simple way possible

quakesrB0CoilDriver

https://github.com/tspspi/quakesrB0CoilDriver

Languages: KiCad

Coil driver to use whole 3.3V DAC output range to cover required B0 field for electron spin resonance experiment at QUAK/ESR

outreachspeedoflight

https://github.com/tspspi/outreachspeedoflight

Languages: Python

Speed of light measurement experiment (Outreach project)

quakesrthorcam

https://github.com/tspspi/quakesrthorcam

Languages: Python

A bridge utility that accesses a ThorLabs camera on a Windows machine as specified by MQTT configuration messages and uploads the taken images using the SFTP/SCP protocol

quakESRHighSideCurrentController

https://github.com/tspspi/quakESRHighSideCurrentController

Languages: C99, KiCad

A simple 0-500 mA current source that is biasable to high voltage built around a MosFET, LM358 OpAmp and an ATMega328P as well as some PC817 optocouplers

labmonitor230

https://github.com/tspspi/labmonitor230

Languages: KiCad

This is a simple circuit that monitors the 230V line voltage via an PC817 optocoupler.

electronSourceController2

https://github.com/tspspi/electronSourceController2

Languages: C99, Python, KiCad

Electron source controller (Power supplies, filament heating) for a simple electron gun built around some FUG HCP 14-6500 power supplies. Includes C99 firmware for ATMega2560 controller, host control libraries in C99 and Python as well as debugging utilities and schematics

mqttdebug

https://github.com/tspspi/mqttdebug

Languages: Python

A simple MQTT debugging tool that allows subscribing to arbitrary topics from the CLI (and publishing from the CLI)

smartexporter

https://github.com/tspspi/smartexporter

Languages: Python

This is a simple SMART exporter as provider for the Prometheus time series database and monitoring system written in Python. It uses the prometheus-client Python package to do the main work of running the webservice and managing the gauges. It's just a wrapper that periodically calls smartmonctl from smartmontools to gather information about the filesystems disks which is then provided on the specified TCP port where it's collected by Prometheus at the specified scrape interval. This scraper uses geom disk list to determine which disks should be queried (thus it only works on FreeBSD, not on Linux).

quakesranalysis

https://github.com/tspspi/quakesranalysis

Languages: Python

This repository contains a collection of classes and utilities to handle and work with QUAK/ESR data files. This won't be of much use outside the project.

pyfy6900

https://github.com/tspspi/pyfy6900

Languages: Python

This is a small and simple control library for the FY6900 function generator. It's a implementation for the pylabdevs FunctionGenerator class.

pymso5000

https://github.com/tspspi/pymso5000

Languages: Python

A simple Python library and utility to control and query data from Rigol MSO5xxx oscilloscopes (not supporting all features of the oscilloscope, work in progress)

iostatexporter

https://github.com/tspspi/iostatexporter

Languages: Python

This is a simple iostat exporter as provider for the Prometheus time series database and monitoring system written in Python. It uses the prometheus-client Python package to do the main work of running the webservice and managing the gauges. It's just a wrapper that periodically calls iostat to gather information about disk I/O which is then provided on the specified TCP port where it's collected by Prometheus at the specified scrape interval. This scraper uses iostat to query the parameters thus it only works on FreeBSD, not on Linux.

pydp832

https://github.com/tspspi/pydp832

Languages: Python

Simple Python library to remote control the Rigol DP832 power supply. Not supporting all features but inheriting from the pylabdevs power supply base class

fbsdspiwrapper

https://github.com/tspspi/fbsdspiwrapper

Languages: Python

Minimal wrapper around the ioctl functions used to control the SPI bus on FreeBSD. This is currently available in Python

fbsdgpio

https://github.com/tspspi/fbsdgpio

Languages: C99, Python

Minimal wrapper around the gpio device used to control GPIO pins on FreeBSD. This is currently available in C and Python

pyfbsdi2c

https://github.com/tspspi/pyfbsdi2c

Languages: Python

Thin Python wrapper around ioctl calls to utilize the I2C bus via the iic device on FreeBSD

pyxl30

https://github.com/tspspi/pyxl30

Languages: Python

Unofficial control libraries and utilities for the XL30 Environmental Scanning Electron Microscope

pynanovna2

https://github.com/tspspi/pynanovnav2

Languages: Python

Python access library for programmatic access to NanoVNA v2 (Unofficial)

freecadModel

https://github.com/tspspi/freecadModel

Languages: FreeCAD

A collection repository of various FreeCAD models

pyssa3021x

https://github.com/tspspi/pyssa3021x

Languages: Python

Simple (unofficial) control library for the Siglent SSA3021X spectrum analyzer

semkicker02

https://github.com/tspspi/semkicker02

Languages: KiCad

A simple 205 MHz linear electrostatic electron beam kicker built of out printed circuit boards

pymixfit

https://github.com/tspspi/pymixfit

Languages: Python

Mixture fitting library for Python

pybresenham

https://github.com/tspspi/pybresenham

Languages: Python

A very simple implementation of the Bresenham algorithm (and a simple antialiased version)

pymlx90640

https://github.com/tspspi/pymlx90640

Languages: Python

A simple Python library to access the MLX90640 FIR sensor

quasemcryogui

https://github.com/tspspi/quasemcryogui

Languages: Python

QUASEM project cryogenic system GUI frontend

mqtttimeserieslogger

https://github.com/tspspi/mqtttimeserieslogger

Languages: Python

A very simple MQTT message time series logger that writes into NPZ files

IQBalunAndFilter

https://github.com/tspspi/IQBalunAndFilter

Languages: KiCad

Interface board for balances I/Q demodulator output to single ended ADCs incuding filters and offseting

quakFilteredADC

https://github.com/tspspi/quakFilteredADC

Languages: KiCad

25 kHz ADC pre-filter, balun and prescaler for QUAK/ESR and QUASEM projects

py34410a

https://github.com/tspspi/py34410a

Languages: Python

Unofficial Agilent 34410A python access library

Public PyPi repositories

gammaionctl-tspspi: Gamma ion pump ethernet control CLI utility and library

https://pypi.org/project/gammaionctl-tspspi/

pip install gammaionctl-tspspi

This is a mini Python 3 library and utility that exposes some of the functions of the Gamma Vacuum QPC ion pump controller via a CLI or via a library class via it's Ethernet port.

zfsexporter-tspspi: Simple Python ZFS exporter for Prometheus

https://pypi.org/project/zfsexporter-tspspi/

pip install zfsexporter-tspspi

This is a simple ZFS exporter as provider for the Prometheus time series database and monitoring system written in Python. It uses the prometheus-client Python package to do the main work of running the webservice and managing the gauges. It's just a wrapper that periodically calls the zfs list and zpool status commands to gather information about the filesystems and the pools which is then provided on the specified TCP port where it's collected by Prometheus at the specified scrape interval. Note that this exporter does only scrape the filesystem properties at a configurable interval instead at the query time of the time series database itself.

sdg1032x-tspspi: SDG1032X Python library

https://pypi.org/project/sdg1032x-tspspi/

pip install sdg1032x-tspspi

This (unofficial) library allows one to control some functions of the SDG1032X arbitrary waveform generator using Python in a simple way via Ethernet.

pyavaspec-tspspi: Python script to access AvaSpec 2048-2 spectrometer

https://pypi.org/project/pyavaspec-tspspi/

pip install pyavaspec-tspspi

This is a (unofficial) library and tool to access basic functions (not all data types are supported) of the Avaspec 2048-2 spectrometer from Python on platforms that are not supported by the software supplied by the manufacturer. This has been developed for a project where I wanted to use the spectrometer on FreeBSD (note that no reverse engineering of the original software took place so I can not be sure this is the proper way to talk to the spectrometer - the results just make sense). This project is in no way associated with the manufacturer of this device!

pylabdevs-tspspi: Lab device base classes

https://pypi.org/project/pylabdevs-tspspi/

pip install pylabdevs-tspspi

This repository supplies some abstract base classes for various device families that are used as basis for specific implementations. Those base classes provide the frontend used by experimental scripts - the implementations are then done in a device specific way by other packages.

pyka3005p-tspspi: Korad KA3005P power supply control library (unofficial)

https://pypi.org/project/pyka3005p-tspspi/

pip install pyka3005p-tspspi

Currently under development

quakesrrtdisplay-tspspi: QUAK/ESR realtime data display

https://pypi.org/project/quakesrrtdisplay-tspspi/

pip install quakesrrtdisplay-tspspi

Quick and dirty visualization of data published by a specific experimental setup via MQTT

electronsourcecontroller2-tspspi: Custom electron gun slow control Python communication library and GUI utlity

https://pypi.org/project/electronsourcecontroller2-tspspi/

pip install electronsourcecontroller2-tspspi

Work in progress

pymqttmicroservicebase-tspspi: Python MQTT based microservice base daemon

https://pypi.org/project/pymqttmicroservicebase-tspspi/

pip install pymqttmicroservicebase-tspspi

Since this is a recurring task this project contains a base implementation for a simple MQTT based service that offers just some basic features required for simple MQTT based microservices.

smartexporter-tspspi: Simple Python SMART exporter for Prometheus on FreeBSD

https://pypi.org/project/smartexporter-tspspi/

pip install smartexporter-tspspi

This is a simple SMART exporter as provider for the Prometheus time series database and monitoring system written in Python. It uses the prometheus-client Python package to do the main work of running the webservice and managing the gauges. It's just a wrapper that periodically calls smartmonctl from smartmontools to gather information about the filesystems disks which is then provided on the specified TCP port where it's collected by Prometheus at the specified scrape interval. This scraper uses geom disk list to determine which disks should be queried (thus it only works on FreeBSD, not on Linux).

quakesranalysis-tspspi: QUAK/ESR analysis utility

https://pypi.org/project/quakesranalysis-tspspi/

pip install quakesranalysis-tspspi

This repository contains a collection of classes and utilities to handle and work with QUAK/ESR data files. This won't be of much use outside the project.

pyfy6900-tspspi: (Unofficial) control library for the FY6900 function generator

https://pypi.org/project/pyfy6900-tspspi/

pip install pyfy6900-tspspi

This is a small and simple control library for the FY6900 function generator. It's a implementation for the pylabdevs FunctionGenerator class.

mqttdebug-tspspi: Simple MQTT debug helper

https://pypi.org/project/mqttdebug-tspspi/

pip install mqttdebug-tspspi

This is a simple tool that allows subscribing to an arbitrary number of MQTT topics as well as publishing to an MQTT broker using a command line utility.

quakesrthorcam-tspspi: QUAK/ESR ThorCam interface

https://pypi.org/project/quakesrthorcam-tspspi/

pip install quakesrthorcam-tspspi

This is a small Python service that runs on a Windows machine to which the ThorCam is attached to provide a bridge into the control system that has been realized on an OpenSource platform - it exposes an MQTT interface for configuration of camera settings and queue configuration as well as event signalling and allows to transfer images taken using SFTP.

outreachspeedoflight-tspspi: Outreach project utility: Speed of light

https://pypi.org/project/outreachspeedoflight-tspspi/

pip install outreachspeedoflight-tspspi

This is the frontend to the speed of light outreach project. This project has been developed to measure the speed of light similar to the idea that Hippolyte Fizeau developed in 1848. In contrast to his experiment in this case a little cheat is used - a bicycle works as chopper to produce a sharp difference in light intensity of a laser source. The light travels through two arms of the experiment - one being only a few meters away from the chopper, the other being about hundred meters away. The signal of both pulses is recorded on photodiodes and sampled by a fast oscilloscope (this is where the cheating comes in - we have a definition of time and fast direct sampling).

pymso5000-tspspi: Rigol MSO5xxx oscilloscope Python library (unofficial)

https://pypi.org/project/pymso5000-tspspi/

pip install pymso5000-tspspi

A simple Python library and utility to control and query data from Rigol MSO5xxx oscilloscopes (not supporting all features of the oscilloscope)

iostatexporter-tspspi: Simple Python I/O statistic exporter for Prometheus on FreeBSD

https://pypi.org/project/iostatexporter-tspspi/

pip install iostatexporter-tspspi

This is a simple iostat exporter as provider for the Prometheus time series database and monitoring system written in Python. It uses the prometheus-client Python package to do the main work of running the webservice and managing the gauges. It's just a wrapper that periodically calls iostat to gather information about disk I/O which is then provided on the specified TCP port where it's collected by Prometheus at the specified scrape interval. This scraper uses iostat to query the parameters thus it only works on FreeBSD, not on Linux.

pybpg400-tspspi: Unofficial Python library to control and access the INFICON BPG400 pressure gauge

https://pypi.org/project/pybpg400-tspspi/

pip install pybpg400-tspspi

A simple unofficial readout library for the INFICON BGP400 pressure gauge via RS232C interface

pydp832-tspspi: Rigol DP832 power supply control library

https://pypi.org/project/pydp832-tspspi/

pip install pydp832-tspspi

A very simple control library that inherits from the pylabdevs base class for power supplies

pyssg3021x-tspspi: Siglent SSG3021X function generator control library

https://pypi.org/projects/pyssg3021x-tspspi

pip install pyssg3021x-tspspi

A very simple control library that inherits from the pylabdevs base class for function generators and allows basic Ethernet control of the Siglent SSG3021X function generator

pyfbsdgpio-tspspi: Simple wrapper functions for the FreeBSD GPIO device

https://pypi.org/projects/pyfbsdgpio-tspspi

pip install pyfbsdgpio-tspspi

Simple Python wrapper functions around the FreeBSD GPIO device for usage on platforms like the RaspberryPi

pyfbsdspi-tspspi: Simple SPI wrapper for FreeBSD

https://pypi.org/projects/pyfbsdspi-tspspi

pip install pyfbsdspi-tspspi

A simple Python wrapper around FreeBSDs spigen device to allow easy access to the SPI bus from Python

pyxl30-tspspi: Control libraries and utilities for the XL30 Environmental Scanning Electron Microscope

https://pypi.org/projects/pyxl30-tspspi

pip install pyxl30-tspspi

A small set of utilities and control libraries for the XL30 scanning electron microscope.


Data protection policy

Dipl.-Ing. Thomas Spielauer, Wien (webcomplains389t48957@tspi.at)

This webpage is also available via TOR at http://rh6v563nt2dnxd5h2vhhqkudmyvjaevgiv77c62xflas52d5omtkxuid.onion/

Valid HTML 4.01 Strict Powered by FreeBSD IPv6 support