James O'Connell

This page briefly details some of my personal and professional projects.


Home server

One of my favourite projects I've worked on and continue to work on is my home server. In around 2018, I installed a hypervisor called Proxmox onto an old laptop and spun up a few virtual machines to self-host services such as a network-wide ad blocker and a media server. This turned out to be a very slippery slope, because in early 2020, I upgraded to a purpose-built fully-custom home server. While it still contained consumer parts, I kitted it out with a 10-core Intel i9-10900, 128GB of memory, and 17TB worth of storage. I self-host a number of services now, including but not limited to:

While it never seemed like it would become an obsession, I now am permanently tunneled through my home network via the VPN client on my phone, have my lights and music automatically turn on every morning, have a ludicrous amount of private cloud storage that big companies can't sift through for advertising, and a playground to try computer things on a VM without worrying about corrupting anything.


Engaging control systems tutorials

Before I began tutoring, one of the control systems courses had fairly bland tutorials, in which the students were tasked with writing a bunch of code in MATLAB to design some controllers. Unsurprisingly, these lessons weren't particularly well-liked and didn't get much engagement or attendance. Around the time I began tutoring it at the beginning of 2018, the university had acquired thirty Quanser QUBE educational kits. Unfortunately, these units were not compatible with MATLAB; they were specific to LabVIEW, which is not taught in mechanical engineering. For a short internship, I was tasked with simply "make it work with MATLAB". Over the next six weeks, I reverse engineered this proprietary product, and found out how it worked, which pins did what, how to read the sensors, and how to drive the motor. In addition, I was involved with designing and manufacturing a custom PCB to interface the hardware with MATLAB. This enabled the lecturer, myself, and my co-tutor to design lessons. Rather than typing a bunch of boring code, students could now "learn by doing", having a device they could interact with and actually see the performance of the control system they designed. The final couple of lessons had the students design and implement an inverted pendulum, of which a video is shown below. Note that there is only a single motor inside the black box driving the entire system; the vertical arm is mounted on a bearing.


Transitioning to online teaching

With the event in early 2020, we were forced to immediately transition all of our teaching activities online rather than in-person. This was a couple of weeks into the semester and we only had about one week to have everything online. With the massive success of the QUBEs as mentioned above, we didn't want the students to lose that opportunity, but we were unable to have in-person lessons. We chose the huge challenge of virtualising the hardware. Myself and my co-tutor, with great difficulty, used a physics simulation software called SimScape to design and simulate the QUBEs, going so far as to manually tune and tweak parameters to make it behave like the real thing. This ended up working wonders, and while it was an almost-impossible challenge, we managed to get it done on time. With the students able to install MATLAB on their own computers, we simply provided them with a file they could import, containing the virtual system they would use, including a real-time viewport, allowing them to design controllers just like they were in front of it. A short video of the virtual system is shown below in inverted pendulum mode with artificial noise.

The students understood the huge effort that went into this task, especially when compared to other courses that didn't bother to make online lessons interesting or engaging. We received many comments expressing gratitude and enjoyment of this silly little virtual box in a world with so much uncertainty.


Honours project

In 2017, myself and three colleagues underwent our Honours year in undergraduate and were required to undertake a year-long project. We chose to design and build a partially magnetically levitating motor. The interesting part of our design was a relatively large air gap between the stator and rotor, allowing them to be separated by a barrier. Our target application for the motor was in chemical mixing, where a rotor with a mixing blade could be housed inside a sealed vessel with chemicals to be mixed, with the stator and its sensitive electronics on the outside of the vessel. The motivation was to reduce mechanical wear on bearings by simply not including any and instead using magnetic levitation.

Two of us worked on the mechanical design, manufacture, and assembly, with a third working on the magnetic design. I was tasked with the electronics, motor controller design, and levitation controller design. Initially we had hoped that we could achieve full 6-DoF magnetic levitation, but our magnets were far more powerful than the electromagnets, and a controller fast and strong enough couldn't be designed with the limited time we had. Instead, we opted for partial levitation, with radial stability provided by a shaft and axial stability provided by the magnets. While this didn't exactly reduce the mechanical wear we were aiming for, we believed we made excellent progress in the little time we had with the little experience we had.

A short video is shown below of the motor "mixing" water (due to safety concerns we were unallowed to mix anything nasty).

We were able to show off our motor to the public at the yearly Ingenuity show. For our hard work, we won both the Best Mechatronics Project and the Best Overall Project for the year out of all Honours projects.