I just got Marlin to boot and move the motors. Had to make some tweaks to the serial port configuration, because I have unique setup (X, Y and Z share one serial port) and the two extruders share another. I also use proper hardware serial ports, not the SoftwareSerial library. At the moment the code requires special patches to the STM32Duino core and the Trinamic library so it can properly support serial half-duplex communication.
On separate topic, I got a prototype of an LCD i/o board for the Nucleo-F407. I tested it with the REPRAP_DISCOUNT_SMART_CONTROLLER and was working flawlessly.
Here it is connected to my soldering machine:
The very first prototype had a bug, hence the little red wire. This adds support for the traditional EXT1 and EXT2 connectors that are popular with other boards. Graphics panels would require a little work, to convince marlin to use the second SPI hardware block.
I was very confident in my soldering machine from the tests I conducted the previous week. I decided to program a whole board and try it out.
Alas the confidence was premature and multiple failures ensued. Here is an example
I tried many things, but the soldering wire was hitting the pin and was not melting. I tried re-aligning the needle to point to the solder iron tip instead of the pin. This did not produce improvements at all. I had to aim fairly high to avoid hitting the pin and now the solder was not flowing down and bulging.
I was getting frustrated and decided to look at a few videos of commercial soldering machines for inspiration.
After a few hours I devised a new mount for the soldering needle. The previous mount was allowing adjustments only in the angle of the soldering iron as well as the needle. This configuration seems quite limited. Applying maximum effort here is the new plan:
Now the syringe is mounted on this dual clamp. The clamp allows for both items to rotate. The other end of the clamp is connected to a 3mm steel rod, which adds another degree of rotation. Finally the rod is connected to the mount plate with a plank which allows both: XY movement as well as rotation.
Here is the final assembly after a few dozen failed 3D printing jobs
The new mounting system adds quite a bit of flexibility to the position of the needle that guides the solder wire. Hopefully I’ll be able to find a location which works in most cases.
I’ve been running the soldering machine for about 2 weeks. I added a very ugly, but effective fume extractor to the machine head.
It has 40mm fan and a square piece of carbon-activated filter to absorb the fumes. The design is not my best work and is held together with hot glue. However it does work.
Some early failures of the soldering were quite comical:
But some tweaks of the G-Code and it is mostly working now
At this stage it is completely manual programming. No computer vision at all. I’m recording all soldering sessions so they can be used for training ML models later.
My test board is fairly straight forward, so programming the G-Code is not hard. I use a simple C++ program to send the commands to the 3D printer controller. This allows me to add the necessary delay and in the future integrate some processing of the camera image.
I also managed to find an M12 camera lens with much less distortion, to the point that the image no longer needs corrections.
The UI is simplistic, but allows control of the camera settings and while streaming is consumes only 3-5% CPU. Well done to the Raspberry Pi foundation and the RPi Cam Web Interface team.
Here is an image I captured with the camera
The focus looks good and the image resolution is very nice. However the vertical blue edge of the plastic mount is supposed to be straight. Not so much on the image. The 3.6mm M12 lens I used on the camera adds quite a bit of distortion around the edged. My other lenses are more on the telephoto side: 6mm, 8mm, 12mm and 16mm. I tired the 6mm lens and the distortion was better, but the field of view was too narrow and wan not capturing the soldering head. I ordered some more lenses which claim “low distortion”. We’ll see it they produce better result.
My initial goal was to capture a series of images and then “stitch” them together with OpenCV. Initial experiments failed miserably. First the lens distortion was confusing the stitching algorithm. I know that OpenCV has camera calibration option which can correct lens distortion, but I’ll try better lens first.
The other issue with the stitching was inconsistent lighting. I tried using my LED photo light, which helped initially. Still the lighting on some spots was low and some spots were too bright and getting lots of reflection from the PCB board surface.
I constructed this new camera head, which allowed me to mount a small ring of LEDs close to the camera.
I seemed like a good idea at the time, however it makes terrible reflections onto the PCB. So back to square one. I’ll make some combination of external photo light as well as some white LED strips. The goals is to have uniform light with minimal reflection and not to obstruct the movement of the machine.
I managed to put together the chassis of the soldering machine. The bulk of it is made from parts for a Prusa MK3 3D printer. It provides a good start point so I can experiment further.
This is what is looked like in the beginning
I also put this mounting plate to hold the connectors that I need to solder for my test board. With this plate I can insert the connectors, place the board over and get it soldered quickly, then move to the next one.
Here is a video how the head would move along the Y axis
And another one along the X axis. This one needs to hop over the pins.
I used my PrntrBoard controller to drive the motors. This is a picture of the machine in it’s current variation. I added the Prusa LCD display, but have not connected it yet.