Here's the filament I chose. It's non-metalic PLA but looks a lot like copper:
My adventures in Agile Software Development and Coaching from Ann Arbor, MI.
Saturday, June 22, 2019
Bangle - Next Steps
I haven’t solved the bridging issue yet, so I’ve started printing the first of two cut-down halves to see if I can glue them together seamlessly. (CA/Superglue is said to be good for this).
If the result of gluing the two cut-down halves is good, I'll sand the inner diameter to make it a comfortable thing bangle, then print two full halves in copper and try gluing them. If gluing doesn't end up being a good solution, I'll have to solve the bridging issue, perhaps with supports, or with tweaking print/extrusion/fan speeds.
Saturday, June 15, 2019
Designing and 3D Printing a Chunky Bangle
Initial Concept
My wife likes big, chunky jewelry, so I thought I would try and 3D print something for her. I started with this as a basic idea:Tools
Printer: I have access to a Prusa i3 MK3, the predecessor to the MK3S.Modeling: OpenSCAD - open source, "The Programmers Solid 3D CAD Modeller". Unlike traditional CAD apps that rely on drawing and/or moving around shapes, in OpenSCAD, you build designs by writing lines of OpenSCAD language code (some examples) Once you have a design in OpenScad, you have the software render it and export it in STL format.
Slicing / exporting gcode: Prusa has their own version of the popular open source app, Slic3r. Slicing is the process of taking a 3D model (usually an STL file) and converting it to a stack of slices that a printer can print, one on top of the other, to create the object. Gcode is the low-level instruction language used by printers to control the motions of the bed, the extruder, the arms and so on. Exporting gcode is the process of taking slices and converting them into those low-level instructions
Iteration 1:
Design a basic ring-ish shape. The easiest way I found was to design a disk and subtract from it a disk of same thickness but smaller diameter, centering the disks on each other. It looked like this:Iteration 2:
I wanted to improve the ring design from a harsh geometric shape into the first inkling of a bracelet design. This involved learning to rotate a 2-D circle in 3-space around an axis, using the rotate_extrude() function. The result looked like this:Iteration 3:
To create the first printed prototype, I reduced the thickness of the bracelet design, keeping the diameter. Thinness causes a quicker print and uses less plastic. Took about 40 minutes to print. (No pic)Iteration 4:
Discover that diameter of first physical prototype is about 1/3 of useful bracelet diameter. Scale design to 300% and print again. When my wife put it on, it was a little too big, I decided to measure a favorite bracelet of hers and use its inner diameter (ID), 65 mm, for my design. Going back to the Iteration 1 design, I quick-printed something with the 65 mm ID. Holding it up against the favorite bangle, the ID matched. My wife put it on and called the fit perfect. So, I had confirmed the final ID. (No pics)Iteration 5:
Learn to go from circular cross-section to something more complex.First, I set out to relearn parabolas:
https://www.symbolab.com/solver/parabola-equation-calculator
https://www.mathwarehouse.com/geometry/parabola/
https://www.mathwarehouse.com/quadratic/parabola/interactive-parabola.php
https://www.mathwarehouse.com/geometry/parabola/standard-and-vertex-form.php
https://www.desmos.com/calculator/dz0kvw0qjg
https://www.omnicalculator.com/math/parabola#how-to-use-the-parabola-equation-calculator-an-example
https://www.desmos.com/calculator/mey71rif1d
I created a curve that I liked. It turned out to be Y = 0.3*(x-6.1)^2 + c.

