Skip to content

V2 Auto/Manual spool winder, diameter sensor and cooler

Creation's quality: 5.0/5 (1 vote)
Evaluation of members on the printability, utility, level of detail, etc.

3D model description

Once assembled my new FelFil extruder I began to design a cheap and affordable spool winder; I had to design a cooler for extruded filament and a digital sensor for filament diameter.
It's modular, you can configure it at your needs. Only winder, winder and cooler with or without diameter sensor.
You can adjust manually the winder speed, but it can be managed directly from FelFil extruder (or others) speed.
With provided adapter the winder can support almost all spools around.

Among downloaded files you'll find a text file with the link to download the whole project.

The new V7 version of firmware introduces MANUAL/ AUTO running mode and a filament diameter sensor that warns out if diameter is out of tolerance.
If you choose LCD 1602 display you'll find a toggle switch to select AUTO or MAN.
If you choose TFT display you'll find two buttons on screen to select AUTO or MAN.
MAN mode lets you choose speed via the potentiometer while AUTO mode takes input PWM signal from extruder to automatically adjust winding speed relying on its extrusion speed.
Ratios are based on Felfil's range 0-9; with other extruders I'd advice to keep their output this range, otherwise you have to modify all parameters in section "// ratios:" (good luck!).
Furthermore, now the cooler fan speed is proportional to winding speed, utilizing D8 PWM output.

VARSPEED_V7.ZIP contains all necessary software and libraries

In this V2 version you'll find:
- remixed filament diameter sensor (see Credits section)
- remixed cooler
- new spool clutch (yet to test)

If you adopt LCD 1602:
- print case_cover_1602
- In VARSPEED_V7.INO change:
#define LCD_TFT true // set to FALSE for LCD 1602
and lead pins to LCD:
** LCD -> RAMPS**
SDA to I2C 20
SCL to I2C 21
V+ to I2C +
GND to I2C -

If you adopt TFT touchscreen:
- print case_cover_TFT
In order to use this display you've to place the Mega prototype between Mega and RAMPS; this way you can solder wirings to TFT without disturbing Mega board.
Warning If you adopt this solution you'll have to put 40mm fan outside case!

  • The pins you've to lead to tft are: ** TFT -> PROTOTYPE** LCD_RST to A4 LCD_CS to A3 LCD_RS to A2 LCD_WR to A1 LCD_RD to A0 LCD_D2 to D2 LCD_D3 to D3 LCD_D4 to D4 LCD_D5 to D5 LCD_D6 to D6 LCD_D7 to D7 LCD_D0 to D8 LCD_D1 to D9 SD_SS to D10 SD_D1 to D11 SD_DO to D12 SD_SCK to D13 GND to GND 5V to 5V 3V3 to 3.3V

Firmware instructions
- to use LCD 1602 change
#define LCD_TFT true // set to FALSE for LCD 1602
#define LCD_TFT false // set to FALSE for LCD 1602

  • You can switch from AUTO to manual and viceversa touching for some seconds RED or GREEN button

  • adjustable variables:
    #define LCD_TFT true // set to FALSE for LCD 1602
    #define NUMTEMPS 14 //length of lookup table
    #define smooth 50 //exponential smoothing factor, higher is smoother
    // ADC input, diameter output
    static float lut3[NUMTEMPS][2] = {
    {117, 1.14},
    {117, 1.14},
    {122, 1.65},
    {123, 1.75},
    {124, 1.77},
    {126, 1.82},
    {129, 1.87},
    {131, 1.90},
    {134, 1.94},
    {135, 1.95},
    {137, 1.97},
    {139, 2.00},
    {234, 2.3},
    {234, 2.3},
    You can find your values simply opening Arduino IDE Serial Monitor at 57600
    These are my results, for complete description, please refer to awesome Thomas Sanladerer's filament diameter sensor (mine is scaled 50% of original).
    You can change below values at your needs
    // tolerance checkout

    if (temp < 2.4 & (temp > (diameter + tolerance)) || (temp > 0.83 & temp < (diameter - tolerance))) { //out tolerance
    #if IS_TFT
    OutDiameter(String(temp, 2), RED);
    digitalWriteFast(led, HIGH); // alarm led ON
    if (temp <= (diameter + tolerance) && temp >= (diameter - tolerance)) { // in tolerance
    digitalWriteFast(led, LOW); // alarm led OFF
    #if IS_TFT
    OutDiameter(String(temp, 2), DARKGREEN);
    if (temp > 1.95) { // too much out of tolerance
    #if IS_TFT
    stopped = OutStopDiam(LCD_TFT, is_manual, "THICK", millis());
    if (temp < 1.65) { // too much out of tolerance
    #if IS_TFT
    stopped = OutStopDiam(LCD_TFT, is_manual, "THICK", millis());
    const float diameter = 1.75; // filament diameter
    float tolerance = 0.1; // acceptable tolerance
    const float Rol_diam = 72.2; // roller diameter adjust (roller diam 72.2mm, 1 mt = about 13.84 revolutions)
    const float Rol_revPerMeter = 13.85; // counter adjust (roller diam 72.2mm, 1 mt = 13.846 revolutions)
    float maxlenght = 330.0; // max lenght desired
    float timeoutstop = 30000.0; // how many milliseconds of alarm before stop all

  • if in tolerance, filament diameter is shown in GREEN, otherwise in RED

  • if too much out of tolerance a timeout timer starts, see timeoutstop variable

  • if duration of out of tolerance is over timeoutstop variable value the system halts showing the reason (you can only reset)

  • once reached maxlenght the system halts showing SPOOL FULL (you can only reset)

- n. 1 Arduino Mega2560
- n. 1 Ramps 1.4
- n. 2 stepper driver A4988

For TFT:
- n. 1 2.4" TFT LCD Touch Screen
- n. 1 Arduino Mega prototype board

For LCD 1602:
- n. 1 LCD 1602 I2C
- n. 1 Toggle switch SPDT

- n. 1 power supply 12VDC 5A
- n. 2 Nema 17 stepper motor
- n. 1 DVD stepper
- n. 1 potentiometer 100K linear
- n. 1 knob
- n. 1 40mm fan ball bearing
- n. 1 radial fan 50mm
- n. 2 Dilwe RC car 1/10 exhaust pipe coupler
- n. 1 shaft coupler 5/8mm- M8 nuts
- n. 2 608ZZ ball bearings
- n. 6 623ZZ ball bearing
- n. 1 panel jack
- n. 1 red flashing LED
- n. 1 resistor 1KOhm 1/4W
- n. 1 screw eyelet
- n. 1 spring OD 16mm x 13mm for clutch
- n. 2 M& nuts
- M3 screws, washers and nuts
- M8 threaded rod
- M8 nuts and washers
- M8 self-locking nuts
- PTFE tube 4mm
- pneumatic connectors 6mm threaded
- n. 1 Hall effect sensor

Filament guide V4
- n. 1 Nema17
- n. 1 T8 coupler
- n. 1 T8 screw 88mm
- n. 2 608Z ball bearing
- n. 1 3mm rod 69mm
- n. 1 T8 screw nut
- n. 1 10mm eyelet
- n. 1 M4x10mm screw

- Foreverwinter for its spool support
- Thomas Sanladerer whose filament diameter sensor is much much better than mine

- Foreverwinter for its spool support
- Thomas Sanladerer whose filament diameter sensor is much much better than mine

3D printing settings

Layer 0.20mm
Infill 100%

  • 3D file format: STL, TXT, and ZIP
  • Last update: 2021/01/23 at 16:34
  • Publication date: 2020/12/26 at 12:50



Designs 75
Downloads 383
Sales US$43
Followers 14

Electronic technician in Italian AF, now 75, retired, with much time to spend...



Best sellers of the category Tool

Add a comment

Would you like to support Cults?

You like Cults and you want to help us continue the adventure independently? Please note that we are a small team of 3 people, therefore it is very simple to support us to maintain the activity and create future developments. Here are 4 solutions accessible to all:

  • ADVERTISING: Disable your AdBlock banner blocker and click on our banner ads.

  • AFFILIATION: Make your purchases online by clicking on our affiliate links here Amazon, Gearbest or Aliexpress.

  • DONATE: If you want, you can make a donation via PayPal here.

  • WORD OF MOUTH: Invite your friends to come, discover the platform and the magnificent 3D files shared by the community!