Skip to content

Technical Notes

Jim Heaney edited this page Jan 16, 2023 · 2 revisions

Detailed Description

I was sick of trying to guess how much filament I had left on my 3D printer, so I designed a scale that integrates directly with the spool holder!

This is the SpoolScale, an open-source 3D printer accessory that allows you to monitor how much filament you have on your 3D printer. I've had this idea kicking around in my head since I built my first printer almost 10 years ago. Since then a lot of printers have started integrating protections to detect if you run out of filament mid-print, but mid-print spool swaps are still a pain, increase the risk of a print failure, and can result in a print partially in the wrong color. With the SpoolScale, you know how much filament is on your printer before you even start the print! The SpoolScale is compatible with every 3D printer. It can read any arrangement of Wheatstone bridge loadcells to measure filament weight, allowing it to be integrated into nearly any spool holder design. In addition to the Artillery Sidewinder design pictured above, I am working on reference designs for Monoprice, Prusa, and Ender 3D printers. The SpoolScale can be operated independently of the printer's electronics but you unlock much more functionality when you connect the SpoolScale to the 3D printer's motherboard.

If integrated with the 3D printer's electronics, the SpoolScale has two additional modes of operation. The first of these is a GPIO toggle, where you can use an M42 or similar G-code command to turn on and off the SpoolScale's screen as desired mid-print. I use this to turn off the screen as the printer is moving/printing, since the extra pull on the filament from the extruder makes the SpoolScale readings inaccurate. The end G-code then runs another M42 to turn it back on when the print is done. This same functionality can be used to selectively dim or flash the screen of the SpoolScale. For more advanced motherboards, the SpoolScale can be interfaced with as an i2C slave. This allows for much more functionality and even the integration of logic into the setup. Some examples of this include automatically setting the empty spool weight based on what material the file was sliced with, or flashing a warning on the printer's screen if there is not sufficient filament to start a print.

The SpoolScale has some other handy features as well. The first of these is a 1 amp sink output that will automatically trigger when the filament remaining drops below some critical value. This could, for example, be tied to a buzzer, LED indicator, or Arduino (although the i2C interface is more versatile for that last one) to act as a warning that a machine is low on filament. There are also 2 terminals to connect an optional resistive element to control the brightness of the screen. This can be a standard resistor to set a fixed brightness, a potentiometer to dim the screen as desired, or a photoresistor to automatically brighten the screen to make it easier to read when there is light is shining on it, or turn the display fully off if you turn off the lights in the room.

The SpoolScale can be fully configured and calibrated using just a single known weight (by default an empty spool). Settings can be configured on this version using DIP switches on the back, however I am also working on a 2nd revision that'll instead have an RJ11 port to connect an external keypadThis'd also allow for you to save presets, to quickly swap between spool styles.

Functional Breakdown

The SpoolScale is composed of 3 main components; the scale, the screen, and the controller.

The scale, which actually handles measuring the amount of filament on the printer, is accomplished using basic Wheatstone load cells and an HX711 amplifier. Only the HX711 is integrated into the SpoolScale, allowing the load cell style and quantity to be determined on a per-application basis. For instance, reference designs for desktop 3D printers may only require 1 1kg load cell, whereas larger machines may require multiple 10kg load cells.

The screen is what displays the filament weight. It is comprised of a 4-digit, 7+1 segment display. This display is then driven by a TM1616, offloading most of the work of controlling the screen from the resource-strapped microcontroller. The TM1616 also handles brightness control with constant-current control of the display.

The controller at the heart of the SpoolScale is an 8-bit AtTiny microcontroller. This low-cost, low-power microcontroller ties together the scale, the display driver, and the miscellaneous inputs/outputs, such as the settings keypad and the warning lights. The AtTiny can be programmed using a simple USB-TTL converter and the MegaTinyCore for Arduino.

Design Concepts

As mentioned above, one of the main goals of the SpoolScale was to be machine-agnostic. This meant designing the SpoolScale to somehow integrate in a standard way with any 3D printer. In addition, the system had to be designed to be compact and mostly self-contained, so that it could fit into any sized 3D printer.

From the get-go, this was intended to be an open-source project. Keeping this in mind, I took steps to use widely-known hobbyist components. These had the added benefit of being well-documented and with open-source library support. I also originally planned to try and make the system hand-assemblable, although limitations from the chip shortage made that difficult. I am hoping to make future iterations easy to solder by hand, if so desired.

Filtering and Drift

One of the biggest challenges that faces systems like the SpoolScale is filtering the load cell data, and accounting for/correcting drift.

Clone this wiki locally