book collections email follower instructable user

Tired of trying to get the perfect levelled 3D printer bed? Frustrated with guessimating the proper resistance between nozzle and paper? Well, FS-Touch will help you measure this pinching force quantitatively and achieve quick and accurate bed levelling in no time.

Features of this bed levelling(proper term is tramming) tool:

  • Works with all types of beds: metal, glass, magnetic
  • Allows measuring the force and comparing against a reference force value.
  • The reference value can be set to new value with press of a button.
  • Indicates direction to rotate levelling knobs, because everyone gets confused which direction is up and which is down!
  • Shows how much more to turn the knob to hit the sweet spot through rotation speed.
  • Detachable force sensor which can be replaced quickly.

Step 1: How It Works

Picture of How It Works

To get a perfect print, your 3D printer bed needs to be levelled(correct term is trammed). A properly levelled bed is equidistant from the nozzle tip over whole of its surface. This is usually done by taking a piece of paper and putting it between the bed and nozzle when the hot-end is at zero height(Z=0). Then the paper is slid around and levelling knobs are used to adjust bed height till the paper gets pinched between the two. This is repeated for all the corners.

While in theory it sounds easy, doing it practically is a pain. The friction between the nozzle and paper is not on/off(digital) but gradual(analog) over a large range of levelling knob positions. It gets really frustrating trying to find the point where to stop because even when pinched between the nozzle and bed, the paper can move if you apply even slightly more force. So it is really a hit-and-trial game and going by feeling whether the pinching force is enough or not. I created FS-Touch to help measure this pinching force objectively instead of subjectively going by feeling and rough estimates, to get perfectly levelled bed every time.

For this a Force Sensitive Resistor(FSR) and an Arduino Pro Micro is used to measure the pinching force and displayed using a 7-segment display. The FSR changes its resistance to the amount of force applied to it and we can measure that using an Arduino by treating the FSR as part of a voltage divider. It is then compared against a value store in Arduino's EEPROM and the 7-segment displays the info. The direction of rotation shows the direction to rotate the levelling knobs. Its rotation speed shows how much it is off from the required value.

SixLegs7 days ago
Could you upload the wiring diagram? I do not have a CNC Milling machine.
Thank you,
hello, I would also be interested in the electrical diagram, because even I don't have a cnc ..
So I'd do it with a 1000 holes
Antzy Carmasaic (author)  billyflora3 days ago
Thanks for pointing that out. Usually put it up the image export for the schematic along with the PCB board design but missed it out this time. Have uploaded the schematic diagram on step-3. Here is the direct link to the image:
I noticed on the diagram that you have VCC going to pin 22 of the Micro. Should it go to pin 21(VCC) instead or is it supposed to go to the RESET pin (22)?
Antzy Carmasaic (author)  SixLegs8 hours ago
Changed the schematic and board diagrams as well as files with the correction.
Antzy Carmasaic (author)  SixLegs3 days ago
Oh wow. That is a textbook rookie mistake right there.
Yes it should have been connected to pin 22. Surprisingly, it worked because the reset pin on the pro micro is active low, and so, is most probably pulled up by connecting it to VCC across a resistor. Thankfully, I'm only pulling 2.2mA at an average and 11mA max.
Thanks for the eye opener. Will fix and put up the corrected schematics as soon as I get a bit of time.
CrtSuznik5 days ago
Perhaps I missed it, but I've no clue as to what kind of pressure (mass) the sensor should be rated for. Is 0-200g ok?
Antzy Carmasaic (author)  CrtSuznik2 days ago
I think that is a but too small for this project. Go for one that can atleast take 1kg. I don't have the part number for the one I used but it seems to be 100g-10kg one.
dan300823 days ago
So much need in one little package... The only thing I might change would be to add a battery
Antzy Carmasaic (author)  dan300822 days ago
I agree. Battery would be neat but then it would become too thick and I would need to remove the arduino and implement it in the PCB. That was a lot of work so I simple use a power bank to power it.
Just ordered parts to make 3... 1 for me and 2 for my local hacks pace who have 4 printers and 2 people maintaining them
he only thing crossword solver sip calculator I might change would be to add a battery

dnvm18 days ago
I have a question about the Arduino board you are using.
I see it says Pro Micro on the board, but I cannot find this board on the Arduino website. All they show is a "Micro".
Do you have any more information about the board or where you bought it from.
Thank you.
Antzy Carmasaic (author)  dnvm15 days ago
The board is available on sparkfun:
I got it from Amazon and it is quite widely available.
Thank you for the information.
Oh I am SOOOO going to make this!! I still haven't been able to get my printer to work properly, once I make this and level the bed with consistent resistance from each levelling point, all I would need to do from there is figure out what else might be a problem for my machine. Thank you so much for going through all the effort and trials to make this! you sir, are a genius! You could market this to the 3D printing community you know, if you are interested in the difficulties of being an entrepreneur! :)
Where can I obtain the Main circut board or the files G Code file to make on ?

