InFiDEL - Inline Filament Diameter Estimator (lowcost)
A cheap, yet precise filament diameter sensor, intended to compensate for filament diameter deviations in real-time.3D printer parts and enhancements
Creative Commons Public Domain Dedication
All rights to this work are waived and you can use it however you please.
The InFiDEL is a cheap (< $5) filament diameter sensor that can be calibrated to provide surprisingly precise filament diameter readings in real-time. While firmware support is currently sparse, the idea is to use the sensor to correct for filament diameter deviations while printing.
~~Assembly and Calibration~~
Flash board with infidel_calibration_release
Connect a host via I2C (eg running Host_example)
Insert each calibration drill bit shafts and replace the lookup table entries in infidel_release with your own measurements
Measure the actual diameter of the shafts and fill second column
Use the host's output *1000 to fill first column
Finally, flash infidel_release with your values filled out
Hub should now output exact diameter values
Analog output is currently not enabled in infidel_release (I2C and FAULT pin only)
Daniel has uploaded the firmware to Github: https://github.com/drspangle/infidel-sensor/
For now, this is the recommended repo to develop against if you want to contribute to the code.
The design files are published as-is, CC-0 / no rights reserved. Attribution when used would be nice, but is not required.
I do not have the time or resources to support this project to the extent it deserves. If you find the design or concept useful, you're encouraged to take it into the direction you see fit and share your results.
Materials and methods
preferably printed in PETG, ABS or ASA as PLA may creep significantly over time
1 SMT control board (populated)
1 THT control board + components (see Eagle files)
Suitable programmer for ATTiny85 (eg USBtinyISP)
1 SS495A linear hall effect sensor (or comparable) eg. http://go.toms3d.org/SS495
2 M3x8 screws (eg ISO 4762 M2x8)
1 3x24mm pin (eg DIN 7 3x24mm, for mating lever to the block)
1 3x16mm pin (eg DIN 7 3x16mm, for roller bearing in lever)
1 3x18mm pin (eg DIN 7 3x18mm, for idler bearing in block)
6 M3 threaded inserts
Pins may be replaced with screws or grubscrews, which may result in decreased precision
Mechanical / other
1 6x2mm magnet (eg N35) eg. http://go.toms3d.org/6x2magnet
4 623 bearings (preferably 623-2Z / 623-ZZ) eg. http://go.toms3d.org/623ABEC
1 Ballpoint pen spring (or other soft 4mm spring)
Short length of PTFE tube eg. http://go.toms3d.org/bowden
1 1.5mm drill bit
1 1.7mm or 1.8mm drill bit
1 2mm drill bit
Calipers for verifying drill bit shaft diameter
Drill bits may be replaced with similar diameters. Measured diameter is to be written to firmware lookup table.
Issues are used to track todos, bugs or requests. To get started, you could create an issue.
@Primož Brglez It would absolutely be possible to add a filament length tracker to the sensor, but it was outside of the scope of what I wanted to do with this first version of the InFiDEL. But if you feel it would be useful, feel free to adapt the design to your needs!
I've created a github repository which tracks the electrical, mechanical, and firmware design for this project. The repository is public, so you can fork it, make changes, and issue pull requests to update the original design.
You can find it here: https://github.com/drspangle/infidel-sensor/
I imagine that if the filament isn't moving, and that the sensor is relatively low noise, and the polling rate is relatively high, saying if 4 polling events are equal, it will throw an error. Granted, this depends on the rate of moving the filament and would have to be implemented in the printer firmware instead of the sensor firmware. I am currently working on ordering the parts for a few of these and I will do some testing to see how much noise is generated and then see what I can do for software to get jam detection going.
True, but the threshold would probably need to be way higher/longer than the 7mm filament increments used by BTT SFS, to avoid false alarms. If you want to save a print after a jam, the detection needs to be very quick.
The Sensor should be able to be used to detect jams etc., by setting an expected threshold for change, and if that change is not reached, there could be an error thrown. We know that no plastic is perfect, so it's not hard to say if no variation is achieved in the time frame throw error for jam and no filament.
Would it also be possible to add an encoder to detect jams/actual filament flow (like the BTT SFS V1.0)? I guess you would only need to add an encoder to the fixed bearing. It would be great if there was 2 in 1 solution for this.