Topic: Auto-bed leveling with piezo sensors on bed
I've wanted to add bed leveling to my setup for a while, but it was only a week or so ago I solved all issues with my z-axis (ballscrew, other post here) which made me feel it was time to look at the auto-leveling again.
I've fought about a couple different solutions, mostly micro-switches and capacitance sensors. Micro-switches needs a servo or other mechanical device to but it in place, which is a pain to get accurate and repeatable (I can imagine).
Proximity sensors (capacitance and inductive) are temperature dependent, and also are somewhat large (relatively speaking).
Also, both solutions measure the distance between the the sensor and the bed, not the tip of the hot-end.
So I wanted to measure when the hot-end actually touches the bed. Either I would have to add some sensor to the carriage (which I could, but would make the carriage more complicated mechanically), or to the bed.
Since the bed is held by three screws and three springs, One can either try to measure the force of the screws on the bed or the springs on the bed. Or on the bed holder. The size will be the same, but the direction reversed. Doesn't really matter.
Measuring force can be done a lot of ways, but I figured a really sensitive way would be to use piezo electric elements. By measuring the charge emitted/absorbed from these, the force acting upon them can be measured.
The idea is to place one piezo disc under each spring, measuring the force acting downwards. Normally this will be the spring tension + the weight of the bed. When the hot end touches the bed surface, this will add to the force acting on the springs, compressing the piezo and emitting a small charge. Using a charge collector op-amp circuit, the force acting on all three piezo sensors can be turned into a voltage. The DC component (that is, the static force) cannot be measured this way (due to leakage in the piezo element), but this doesn't matter since we're not interested in this, only the change (AC) when the hot end touches the bed. Adding some further (both low-pass and high-pass) filtering to the circuit, we can filter out mose unwanted noise (EMI from the steppers/drivers/heating cartridges) and vibrations.
This is still in a beta fase, but I now have a working system up and running using a breadboard and the first edition of some printed parts.
Using the G30 command, I get great repeatability:
00:09:42.687 : Z-probe:2.70 X:160.00 Y:160.00
00:09:44.126 : Z-probe:2.70 X:160.00 Y:160.00
00:09:45.430 : Z-probe:2.70 X:160.00 Y:160.00
00:09:46.797 : Z-probe:2.70 X:160.00 Y:160.00
00:09:48.181 : Z-probe:2.70 X:160.00 Y:160.00
00:09:49.468 : Z-probe:2.70 X:160.00 Y:160.00
00:09:50.843 : Z-probe:2.70 X:160.00 Y:160.00
00:09:52.210 : Z-probe:2.70 X:160.00 Y:160.00
00:09:53.593 : Z-probe:2.70 X:160.00 Y:160.00
00:09:54.944 : Z-probe:2.70 X:160.00 Y:160.00
00:09:56.184 : Z-probe:2.70 X:160.00 Y:160.00
00:09:57.431 : Z-probe:2.70 X:160.00 Y:160.00
00:09:58.662 : Z-probe:2.70 X:160.00 Y:160.00
00:09:59.941 : Z-probe:2.70 X:160.00 Y:160.00
00:10:01.269 : Z-probe:2.70 X:160.00 Y:160.00
I'll do some more tweaking to the mounts I use for the piezo discs, and the circuit needs some work as it needs some tuning. I would say that all parts used are really cheap, and available from sparkfun. The op-amp isn't really the best for this job, and I would have chosen a different one if I had one available. But I used the one they had at sparkfun, thinking if anyone else want's to do this mod it will be easier to order everything from one vendor.
Uploaded a youtube video to demonstrate.
edit: The probing speed is rather high, as this creates a sharper signal from the piezo elements. Slow probing = slowly rising signal = less accuracy. To high probing speed and z acceleration can trigger the sensor due to the intertia of the bed.
E3D v6, bowden feeding, airtripper extruder, mk8 gear.
LM8UU X & Y carriages. GT2 belts and pulleys, bearings on all axles.