Introducing, the Pyr0-Piezo Z-Axis Sensor - Self-calibrating, easy, and accurate

Hi there I recently published a project I’ve been working on for nearly two years, with the aim of solving the biggest issue facing cheap hobbyist 3D Printers: How to get a perfect first layer on any printer, using any type of hotend, and any print surface, even swap-able ones.

How the piezo z-sensor works: A small piezo element (commonly a 20mm or 27mm disk like the ones used in musical pickups) is fitted to a printer in such a way that when the nozzle touches the bed it undergoes a deformation or compression. When piezoelectric elements are subjected to mechanical forces in this way, they produce a charge. In the case of the z-sensor, this little blip of voltage produced by the piezo disk gets amplified, filtered, and conditioned by the Pyr0-Piezo circuit, then picked up by the board’s embedded MCU. The MCU then sends a z-trigger signal to the 3D Printer’s controller, and viola, you’ve got a Z-sensor. Since the MCU is using an interrupt pin for this function, it causes a delay of only a few microseonds, at most.

While this isn’t the first Piezoelectric z-sensor that’s been brought to the 3D Printing community, it is the first to incorporate an embedded microcontroller designed specifically for self-calibrating and conditioning the signal. Right now, the alpha boards being sent out into the wild don’t have full control over this circuit, but they already seem to produce good results. The Beta and final versions should only improve upon the principles and designs being tested now.

I’ve already finished about 12 sets of alpha (rev.1.x) boards that are going out to testers, but I will be looking for beta testers within the next month. If you’re interested, I’d appreciate a ping on the discord channel!

You can find source files on GitHub, Thingiverse, and my Discord’s #resources channel:


this does sound pretty cool. From what I understand this sensor triggers on contact, not on approach. How does that work when homing, you have a separate end stop and sense from there at low speed ? How much is or will the beta version be ? I’d love to be able to use different surfaces depending on the print job and material used. Does this work with the Duet 2 controller or only with Marlin based controllers ?


PS: I know a lot of people that do not use Discord cause its a complete PITA to get set up right. Maybe you could consider a less invasive platform for support/chat ?

The piezo disk sense-on-contact principle works on homing as well, as it’s very accurate. One of my alpha testers reported getting something like 0.002mm repeatability.

The basic operation and hookup should work with any 3D Printer controller theoretically, as its signal is just like an endstop (Active-low). During the beta I plan to set the onboard microcontroller up as an i2c slave device, so that the 3D Printer’s controller can tweak the auto-tuning settings as needed.

Do you have any suggestions as far as alternatives to Discord? I always found it very easy considering it can be run in browser rather than needing any actual installed client, but I’m open to suggestions! Maybe a subreddit? The GitHub can be used for discussion on specific topics like feature requests and bugs, but I’d like a way to reach out to users directly in a more realtime way, especially during development

Thanks for your quick response !

Regarding the endstop thing, my concern would be depending on the inertia it could be that the stepper (or servo) on a printer (or CNC) could overshoot just enough to cause damage to the nozzle (or tool). I am thinking not only 3D printer but also CNC machines in general. All of those could benefit from your idea. With a 32bit controller you can do some speed with the steppers. So I thought to approach the mechanical end at full speed, hit a intermediate end stop or a proximity sensor before reaching the mechanical limit to slow down before ramming the tool into the bed.

Re chat/discord, I personally would not expect a “live” chat as such, I would be happy with email or forum support. But if a chat is needed I’d probably go mumble or even better IRC. Just my opinion as its open source and not depending on a commercial server back end or cloud. But as I said, I would not expect a live chat.


The actuation force required to trigger these piezo sensors is minimal, like on the order of tapping it lightly with your finger, and the activation time is in the microsecond range because I’m using a hardware interrupt. The faster the actuation, the faster the rise time on the signal, and the more accurate it is. The only downside to homing faster is the possibility of false triggers from the kinematics vibrating more intensely. The fun part about this sensor, though, is it can be tuned to reject all kinds of signals using just firmware (and eventually, I hope, gcode commands).

I admit I mostly only thought of using this on 3D Printers where the homing speeds are usually within a range that this piezo sensor does just fine with. I’d need some data/feedback about CNC or other machines to get a better understanding of how to utilize them in those environments.

Having an intermediate optical sensor used to rapidly move a gantry to the “homing” distance is a pretty slick idea, but I wouldn’t know how to implement that myself as it would be part of the main controller’s firmware.

Re: Forum stuff, I’ve got a few ideas

  • Subreddit
  • Post on RepRap Forum / Soliforum / etc
  • Set up a dedicated website + forums/IRC

Once you have a beta up and running I would be happy to buy a kit from you to put in my next project. I am going to build a new printer from the Rat Rig V-Core mechanical kit with Duet 2 controller. I guess testing with a hotend mock-up and a weighing scale would reveal the forces endured on a direct approach to the bed.

I keep watching this…


Sweet, is appreciate the feedback!

If you build in fusion 360, and don’t mind sharing the source files, I can mock up a mount for the piezo disks

I did post over on reprap forums and soliforum as well:,847947,847969#msg-847969


I have opened a topic about my plan, you are mentioned :wink:


much appreciated! :+1:

Hi pyr0ball,

I have ordered everything as per my post above except the heated bed, as soon as you have a working beta that you can ship I’d appreciate a heads up re price etc… I expect delivery in approx 7 working days and will start my build then.

Have FuN!

Heya snoozer,

I’ll be doing a livestream coming this Friday showcasing the sensor, and doing a demo and Q&A, in case you’re interested.

I’ve got a form up for people so submit questions ahead of time an I’ll be uploading the recorded stream to youtube.

Reddit post with all of the details and links:

Super, thanks for the info !!


Hi pyr0ball,

so what do I need to do to get hold of your Z -Sensor ?


Well at the moment it’s just moved out of alpha into beta, and I’m still doing the design for the next round of boards. I’ll be sending out beta boards to testers (at cost) once I get that done. I’m currently keeping track of who is on my beta tester list on the #beta-signup channel on discord:

Can I be beta tester without Discord ? I’d pay for the kit ofc…


Sure, is there a PM function on this forum?

first click on the name.
Then message.


thanks, but it looks like I don’t have that button. Possibly my account is too new?

Hi i have set you from new user to basic user manually.
Now you should be able to. :wink:

1 Like

I see it now, thanks a ton!

1 Like