Skip to content
CapabilitiesProgramming & electronics

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

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

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

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.