Introduction: Webster: a Geometric Pattern Weaving Machine
We are three students from California College of the Arts in San Francisco in the Architecture program. This studio is called Creative Architecture Machines and is taught by Jason Johnson and Michael Shiloh. Webster is a geometric pattern weaving machine that takes inspiration from Islamic tiling, geodesic dome construction, weaving machines, and conventional 3D printers. This 3-axis robot was an exploration in the geometric control of stepper motors, the texture variability of hot glue extrusion, and weaving facets through script-generated density difference and form repetition. Harnessing the structural capacity of the glue texture, the movement of the z-axis motor, and the variability of the weave, Webster was used to rapid-prototyping domes through an additive web-like process.
Please see the attached video for more visual information on the process and final product. If you are interested in more information about the process or have any questions regarding the setup please feel free to contact us. We would love to hear feedback or suggestions as well.
Cassondra Stevens, Colette Rixey, and Megan Freeman
Step 1: What You'll Need
For the Body...
(5) 3D Printer belts. You can order one length of belt and cut it down to 5 separate pieces.
(10) Pullies. Make sure they fit to the printer belts.
(6) Aluminum Rods (5/32" D). The height of the rod depends on the height of your desired Z axis.
(2) .5"D Wooden Dowels. Same length as base.
(2) Steel Rods. The Diameter needs to match the motor head diameter. Length of the rod depends on the width of the base. Ours were 18".
(2) 3" Long Aluminum Tubing. This is need to snuggly fit over the steel rod and the motor head (it attaches the two together).
(2) Acrylic Spacers. Diameter needs to fit over the standard chosen screw size. We used 6/32" D.
(10) Linear Bearings. These need to perfectly slide over the 5/32" D Aluminum Rods.
(3) Sheets of 1/4" Plywood (24" x 48")
6/32" Screws. We bought 3 boxes of 100 screws at various lengths .75" 1", 1.25"
(100) Lock Nuts
(16) Wing Nuts. To allow you to adjust the belt.
(100) Washers, Nylon and Metal
Set of Small Rubber Clamps to be your extra hands.
For the Extruder…
(1) Low Temp Mini Glue Gun. You should buy multiple backups. We went through 10.
Tooons of hot glue
(4) Gears. Various sizes.
1' x 1' Sheet of 1/8" Acrylic or Wood
Screws 6/32" D. You can use the screws that are listed for the body.
Multiple Packs of Mini Glue Sticks .27 Diameter
(3) Stepper Motors, one is single headed and two are dual headed
(1) Continuous Loop Servo Motor
(1) Quad Shield Motor Driver
(1) Small Computer Fan
(3) Heat Sinks
Female Headers. To solder to motor driver
(2) 12 Volt Power Adapter
Soldering Iron and Solder
(2) Arduino Uno's
(1) Blank Shield
Tons of zip ties
Step 2: Building the Base (X and Y)
Start at the bottom and build up.
Cut out a 19" x 23" piece of 1/4" Plywood. This is a base for the machine to rest on.
Cut out the structure for the X and Y bed, a 19" x 19" x 1/4" D Plywood Square with 13" x 13" hole cut out of the center.
You'll need to cut out 4 sets of holes at each corner. Please refer to laser file attached.
Cut out remainder of pieces on laser file. Please refer to image for assembly.
Screw "A" pieces into the corners to secure wooden dowels.
Place Aluminum rods down perpendicular to wooden dowels.
Make sure you slide 2 linear bearings on to each aluminum rod before securing it down.
Sandwich aluminum rods between "A" and "B" pieces. Do this in each corner.
Add the vertical "C" pieces in 3 corners. The fourth corner will have two vertical "D" pieces that sandwich the X motor in place.
Run a screw with a Nylon spacer over it through each pair of "C" tabs.
Place the remaining two aluminum rods perpendicular to the ones directly below them. Make sure to slide one linear bearing onto each of these before securing down. Please refer to image to see how the aluminum rods attach to each other.
Now you attach the bed. The linear bearings need to be directly across from one another and the held in place by the bed.
Step 3: Building Vertical (Z)
Cut out the four sides and top of the machine out of 1/4" Plywood. Refer to laser file.
You can make these panels as tall or short as you want. The height will determine how tall you can print.
Glue 3 "A" pieces together. Insert linear bearings tightly into the holes and slide over aluminum rods.
These will fit into place when belt is secured with clamp. Piece "C" glues onto piece A on one side of the notch where the belt will be clamped.
Glue another set of "A"s together and screw pulley into center notch. These will be placed at the top of machine where the Z belt will attach. Glue each to underside of top of machine directly in between the aluminum rods. Secure dual headed motor to base directly below pulley.
Attach belt to pulley and motor and clamp into Piece "A" and "C" for the Arm.
Attach steel rod to inner end of dual headed motor at the base to stretch to both sides of the machine.
The Arm piece, "B" needs to be glued together with the narrow pieces notching into the holes of the arm. This will make a more secure arm piece for the extruder to rest. The Arm, once glued, will fit directly onto the "A" pieces of the Z axis.
Step 4: Building the Extruder (Good Luck Here)
Please refer to photo for assembly.
You can move gears according to placement of gluestick. You will need to finess this placement as it is frequently too close or too far away from the gluestick. "B" Pieces are used to hold the glue stick strand in place.
The most important step to extruding is to make sure to lubricate the silicone fitting on the glue gun. We used Vaseline.
Step 5: Assembling Glue Stick Strand
You will need multiple packs of mini glue sticks. With either an X-acto blade or dowel cutter (we used a dowel cutter for precision), cut the tips of the glue sticks off at a 45 degree angle and glue together with hot glue. Make sure edges are clean and fit together precisely. You can make the strands as long a you like. We made them an average of 3 feet.
Step 6: Formwork
We printed over everything from a cereal bowl to a 3d printed geodesic dome. We chose to print over formwork because we wanted to create a web that could hold a shape rather than lie flat. You don't need to use an existing formwork, you can chose to print flat on the bed.
Step 7: Setting Up Motors and Boards
1. Take your quad stepper shield and your female headers and solder them into the shield, at their pre-determined spacing.
2. Once this board is soldered, you can take a breadboard your Arduino Uno and begin to wire everything up.
3. Reference the circuit diagram attached to ensure Arduino-Firefly-QuadStepper communication. Use wiring colors as follows:
4. When connecting motors to shield, double-check with the manufacturer specs to determine the wire couplings, as they stay in their couplings when plugged into their respective channels on the shield.
5. Once you've wired everything up,and triple-checked it, you're ready to test the motors...
1. Go to "http://fireflyexperiments.com/download/" and download everything. Then, install it properly for Grasshopper and Arduino.
2. While you're waiting on that download, start wiring up your board (See circuit diagram attached.)
2. Connect your Arduino to your computer (double-check that the COM Port is reading properly.)
3. Upload the Firefly_Quad Stepper sketch (this should be found from File > Sketchbook)
4. Open Rhino, then type "Grasshopper" in the command bar, then find your Firefly components along the top panel
5. To begin testing and calibrating motors: use the Quad Stepper Component
6. Use the "Port Available" component to determine which COM Port is being read by the boards. This number is then typed into a "panel" and fed into other components detailed below.
7. Use the "Open/Close Port" component, with a Boolean Toggle to control it. From the Port available, plug that port # into the "Port" input on this component.
8. The Quad Stepper Component needs the following: a Boolean Toggle for the "Start" (Enable Motor) and "Reset" (Reset Origin) inputs, and a numeric slider from 0 to 4000 on the "Speed" and "Acceleration" inputs.
9. For the M1, M2, M3, M4 inputs, these correspond directly to the "Channel" numbers on your Quad Stepper shield. (For example: Channel 1 might be the motor moving in the X-direction. Feed a slider into M1, and label it "X-axis") Do this for all 3 motors you'll need. Each slider should be 0 to 3200, as a starting point.
10. Plug that Port # from the panel, into the "Port" input
11. From the Quad Stepper component, the "out" output plugs into the "Data" input on the "Serial Write" component. A Boolean Toggle is plugged into the "Start" input for this component, and the port # panel from earlier, also goes into the "Port".
12. Now, to make this all run, you must double-click the Boolean Toggles in this order: "Open Port, Start Writing to Serial Port, Enable Motor, Reset Origin (Do this one twice, so it goes from False to True to False... this resets its "home" manually). For now, you can move your sliders to watch each motor run.
CALIBRATION: on the board, and in Grasshopper
1. First, you must get your motors running smoothly (and quietly!)
2. If they're singing, or if they are moving at erratic and inconsistent speeds, they need to be calibrated. Your shield is equipped with a tiny potentiometer for each channel, because each motor will be slightly different.
3. To use these potentiometers, you must use a tiny (the smallest you can find) flathead screwdriver and you must do it when the board is cold and fresh (or the potentiometers will crumble apart, rendering your expensive shield worthless).
4. Place vertically into the potentiometer. press downward, and begin twisting slightly while motor is running. You can hear them hum and sing and when it is no longer making much noise, but is moving consistently, and smoothly, this is the sweet spot.
5. For the next method of calibration, you will need a Sharpie, masking tape, a ruler, and your Quad Stepper Grasshopper script ready and wired to go.
6. First, on the timing pulley attached to your motor head, draw a straight line from the center to the outer edge, with a Sharpie. This will be your starting point when you test how many steps a full motor revolution takes. The Quad Stepper component uses "steps" to make the motors run so those sliders from earlier are really reading as 0 to 3200 steps, to power the motor.
7. Do each motor individually: Begin to adjust the slider from a start point of 0 to "x" number that takes the motor in a full rotation. This will be useful for you to know, as you can begin to use your tape and ruler to equate the "Number of Steps" to a specified physical distance as your "print bounds" later on in Grasshopper.
*Tip: When using the sliders to test the steps-distance, send it back to 0 between each test number. This tests two things for you: If the motor knows where its "home" or 0, is, or not. If it doesn't, then you need to make you toggle the "Reset Origin" button before every test number is fed through the component to the motors, and if the motor travels backward at a different speed than forwards, you know that the potentiometer calibration needs some tweaking.
Step 8: Grasshopper Script
You will need the latest Grasshopper plugin for Rhino 5 as well as the latest Firefly plugin.
Setting up the entire Grasshopper file requires 9 steps (one much longer than the others...hint: #2)
Before you start anything, make sure your Rhino units correspond to the units you would like to be printing at, or communicating to Grasshopper with... we used millimeters.
1. The first task is to establish the allowable build volume for your specific 3D printer. Because this varies by model, you’ll want to update the XYZ dimensions and units accordingly. Enable the BUILD VOLUME WIREFRAME component to identify the build extents.
(Components used in this step: Panels, Construct Point, Box 2 pt, Brep Wireframe, Dash Pattern, Curve)
2. Set your toolpath here as a SINGLE CURVE. Often, the toolpath can be easily generated in Grasshopper, as a continuous spiral, stepping contours, or other parametrically-derived methods.
*Our toolpath was very specific to our formwork and desired output - dealing with a base "web" that we "wove" between and within. It consisted of the following:
- creating a faceted, geodesic dome, using meshes and subdivision
- isolating each facet
- applying the same Weave component (and its pattern) to each individual facet
- joining each weave + facet outline into one large curve (toolpath)
- the toolpath is then linked to the three motors, moving our bed in X and Y and the Z (the extruder) resulting in an extrusion that moved directly along the facet and edge lines of the domes
- we created four different domes of varying amount of facets, four different densities of the Weave component which was applied to/responded to each dome form, and three different scales of dome forms, resulting in 48 different script options to print from.
3. You’ll want to confirm that the entire toolpath is within the allowable build volume (with the bottom on the XY plane) before enabling the stepper motors, to avoid overrunning any of the axes and damaging the motors. This portion verifies that all vertices are within the allowable build volume.
(Components used in this step: Control Points, Inside, List Length, Mass Addition, Equality, Panels)
4. This step activates the printer's movement. Use a TIMER to continually evaluate the curve, incrementally feeding steps to the stepper motors. Faster timer speeds will result in a more rapid motor movement.
(Components used in this step: VB Script, Timer, Boolean Toggles, Panel)
5. In order for the timer to evaluate the curve, you will need to associate a distance with the amount of time elapsed. The increasing value is used as a percentage to evaluate the overall length of the curve toolpath completed or fed into the Quad Stepper. In our case, 1mm/50ms proved to be the ideal speed for our hot glue extrusion. The slower the speed, the more accurate you can expect the intricacies of your toolpath to be. However, experimentation with your extrusion speed and finding a balance between the two will be necessary to find the ideal speed for every unique machine and material setup.
(Components used in this step: Length, Panels, Division, Multiplication, Minimum, Evaluate Length)
6. To visualize the current point along the print toolpath, create a small sphere along the point evaluated in previous steps and enable the "Preview". This simulates the movement of all three axes in real time.
(Components used in this step: Sphere, Swatch, Custom Preview)
7. The Evaluate Length component from before gives a Cartesian coordinate location. These values need to be converted to steps in order to be translated to each of the respective stepper motors - but before that can happen we must convert the linear distance to angular distance (the stepper motors provide rotational movement). To accomplish this, we need a conversion value to determine how many degrees are equal to a specified distance. In our trials, we printed a 50mmX50mm square and had the stepper motors trace the shape continually until our XY calibration values allowed the extrusion head to create the printed square as accurately as possible. Similarly, we would move the extruder vertically a quantified distance, and measure how many steps it took to reach that distance, or vice versa.
(Components used in this step: Deconstruct, Panels, Multiplication, Integer)
8. Once the location in Cartesian space has been converted from linear values to angular values, we can use the Convert to Step components to translate the degrees to steps. Stepper motors are categorized by both their steps/revolution and the amount of microsteps per step. Make sure to verify these values so that the resultant distance is true to the stepper motors you’re working with. With this component: The "S" is the steps per revolution for each motor, where the "M" is number of microsteps. For us those values were 200 and 8, respectively. You might find that some of your motors travel backwards (this is common) and to correct this (or to feed it the correct negative numbers to be calibrated with the other motors)... just multiply the specific output from this step, by -1, and then it will feed into the Quad Stepper component with the right values. This same idea of multiplication can be used to uniformly scale up or down the geometry to a different desired size)
(Components used in this step: Convert Degrees to Steps (for each motor/axis), Negative, Multiply)
9. Lastly, Grasshopper needs to establish a connection with and write to the Arduino board. Start by opening the corresponding port. Next you will enable the motor, which will dispatch values to the board and begin motor movement. There is a Reset built into the motor. Be aware that when you Reset, it is defining your current location in the Cartesian space as 0,0,0, thereby nullifying your actual Cartesian coordinates. The Cartesian coordinates described in Step 5 are measurements relative to the most recently Reset location.
(Components used in this step: Quad Stepper, Port Available, Serial Write, Panels)
Step 9: Video: Webster in Action
This is the trailer video, which features the robot in action, with a bit of our process and creation of the final artifact.
Finalist in the