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.

CrtSuznik1 hour 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?
Could you upload the wiring diagram? I do not have a CNC Milling machine.
Thank you,
he only thing crossword solver sip calculator I might change would be to add a battery

dnvm13 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)  dnvm9 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)  OculumForamen14 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
hubi14 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)  hubi14 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.
twhite10115 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)  twhite10114 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.
t3chflicks14 days ago
This is awesome and very well documented. Thanks!
peter__s15 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.

Wapata15 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)  Wapata15 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).
dan300818 days ago
So much need in one little package... The only thing I might change would be to add a battery
Antzy Carmasaic (author)  dan300817 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.
jeanniel118 days ago
A digital form of a bubble level! Love how discrete it is. Thanks for creating and writing this up!
Antzy Carmasaic (author)  jeanniel117 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.