Programming & electronics
Python · Kotlin and Android · Arduino and ESP32 · embedded electronics · PCB design · CAN bus and OBD-II · systems integration · SAP Analytics Cloud
- Skill
- Programming & electronics
- Stack
- Python · Kotlin · Arduino · ESP32 · tkinter · PCB123 · PSpice · SAP Analytics Cloud
- Learned
- Introduction to Programming and Data Processing, DTU · Programming Intelligent Vehicles and Mobile Applications, DTU · Physical Computing, DTU · How to Make (Almost) Anything, IT University of Copenhagen · Digital Electronics, DTU
Programming is not what I am hired for, however it is the thing I keep doing anyway, and the useful version of it for a product engineer is being able to build the thing that proves whether an idea works rather than describing it to somebody who can. Here ChargeMate is the clearest case, since reading live battery state out of a Peugeot iOn over a Bluetooth serial OBD-II connection to the car's CAN bus is not difficult software, however it is the only way to find out what the battery actually does rather than what the manual says it does.
Furthermore most of this sits close to hardware, which is due to where I learned it, in that the courses behind it were Physical Computing and Programming Intelligent Vehicles rather than anything web-shaped. This means that I am comfortable on a serial port, a sensor and a board, and considerably less comfortable in a production codebase, which is a distinction I would rather state than have discovered.
Python
Python is what I reach for first, and the project I would point at is ChargeMate, where I wrote all of the software in a team of two, covering the OBD-II communication, the threading and the charge planning itself. The application reads live battery state from a Peugeot iOn and then computes which days of the week to charge in order to keep the state of charge inside the 30–80% band, with a tkinter interface on top. Furthermore the museum brewing installation ran on Python alongside an Arduino Nano, where nine RFID-tagged jars, being three malts, three hops and three yeasts, produce 27 possible combinations, and I owned all of the programming for it. As previously mentioned most of my programming has a board at the end of it, however the grade-handling program from the introductory course is the exception, in that it is plain Python over a data file, with the validation and the plotting doing the work rather than any hardware.
Keywords
Python · tkinter · threading · serial communication · OBD-II and CAN bus · data parsing · NumPy · Matplotlib · data validation
/images/chargemate/obd-setup.webp
Peugeot iOn parked in a carport, the car ChargeMate reads over Bluetooth OBD-II
ChargeMate
Team of 2, wrote all software: OBD-II, threading and charge planning
EV charging planner reading live battery state over CAN bus
/images/brewing-experience/hero.webp
Brewing pot installation glowing with coloured light and rising mist
Brew your own beer, a multisensory museum installation
Team of 6, original idea, first prototype and all the programming
Aesthetic experience design for the National Museum of Denmark
/images/grade-program-python/hero.webp
Two matplotlib plots side by side: a scatter chart titled Assignment Grade distribution showing each student's grades across three assignments with a red mean line, and a bell-curve chart titled Final grades norm
A grade-handling program in Python
Sole author, wrote the whole program
Loads, validates, computes and plots a class's assignment grades
Kotlin and Android
The investment game is the one piece of software nobody set me, and I built it in Kotlin in Android Studio in my own time in order to practise. It runs a threaded game loop over four assets whose prices move under changing market conditions, saves locally through SharedPreferences, and simulates the time that passed while the app was closed, which is the part I am most pleased with since it meant working out what the state should have become rather than storing what it was. Here the interface was laid out in ConstraintLayout from wireframes and flowcharts drawn first, and it carries a rewarded AdMob placement.
Keywords
Kotlin · Android Studio · threading · SharedPreferences · ConstraintLayout · Google AdMob · local persistence · wireframes and flowcharts
Arduino and embedded electronics
Most of my programming has a board at the end of it. On Physical Computing we built two ESP32 boards talking to each other, with a heat sensor on one, a web interface for control and monitoring, and an LED strip showing temperature by colour, and the state machines were what kept that manageable once both boards had to agree on something. Furthermore the line-following robot was the smaller version of the same problem, running on an Arduino Uno with two IR sensors steering between two wheels and a gripper arm at the front, where I was lead designer and did the Arduino programming alongside joint circuit work. As previously mentioned the brewing installation sat on an Arduino Nano, with RFID, addressable RGB LEDs and ultrasonic humidifiers.
Keywords
Arduino Uno · Arduino Nano · ESP32 · state machines · sensor integration · IR sensors · RFID · addressable RGB LED · breadboard prototyping · web interface
/images/esp32-temperature/hero.webp
Two ESP32 boards wired on a bench with an LED strip showing the temperature state
ESP32 temperature sensing and control
Team of 2, built the WiFi app and sensor setup
Two boards, a web interface and two prototypes tested against tasks
/images/line-following-robot/hero.webp
Arduino Uno-based line-following robot chassis with two wheels, a breadboard, battery pack and a small gripper arm at the front
Line-following robot
Team of 3, lead designer, CAD, joint circuit work, Arduino programming
A two-IR-sensor line follower with a gripper arm
PCB design and digital electronics
Board design I learned from the bottom, which is to say from logic gates rather than from a microcontroller. The electronic dice was designed from a Karnaugh map, simulated in PSpice, laid out in PCB123, and then soldered and measured against the simulation, and my part was the PCB design and layout. Furthermore the mine clearance vehicle carried three custom boards, being the remote, the vehicle and the detector, built around a 4520 binary counter, an L293 motor driver and an infrared transmitter and receiver pair, and the board design for the remote and the receiver was mine.
Keywords
PCB design · PCB123 · PSpice simulation · Karnaugh maps · 74HC logic · soldering and assembly · oscilloscope measurement
/images/electronic-dice/hero.webp
The electronic dice PCB under test on a bench, with an oscilloscope probe clipped onto the board and two of the seven display LEDs lit
An electronic dice built from logic gates
Team of 2, focused on the PCB design and layout
Karnaugh map to simulation to a soldered board
/images/mine-clearance-vehicle/hero.webp
The mine clearance vehicle prototype on a workbench, showing the red chassis, drive wheels and gears, a small motor, an AA battery pack and the yellow PCB carrying the counter and driver ICs
A remote-controlled mine clearance vehicle
Team of 2, PCB design for the remote and receiver boards
Taking a dangerous job away from the person doing it
Systems integration
This is the part I do at SAP, where I built an integration connecting SAP Analytics Cloud, Datasphere and Digital Manufacturing, meaning that the work was getting three systems which were not designed together to agree on where the data lives and when it moves. Furthermore I provide technical support across 20+ live corporate events, which is a different kind of integration problem, in that the failure modes are the ones nobody anticipated and there is no time to look them up.
Keywords
systems integration · SAP Analytics Cloud · SAP Datasphere · SAP Digital Manufacturing · data flow between systems · live event support
The mechanical side of these builds — enclosures, housings and fixtures — sits under CAD & technical documentation.