Saturday, 9 February 2019

A 3D printed CG scale

How do you measure the CG of your model? Very likely, you'll be balancing the model over a pair of pivoting arms, or - if you're feeling lazy - your fingertips. Low cost yes, but not very convenient or accurate. Well you've guessed: there's a better way...

CG Scale

CG Scale is an electronic CG scale for F3X sailplanes. It's an open source project on GitHub, so anyone with a soldering iron and access to a 3D printer can make their own. The scale is the brainchild of Olav Kallhovd from Norway. Thank you Olav, for sharing your great design!

In use, you simply place the model on the scale, and read off the weight and CG position. The model's location on the scale is fixed, making it easy to experiment with different balance weights.

Finished scale showing the frame (with covers removed) and display unit.


The scale employs a couple of load sensors, some electronics and various 3D printed parts. Calculations for CG and weight are performed by an Arduino microcontroller.

The largest component is the main frame. Bolted to this are the front and rear load sensors. Actually just one end of each sensor is fixed; the other end supports a wing cradle and hangs free. Embedded in the front cradle is a pair of vertical posts for locating the leading edge.

Twin sidepods house an Arduino, supporting electronics and a 9V PP3 battery.

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

The display unit comprises a box, an LCD panel and - depending on the type of display - either an I2C board or a second Arduino. The box connects to the frame via a 3-wire cable.

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


The first step is to download the project files - these include the STL files for printing the plastic parts, a bill of materials, photos, 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 - resolved 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 amplifiers for the load sensors. 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 load cell amplifiers (red boards), and Arduino Pro Mini.

Making the display unit

The LCD panel is a generic 1602 (16 character/2 line) device. These come with or without an integral I2C board. Either type can be used, however it's better to get one with the board as it's much easier to connect up.

My panel did not have the I2C board, which meant that I had to use a second Arduino plus extra wiring. To get it to fit, I had to drop the bottom of the case by 2.5 mm. (Olav has published a STEP file, allowing the design to be modified using Fusion 360 or similar).

LCD panel (non-I2C version) and Arduino. Note fiddly wiring!

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 issue: the battery voltage wasn't displayed during the startup process. I modified the main sketch to add a short delay before 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 like me.


The calibration constants for the load sensors are hard-coded. As a result, the calibration procedure involves some editing and reflashing. Documentation is a little thin here. The way I did it was to initialise the calibration constants to 1000. I then applied some known weights to each cradle, noting the values displayed. From there I was able to calculate corrected values, in order to display the weight in grams. Finally, I edited 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. Readings have been accurate and repeatable, over a range of ambient temperatures. Just a couple of niggles: the default cradles are quite narrow, so you may want to find an STL file for a wider version for anything other than the more recent F3X models. Also the 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 made 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: