Autoleveling and CNC journey

Thank you @JKC20 . I’ve tested my suggestion and am happy to tell you that it works. Following is my process explained;


Sad to hear that you stopped developing the auto-leveler app. I am considering to starting giving it a shot of my own. I already did something similar with a prusa-like 3d printer where I had easier access to the controller, and it was surprisingly devoted of any major setbacks.

Could you explain a little bit how did you set up the Arduino probe? Does it reads or sends any information from/to the snapmaker controller?

Thanks for your work so far and for sharing it with the community :slight_smile:

1 Like

Auto leveling was meant as autoleveling, the arduino probe is the sensor and uses just simple connection to detect it touching. This is actually the easy part.

@Dreyer My biggest stopper is the lack of experience around 3d programming, and how i would actually take the sensor probe results and format the gcode file input, this is basically my only stopper

Today I did a test with my autoleveling project. I have the following setup:

Then I wrote a windows program that is doing the following:

  • Read the probe file
  • Send the probe file G commands to the snapmaker through the api
  • Ready after every G command Z-1 the value from the digital indicator by a telnet command.
  • When the whole probe file is processed by the snapmaker, write to a file all the x,y,z coordinates that are measured.
  • Load the probe results to the autoleveller, and autolevel the cnc file with the pcb circuit.
  • Do the milling with the modified CNC file.

The result is very promising , I only need to buy a better V bit , I used the V bit delivered with my snapmaker (the 3 bits accessory kit) but I think the diameter of the V bit is to big. So I ordered some new ones with a small diameter.
Result of the milling:

Reading result of the digital indicator:

video about a test with my digital indicator. In reality this needs to measure on the pcb board.



I actually was trying to do something similar. Gotten a similar dial indicator, wrote some code for an esp to read it out and wanted to use it for bed leveling. and more relevant, afterwards, carving curved objects.

Did you solder the wires to the dial indicator? I actually entertained myself to 3dprint the connector :slight_smile: dialindicatorplug.stl (9.0 KB) with then a small pcb to bring the wires out of it. to which I then soldered the actual cable.
PCB_NEW_PCB_2020-12-07_22-49-52 (2.9 KB)
I did sacrifice an old microSD to SD adapter to get some of those “connector-thingies” out of it.

works quite well actually. But right now I’ve been focusing on solving the source of the problem. Getting the bed flat :wink:

Ah that is a good addition that connector :-). Yes I soldered them. I think because these copper boards are never flat, even with a flat board I need levelling. So the autoleveller AE software is a nice way of making it software wise flat.

I soldered some of these things on the connector:

(the small pins to make sure it connects ok.

To avoid problems with non flat pcb’s Ive started using just small flat-end mills. I’ve had success with a 0.5mm bit. That way you don’t have the same problem as with a v-bit that as you go deeper the path gets wider. See my post here: A150: first PCB with CNC module - #4 by brvdboss

But it does take some careful testing to get the speeds and feeds right to avoid breaking your bits :slight_smile:


@whimsycwd - any updates you can share on this probe module? Like many I’m struggling with PCB milling, a probe would solve the challenges with bed leveling as well as variances in manufacturing of copper clad PCB substrates.

I would also recommend allowing finer adjustment to the calibration routine for setting the work origin for CNC. .1 mm is not enough for dialing in the Z height depending on the length of the bit (from holder) and the surface level/height of the baseboard, it can overshoot or undershoot the desired Z height / offset.


1 Like

Hello everyone!

I´m a beginner in PCB milling and made a few very simple CNC milled 2-Sided PCBs with my A350, simple in therms of wide traces and no fine IC PAD structures, but 0805 PAD sizes works great!
I´ve also noticed that the copper boards are warped (one side is milled super, when tourned the board around some traces are missing).
Like @RobotChicken has written, I also think that a step of 0.1mm to set the work origin is too coarse for PCB milling.

My current workflow: PCB layout design in KiCad → generate gerber and excellon files in KiCad → import files to FlatCAM 8.994 Beta → use 2-Sided PCB tool in FlatCAM and generate G-Code files out of gerber+excellon files → copy G-Code files to USB stick → put the USB stick to my A350 and mill PCB.

@whimsycwd - Any updates about this new module? It would be great to probe the copper board and the G-Code is manipulated automatically (a process like in the 3D printing modus). Like that you opened your roadmap to the public!


1 Like

I will loosen the chuck, once I set the Z height, to allow the bit to touch the surface of what I am milling. I haven’t done any PCBs yet but it works for 1.3mm thick plastic sheets.

Hello everyone,

(First, sorry in advance if I miss some rules related to posting here, it’s my first post.)

Last week after reading this post I decide to work on this leveling problem. In the past I try to solve it with a waste board and a spring loaded bit but it didn’t solve it completely.

Nevetheless, I wrote a code that still need to be fully tested (and maybe implemented on an Electron App), but here are the first results. (Unfortunatly as new user I can’t post multiples embedded pictures)

After running the code with a simulated tilted bed, the Gcode is corrected:

In the same time I developped a probe routine based on Mika approach and using serial communication between the probe//computer/SM2.

Thx for reading, have a nice day

1 Like

After testing the program and correct some mistakes, it’s working perfectly. Here is a photo of the last engraving I did with a 0.1mm 10° V-bit. The surface was measured over 6000 points! The pcb is 88mm width and 78mm height.


Can you share it? You can create a GitHub Gist, or upload to somewhere else and share the link here.

If few people are interessted with theprocess I will try to make a guide here. I’m just affraid that Snapmaker block the possibility to use my code with any update.

While this is all well and good, wouldn’t it just be easier to just use a surfacing router bit and level off the spoilboard? I ran a dial gauge across my surface (pre levelling) and there was a delta of about 0.5mm across the 30 points I measured.

0.5mm is the width of the entire amount of copper on a board, so that’s way too much tolerence

I think you missed my point… why not just use a surfacing bit to level the entire spoilboard?

I’ve done that before several times, the SM linear motors have issues and aren’t always accurate everytime due to single motor drivers for z axis so left to right gets warped over uses. You can fix it by pulling the axis up to the top on both sides while off but having auto leveling would just make it easier

Oh not to mention, it’s the copper boards themselves that are never level, not the base

I am interested, why not upload it to github?
I don’t think snapmaker devs intentionally break stuff, I think it’s more a product of them not being used to work on something that should be open source, managing PRs and the like