Getting the first layer right is the holy grail of 3D printing. This is hard if your print bed is not completely level. Here’s the story of why and how I added 3D printer auto leveling to my Sunhokey Prusa i3.
First the why. 3D printed parts are created by adding layers of extruded plastic one on top of the other. The first layer that you print is the foundation for all others. There are two tricks to getting this right. The first is preparing your print bed surface so that the plastic sticks to it “just right”. As I mentioned before, I use Kapton tape with ABS slurry to print ABS on a heated print bed. This surface treatment is shown above. The second trick is to make sure that the hot end nozzle is the proper distance from the surface. This proper distance is roughly the width of a piece of paper. This is hard to achieve because it is not easy to get a completely level print bed for three reasons.
- Sometimes the print bed is slightly warped or bowed. There is little you can do about that mechanically.
- Sometimes the table holding your printer is not completely level. You can compensate by adjusting screws in each corner of the print bed to raise and lower corners. But with four screws, each adjustment effects the other and you can spend a lot of time trying to get it right.
- Finally, heating the print bed may also introduce warping after you have done your mechanical leveling.
3D printer auto leveling does not actually involve changing the level of the print bed. In this respect, it is misnamed. 3D printer auto leveling involves teaching your printer about how it is not exactly level. The printer software then uses mathematics to compensate. Here’s how I modified my printer.
The easiest way to implement 3D printer auto leveling is to attach a proximity sensor near the print head. A proximity sensor is that little metal cylinder with an orange tip in the “after” photo above. If you have a metal print bed, you can use an Inductive Sensor, which can detect aluminum up to 4 millimeters away. If you have a non-metal print bed, you can use a Capacitive Sensor, which can detect a hard surface up to 10 millimeters away. You then replace your Z-Axis (vertical) mechanical end stop switch with the proximity sensor.
You will need to design and print an ABS plastic part to hold the proximity sensor. See the middle photo above.
Before each print, 3D printer auto leveling works by probing the distance between your nozzle and the print bed in several places across the surface. Once your printer understands these distances, it will automatically compensate for how “level” changes across the surface. All of this should be automatic and you should not need to do any more manual leveling. You would normally do 3D printer auto leveling just before the print starts, after the bed and hot end have been heated.
3D Printer Auto Leveling Circuit
Before we go any further, here are the tutorials which helped me figure everything out. There is a video from Thomas Sanladerer and written description from marshallpeck. I chose a slightly different approach for my 3D printer auto leveling circuit, and will explain it here.
First, I bought a couple of proximity sensors from eBay. One was inductive and the other was capacitive. Both were PNP or sourcing devices. My plan was to use one to close a relay when it sensed the print bed surface. These cost between $5 – $10 each, with the inductive sensor being cheaper. The 12V needed for these devices can be obtained from the controller board.
Second, I carefully measured the sensor and my 3D printer hot end mount and then printed a part to hold the sensor. This part is shown in the middle photo above. It was designed using a CAD program as three pieces (two sides and a sensor mount) that screw together.
Third, I used a normally closed SPDT relay to interface between my senor and printer control board. This avoids any direct electrical connection. You can buy a relay like this for a couple of dollars if you don’t have one in your junk box. When the sensor “senses” metal, it puts 12V on its Output, which in turn opens the relay in about 8 milliseconds.
Finally, I removed the wiring from my printer’s mechanical Z- end stop, and connected it to the output of the relay. During normal operation, the normally closed relay completes the circuit between the Z- Signal and common V- terminals. When the relay is opened, it breaks this circuit which triggers the end stop recognition in the controller board. You will want to confirm this operation before moving on to enabling your 3D printer auto leveling in the firmware. This is done my sending the M119 command which reports the end stop status, as either open or triggered.
The tutorials listed above will provide you with the information you need to do the rest of the work to get 3D printer auto leveling set up properly. It’s not hard, but it requires concentration. The hard part is getting the sensor at just the right height relative to the nozzle. Once you have this figured out, you save the settings in your firmware. The sensor height is easily adjustable with two nuts and lock washers. With a capacitive sensor, the sensitivity is also adjustable.
(In case you are interested, my Inductive Proximity Sensor is an LJ12A3-4-Z/BY and the relay is a Mode 50-533-0 SPDT 12V. Total parts cost for the project is well under $10.)
The STL files for this build are available on Thingiverse.