Saturday, 9 February 2019

A 3D printed CG scale

A modern way of measuring CG has been long overdue! Like many modellers, I have used a pair of simple balancing arms to check the CG. The model must be carefully positioned each time, which can rapidly get tiresome.

CG Scale is a much better solution. It's a combined weight/CG scale using two load sensors, some electronics and various 3D printed parts. The model always remains in a fixed position - no need to move it around while you're playing with weights.

In this post I describe the device, and how I built my own unit.

Finished scale showing the frame and display unit.


CG Scale is the brainchild of Olav Kallhovd from Norway. It's designed primarily for models with slim fuselages such as the latest F3X sailplanes, however wider models can be accommodated using modified cradles.

Thank you Olav, for your great design - and for making it open source, which means that anyone with a printer and a soldering iron can make their own unit, or even modify the design. The files are available on GitHub


CG Scale comprises two main components: the frame, and the display unit.

The frame houses a pair of aluminium load sensors. Attached to each sensor is a cradle with articulated pads to support the wing. The front cradle also has vertical posts to locate the wing leading edge. Twin sidepods contain an Arduino, supporting electronics and a 9V PP3 battery.

Load cell cover removed, showing fixed part of each load cell.

The display unit comprises an LCD panel and a second Arduino. It connects to the frame via a 3-wire cable.

Parts of the display unit. There's an Arduino lurking under the LCD panel!


To operate the CG scale: switch on and wait for it to initialise. Place the model on the frame so the wing leading edge rests against the vertical posts. Finally, read off the CG and weight. It really is that simple! The CG is position is calculated relative to the rear of the vertical posts.


The first step was to download all the project files - these include the STL files for printing the plastic parts, a bill of materials, images, circuit diagrams and Arduino code.

I printed out the plastic parts with a Creality CR10 Mini printer using PLA filament. The frame took longest to print - around 9 hours.

The sensor and electronic components are widely available from eBay, Amazon and other suppliers. The Arduinos can vary a fair bit in price - the cheap ones I got work fine. The Arduino site has some excellent introductory material.

The load sensors are designated "YZC-133". These are available in various ratings - I purchased two 3kg units. It's important that the sensors are mounted flat and perfectly aligned. Unfortunately the mounting holes on one of my sensors were slightly off-centre which caused it to tilt slightly when bolted to the frame - solved by reworking the holes in the frame. Similarly, the four wing support pads must lie precisely in the same plane.

YZC-133 load cell. One half is bolted to the frame, the other carries the cradle.

Also required are a couple of load sensor amplifiers. The ones I obtained are marked 'Keyes 234'. These are longer than the ones shown in Olav's photos, and I had to file some material from the ends to get them to fit in the enclosure.

Main compartment showing the load cell cover, two amplifiers, and Arduino Pro Mini.

Making the display unit

The LCD panel is a generic 1602 (16 character/2 line) device. It's worth getting one with an integral I2C board, as it connects more easily to the Arduino.  Both types are supported by the project.

My panel did not have the I2C board, which meant that extra wiring was required. To get it all to fit, I dropped the bottom of the case by 2.5 mm. (Olav has published a STEP file, allowing the design to be modified using software like Fusion 360).

LCD panel and Arduino 

First switch on!

With construction over, it was time try apply power and stand well back! To my relief, nothing exploded, and the roof is still intact. There wasn't even any smoke.

There was just one - thankfully minor - issue: the battery voltage wasn't displayed during the startup process. I modified the main sketch to add a short delay before the writing to the display, and this cured the problem.
delay(500); // allow display to initialise
For viewing and uploading the Arduino code (called 'sketches') I used the excellent web-based development environment. It's very easy to use, even for an Arduino newbie.


The load sensors have to be calibrated. The calibration data is hard-coded in the main sketch, so there is some editing/reflashing involved. Documentation is a little thin here. The way I did it was to set the load cell calibration constants to 1000. I then applied some known weights to each cradle, noting the values displayed. From there I was able to calculate the constants required to display the weight in grams. Finally, I inserted the new values into the code and reflashed the Arduino.

One nice thing is that placement of calibration weights isn't critical, it seems that the load cells are very good at responding to sheer stresses only, while rejecting bending moments.

Measuring the empty weight and CG of my Stribog


My unit works very well. Once calibrated against my kitchen scales, readings have been accurate and repeatable, over a range of ambient temperatures. My only slight nitpick is that battery life using the default PP3 is quite short, just a couple of hours.

Total cost including all hardware was around £40. If you can't or don't want to build your own, the CG scale can be purchased ready to run from T9.

All in all, this has been a fascinating project, albeit more time consuming than anticipated. Best of all, CG measurement is now a pleasure instead of a chore!


CG Scale project page (Github)
Build thread (RC Groups)

No comments: