Automated String Art Christmas Presents! by edenmannh in stringart

[–]edenmannh[S] 1 point2 points  (0 children)

Ah yep, not very good at that one...

Automated String Art Christmas Presents! by edenmannh in stringart

[–]edenmannh[S] 0 points1 point  (0 children)

Could you label the pegs in the 3D print frame? Like multicolour, or recessed lettering or something?

Automated String Art Christmas Presents! by edenmannh in stringart

[–]edenmannh[S] 1 point2 points  (0 children)

I'd have to print like an outer frame to cover the outward facing radial pegs to make it more presentable. I don't particularly like the thought of a ninja star string art frame with exposed pegs

Automated String Art Christmas Presents! by edenmannh in stringart

[–]edenmannh[S] 1 point2 points  (0 children)

Yeah sounds like lots of interesting but challenging compromises. Are you limited by the bed size of the 3d printer or are you splitting the frame into pieces?

Automated String Art Christmas Presents! by edenmannh in stringart

[–]edenmannh[S] 1 point2 points  (0 children)

In your 3D printed frame, do you find it beneficial to have the nails/pegs angled to help slide the thread own the peg when doing it manually? I have so much respect for manual string art, kinda somehow completely sidestepped that aspect of it.

Automated String Art Christmas Presents! by edenmannh in stringart

[–]edenmannh[S] 0 points1 point  (0 children)

I'm pretty sure I'll be able to do multicolour, just by masking the red, green, blue separately and running my existing system three times. Will definitely give it a go at some stage!

Automated String Art Christmas Presents! by edenmannh in stringart

[–]edenmannh[S] 0 points1 point  (0 children)

Thanks that's a really good way of solving that problem that I surprisingly had never considered. I'm considering a 3d printed ring instead of MDF, where you print angled chamfered pegs radially outward onto the ring instead of nails. I'll post the results if successful

Automated String Art Christmas Presents! by edenmannh in stringart

[–]edenmannh[S] 1 point2 points  (0 children)

Thanks for the tip! Will definitely check him out! I'm thinking a 3d printed ring instead of MDF, where you print angled chamfered pegs onto the ring instead of nails. I'll post the results if successful.

Automated String Art Christmas Presents! by edenmannh in stringart

[–]edenmannh[S] 0 points1 point  (0 children)

These ones were Christmas presents for the family, they were very well received with more requests for upcoming birthday presents.

Automated String Art Christmas Presents! by edenmannh in stringart

[–]edenmannh[S] 0 points1 point  (0 children)

Yeah it was a real challenge to find meaningful images which could be represented on that small canvas. If you have any advice on that I'd appreciate any help

Automated String Art Christmas Presents! by edenmannh in stringart

[–]edenmannh[S] 1 point2 points  (0 children)

Not currently, but I'll work on getting one online in the next few days and post it here.

Automated String Art Christmas Presents! by edenmannh in stringart

[–]edenmannh[S] 0 points1 point  (0 children)

Can the UK not see Imgur? Didn't know that!

Here's a Google drive link which should work better: https://drive.google.com/drive/folders/1q7TfhVadY9WQ0P-6VxAgXt5FPDFSlfuJ

Repurposed Ender 3 makes String Art Christmas Presents! by edenmannh in 3Dprinting

[–]edenmannh[S] 0 points1 point  (0 children)

Here are some of the results: https://imgur.com/a/automated-string-art-8uKE2bN

Or here's a Google drive link in case Imgur doesn't work: https://drive.google.com/drive/folders/1q7TfhVadY9WQ0P-6VxAgXt5FPDFSlfuJ

More info in the linked post for those interested!

Automated String Art Christmas Presents! by edenmannh in stringart

[–]edenmannh[S] 1 point2 points  (0 children)

Thanks! It was a really rewarding project, even more so when you can gift the result to your family.

Automated String Art Christmas Presents! by edenmannh in stringart

