This is more of an announcement of a new z probe system rather than a question for help -
I've been playing with piezo sensors to detect when the nozzle touches the bed surface (mounted under the bed) when performing bed leveling and I ran into some drawbacks with that system:
- there has to be a shock of some form, like a tap, for the sensors to detect the nozzle hitting the bed. This requires the nozzle to be approaching fast enough for it to register. If it misses the impact, the increase in pressure as the nozzle drives into the bed surface never gets detected till things start to go pop or the steppers skip.
- it's not actually measuring the pressure of the nozzle down onto the bed, just the point of impact. Fine if it gets that point each and every time.
- noisy motors/mechanics trigger the sensors.
Now, I can imagine this would work better if the surface of my bed was hard like glass but it's PEI stuck to magnetic rubber pads so I can lift the surface off. I don't get the required "tap".
Putting that to one side I came up with what I think is an extremely good alternative - barometric pressure sensors with a rubber boot over the sensor chip (sealed with silicone). Surprisingly this created an incredibly sensitive sensor for any pressure down on that tiny rubber boot over the sensor. In my case I wanted three modules under the bed so had to use SPI rather than i2c as that gives me multiple assigned SPI CS pins on the Ardunio board rather than being limited to two addresses / two modules. The BMP183 from Adafruit came up as an option so went with three of those. I 3D printed a rubber boot to fit over the chip on the module using TPE and glued it down with silicone to ensure a tight seal. The Arduino code gets the current pressures on each module in a quick loop and triggers pin 3 high when any of them detect a change of 0.3 Hpa from the last measurement. With the chip sealed under this boot the smallest pressure change trips it off. Fortunately the only thing that triggers them is actual pressure, not bumps or vibrations. Compared to the raw piezo sensors they appear to be just as sensitive, without the false triggers. That seal on the rubber boot is critical as the smallest of leaks reduces the sensitivity dramatically. I can approach the bed surface as slow as I want and it will still trigger the moment there is the smallest amount of pressure. Movements in the Y axis have no effect on the sensors. However, acceleration movements in the Z axis will trigger them, so for printers with the bed moving on the z axis this would probably not be a good solution, unless that motion was very slow. In that case you could probably mount a single sensor on the hot end.
I've also tried resistor pressure pads under the hot end nozzle but these were not as sensitive to pressure as this new design.
These modified modules then get mounted into 3D printed linear bearing blocks with a slot in the top of them to allow downward pressure to directly press on the rubber boots under each Y axis mount point. All three hook up to an Arduino mini stuck on the base frame of the bed. This then has three wires back to the Duet Wifi - 5V, GND and signal.
The three modules set me back about $55 AUD in total and I already had plenty of Arduino mini's sitting about doing nothing. I thought about using a 3.3V Arduino however these run at 8MHz rather than 16 and I need the trigger to be as quick as possible. I'm going to tap into the 5V pin on the Duet to drive the Arduino for now.
What I want to know is if the Z Probe IN pin on the Duet probe connector can tolerate 5V in? Should I set up a voltage divider to drop that down to 3.3V? The write up on connecting the BLTouch suggests using a 240 ohm between the probe GND and IN pins however I would have thought an additional resistor between IN and the OUT of the 5V pin on the Arduino would complete the voltage divider. Wouldn't a -10k -|- 5k- divider be closer to the mark and still provide the amps to be detected by the Probe IN pin?
Once I get this all working nicely I'll post the 3D printed parts and a write up on Thingiverse if anyone wants to try it out. Down the track I will probably come up with an integrated PCB with connectors out to each of the three modules. There are probably more sensitive pressure sensor modules out there but these seem ok.
First test will be to create surface maps one after the other and compare the CSV's to see how consistent the probe points are.
I'll post results when I have this all mounted in the printer.