"The moment you doubt whether you can fly, you cease for ever to be able to do it."
- J. M. Barrie, Peter Pan

Hi, I'm Adam. I want to build innovative and sustainable technologies that help people.

Currently working as a Software Engineer @ Electrans Technologies Ltd., where we've built an autonomous coupling solution for the commerical vehicle industry. Previously graduated from the University of Waterloo with a Bachelor's of Applied Science and Option in Artificial Intelligence in the co-op program.

I enjoy combining mechanical design, embedded systems, and scalable software to solve real-world problems.

Want to chat? Get in touch with me below

email copied to clipboard!

Projects

Automated Pressure Relief Mattress
PythonRaspberry PiI2CMultithreadingPCB Design

Overview

Pressure ulcers, also known as bed sores, are an affliction that breaks down the skin and underlying tissue when an area of skin is placed under consistent pressure. Despite being a preventable affliction, pressure ulcers still affect 3 million adults in the U.S., costing hospitals and patients an average of $37 800 per hospital stay.

For my engineering capstone project, my group and I built a smart mattress topper, with over a dozen air cells that use pressure sensors and compressed air to improve blood flow and comfort by autonomously adjusting the pressure in the appropriate air cell. The system was paired with a mobile app that we developed to allow real-time monitoring and control. Our goal was to reduce both the labour-intensive nature of pressure ulcer care, and provide a solution that can also be used outside of the hospital, for instance at nursing homes and private residences.

For this project, I led the firmware implementation, while supporting electrical integration and system integration with the mobile app. The system consisted of 16 piezoresistive sensors & one-way valves which were interfaced with a Raspberry Pi and Arduino using I2C and solenoid drivers, respectively. The Raspberry Pi acted as a server for the mobile app to connect with using REST APIs.


Features

  • Air-cell mattress topper with piezoresistive sensors to identify vulnerable areas with stangnant presure against patient

  • 16 pneumatic one-way valves autonomously controlled by solenoid driver ICs

  • React Native mobile app integration with REST API allowing real-time monitoring and individual cell control

Learnings

  • Designed PCB for piezoresistive sensor ICs custom footprint for air-cells

  • Grey understanding of Python multithreading to allow automatic control while listening for mobile app requests

  • Built pneumatic & electrical circuits with minimal footprint to fit within mattress footprint

  • Used separate power supply for solenoids to protect against inductive loads

Challenges

  • Implementing power-switched multiplexing to poll multiple sensors that have the same hardcoded I2C address

  • Effectively managing mutex lock for two threads in Python program

  • Sourcing solenoid driver IC that can actuate several solenoids at once


Gallery

Autonomous Robot Arm
PythonC++ArduinoMotor DriversOpenCV

Overview

My favourite course during my 3rd year at the University of Waterloo was definitely ME380 – Mechanical Engineering Design Workshop. The course revolved around a term project where each group of students had to design and build a pick-and-place robotic arm that follows a set of constraints and requirements, and two additional requirements chosen by the groups.

Our team chose to design a manipulator that was also autonomous and capable of dealing with objects that had complex geometries. This meant that the manipulator needed to detect objects, calculate the required movements to get to the object, and handle objects that are difficult to grasp.

In our group, I was focused on the electric and firmware aspects of the manipulator, including computer vision, circuit design, and motor control based on inverse kinematics. However, everyone on the team was very multi-disciplinary and involved in all major design decisions.

Our final product was a 6-DOF robot arm that had 2 stepper motors and 3 servo motors. The gripper and linkages were mainly 3D-printed. A laptop was connected to a camera to perform object detection and inverse kinematics calculations, with control commands sent from the laptop to an Arduino through UART.


Features

  • 6-DOF robot arm that can autonomously pick-and-place complex objects

  • Object detection algorithm based on HSV contrast using OpenCV Python

  • Bonus program to control robot manipulator using laptop keyboard

Learnings

  • Enhanced understanding of fine-motor control through H-Bridges and PWM

  • Applied inverse kinematics equations using jacobian matrices in NumPy

  • Leveraged pytest to verify code before mechatronic assembly was complete

Challenges

  • Developing and troubleshooting inverse kinematics algorithm

  • Calibrating servo motors to share single PWM source

  • Efficiently sending command signals from computer to Arduino


Gallery

Hardware-in-Loop Test Fixture
C++ArduinoSolidWorksAltium365CAN (J1939)

Overview

During my co-op, the engineers at Electrans Technologies had completed the design of their robotic system and were transitioning to its assembly and integration into commercial vehicles. The system would be an Electronic Control Unit (ECU) on the vehicle’s CAN network. As Electrans makes this transition, it is crucial that they verify the design of the printed circuit board (PCB), firmware, and hardware implementations before they are integrated in the final system. This lets engineers detect faults in their design early in a lower-risk environment, and prevents bottlenecks in the verification process by waiting for the full assembly.

The objective of this project was to design and build a Hardware-in-Loop (HIL) Test fixture that verifies the design and functionality of the ECU’s PCB and firmware. The details of the ECU are confidential and therefore are not included below.

The project involved reducing the number of hardware components to a model that produces an equivalent environment and electrical signals, mounting all components ergonomically for an operator to easily manage, and developing an interface for the operator to mimic the interactions that the ECU would have with a heavy-duty vehicle on the CAN network.


Features

  • A pneumatic & electrical circuit that replicate core sensors and actuators of the system's state-machine

  • Operator interface using external switches and LCD screen to replicate heavy-duty vehicle states and outgoing messages

  • Custom Arduino function that converts switch states into outgoing CAN messages (SAE J1939)

  • Custom 3D-printed mounting brackets to securely house all actuators and sensors