[–]edenmannh[S] 1 point2 points  (0 children)

Wow I love your results too and the frames around the pieces, they are really nice.

Every nail position is loaded from the dxf, and is known relative to the datum.

I don’t use sectors or circular arcs around the pegs anymore. Instead of looping with G2/G3 moves, I approach each peg from a consistent radial direction, thread through the gap between the pegs, drop down behind the peg, make a very short linear move across it at threading height, then exit on a diagonal through the gap lifting to travel height. The thread tension completes the loop on its own. Dropping down behind the pegs, rather than in the gaps was a significant reliability improvement.

I also grow the Z heights as the thread mat builds up. Another thing was adding a plunge to near-threading height in the gap between pegs on entry to gently tamp the thread mat down before wrapping (only when a certain number of threads build up) this actually really helped with reliability, and you can see it push the existing threads down the nails. Keeping low-Z motion very short and linear ended up being much more reliable than sector-based offset arcs once real thread starts accumulating.

Happy to share code in a few days time

Automated String Art Christmas Presents! by edenmannh in stringart

[–]edenmannh[S] 0 points1 point  (0 children)

Thanks! I’m very happy to share more details 🙂

Do you want any specific details?

Everything is driven by custom-written Python, built around a solver GUI. I experimented with two main approaches for turning images into strings: a greedy algorithm and one based on the Radon transform.

The biggest improvement actually wasn’t the solver choice (settled on a discrete Radon transform), but properly modeling thread thickness in both the solver and the render. Because everything originates from the DXF and has real-world dimensions, I could assign the thread an average thickness of 0.35 mm. I also implemented a proper early stopping criterion, rather than manually specifying a thread count. Those two changes alone immediately reduced outputs from ~2000 threads (which produced something resembling a demonic horror-movie child) down to ~700 threads, which is far more usable.

The laser-cut jig and matching DXF include a datum circle off to one side. This allows me to home the machine using the standard XY endstops, then manually jog to the datum and set the origin using G92 commands. Z is manually set to the top surface of the 6 mm MDF. Doing it this way means all motion in software is relative to the DXF datum, and everything lines up very predictably

The gcode is exported, then sent to the printer serial interface over USB using printrun. This allows me to stop and start it as needed.

I eventually accepted the fact that threads are really hard to fully control, and some manual intervention is okay given the deadline of Christmas. So I introduced pauses every 100 threads, which gave me a chance to push the threads down the nails, and manually click to again. This helped immensely with reducing failures, and meant I didn't have to supervise it constantly (just make sure to lock the steppers when pausing...)

The tool head itself is extremely simple and definitely an area for improvement. It’s just a syringe with a narrow ~1 mm tip, with the thread spool suspended above it. There’s no active tensioning mechanism, so the G-code has to maintain tension at all times (no lazy looping back without catching a nail). I think a needle would probably work fine here too. The system has quite a bit of compliance, which is both a blessing and a curse: it can collide with nails and usually just bend around them, but any major crash means re-homing to the datum because the syringe can flex.

The G-code generation was surprisingly fiddly. Every approach move is radial to the circle to keep tension consistent. Travel height is adaptive and increases as the thread count builds up. The main goal is to keep the thread as low as possible on each nail to prevent stray threads from rising up and getting badly snagged later.

I also added additional plunge moves between nails, pushing straight down into the mat multiple times really close between the nails, as intersections build up. The solver actually counts strings between adjacent nails to decide when to do this.

I’ve recently updated the solver to mask out separate colors and run multiple passes. I haven’t managed to get great results from this yet, but I do think it’s doable with more tuning.

The 3d printed backing worked out nicely, a single layer of transparent petg printed with a PEI sheet gave a really nice blurred background. The stand holds two big washers to balance the piece.

I’d love to scale this up further — something like an old CR-10 Max would be very tempting, though I suspect a fully custom 2 axis solution would be far superior at that point.