Welcome! Here you will find information about some personal engineering projects I
have undertaken over the years.
This portfolio is intended as a complement to my resume. I'm happy to discuss them in more detail with anyone interested.
Primarily a sailboat and initially rigged as a sloop (main sail plus roller-furling jib), it also has custom electric drive system (for when the wind isn't blowing) with a 48V 100Ah lithium battery pack and rudder-mounted 5hp electric motor spinning a 2-blade folding propeller.
I am a fan of folding trimarans because the stability of the amas/floats avoids the need for a heavy keel. A retractable daggerboard and folding amas means these boats are easily trailerable. The lightness and narrow hulls of trimarans also means they are usually much faster than monohulls. The downside is that they are a lot more work to build..
It uses a 4-layer logic board with STM32G431 microcontroller to generate PWM signals, and a DRV8301 chip for the gate driver, shunt amplifiers and 5V supply (buck converter), interfaced to a 2-layer power board with heavier copper, with 6 high power MOSFETs in a three phase bridge and a bank of polymer electrolytic capacitors to handle ripple current. It also has a hall sensor port for rotor position sensing, UART and CAN bus interfaces for logging and/or control, and an analog input for throttle.
I have started working on a Python app which connects to the controller via wireless module on the UART interface. I am particularly interested to try implementing sensorless FOC on this controller, using the High Frequency Injection method to detect rotor angle at stall and low speeds, and the Sliding Mode Observer method for estimating/tracking the rotor angle at high speed.
Overall dimensions are about 90x50x25mm. Excuse the added wire - a workaround for a mistake on this PCB. It happens sometimes..
The heart is an STM32F072 microcontroller, communicating over SPI with dual LTC6811 BMS chips. It integrates over CAN bus with a monitor, based around an STM32H503 running at 200Mhz, talking to a 4 inch LCD touchscreen via parallel ILI9488 interface. The monitor can view telemetry from the BMS, and is also used to modify various device settings. There is also a Bluetooth Low Energy interface, for which I am planning to write an Android app with similar functionality to the CAN bus monitor.
Schematics and PCBs were created in KiCad. Firmware was written in C++ using STM32CubeIDE. Housing was designed in OnShape and 3D printed.
The overall construction involves a sintered polyethylene base surrounded by a hardened steel rail, below two lower layers of carbon fibre (200gsm uniaxial lengthways plus 200gsm biax @ ±45˚), a wood core with polyurethane edge, then two more layers of carbon fibre on top. Epoxy resin is used to wet out the carbon and glue the layers together, then the layup goes into a custom press/mould to give it the required curvature while the epoxy cures.
Most snowboards are made from fibreglass but I was interested to try making them from carbon fibre for better strength to weight. Carbon has around 3x higher modulus of elasticity though so the sandwich construction also has to be made significantly thinner for appropriate stiffness. I’ve also experimented with different core materials, such as high density foam, polyurethane, paulownia - in many cases learning what doesn’t work well!
Early designs were created in SolidWorks, but more recently I’ve been using OnShape. CAD designs were then turned into NC files to use on my CNC router to cut the overall shape, machine the edge rebates and the holes for metal binding inserts. I also wrote a Python script to generate NC files for thicknessing (gradual thinning of tip and tail). Similarly the press was designed in CAD and pieces cut on the CNC router.
Recently in my spare time I've had a go designing a few of my own. Four of them are pictured here, all using either 30 or 60 identical pieces to form a 3D shape.
The puzzles were designed in OnShape, and 3D printed in ABS plastic.
You can download STL files if you would like to have a go 3D printing a puzzle for yourself. Here is the part that can be used to make the first two photos (the piece was designed with some flexibility to allow varying curvature, so it can be used for both 30pc and 60pc puzzles) and here is the part for the fourth puzzle.
It powered by 3x 18650 lithium cells (fitted under the control board) and uses an STM32F405 microcontroller communicating over 1 megabit UART with 18x Waveshare ST3215-HS high-speed bus servos (3 per leg). Various combinations of gait and movement are supported, with the microcontroller performing inverse kinematics to calculate joint angles based on desired body and foot positions.
The mechanical design was done in OnShape and parts 3D printed on a FlashForge Creator 2. PCBs were designed in KiCad, and software written in C++ using STM32CubeIDE. I also designed and built a custom hand controller to control the robot via 2.4GHz wireless interface. The controller includes dual 2-axis joysticks and a 3.2" touchscreen for selecting different functions.
Future plans include adding Bluetooth Low Energy to the main PCB and writing an Android app to control the hexapod, rather than requiring a custom hand controller.
Riding on a 12” hub motor originally intended for scooters, and powered by a 10S4P pack of 18650 lithium cells installed in the main tube. A single control PCB, designed in CadSoft Eagle, included STM32F405 microcontroller, 9-dof IMU (accelerometer/gyro/magnetometer), 10-cell battery management (LTC6802), 3-phase FOC motor controller (about 1kW max), and various ancillaries.
Fiendishly difficult to ride unfortunately! Apart from the difficulty balancing side to side as well, in hindsight the motor was somewhat underpowered so it had trouble correcting large imbalances. I may revisit the idea sometime with a more powerful motor.
To do this I designed a pair of eyeball mechanisms, with a camera in each eye, servos to control eyeball rotation, plus servos to control retractable eyelids. The prototype was driven by a Python script running on a Raspberry Pi, and using OpenCV for face detection. A PCA9685 module was used for controlling the 8x micro servos. Originally powered by a Raspberry Pi 4 and a video multiplexer, I later upgraded to a Raspberry Pi 5 which has dual camera ports, avoiding the need for the multiplexer. The Pi 5 is also significantly faster which improved face detection speed.
The face tracking worked fairly well. I also attempted to implement saccades for a more natural feel (rather than just staring and occasionally blinking) but that didn't work very well due to limited servo and camera performance.
The name was coined by a friend of mine when I was describing the idea to them, and in the absence of a more sensible name, it stuck.
The design uses four 50kg weight sensors under each footpad in a Wheatstone Bridge configuration to average them out, fed to ADC channels on a microcontroller on the main control board. This calculates a suitable throttle level and sends it to four motor controllers, one for each wheel motor. (Hub motors for electric skateboards tend to be a little low on power, but most skateboards only use two of them, so I figured 4WD should perform better.)
The motor controllers are one of my own designs, based on an ATmega16m1 doing sensored sinusoidal PWM control (no FOC possible on these 8-bit micros) with DRV8303 gate driver chip switching the 6x power MOSFETs.
It worked OK, but one of the unforeseen issues was that in order to reject fast perturbations (such as hitting small bumps), the throttle needed a fairly slow low pass filter. As a result it was slow to respond to weight shifts, so the rider needed to keep their centre of gravity between the wheels, and there was a fairly low limit on the amount of acceleration that could be applied safely.
The power stage consisted of 16x TO247 MOSFETs, 16x TO247 diodes and 32x 470uF 200V electrolytic capacitors in parallel. RC snubbers were used to clean up switching transitions (reduce overshoot and ringing).
The logic board used dual AVR microcontrollers, with galvanic isolation to the power board. The controller supported various throttle types, and had a CAN bus interface used for transmitting telemetry and modifying settings. A hall sensor was used for current monitoring.
It was around 99% efficient, but even then produced a significant amount of heat, so I had produced a custom extruded aluminium heatsink housing to help keep it cool.
Further information including design files is available at the ZEVA website. (When I made the decision to wind down my business in 2021, I released the designs for all products as open source.)
The base vehicle was a 2000 Mazda RX7. At the time Series DC motors remained the best "bang for buck" for EV conversions, and to meet the target performance I used two motors in series. Similarly it needed a higher performance battery, and smaller form factor cells were able to offer higher power density, so I ended up using almost 800 small 10Ah LiFePO4 cells.
The car performed well and was a lot of fun to drive, including some outings to the local race track. Lots more information and pictures of the RX7 conversion can be found here.
Or to be precise, convert a petrol vehicle to electric. I started with a Mazda MX5 because they are small and light (allowing for smaller motor, battery etc) and fun to drive. Early conversions like this one usually used Series DC motors, as AC options were still very rare and/or expensive at the time. This conversion was also one of the first in EVs in Australia to use lithium batteries.
The challenges I had to overcome for this project motivated me to start my own business, Zero Emission Vehicles Australia, developing and supplying parts for others undertaking EV conversions around the world.
Lots more information and pictures of the MX5 conversion here.