Projects
I have created many different things over the years. Some purely for fun, some to serve a specific purpose. The ones I am comfortable sharing with the world are shown below.
Projects currently of use to others Link to heading
These are things I created which are currently actually being used by someone.
DMX-Board Link to heading
As part of the study module “Microcontroller Applications”, I developed this board and the associated software in collaboration with my fellow student Tom Wahl. The technical basis is an ESP32 microcontroller from Espressif.
The original aim as part of the module was to enable simple recording and playback of light programmes, i.e. incoming data on the input including their timing.
After the module was completed, the hardware was then extended to include GPIO terminals at the request of the professor. The aim was to be able to use the circuit board as a demonstration and test object in lectures.
My focus in this project was on the software: The software submitted during the module was developed directly using the the ESP-IDF, without the Arduino framework. The DMX bus and the interaction elements (OLED display, encoder) are controlled via separate FreeRTOS tasks. This ensures that the operation of the DMX bus is prioritised.
In addition, the DMX bus is controlled via the ESP32’s DMA controller. This makes sense as the DMX bus is usually controlled by a central node (whose role we assume here), the controller. A DMX transmission with data for all 512 channels of a DMX universe requires approx. 22 ms. If this is done at the usual frame rate of 40 FPS, you will notice that the DMX bus is almost continuously being sent on. However, as all the data is already known at the start of the transmission, it would be inefficient to carry this out using CPU time.
Using DMA, the microcontroller can operate the DMX bus and all other peripherals available for operation without any problems, as can be seen in the Logic Analyzer screenshot.

Experimental setup of the circuit on breadboard. The Arduino Uno in the upper part served temporarily as a logic analyser.

First software written for testing to control an RGBW spotlight. M stands for Mode, S is an irrelevant additional parameter for RGB control (Mode 0).

Concurrent activity on the various data buses. Top: DMX

Circuit as a simple CNC-milled circuit board

Manufactured Boards
KaraoQueue Link to heading
Guests can browse the song catalogue (with suggestions of the songs commonly sung during the previous events provided), view the metadata of the songs and queue in for their slot on the stage. The evening’s moderator can view the queue, and either accept or discard entries. If an entry is accepted, it is (anonymously) added to a playback list for the event, as well as to the statistics informing the suggestions.
It is written in Python, utilizing the Flask framework. Its architecture is very simplistic, for example, the frontend consists completely of handwritten Jinja templates, with everything (including handwritten JavaScript) contained inline. Bootstrap is used as the UI framework via static CSS/JS inclusion.
On the backend side, it utilizes a MariaDB for data storage, and can currently ingest Catalogue CSV files in the format provided by Recisio’s KaraFun. Playback statistics can be exported and imported, but will only work with the appropriate catalogue.

KaraoQueue main page screenshot

Metadata view for a song

KaraoQueue song search with suggestions

The list of played songs generated for an event