MAT 238: Final Project
For my final project for this course, I decided to make a wine bottle rack that could hold multiple wine bottles.
Motivation and Inspiration
For my final project, I wanted to create something that I would be able to use outside of the classroom and related to something I enjoy. While brainstorming final project ideas, I thought about various hobbies that I enjoy and things I do in my free time. I explored the idea of designing a guitar stand, but quickly realized that it require either some sort of press fit kit to be as tall as the guitar, or a wall mounted design that would be able to hold a guitar's weight. Another potential idea was designing a bottle opener, but this required incorporating a lot of physics and leveraging techniques. Because I really wanted to focus on the actual design of my object, I decided against these two ideas and decided on making a wine bottle rack. While exploring some interesting looking wine bottle designs, I found a set of designs that looked like wave-like structures and starting using them as inspiration for my own project design.
Preliminary Designs and Experimentation
For some of my preliminary designs, I first explored a simple replicated curve that was connected at its ends. I also measured the diameter of a wine bottle and created a dimensionally accurate cylinder (without the converging top to the bottle cork) to represent my bottle. However, I quickly abandoned this design because I found it hard to creatively develop and expand. I felt as though if I proceeded with this structure, the only way to make it interesting would be to add a parametric surface. Instead of doing this, I decided to restart and see what I could make with a closed curve.
For my next potential design, I first generated a symmetric curve about touching the y-axis. Once I had this design, I mirrored it across the YZ plane and created a nice closed curve. Once I had a singular curve I wanted to explore, I offset, extruded, and duplicated it to create a set of geometries that could fit four wine bottles. Next, I again decided to duplicate this object, but this time, I moved it back along the y-axis and rotated it 90 degrees to be vertical. I thought this structure was interesting, but I again had "writer's block" and couldn't think of ways to develop it further besides duplicating and rotating it. Further, I didn't quite like how the object looked from the Front view, since the horizontal and vertical designs didn't appear symmetric and complimentary from this angle.
Finally, I experimented with a design that would hold bottles from two different ends, connected by a small pipe in the middle. I did this using the Loft functions between a set of displaced circular curves and offsetting the surfaces to create a cup like geometry. Using this as a starting point, I then duplicated, moved, and rotated the object 90 degrees to be able to hold 4 different bottles. However, after some feedback, I realized that this design was too simple in a sense, and did not demonstrate my skillset that I learned throughout the quarter.
Wave-Like Structures
After several road blocks in design from my rapid prototyping experimentation, I decided to refocus on the wave-like patterns I used for my wine bottle idea inspiration. With this in mind, I looked into different ways of creating wave-like structures in Grasshopper/Rhino. Throughout my exploration, I found this very neat GH component, CrvWavePoints, that creates a wave like structure on a curve. I spent some time experimenting with the parameters of this component, and was able to generate some very interesting patterns on curves.
In order to tie it back to my wine bottle holder, I first created a list of circles with increasing radii throughout the list. Using this set of circle curves, I then applied the CrvWavePoints component to create waves along each of the circles (and a nice resting spot for a wine bottle). Using these wavey, circular curves, I used the Pipe component to transform the curves into tubes. Once I had this basic wave-like design with pipes, I created some number sliders to see how the waves and object as a whole could be could be changed.
I created sliders that could modify the number of initial circles, the radii of the initial list of circles, the height displacement between two initial circles, the number of periodic waves that were created, the amplitude of the waves, and the radii of the pipes. Using these parameters, I was able to experiment with a bunch of different designs throughout my entire development and debugging phases.
Wine Bottle Holder
Once I created a layer of wave-like pipes, I duplicated, moved, and rotated them to create different layers and openings. I ensured the trough of one wave intersected with the peak of another to create the largest possible opening for the holder. When experimenting with the different parameters, I kept four full periodic waves per layer constant so that four wine bottles could fit at each layer. This is because the physical dimensions of the holder would need to be increased significantly and uniformly to be able to hold more bottles per layer. Once I had this value set, I started experimenting with the Z height of the circles and the amplitudes of the waves on the circles. The combination of these two created some very interesting objects, but I was limited by the radius of the openings because I had to ensure a wine bottle could fit and not fall through the other end. These two values were the most important in my design process because collectively they ultimately determined the aesthetic of the model.
Base Legs
In order to hold these wave-like structures up, I needed to figure out a way to create a base or a set of legs. Inspired by the Pipe command in Grasshopper, I decided to experiment with the Variational Pipe command that can vary the size of the radii throughout the pipe. To ensure there were a sufficient number of supports, I created a support leg for every circle that was generated from the middle of the pipe down to the XY plane of the grid. I did this by taking the points on each circle generated by the Curve Wave Points and creating a line down to the origin. Using these Crv lines from the circle waves down to the XY plane, I applied the Variational Pipe component to vary the radii along each of these lines.
I experimented with trying random radii for the pipes using a Python script, but ultimately decided against it since I would change every time I altered components of the model. Instead, I created a set of Gene Pool sliders where I could alter the radii throughout a domain between 0 (start of the line) and 1 (end of the line). Finally, I unioned the wave wine holder component and the leg components to create my final model.
Peer Review
Through the peer review process with Kevin, we both collectively agreed that a lower Z value and a higher amplitude produced an object that looked more aesthetically pleasing. Further, we noticed that if I used a Z value that was too high, the second layer of the geometry would not be printable since it would be higher than the Z limit of the Ender 3. Kevin also suggested that I try prototyping a full scale model by printing them in quarters because the Ender could not print a big enough holder as is. Further, he suggested if I had trouble doing that, then simply printing a scaled down holder with a scaled down wine bottle as a demonstration.
Prints and Debugging
After finally settling on a design that I thought was interesting enough, theoretically printable, and could withstand the weight of a wine bottle, I was ready to print. However, after attempting an initial print (and trying various calibration models), I quickly realized that there was a very critical issue with my physical printer. At certain Z heights, the printer would scratch along the surface of the previous layers (see video). I spent a lot of time trying to debug this issue, starting with exploring the possibility of over extrusion. To attempt to solve this issue, I altered certain parameters of the slicer (flow rate, nozzle temperature, etc.) but it did not appear to be solving the issue. Next, I decided to replace the nozzle of my printer, as per Mert's suggestions, but this also did not solve the problem. I also tried calibrating and tightening the X and Y belts of the printer to see if this would do anything, but it unfortunately did not. After many other little calibration experiments, in order to actually solve the problem, I had to take out and calibrate the Z rod by ensuring it was was cleaned, greased, and placed perfectly straight into the Z axis screw.
After ensuring my printer was stable and printing well, I attempted to print a quarter cross section of my model at full scale with walls surrounding it for support (final_quarter.stl, final7.stl, final8.stl, and final9.stl). However, after two 12 hour failed prints out of 4.5 day total time for the prints, I decided to remove the outer walls so that the print time would be decreased by a day. Once I removed the wall from the design the print was shortened to 3 days (final10.stl). Unfortunately, this model also failed to print two times, and since I was only left with 2 days to print an object, I had to make adjustments to the final print I would demonstrate and decided to print a scaled down model as Kevin suggested. I'm still not entirely sure as to why these models failed to print since I was unable to monitor them overnight when they failed, but I believe it is because they pillars were knocked over when printing.
Instead of printing a full scale 1/4 of my design, I decided to print my full model at 3/8 of the size (the maximum possible size I could print in 2 days). To accompany the model at scale, I also printed a 3/8 scaled wine bottle to demonstrate how a wine bottle would fit (final12.stl). Once this model successfully printed and I was able to demonstrate something for my presentation. I went back to the quarter, full scale prints and added a raft adhesion to attempt to solve the issue of pillars falling.
Post Presentation
After achieving a full, scaled down model print with adding raft adhesion, I attempted to print the quarter section full scale models I had previously been able to generate, but this time with a Raft adhesion to test whether or not this would prevent the pillars from tipping over during prints. Unfortunately, adding the raft adhesion still produced a problematic print. As in previous prints, one of the central or side pillars (not the same one across prints) ended up getting detached and falling off the adhesion plate. Once this happened, more and more pillars would become dislodged because the stringy extrusion at the fallen pillar would put adhere to the other pillars and cause them to fall.
After many similar print attempts, I was finally able to achieve a successful quarter, full-scale print. In order to do so, I had to go back into Rhino and alter the parameters of my model so that the radii of both the leg bases and the holder curves would be intersecting and connected when boolean unioned. This allows for more stability during the print since all the legs were connected from the onset of the print. However, splitting this model proved to be troublesome because it contained self-intersecting edges and non-manifold surfaces. Throughout the full scale design prints, I struggled a lot with trying to achieve a quarter section of my model because the Boolean operations (split, union) were not working properly. The last two images highlight some of the issues: base legs being omitted, mesh not closed, base legs not being attached to the holder, etc. Until now, I had just altered my model until it did not contain self-intersecting edges and the unions would be successful. However, after feedback from my class presentation, Ana suggested I use Fusion360 or MeshLab to deduce and repair the problem. Using MeshLab, I was able to delete the self-intersecting edges, but it ruined my model as a result by creating no connections between the base legs and the holder curves. Thus, I tried using the repair function of Fusion360 which did end up working. To get rid of the troublesome edges and surfaces, I had to perform the "accurate" Rebuild Repair on the mesh because the "warp" approach did not solve it. Further, the "accurate" approach seemed to preserve more of the original mesh structure than the other types of repair functions. I experimented with this functions parameters, particularly the density, and noticed that the higher the density, the more the model was preserved.
Once I repaired the model, I was then able to correctly split the model and achieve my desired quarter cross section. Although the model now contained no errors, the quality of the model was degraded. Nevertheless, I was able to successfully print the model in a total time of about 3 days and 1 hour. Unfortunately though, the model looks noticeably "meshy". In the future, I would like to be able to learn how to repair (or entirely avoid) self-intersecting edges so I could produce a high quality model that isn't degraded by the Rebuild Repair mesh repairs. Further, I would like to print all four sides of my model and glue them together to produce my full model. That being said, with the quarter model I produced, I am still able to aesthetically place it in a corner and have it serve the purpose of a wine bottle holder.
My grasshopper file and final class reflection can be found here.