This is my highschool project and also entry to the HACKADAY 2020 Wildcard.
Modernization of churches became a bigger trend in past years but is usually tough, due to issues preventing elegant solutions. Proprietary devices, non-existent control systems for certain devices and high prices of other solutions lead me to create my custom solution, MIDIControl.
MIDIControl
MIDIControl is a device, made to help priests all around the world with unexpected church ceremonies, when organist can't be reached. The device is capable of playing and recording standard MIDI files. It adds many additional and innovative functions, never seen before. MIDIControl can automatically sense MIDI input and output and select the device IN/OUT accordingly. The output circuitry can also create a loopback, allowing the device to test it's own functionality and report problems. It features a backup power supply for occasions, when the device is unexpectedly disconnected from power - it automatically turns off all playing notes. It also has a switched constant current output for switching the organ ON and OFF remotely (using optical isolator and SSR for example). I also reversed engineered a protocol for displays, used in churches in Czech Republic, so the device can display useful information for people in the church, like song numbers, verses etc.
Linux PC
The device is mainly an interface between a linux machine and the peripherals. It's communicating with the linux machine over USB C with PD support. Remote control is achieved with custom made remote control (MIDIController) with BLE. It can also be controlled by any BLE enabled device as it's using a well documented protocol.
All control commands are provided by the linux PC that MIDIControl is connected to. It runs a custom C program doing all the file conversion, communication with both controller and main unit and other intensive tasks. The device can be fully controlled from the linux machine and the communication protocol accounts for scalability. This means, there can be additional functions added (remote access, web access, cooperation with other devices) without editing FW of any of these devices.
MIDIControl Controller
The device needed to be fully controllable remotely, from around the altar. The remote controldemands were also pretty high. It needed to show info about the song, settings of the controller, control the organ, set the verses... on the LED display. I decided to make a custom one, rather than sourcing something, that can be customized to do what i wanted.
I created a simple remote control with alphanumeric keyboard and arrows with enter for navigation. It has a power button and multifunctional button. GUI is displayed on a 1.3" OLED. The controller is BLE enabled, powered with two Li-ion batteries and supports UCPD and charging with up to 2A currents. It's housed in a 3D printed box.
The code
The code is still under development, allthough, free to use if anyone is interrested.
https://github.com/WojtaCZ/MIDIController-FW