Charlie (VK2CLH)
Antzy Carmasaic (author)  OculumForamen20 days ago
Thank you. I posted this project on FB and received several request for buying it as a kit. I'm frankly surprised by this much interest for something that is just a prototype/proof of concept. I'm considering making an improved version and running a tiny batch for sale. Still divided on it though.
Well, here's a push in that direction! You should sell it as a kit, but if you are interested in making it better, I would suggest that a little experimentation on what is the best height, convert that into inch-pounds of force needed to "pull the paper out, then program that value into each eeprom in the kits, this would make it a defined value. At that perfect stop, when it is reached, then you could easily program the display to do a specific animation, so users know when they have hit that sweet spot. I hope I am making myself clear on this. or instead of inch-pounds you could simply use crush force. But setting it according to a specific type of measurement, it then makes it repeatable for almost everyone, and it also makes it easier to alter those values if need be, because the measurement scale used would have defined values that you don't have to create yourself. It'll take some equipment to do the initial measuring of what it needs to be, but once you have the value, it's pretty much done. Let me know if i'm making myself clear or not, but I for sure think you are onto a bit of a gold-mine here. No one else has created something like this, but you've made it and it works! so now all you have to do is make it more or less idiot proof and then you can sell it. It's your baby, and you're in charge of it!!! I would work hard on this though, you've posted your idea in Instructables and it is basically now common property and someone else can now use your tool to make a better one and then market it. the idea is certainly yours but all they have to do is mention your name as the creator of the original, and he's done his due diligence. Make a better one and make it fast bro! I greatly anticipate the Bed Leveller mk.II, if you are going to make it, that is! I would buy your tool in a heartbeat, if it was available.
Oh yeah, I almost forgot, make it with a battery, so it doesn't have three pounds of cord hanging off the other end. That is probably one of the first changes I would make. I think others would agree. Cheers!

volatile int T_Counter;
float T = 0.0;
float d = 0.0;

interrupt [TIM0_OVF] void timer0_ovf_isr(void)
TCNT0 = 0;


void main(void)

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 8000.000 kHz
// Mode: Normal top=0xFF
// OC0 output: Disconnected

// Timer(s)/Counter(s) Interrupt(s) initialization

// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud Rate: 9600

// Global enable interrupts

while (1)

T_Counter = 0;
PORTC.0 = 1;
PORTC.0 = 0;

while(PINC.1 = good but
hubi20 days ago
This is cool if you level when the hotend is cold. But I level with heeated hotend and bed, because the distance of nozzle and bed changes when heated.
Antzy Carmasaic (author)  hubi20 days ago
I tackled this problem in the last step. twhite101 had also put up a similar query and I have answered it in extra details in his comment. Please check that.
twhite10120 days ago
Great project but one small issue, bed leveling is done with the nozzle heated up to insure hardened plastic on the tip will not interfere. If we do this with the force sensor it will melt it.
Antzy Carmasaic (author)  twhite10120 days ago
That's true and I have already mentioned that in the last step. So the solution I propose is that the initial calibration with paper should be done on a heated bed. Then the bed is allowed to cool down and value is stored in FS-Touch as reference. When the bed heats up, it should go back to the proper calibrated distance. So this saved reference value can be used again in future to re-calibrate the bed.
t3chflicks20 days ago
This is awesome and very well documented. Thanks!
peter__s20 days ago
1. the double sided pcb is no good choice for DIY, esp. using the toner transfer method.
Using NO smd parts but trough the hoe is first choice for diyer
No other tools than a soldering iron, drillpress required.
No fuzz with making smd populated boards.

2. Using the probe requires cleaning off the nozzel beforehand.
It does not help in case the bed or pcb has warped in the middel.
You get the idea.
Prusa i3 had a heated bed with those sensors built in.
Even early Rostock Kossel 3D printers had those user built circular bed holder sensors with sensors.
You are a little bit late, mate.

Wapata21 days ago
Oh yeah. I was thinking about FSR and 3d printing last week, hoping it's already exists and now... You did it ! Great !
I have a -big- printer with 50 bed levelling can't feel 50 times the same resistance.

But well, here is a tip : you said "Unfortunately, for the first time use, it can only be recorded from a levelled bed." But... No, not necessarily, because if you have the same force applying to each test point, you only need to adjust the z=0 after that. So why this sentence ?
Antzy Carmasaic (author)  Wapata21 days ago
Wow. What kind of a printer has 50 levelling points?
Yes, as you mention, all the levelling points will be at the same level but it can be too low or too high. But most printers with stock firmware do not allow changing Z-offset, and even if they do, it isn't saved in non-volatile memory. That's why I was mentioning adjustment using Z-offset. But have added a line at the last step for people who do have that option.
Yeah it's a big one. 600x400mm of glass.
With my little home printer I don't make many bed levelling because it's a reliable printer. But I do redefine the z=0 with G1 / M306 / M500.
It mean (for example) go to z=0, set this position to -0.05, save to firmware.
But your system is a good one, it's the one I need for the big printer (and I don't find a commercial equivalent).
jeanniel123 days ago
A digital form of a bubble level! Love how discrete it is. Thanks for creating and writing this up!
Antzy Carmasaic (author)  jeanniel122 days ago
Thank you! That was the idea of trying to show the force value in an analog way(through rotation). Showing rapidly changing numbers on a screen is not easy to track, since the values jump around a lot.