Internet of Things
Whenever an opportunity presents itself at home, I try to address the problem with a custom IoT solution. Electronics and soldering are still somewhat out of my comfort zone, therefore I'm usually glad when I can move over to programming.
Irrigation system 2017
Problem: How should my chili plants survive our two months backpacking trip to Central America?
- Custom solution with a Raspberry Pi, a pump and a 60 liter barrel of water
- Soil moisture, humidity and temperature sensors
- Individual watering of up to 16 plants
- Automated watering based sensory data, such as soil moisture
- Online monitoring dashboard
- Online emergency watering option
Alarm Clock Transformation 2019
Problem: My old LED alarm clock from the 1990ies stopped working.
- Replaced the interior of the alarm clock with an ESP32
- Digital display of web-synced time and weather
- Buttons repurposed as light switches for the bedroom lighting
Mailbox Notification 2020
- Ultrasound sensor in the mailbox
- Optimized with deep sleep mode to minimize battery drain
- Sends a notification once mail is detected
Problem: We mostly use the back door in our apartment. A trip to the mailbox in front of the house is time-consuming and often moot.
Rain Gauge 2021
Problem: When do I need to water the garden? Online precipitation data is never precise enough.
- Sniffed and deciphered the radio signal of a consumer rain gauge
- Reports precipitation and temperature data to an online dashboard
Open Source Projects
OpenTTD March 2004 – February 2005
OpenTTD (www.openttd.org) is a popular and complete open source clone of the business simulation Transport Tycoon.
Starting out in C, the code was later migrated to C++ and ported to a variety of platforms, including Windows, GNU/Linux, Mac OS X, BSD and Solaris. Currently, the project contains over 200,000 physical source lines of code.
In my role as lead programmer I was responsible for:
- Implementing core game functionality, AI algorithms and user interfaces
- Leading an international team of programmers and negotiating game design decisions
- Ensuring that patches and bugfixes from external developers comply with code quality standards
- Fixing bugs
- Maintaining the Subversion source code repository
ScummVM January 2005 – November 2005
ScummVM (www.scummvm.org) is a game interpreter, recreating the game engines of classic adventure games such as Lucas Arts' "Monkey Island" or "Day of the Tentacle". I contributed to this project by fixing bugs and maintaining, compiling and updating binary packages for Linux.
Portable Consoles
OpenTTD for Nintendo DS December 2007
Creating a fully functional port of the transport simulation game OpenTTD for Nintendo's original DS console (NDS) was the aim of this project.
My main intention was to optimize the game's graphics engine, memory management and UI for the unique capabilities of the NDS.
The port is fully functional, including sound and a unique touch screen interface.
Challenges included:
- Writing a blitter using direct VRAM display mode
- Optimizing memory usage and minimizing binary size to accomodate both in the very limited RAM of 4 MB
- Writing a custom memory manager to make use of unused VRAM areas as data storage
- Rewriting large portions of the UI for an optimized user experience on low resolution screens, including an on screen keyboard
Pong for Gameboy Advance and Nintendo DS March/October 2007
An implementation of the classic arcade game Pong for Nintendo's portable consoles. Initially I implemented this game for Gameboy Advance (GBA), and later ported it to the next generation Nintendo DS (NDS) console. Goals of these two projects included:
- Running a simple, yet fully functional game on GBA hardware
- Becoming familiar with the GBA and NDS hardware, memory limitations and screen modes
- Learning the API of the open source SDKs "DevKit Advance" (GBA) and "DevKit Pro" (NDS)
- Experimenting with different screen modes
- Estimate possible obstacles when porting to Nintendo DS in preparation for porting OpenTTD