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.