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.

    Learn more or download attribution tags


    Based on original design: Filament diameter sensor by Thomas Sanladerer


    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~~

    ~Mechanical assembly~


    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:
    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


    Printed parts

    1 Block
    1 Lever

    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.


    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.
    4 623 bearings (preferably 623-2Z / 623-ZZ) eg.
    1 Ballpoint pen spring (or other soft 4mm spring)
    Short length of PTFE tube eg.

    Calibration accessories

    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.


    20c2f944d93975910cd24c4c76e9c75c?default=blank&size=40Ryan Lake added this to the Ultimaker Original+ Upgrade collection ago
    840fe9f6e7440600bd2c9a3c357ea0f2?default=blank&size=40Vladislav Firulev added this to the 3d printer collection ago
    910e3497bf3a486f61cc5c891f20fcc8?default=blank&size=40dpesso commented ago

    Hi Thomas, thanks a lot for share all of this. I need your help. I want to use an Arduino Pro Mini for the sensor. Could you help me with the pins that I have to use and If it's necessary another thing for the connection?

    67adb388266030bff6ed235adb181ac6?default=blank&size=40TheGrimRepper added this to the Parts collection ago
    9d0445d69a086862d8298dc3e572784b?default=blank&size=40Gustavo added this to the Printer parts collection ago
    9b7697526b994066c2f6287fe715aaa9?default=blank&size=40Kritec added this to the stuff collection ago
    C58c6b28a8fc58981ffc169a7f380de9?default=blank&size=40Kveldulfr added this to the Collection collection ago
    23309da56ec275cf81f244abe4271360?default=blank&size=40Emerson Jhones added this to the impressora collection ago
    Mini g logogrndkntrl added this to the Printer Parts & Tools collection ago
    Mini it meBradley added this to the My Prints collection ago
    70eacd4b392456a08272f8e5fe37535b?default=blank&size=40Dirk Brassel added this to the things to make collection ago
    Mini  1140400 ssqThomas Sanladerer commented ago

    @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!

    8cdfcff750d819fc0d642aa6b04b81ca?default=blank&size=40farzadb82 added this to the 3DP Parts collection ago
    80995a05c208196786a84a608ca2863a?default=blank&size=40Daniel Smullen commented ago

    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:

    76383010f6c49a225ec05d376012dce8?default=blank&size=40Ozgun Can Ozgunes added this to the Thing to print collection ago
    Baba3927b4d0de2b5e495d5cafecdf3f?default=blank&size=40Ryan Hopkins commented ago

    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.

    Mini ecktive logo 3dhubsPrimož Brglez commented ago

    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.

    Baba3927b4d0de2b5e495d5cafecdf3f?default=blank&size=40Ryan Hopkins commented ago

    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.

    Mini ecktive logo 3dhubsPrimož Brglez commented ago

    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.

    Mini  1140400 ssqThomas Sanladerer published this design ago