Mk I

A project log for Reaction Wheel Pendulum

A self-balancing inverted pendulum with swing-up capability.

A.M. SmithA.M. Smith 12/03/2019 at 01:482 Comments


Mark I was cobbled together in the sum of a weekend. Having improper materials at hand, and having forgone any calculation whatsoever, I had healthy reason to doubt this initial incarnation. Shortcomings known, it left my mind free to build something with no expectation whatsoever.

The prototype employs some PLA mounts, a wooden dowel, some spare rotary pillow bearings, an Arduino Nano, an MPU9250, and a L298N motor driver. Excepting the PLA mounts, all components were rescued from a box of deceased projects.


Through the course of experimentation, I went through three different motors.

The first was geared, high RPM, low torque. During a brake or direction change, the inner metal teeth of the motor were shredded smooth over time as they resisted the inertia of the heavy spinning wheel. I needed a motor that could rapidly stop and change direction without damage. I decided to leave behind geared motors and try brushless DC.

The second motor was a BLDC with a built-in IC, hall sensor, and braking mechanism. Unfortunately, I too brusquely reviewed the specifications and missed an all-too-important line: "CW only, do not attempt to reverse polarity!"

The third motor was BLDC, high torque, low RPM. Torque is exerted by the motor transitioning from a standstill to full RPM (accelerating) while overcoming the inertia of the pendulum itself. The effectiveness of this torque is felt most strongly when the pendulum is nearly balanced. However, at angles of 15 degrees or more, the weight of the combined motor and wheel masses at the end of the pendulum lever arm becomes too much to overcome.

It also seems that, to hop up, I would see more success reaching a high RPM and slamming the brakes (high angular deceleration yielding high torque), the way the balancing reaction wheel cubes work.

PID Control

Additionally, the PID control software running on the Arduino appeared sluggish. Potentially the Arduino is not a high enough clockrate controller for this application.

Some more hardware-level calculations for this might be in order.

Plans for Mk II


Jarrett wrote 12/03/2019 at 08:24 point

Fun project!

Using a Teensy or an STM32 or literally anything other than an Arduino will give you orders of magnitude more processing power

  Are you sure? yes | no

A.M. Smith wrote 12/03/2019 at 18:09 point

Thanks! I do think I'll use a Teensy on the next one.

  Are you sure? yes | no