Automated PCB inspection

A project log for LadyBug BEEFY: 3D printer motorized microscope

Got printer? Connect to the motors with a Pi, plonk in a cheap scope, and do 2D and 3D scans!

ahron-wayneAhron Wayne 04/10/2020 at 01:430 Comments

So I got distracted for a couple of days from the whole Z stacking thing to create a this-will-break-if-anything-changes demonstration of the potential for automated PCB inspection.

It's actually scanning the version 1 board for the original DIY (blu ray players) ladybug, and which has way too much stuff on it (it was my first and so far only board made mostly by myself). Basically, all this program does is take a csv file generated by EasyEDA for pick and place machines, organize the important bits, does some basic math and cleanup on like the units for the component locations, and provides a rudimentary interface for interacting with the information and taking pictures.

One thing that got added to the rest of the program was a "find shortest path between a list of coordinates" function, which it turns out is the hardest problem in all my code computationally (it's the NP complete traveling salesman). I just grabbed the first ready-made python module for it, but still. Finding the path for the points shown in the video above took as long as the scan itself --- clearly not ideal. Definitely need a faster solution with some tolerance allowed if this would ever be used on thousands of points or more.

The idea for this kind of thing is straightforward enough, but it all really depends on how it's implemented. And my implementation is Not Good, at least for the amount of time it took me. Even apart from the major lack of a user interface, it would just never survive an environment with changing demands and requirements, at least not without constant upkeep (by me). My formal CS background is six weeks of python in a summer semester ---  and I feel like that's really leaking through, at least judging by the number of if-then statements in my code.

Oh, I mean, uh, hey! at least it works...?!