*
Once assembled my new FelFil extruder (https://cults3d.com/en/3d-model/tool/felfil-evo-extruder-case) 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 STEP.ZIP with all .step required.
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.
MAN/AUTO
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
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; if someone get errors compiling due to an old version of LibCrystalI2C, is present an LIBCRYSTALI2C.ZIP with an updated one
In this V2 version you'll find:
- remixed filament diameter sensor (see Credits section)
- remixed cooler
- new spool clutch (yet to test)
Instructions
About the filament diameter sensor, please read my https://cults3d.com/en/3d-model/tool/hall-filament-diameter-sensor
where you'll find useful informations
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
to
#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
/////////////////////////////////////////////////////////////////////////////////////////////////////
/* DIAMETER SENSOR */
#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);
#endif
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);
#endif
}
if (temp > 1.95) { // too much out of tolerance
#if IS_TFT
stopped = OutStopDiam(LCD_TFT, is_manual, "THICK", millis());
#endif
}
if (temp < 1.65) { // too much out of tolerance
#if IS_TFT
stopped = OutStopDiam(LCD_TFT, is_manual, "THICK", millis());
#endif
}
/////////////////////////////////////////////////////////////////////////////////////////////////////
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)
BOM
General
- 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
Common:
- 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 sensorA3144 or similar
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
Credits
- Foreverwinter for its spool support
- Thomas Sanladerer whose filament diameter sensor is much much better than mine