Skills - Embedded Engineering

Electronic Design icon.

Electronic Design

I've been involved with electronic design since 2014 (10 years). I started out as a hobbyist in Grade 10 in high school when I first discovered Arduino (at which age I authored an Instructables Servo Tutorial - currently the site's most popular servo tutorial with 76k reads😉).
During high school I also built a 250 class quadcopter. Importing the various parts from China and mounting them on a home made fiberglass and wood frame. At a push it could carry a GoPro 3. The result was the source of some highly stressful but fun times.
While formalising the fundamentals with my engineering degree I continued to tinker on the side with weather stations and various small projects.
In my current day job I often design the hardware that my firmware runs on. My attention to detail results in meticulous designs with a focus on low BOM costs, robustness and stability.
Some of my design skills include:
  • Extensive experience laying out STM32 MCU boards.
  • Instrumentation amplifiers.
  • High bit count ADCs.
  • Thermal considerations.
  • Designing for high volume production.
  • Working hand in hand with industrial designers.
  • Foundational knowledge in power and signal integrity.
  • Basic knowledge of RF PCB requirements (impedence matching etc.).
  • Compact SMPS power supplies.
Rust icon.

Rust

"A language empowering everyone to build reliable and efficient software."

Rust is a modern programming language focused on safety, speed, and concurrency. Rust is used in system programming, web development and building highly concurrent and reliable software systems. Another of its use cases, and the one that caught my eye, is in embedded programming.
One complaint often heard about Rust is how much harder it is to get your program to compile. The strictness of the compiler and its checkers can be a source of frustration but it allows a lot of errors to be picked up at compile time. This is especially helpful with embedded programming as runtime errors are sometimes very hard to catch (especially if they only occur seldomly).
C icon.

C

I've used C extensively for embedded programming of the STM32 range of MCUs. Going forward I plan to shift away from C towards Rust for embedded programming for the benefits mentioned in the 'Rust' section above.
KiCad icon.

KiCad

I've used C extensively for embedded programming of the STM32 range of MCUs. Going forward I plan to shift away from C towards Rust for embedded programming for the memory safety.

Skills - Software Development

Svelte & Svelte Kit icon.

Svelte & Svelte Kit

"Cybernetically enhanced web apps."

The Svelte framework (combined with Sveltekit) is currently my framework of choice. My primary objectives with a website I design are speed and ease of use.
'Time to Interactive' or TTI is a metric used in websites, this is the time a site takes to download and execute enough of the content and code to allow the user to start interacting with the site. If a page takes too long to load or feels slow the user will grow impatient and leave the site despite the quality of content or product that it is showcasing.
In an attempt to make a site easy to use I try to keep the user interface as simple as possible (no flashy gallaries or anything that may anoy a user). Currently I use Tailwind CSS as a CSS framework.
I host my websites on Cloudflare Pages (including this site). This service provides the best load times of the other services I've tried.
Python icon.

Python

"Beautiful is better than ugly. Simple is better than complex."

Python is a tool I find useful to quickly write helper scripts. This often comes in handy for testing and verification for my embedded projects (whether this be to plot GPS coordinates on a map or to decode a binary stream of data).

Other experience:
  • Web development (Flask and Django).
  • Report generation (Reportlab).
  • Plotting (Matplotlib).
  • Basic web scraping.

©2024 Gavin Keeley, All Rights Reserved.