An idea’s been forming in the back of my head for a while: that it should be possible to estimate the amount of 3D filament left on a reel by simply weighing the reel with its filament, and subtracting the reel weight. Sounds simple, no?

Today I realized that it may be possible to modify a printer to give a live estimate of filament left on the currently-mounted reel, by “live weighing” the reel, and knowing the reel weight and filament density.

## The Theory

In principle, calculating the remaining weight or length of the filament on the reel is trivial, as illustrated in the figure below:

Total weight = weight of the reel plus weight of the remaining filament.

Therefore, **weight of the remaining filament = total weight minus weight of the reel**.

It’s also trivial to convert from weight to length by knowing the density (grams per meter) of the current filament and the nominal diameter of that filament.

For example, I have an empty reel of Verbatim filament, that weighs 223 g. I also have a slightly-used reel of Verbatim green PLA, that weighs 1,194 g. 1194 -223 = 971 g.

So I have about 971 g left of my 1 Kg reel of green PLA.

Further, Verbatim’s product page for that filament specifies a density of 1.24 g/m^3; another manufacturer with a similar density estimates 110 meters for a 1 Kg reel of 3mm (2.85 mm) filament. That works out to 0.11 meters/g.

So my 971 g of filament left on the reel should be about 106 meters long. …more or less.

## How To Do It

In practice, the tricky part is how to know a few elements of the first equation above:

- The total weight of the currently-mounted reel and its filament, in grams.
- The weight of the reel, in grams.
- The density of the filament, in g/meter.

Working from the bottom of that list to the top:

Item 3, the **density** of the filament in grams per meter, can – in theory – be supplied by the filament manufacturer. I say the filament manufacturer because they likely need to control for both density of the filament and diameter of the filament to produce a high-quality product. So part of the idea here is to get filament manufacturers to specify filament density in g/meter (of course +/- some tolerance).

Now that I think about it, I think the filament profiles used by Cura already allow Cura to estimate filament mass (grams) from length of filament and filament diameter. So it’s likely nothing new has to be done to know the filament density.

Item 2, the **reel weight** in grams, can – again, in theory – be supplied by the filament manufacturer. The filament manufacturer could supply this value as a specification (+/- some tolerance), or could report it per-reel: printing it on the reel or adding it to the info stored on the reel’s RFID tag.

Item 3, the **total weight**, is a bit tricky to measure “live” for the reel mounted on the printer, and will likely take experimentation to come up with a workable design. In theory, you can start by attaching two load sensors to the two mounts of a reel:

The load sensors in the figure above would be similar to Sparkfun’s 10Kg range, straight bar load cells, which retail for about $7 per. Sparkfun also sells the XH711 Load Cell Amplifier for about $10 per, retail. I put these numbers in just to give you a very rough idea of the cost; a printer manufacturer could probably buy similar parts in quantity for significantly less money. Incidentally, I used this load cell and amplifier in my hobby project, Dog Water Bowl Scale.

Notice in the above figure that the filament reel is supported by two supports, and that each support is fastened to – rests on – a load sensor. Calculating the total weight of the reel and filament from the weight measured by the two load sensors – in theory – takes a trivial bit of math: The weight is just the sum of the weight measured by the two load sensors.

In practice that calculation depends on *how accurately each load sensor measures the weight*. One thing I discovered in my hobby work on a Dog Weight Scale is that most load sensors are designed to measure a weight that’s temporarily placed on them; if you leave a weight on the scale for hours or days, the scale “creeps”. That is, the measured weight changes, because the load cell’s metal bends a little over time.

So I think **one tricky part is calibrating the load sensors** for a reel that may sit on them for days.

For extra credit: someone with a decent physics background could probably figure out how to mount two load sensors on a single-arm-style printer such as the Lulzbot Taz 6.

## Accuracy

In the example of my Verbatim PLA, the filament density was about 0.11 meters/gram, or about 9 g per meter. So an error of (very roughly) 10 g in weighing a reel + filament would translate to an error of about 1 meter. In my example above, an empty reel + 1Kg of filament would weigh about 1,223g. So for this example, an error of 1 meter would be about 0.8% (10 g / 1223 g * 100).

So, depending on your application, if this system can measure the weight of the mounted reel (and filament) to about 1% or 2%, it could tell you the length of your remaining filament +/- about 1 or 2 meters.

That accuracy sounds useful enough to pursue further.

## The Third Support Point

In the above discussion I’ve ignored another practical matter: from a physics point of view the reel + filament isn’t just sitting on the two load sensors: the connection from the filament to the print head exerts some force on the filament, which may need to be added or subtracted from the weight measured by the two load sensors.

For example, if the print head is not pulling hard on the filament, that effect might be possible to ignore. If on the other hand, the head is parked far away from the reel, the head might be tugging on the filament, and that force might need to be subtracted from the measured weight.

So I’m guessing you may have to experiment to find how the print head affects the measured total weight of the filament and reel.

## Making it happen

Let’s recap: to make this happen someone needs to:

- Build a prototype to see how accurately the load cells need to be calibrated, and under what conditions the print head’s tugging or pushing on the filament can be ignored.
- Convince a printer manufacturer to build a scale into the reel mount.
- Convince a large set of filament manufacturers to include the reel weight in the specification or printed measurements of each reel.

….or you could just do it yourself:

- Build a printer that has a two-point reel mount, with load sensors at those two mounting points.
- Weigh each full reel of filament you buy. Subtract the nominal weight of the filament from that weight, to learn the weight of the reel. For example, if you bought a nominally 1Kg reel of filament, and the weight of the reel + filament is 1.050g, you can infer that the reel weight is about 50g.
- Modify the printer software to
- ask you for the reel weight when you mount a reel of filament.
- know when it can accurately measure the total weight; that is, when it can ignore the force the print head exerts on the filament.
- Read the load sensors, calculate the total weight, subtract the reel weight, and use the filament profile to convert the weight into length of filament.
- Display the (estimated) remaining filament, in grams and meters.

…or you can do the informal version of this, without the fancy printer modifications:

- Weigh each reel of filament you receive, as above. Write that weight on the reel.
- Whenever you want, unmount the reel from the printer and weigh it on a food-grade scale (that is, one precise enough to be useful; not a bathroom scale).
- Use a calculator to subtract the reel weight from the measured weight, to learn the remaining filament in grams.
- Use the filament profile (the density, in g/m) to convert grams into meters of filament left.
- See how far off your calculations are over time.