Learnings

  • Applied bit manipulation to efficiently create CAN messages from C++ variables

  • Learned new communication protocol and created custom function to transmit its messages

  • Learned to design complex electrical harnesses in CircuitMaker

  • Increased ability to modularize code by having different sensors inherit same base class

Challenges

  • Recuding total number of hardware components and circuit size while keeping core functionality.

  • Managing power distribution for all components while limiting current draw and preventing inductive kickback

  • Sourcing alternative components at a low budget that still meet funcitonal requirements

Project is closed sourced.

Gallery

Arduino Enclosure
SolidWorksI2C3D PrintingSolderingSourcing Components

Overview

This was a subproject for my Hardware-in-Loop (HIL) Test fixture project.

After the HIL test fixture had been initially assembled and tested, there were three main areas of improvement. First, the operator's switches were too small and soldered too close together which made it difficult to toggle one switch without affecting another. Second, the LCD was also tilted at an angle that made it difficult to see when standing above the test fixture. Finally, all wiring should be hidden or strapped down to prevent it from interfering with the test fixture’s main electrical harness.

As a solution, I designed and 3D printed an enclosure to ergonomically mount the LCD screen & switches, and conceal the Arduino & its wiring from the test fixture.


Features

  • 3D-printed enclosure for Arduino Nano with mounting slots for switches and LCD screen

  • Secure mounting point for Arduino Nano using threaded inserts

  • Latching mechanism to easily remove top half of enclosure for easy access to internal components

Learnings

  • Improved assembly & prototyping skills by soldering Arduino and wires to solderboard

  • Developed understanding of aesthetic and user-centric design

  • Enhanced understanding of I2C using it for LCD display

Challenges

  • Designing robust 3D printed latching mechanism for enclosure

  • Troubleshooting data bus speeds for LCD display

Project is closed sourced.

Gallery

Sheet Metal Brackets
SolidWorksSheet MetalEngineering Drawings

Overview

For this project I modelled two different metal brackets in Solidworks that would support large pneumatic cylinders for a prototype. I then created engineering drawings of both brackets in SolidWorks to be sent to an overseas manufacturer.

The brackets were manufactured, passed quality assurance, and installed on a commerical vehicle for a pilot program.


Gallery

Arduino Quadcopter
C++ArduinoSolderingSourcing Components

Overview

As I was exposed to new aspects of engineering from my co-ops, I realized that I was still quite unfamiliar with electronics, firmware, and printed circuit boards (PCBs). Since I would not get much exposure to these concepts during my mechanical engineering degree, I decided to build an arduino-powered quadcopter.

As a starting point, I found an electrical schematic for an arduino-powered quadcopter online, and based my project on it. I wanted to avoid pre-built drone kits to properly learn the engineering concepts I was applying and experience sourcing individual components for a project which is a key component of professional engineering.

From there I assembled and soldered all of the components, and programmed the Arduino Uno to respond to a controller's inputs and auto-level the quadcopter.


Features

  • Remote-controlled quadcopter based on Arduino Uno & gyroscope sensor

  • Auto-levelling functionality using pin change interrupts

  • Calibrated electronic speed controllers (ESCs) for weight-distribution

Learnings

  • Developed pin change interrupts and setting an interrupt service routine

  • Learned to send and receive data using the I2C communication protocol

  • Enhanced prototyping skills with delicate soldering of ICs to Arduino

Challenges

  • Calibrating ESCs based on PID correction calculations

  • Troubleshooting random voltage drops from ESC pulses

  • Fine-tuning motor speeds based on battery placement and weight-distribution of quadcopter

Project is closed sourced.

Gallery

Carbon Footprint Tracker
Django (Python)HTML & CSSJavascriptSQL

Overview

On August 9th, 2021, the Intergovernmental Panel on Climate Change (IPCC) released the first part of their sixth assessment of the climate crisis. The report highlighted how human activity has increased the global average surface temperature by 1.50 degrees celsius since 1850. The report's central conclusion to limiting future human-induced global warming is to limit cumulative carbon dioxide emmisions. This is because scientists have found a near-linear link between cumulative anthropogenic carbon dioxide emissions and the global warming they cause.

The objective of this project was to design and build a web application that allows users to track their carbon dioxide emissions for increased self-awareness of personal emmisions and incentivize lifestyle changes to limit global warming. The project, named GreenFoot, must allow users to track their carbon footprint, input how far they travelled & by what method to calculate carbon dioxide emissions, and add friends to compare weekly carbon dioxide emissions. GreenFoot was built using a MySQL database, Django (Python) backend, and a HTML, CSS & JavaScript frontend.

This project was submitted as a final capstone project in the Harvard University’s CS50 Web Programming Course with Python and JavaScript. The requirements from the course were that the project be an original, complex web application that uses an SQL Database, Django (Python) back-end, JavaScript front-end, and be mobile responsive.


Features

  • Full-stack social media platform using MySQL, Django, & JavaScript

  • Let users 'race' against friends in weekly competitions for lowest emission

  • User authentication system using JWT, with password resetting via email

  • CSRF prevention using Django libraries

  • Plots of weekly user emissions using Chart.js library

Learnings

  • My first full-stack web-development project

  • Gained proficiency in responsive design w/ pagination for large requests

  • Improved my understanding of efficient data storage in relational databases

Challenges

  • Maintaining responsive UI for mobile devices with Chart.js plots

  • Managing friend requests and temporary records with a SQL database


Gallery