Introduction: Building a DIY Filament Width Sensor Using Digital Caliper

Picture of Building a DIY Filament Width Sensor Using Digital Caliper

This post is about how to build a DIY filament width sensor using digital caliper with built-in data port.

Step 1: The Schematic

Picture of The Schematic

Step 2: Description of Key Components

Filament Puller

It has 1 stepper motor and 2 rollers. The rollers are driven by the stepper motor to pull the filament away from the digital caliper.

Digital Caliper

It has a data port which enables the reading of data by external devices such as Arduino. For details about its data format and other info., please refer to my other post at:

Control Box

It houses the electronics for reading the read outs from the digital caliper, reading the motor speed control input from the trimpot, controlling the motor speed and displaying the read outs on the LCD.

Step 3: The Code

There seems to be problem posting my code here (the format is all messed up). Please visit my blog for the complete code.

Step 4: Issue

Digital caliper measures the clamp's travel distance by measuring the variation in capacitance but the capacitance tends to drift due to factors such as the build quality of the caliper, environment, etc. For normal use, because the caliper is zero out each time before taking the measurement, the capacitance drift can be ignored because the capacitance of the clamp's starting point and the ending point are known and the caliper will be zero out again before each use. However, when the caliper is used in an environment that doesn't zero out for long period of time, the accuracy of the measurement is greatly impacted by the capacitance drift. Because of the above issue, other ways for measuring small distance (with 0.01mm accuracy) need to be used.


och (author)2016-10-07

Just to make sure I understand the scope of this project: the width sensor allows you to monitor the thickness of the extruded filament in real time, but it does not do anything to correct the thickness if it's thicker or thinner than 1.75mm or 3mm, correct? It's just a visual guide

Wei-Hsiung Huang (author)och2016-10-07

You could use the 100K potentiometer to control the speed of the stepper motor and this will change the thickness of the filament.

ruizvict (author)2016-09-07

Hi Wei-Hsiung Huang

Do you have a video showing the filament width sensor?

Sorry. I don't have it. Do you plan to build this project after seeing a demo video?

It would be good to see the video, because the interested people can see many details of the instalation and functioning. What do you think about it?


Sorry. Been busy moving all my stuff and I've torn apart the machine. The schematic and code should work just fine. The issue is with the drifting of the caliper's measurement as mentioned at the end of my post - If you ever build one, please make a video and share. :-)

ruizvict (author)2016-09-20

Hi Wei-Hsiung Huang

The "code" of this project dissapear from your blog? I click on the link that you place and there is nothing!!!

I accidentally deleted my blog couple days ago but I've managed to recover it. You could find the post that contain the code at:

ThomasK19 (author)2016-03-25

Is it really necessary to use a caliper? To my knowledge there are just a few normed sizes for filament thicknesses. So a minimalistic switch would do as well. Or is it that your driver respects the exact diameter during filament transport?

Thanks for the comment. This thing is developed to work with filament extruder (for making filament at home).

Doh! Now that you say it: "Building" in the title xD Have you made your own extruder?

Wei-Hsiung Huang made it! (author)ThomasK192016-03-25

Yes. I've built one.

Cool! With what do you feed it? Broken/unused 3D-prints?

Broken/unused 3D-prints as well as new/unused resin.

About This Instructable




More by Wei-Hsiung Huang:Building a DIY Filament Width Sensor Using Digital CaliperBurning Sketch To Atmega328P-PU On A Breadboard Using Arduino Uno As ProgrammerHow to unbrick an ESP8266 – Using ESP-03 as example
Add instructable to: