FS-Touch Bed Levelling Tool

49,424

313

45

Introduction: FS-Touch Bed Levelling Tool

About: I'm programmer and an electronics hobbyist. I try to find that point where software meets hardware meets art. "Necessity is the mother of all creation, but laziness is the father." "The best way…

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

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.

Step 2: Stuff Required

  1. Arduino Pro Micro
  2. 7 segment display
  3. Force Sensitive Resistor
  4. Custom PCB
  5. 3D printed case
  6. Push Button
  7. 2.2K Resistors x8
  8. 100K Resistor x1
  9. Male and Female Headers
  10. Blu-Tack

Step 3: Fabricating PCB: CNC Milling

Download the Eagle file and make the PCB. It is a double sided design and does not require PTH. So it is home fabrication friendly. Iron transfer method can be used to create this PCB.

Since I have a CNC Router with me, I created this PCB using it.

Step 4: Fabricating PCB: Soldermask

This was my first time working with soldermask for a project. Initially I drilled the holes and applied soldermask paste but then it clogs up the holes and makes soldering difficult instead of easy. So the second time around, I applied soldermask paste before drilling the holes.

Printed out the soldermask layer on transparent sheets and layered 3 per side. This was aligned and taped to the milled PCB. Then soldermask paste was applied and the transparent sheets was placed on top. This was repeated for the other side of PCB as well. Then it was cured with a UV lamp. This didn't cure it well enough even after hours so I put them in the sun for a while and that did the trick.

After that, the transparencies were removed and the board washed with alcohol while being scrubbed slightly with a brush. This removed all the uncured soldermask paste and revealed the pads. Some parts which were supposed to have soldermask but didn't, had a bit of the paste applied and cured. Some parts which shouldn't have soldermask but did, were carefully scraped with a blade.

Finally the board was drilled and milled out of copper blank. The end result is a beautiful looking board.

Step 5: Solder Components

First solder all the vias. Once done, the resistors are to be soldered to the bottom side of the PCB in a vertical position as shown in image. Next solder the 7-segment display and button in place. Finally solder the male headers in place. Also cut solder female headers to size and solder to the Arduino Pro Micro.

Step 6: Fabricate Interface PCB

Make the Interface PCB which is simply a board to break out 2 of the pads from the main board to another position for FSR. It has 2 wires from the board connected to 2 male header pins to which the FSR's female pins connect.

After soldering the male headers to the interface board, solder 2 wires from interface board to FSR pins on the main board. Attach the main board atop the Arduino, attach FSR to interface board and our hardware is ready!

Step 7: Upload Code

Download the attached Arduino sketch. Connect arduino to PC with USB cable. Upload sketch.

The 7-segment should show a line going around in circles. Try squeezing the FSR with your fingers and the display's rotation speed should change.

Step 8: 3D Print Enclosure

I have provided the STL files along with Fusion360 design files.

Slice them in your slicer of choice(mine is Cura) into gcode. Upload to 3D printer and print away.

Step 9: Assembly

In the enclosure bottom, first set the Arduino Pro Micro so its USB port fits nicely in the hole for it.

Then insert the interface PCB. It snap fits at an angle so the FSR sensor is tilted downwards towards the bed and ends up as near to bed as possible at rest position. This removes any little upwards flex force exerted by sensor when pressed down by nozzle.

Next attach the PCB to the top of Arduino. There will be wires going from PCB to interface PCB which needs to be folded in the available space.

Lastly add the top lid of enclosure which will snap fit to the bottom and FS-Touch is fully assembled.

Step 10: Time to Level

To use it, we will need to save reference value of force between nozzle and bed. Unfortunately, for the first time use, it can only be recorded from a levelled bed. But once the reference is set, it is a breeze to re-level the bed.

  1. Roughly level the bed using the paper trick if it isn't levelled with a heated bed and nozzle.
  2. Allow the bed and nozzle to cool down completely to room temperature.
  3. Make sure the nozzle is at Z=0 by auto-homing the printer. The bed and nozzle should not be heated.
  4. Then move nozzle over a levelling knob's screw, either using jog controls or using automatic levelling option available in some printers(such as Creatlity CR-10S which I use).
  5. Place FS-Touch's sensor between the nozzle and bed. You might have to slightly push down on the bed to make room for it to slide in. This shouldn't affect the bed levelling as all beds have springs which will bring them back to levelled position as soon as released.
  6. Now hold down the button on FS-Touch for 2 seconds till countdown begins. This provides you a 5 second window to release the button(and any extra pressure due to your finger) and allow the bed to return to levelled position. When counter reaches zero, the reference force value is saved in the EEPROM and you probably won't have to save it again unless the sensor is changed.
  7. You can now move the nozzle to next levelling screw and again insert FS-Touch between nozzle and bed.
  8. This time, you can match the levelling to the reference levelling you just saved. Rotate the knob in the direction the LED is spinning. The slower it spins, the closer you are to reference value. When it changes direction, that means you went a bit too far and need to dial it back a bit. The perfect position is when the LED keeps changing the position repeatedly. The DP LED of the 7-segment blinks faster and brighter the better the value matches.
  9. Repeat this for the remaining leveling knobs and you have all the knobs at the same level.
  10. Try printing first layer and it should come out well. If the distance is too much or too less, you can adjust the Z-offset too.

The next time you want to level, just insert FS-Touch and quickly bring all levelling knobs to the reference value.

Step 11: Drawbacks?

A drawback of FS-Touch is that it can only be used on a cool bed and nozzle. Heating them up can melt the sensor. As the bed warps and the metal of nozzle expands upon heating, the distances change and so levelling should be done when both are hot. It can be mostly remedied by calibrating with paper once in heated condition and then letting it cool down. Then storing the reference for FS-Touch. This will include the expansions in the reference value and help mitigate any changes in values due to heating. So when the nozzle and bed heat up again, they should reach back to the levelled distance.

Applying Blu-Tack to the back of FS-Touch helps it to stick to the bed pretty well and keeps it from shifting around due to the USB cable. It also ensures that the pull/push forces are not propagated from the USB cable to the sensor which can affect the values.

One thing to ensure before using FS-Touch is that the nozzle should be completely clean. Any filament goop on the nozzle tip will increase its height and hence yield wrong force values for the sensor.

Overall, it is a handy tool to save time and headache when levelling a 3D printer bed.

2 People Made This Project!

Recommendations

  • The 1000th Contest

    The 1000th Contest
  • Battery Powered Contest

    Battery Powered Contest
  • Hand Tools Only Challenge

    Hand Tools Only Challenge

45 Discussions

0
HolodG
HolodG

2 months ago

Hello ! Thanks for the project! Could you make the top and bottom . I am a beginner and do not understand the eagle program.

0
mudzify
mudzify

4 months ago

Very nice build, love the idea. Keep making and sharing awesome projects. You ROCK

0
kohitotsu
kohitotsu

5 months ago

Hello! I’m thinking about making this, but adapting plug in servos at each leveling point that will interface with the leveling screws to fully automate the leveling per corner. I’ll want to have an extra cable coming from the box to plug in the servo, but do you think that it will be difficult to design a PID loop using the current output of your sketch? It would have to assess the current pressure value, and then figure out which way to move a servo, so I don’t think it would be a hard modification, but I have no idea where to start. Any ideas would be greatly appreciated!

0
MilanB45
MilanB45

Question 5 months ago

How thick the force sensitive resistor is ? Is it thicker than paper?

0
bpwmd
bpwmd

10 months ago

I cant see any reason for the box to be connnected to a PC for any data. am i missing something or can i make this battery powered?

0
cliffyd
cliffyd

Reply 6 months ago

I would add a small 200 1s liposuction inside attached to 5v and gnd pins and charge through the USB port on arduino. That way it’s totally portable

0
Antzy Carmasaic
Antzy Carmasaic

Reply 10 months ago

It's not connected to PC, just a power bank for supplying power. You can make it battery powered as well but I wanted it to have a small form factor and keep it simple so didn't include it.

0
cliffyd
cliffyd

Question 6 months ago

Hey nice project. I was just thinking, is there a way to set the touch sensors under all 5 points underneath the bed somehow and leave them stationary so they are always there all we would have to do is just level and a readout would come up on a stationary screen mounted somewhere? I know it might be difficult using a heat bed but maybe on printers that do not use heat beds.
Thanks and nice project. Sell these on amazon for like $15

0
axellander
axellander

6 months ago

Hello great Project.
Which ardunio pro micro version do you use?
3,3V or 5Volt?
Is it possible to get one of this little complete made Boxes with controller and so on?

Bye Alex

0
Antzy Carmasaic
Antzy Carmasaic

Reply 6 months ago

I used the 5V version. But you could use the 3.3V version as well without any problem. The 7-segment display will will be a bit dim so you can replace the 2K2 resistors with something like 1K.
I'm not currently selling these, though I do have plans of releasing an upgraded version in the future, maybe even a small batch for sale. You can order the PCB from chinese PCB manufacturers for very cheap.

0
McC050
McC050

7 months ago

Hi there!

Great project! I've made it myself too. But i have a little problem. 2 days ago when i was leveling my printer, the fstouch showed only the countdown number 5, and i can't do anything. I've reuploaded the code a few times, but nothing changed. It's very interesting... i have a backup fstouch too, and the same problem there too.

0
Antzy Carmasaic
Antzy Carmasaic

Reply 6 months ago

Thanks for making the project. Would love it if you would post it in the 'I Made It' section.
That's a very weird problem you mention, if it was working earlier and now manifests in 2 FS-Touch simultaneously.
The only reason it should be stuck at 5 is if the button is shorted or continuously pressed. The only other reason is if the timers on Arduino stop working.
Maybe also check whether the FSR sensors are damaged or disconnected? Are you swapping out a single sensor between the two devices?

1
offtherails2010
offtherails2010

1 year ago

Good day to you Antzy !

WOW - Totally blown me away with this super awesome and very inspiring project, thanks loads for sharing it and making it be open source too !

i also humbly agree with OculumForamen by means of making a batch of PCB's of this (Elecrow.com and/or JLCPCB.com, the first website ive only ever used and is quite good on the shipping fee's for professionally made batch PCB's, Panelised & V-Groove cut, i think roughly you could get 4 PCB's per 50mmx50mm PCB of their smallest size) and putting together components for making kits, but if you could quickly change the Licence to include 'Non-Commercial' too, then this would prevent others from capitalising on your hard work, but you would be the only one legally allowed to sell this project as its been 100% made by you thus you hold the licence to it and this lets only YOU sell it.

Selling it on Ebay and places like Tindie.com can also take the daunting headache out of such things as Paypal is just awesome these days for seemless and hassle free funding direct to your bank account etc

Otherwise there are cold hearted unscrupelous folks out there who wouldnt hesitate to cash in the coinage from an awesome project & the amount of hard work youve put into it without even saying a thank you to the author.

Looking forward to making this for myself too, also as i have the exact same CNC Mill youve used, could i please ask how you milled the PCB, like with which software/s and would you be willing to share the .nc milling files too by any chance ?

thanks in advance, that would just be the icing on the cake if you could share the milling files too, but no worries if not, youve done an amazing job of all of this thus far and im just grateful that i stumbled upon it to be able to make it for myself haha !

Once again, thanks for sharing and please do keep up the mighty-inspiring work, youve totally got me dusting off my electronics supplies to get making and tinkering once again - well appreciated man !!!!!

0
Antzy Carmasaic
Antzy Carmasaic

Reply 10 months ago

Tindie is just what I've been looking for. I've been considering selling a few projects as kits but putting so much money and effort (mostly shipping, customs, website, etc.) has been a deterrent, when the projects are too small for something like Kickstarter. I'll give it a go for sure soon.

I have no problem sharing the milling files but since they are created for my particular end-mills, I'm not sure if everyone wants that. It would be akin to sharing gcode instead of STL for 3D printing. Still, will put them up and share with you.

I imported the Gerber files into FlatCAM for creating the NC files. There are a lot of tutorials out there how to do this. Then I prefer Candle(https://github.com/Denvi/Candle) for running the NC files on CNC. I like candle because it is open source, simple and allows mesh bed mapping(which is very important for PCB manufacturing)

Thanks for typing out such a detailed comment and pointing me to Tindie and the commercial opportunities for the project. I'm glad the project inspired you to get back into tinkering and making.

0
raat1979
raat1979

1 year ago

Might just as well attach some servos to level the bed...
if only we could get some heat resistant sensors for a nice price...

0
Antzy Carmasaic
Antzy Carmasaic

Reply 10 months ago

An auto-levelling bed sounds like a great idea. I think a few 3D printers, especially SLA ones, have implemented that. But would love a DIY version.

0
SixLegs
SixLegs

1 year ago

Could you upload the wiring diagram? I do not have a CNC Milling machine.
Thank you,

0
billyflora
billyflora

Reply 1 year ago

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
0
SixLegs
SixLegs

Reply 1 year ago

Antsy,
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)?