Then I enclosed the curve into a shape with a perimeter and area:
Then I plugged some points into the equation and added 3 corners. It was simple to turn those points into a polygon call in OpenSCAD (in a future iteration, I would calculate and add more points in between these points, to smooth out what was a faceted curve:
polygon(points=[[6.0, 0.000],
[5.5, 0.108],
[5.0, 0.363],
[4.5, 0.768],
[4.0, 1.323],
[3.5, 2.028],
[3.25, 2.773],
[3.0, 3.518],
[3.0, 0.000]
]);
The rotate_extrude() call stands up a shape and rotates it around the z axis. Applying this to my polygon resulted in a shape like a volcano:
In OpenSCAD, I duplicated the "volcano", fliped it 180 degrees, and lined the duplicate up with the base of the original:

I showed the double-volcano model to my wife for her blessing, which I received. A first real physical prototype is in sight.
Iteration 6:
I decided to test-print only one volcano, just to have something to handle before committing to the whole print (which the slicing software projected would take 13 hours at 7% infill). It turned out that because of the nature of the curve I chose, the edges taper to a very thin edge are are not comfortable to wear:


Iteration 7:
I decided I needed to find some way to smooth the sharp edges and reduce/eliminate the faceting artifacts shown above. I had already figured out how to reduce the faceting down the face of the "volcano" by using more points to express the curve that became the polygon that was rotated through space. The faceting around the perimeter turned out to be easy - I had to add an extra argument, $fn=360, (number of fragments) to the rotate_exclude() call. Of course, the extra computation changed the rendering and slicing time from seconds to several minutes. I smoothed the lips edges of the volcano by smoothing the polygon itself using the offset() function before the rotate_extrude() call. The resulting model looked like this:
But the print had some issues:

It might be because the sharp angle of the base of the upside-down volcano extends out too far for support good bridging. There are lots of ways to address bridging issues. But before I tried any of those, I noticed that the model had a weird asymmetry. Displaying each volcano in a different color:

and shifting one of the volcanos along the x-axis make the asymmetry more obvious:
It turns out that before I used the offset(), the two halves would remain on the z plane when one was turned upside-down. But adding the call resulted in one of the volcanos impinging across the z-plane. Could the impingement be responsible for the defect?
Iteration 8:
I moved the offset()'ed volcanos so their bases both sit on the the z-plane, but that resulted in a "bumpy" circumference, so I didn't print it - it needed more adjustment:
Iteration 9:
By making each volcano cross the z-axis an equal amount, I got to this:
To determine whether there is a bridging issue, but not have to print the entire 13.5 hours, I "chopped off" some of the top and bottom of the model (by intersecting it with a box)
Monday, March 5, 2018
Monday, February 13, 2017
TDD Amazon Alexa / Echo Skills ?
While TDD and unit testing are different things, TDD often relies on a unit testing framework. I have found no articles about TDDing Amazon Alexa a skill, but here are 3 about unit testing a skill:
Tuesday, December 13, 2016
Things an "Expert" C Developer Knows: Undefined Behavior
This is the first post in my series: Things an "Expert" C Developer Knows
The 2016 SEI CERT C Coding Standard [free download] gives this definition of Undefined Behavior:
The CERT C Coding Standard lists. in Appendix C, all undefined behaviors in the current C standard: C11 (more formally known as: ISO/IEC 9899:2011) There are 203.
Since I've mentioned the C11 standard here, I should probably have a Things an "Expert" C Developer Knows post about C standards.
The 2016 SEI CERT C Coding Standard [free download] gives this definition of Undefined Behavior:
Behavior, upon use of a nonportable or erroneous program construct or of erroneous data, for which the C Standard imposes no requirements.An example of an action that causes undefined behavior is signed integer overflow. Professor John Regehr at U of Utah has a blog post that gives several possible examples of what C compilers *could* do with this C statement in a program:
printf ("%d\n", (INT_MAX+1) < 0);The possibilities Regehr lists include printing 0, 1, 42 or formatting your hard drive. While the latter won't actually happen, undefined behavior can cause data corruption and/or security vulnerabilities.
The CERT C Coding Standard lists. in Appendix C, all undefined behaviors in the current C standard: C11 (more formally known as: ISO/IEC 9899:2011) There are 203.
Since I've mentioned the C11 standard here, I should probably have a Things an "Expert" C Developer Knows post about C standards.
Subscribe to:
Posts (Atom)