Introduction: Serpentine Concrete 3d Printer - CCA 2015

The Creative Architecture Machines (CAM) studio is a 3 month long research project conducted in the Digital Craft Lab (DCL), taught by Jason Kelly Johnson and Michael Shiloh at California College of the Arts (CCA). It is a collaboration between a diverse group of 13 CCA students from both the Masters of Architecture and Bachelor of Architecture Program. A huge impetus behind the CAM studio as a whole, is questioning what happens when architects become innovators of their own technological tools rather than mere users of prepackaged CAD/CAM suites and fabrication machines designed by engineers. The studio investigates the kind of creative potential Architects and designers have in developing their own machines, in order to unlock new aesthetics and forms. This process allows for speculation on a broader sense, to the sociocultural ideas that may arise from the architecture that will be fabricated by these machines.

The studio initially started from material research and simple end effector design explorations, which was refined through an iterative process to a more reliable machine and predictable material, which eventually is used for extruding from the end effector on the 3D Printer. While the 3D printer itself was based on a prebuilt CNC kit which was modified to accommodate a deeper Z depth and larger X, Y dimensions. The class was required to understand G-code to operate the machine. Thankfully we had the guidance of our brilliant professors, Jason and Michael, to help us during this studio. Yet it was during printing sessions where understanding how to troubleshoot issues on the spot during the printing process was when we learned the most. However, this simple description doesn’t truly explain the whole story of the studio. The goal of this instructables is to guide you in learning more about the processes we used, our material studies, and end effector design; as well as letting you benefit from our failures and successes. Should you take interest in this project, we hope this guide will provide a better understanding.

Students of CAM 2015: Arash K. Sedaghatkamal, Armughan A. Faruqi, Chien Lien (Skye) Pan, Eleuterio (Terry) Alfaro, Eva Y. Lai, Franca Martinez Ferro, Gloria Asaba Kiiza, Joseph K. Chang, Kyle L. Yamada, Mrnalini Mills-Raghavan, Samuel D. Sellery, Sitou K. Akolly, Wut Y. Htwe.

Step 1: Material Process

As mentioned in the introduction, the starting of the studio began with research into various material strategies. We had a selection which varied from organic materials, sands, silicone, plastics, clay, cements, sugars, woods, and salts. This was intended to create a new material that is both cheap and easy to create from locally attainable resources and be able to use it successfully as a means to later extrude with the end effector and create 3D printed forms. Starting as individual research, then grouping together and merging the material research, lead to many interesting opportunities and potential candidates for being successful as a 3D printed material. These included a cement/mortar based material and a soil/organic based material. The rationale behind these two material choices were driven by architectural considerations including structural and performative aspects. The cement based material became the candidate for structural purposes, and the bio material as the candidate for performative functions.

The concrete material research initially was spearheaded by Skye Pan, Kyle Yamada, and Armughan Faruqi. Challenges that the cement/mortar mix based materials had, was to understand how to take a hydraulic based chemical reaction and slow its process down. The purposes of this was to allow the material remain a viscous fluid capable of supporting its own mass, as well as becoming structurally stable to compression and some tensile forces. This criteria was crucial because of the end effector research that was also taking place in parallel with the material research. The concrete team had to be in touch with the mechanical and pneumatic end effector based teams (to be discussed in depth in the Machines segment), because they both needed to understand the limits of each other’s product or machine, to be able to work to each other's strengths and simultaneously understand how to overcome challenges in the system to achieve optimal results.

For the biomaterial research, which was initially taken on by Mrnalini Mills-Raghavan and Joseph Chang. This material’s criteria was to figure out how to utilize it from a performative aspect, such as supporting plant life that can provide food or oxygenating the air or for the removal of silt, and pollution from surface runoff water, similar to Bioswale. This biomaterial was initially based on a mixture of chia seeds, sugar water, ground up chick peas, and agar. However, in order to keep in line with the goal of a cheap and affordable materials we switched to creating a soil based compound that was composed of hay, some flour and sodium methyl cellulose; which is a compound commonly found in laboratory petri dishes for growing bacterial cultures, as well as a medium used in toothpaste. Challenges that the biomaterial team faced were similar to that of the cement team, in that the creation of a material that could support its own weight, as well as being able to support some form of plant life. Plant life that was experimented with ranged from chia seeds, moss, and mushrooms. As with the cement team the bio-material needed to also communicate with the end effector development to understand the nuances of the machine and vice versa.

Eventually the material that was slightly more focused on was the cementious compound that was developed, however the ideas and possibilities of the bio-material was not forgotten and was still something that we considered how it could be implemented from a theoretical standpoint. The students that eventually took lead on the material research was Sitou Akolly and Skye Pan.

Step 2: Mixing Material


Weighing Raw Material

Powder based material must be weighed. This is because powdery materials if measured in volume can vary greatly due to the amount of air that can get between the particles. 1 Cup of aerated powder versus the same 1Cup of compacted material can weigh a significant difference.

Strain Powder

Powdery material must be strained or sifted into a mixing bucket to remove clumps to reduce the chance of dry clumps occurring when mixing the material with water later in the process.

Mix Dry Materials Together

Mix weighed dry materials into an even heterogeneous mixture. This can be done by using a corded drill with a mixing attachment to evenly mix the material, However is recommended to do this by hand in small batches or by using a tumbling system.

Mix Dry Material with Liquid

Incorporate the dry material into the liquid. Making sure to mix at a consistent rate allowing for the dry material to absorb water and becoming evenly incorporated. This process must be done with at least two people. One to assist in pouring the dry material into the water and another person mixing the material with the corded drill with the mixing bit.

Add loose Fibers

For the materials that call for the addition of fibers, it is to be added to the mix during the wet mix process. Continue mixing until all of the fibers are incorporated evenly.

Step 3: Concrete Mixes

Nylon Mortar

  • Portland Cement : 2250g
  • Type-S Mortar: 7890g
  • Rapid-Set Mortar: 7350g
  • Nylon Fiber: 8g
  • Water: 3600g

Colored Polymer Concrete

  • White Portland Cement : 2140g
  • White Portland Cement-Sand mix (1:2): 6430g
  • Concrete Pigment (Buff): 30g
  • Nylon Fiber: 6g
  • Poly-Pavement: 500g
Water: 1600g

White Polymer Concrete

  • White Portland Cement : 2140g
  • White Portland Cement-Sand mix (1:2): 6430g
  • Nylon Fiber: 6g
  • Poly-Pavement: 500g
Water: 1600g

Step 4: Software Process

During this studio the understanding of software and how it works to communicate with the machine was important, however what was more crucial was to understand how the forms we would create in a digital environment behave when physically created with the 3D printer that was built. The software team initially was comprised of 4 students, Sitou Akolly, Franca Martinez Ferro, Terry Alfaro, and Wut Htwe. The students initial task were to create various forms ranging from wall like structures to domes, or columns. The forms all had to be generated using the Rhinoceros plugin Grasshopper. As they progressed in the translation from a form to a digital code base using G-Code that could be read by the 3D printer. The tests prior to using the actual material were done with pen tests on a large sheet of paper. The purpose behind these tests were to help us understand the behavior of the machine and how it was moving. For example, if we wanted to have a smooth curved path, the code needed to have sufficient data points when approximating curves. Otherwise, if the curve only had 3-4 points the machine would turn it into something that would be more faceted and less curve like. After the pen tests were complete and the software team and class confirmed and verified that the paths that were created were what we wanted to print the process began in mixing the material to be printed.

Challenges the software team faced were mostly from the materials limits. Factors like having a less vicious material that wouldn’t be able to support itself as the extrusion got taller due to the effects of gravity on the material. Or a more viscous material that can support itself and also allow for offsets over a certain distance or height without support material without the material setting up. We eventually found that the method for achieving the best results currently is to print 3-4 layers at a time. By doing so the material was given a chance to set up and harden to allow the next layers of material to be able to be extruded on top. Also, during our explorations on manipulating the machine we realized that how slow or fast the machine moved determined the bead size that was extruded. A slow machine speed would allow for thicker beads of material to be extruded. A faster machine speed would allow for thinner beads of material to be extruded. As the studio progressed, the students who took the lead on software eventually was Kyle Yamada, and Mrnalini Mills Raghavan.

Some technical aspects of the software operations. The G-code as mentioned was generated using a grasshopper definition that we’ve attached in this Instructables. It has been thoroughly annotated and features the core structure required to be able to build the Contour Habitats artifact. The G-code was sent to the Tiny G micro controller using a Serial Port Terminal software called CoolTerm. The settings for which can be found at our website.

For the end effector, as the development progressed, it became apparent that the speed of the auger is something that needed to be controlled through software. The original intent, was to have the stepper motor for the end effector to be connected to the Tiny G. However, there were issues with coding through Grasshopper that we weren’t able to resolve. So to circumvent this issue we resorted to using an Arduino and a Adafruit Motor controller for the control of the End Effector’s Auger speed. See Arduino section to see and understand how the code works to control the stepper motor.

Step 5: Arduino for Mini End Effector

The software used to control the mini end effector’s speed was written in Processing which is the default language for programming an Arduino and Adafruit Motor Controller. In addition to the libraries you can download from you must also download the library for the Adafruit motor controller.
This is the motor shield we utilized with the Arduino

Step 6: Grasshopper

The software used to control the gantry’s Tiny G motor controller is called Grasshopper. It’s a parametric modeling tool that is a plugin for Rhinoceros and only available on Windows. A major feature that the script needs to have is it needs to have a path that gradually ascends to each next layer, rather than abruptly ascending. This is due to the accumulation of material that can occur when the end effector is running. However, if you are able to modify the end effector design or connect the end effector directly to the Tiny G for operation the need to gradually ascend isn’t as critical, since the accumulation issue won’t happen.

Step 7: Machine Process

The process for the machines followed a similar initial design process. At the beginning of the studio everyone quickly prototyped various machine types ranging from mechanical rack and pinion actuators, auger based machines to machines that are pneumatically powered. The two machines that we saw the most potential after this initial round of testing was a auger based system as well as a pneumatic piston. There were two teams of two students each looking into one of the two options. Mechanical end effector, Arash Sedaghatkamal and Gloria Asaba The penumatic end effector was led by Joseph Chang and Sam Sellery. As they began creating and designing an end effector that could be mounted onto the gantry. How much weight with and without material can it handle? How large will it physically be? How large is the nozzle diameter? How fast is the material flow rate? Can it support continuous material deposition? If not, how does the hopper system work? These were the kinds of questions that were being asked so that we could begin to design and create machines that would meet these criteria.

During the design process the mechanical end effector manifested into an auger based system that would use the auger to push material at a controlled rate. Initially the system used a stepper motor that was coupled to the auger and it was quickly realized that the stepper by itself did not have the sufficient torque to be able to overcome the weight and friction the material introduced into the system. This version of the end effector did have a desirable feature which was that i could be continuously fed material through a side tube. However, the machine had to be detached from the gantry after every printing session. There was no way to throughly clean the end effector on the printer itself. So a initial bracket system was designed that was laser cut out of 1/4" acrylic.

For the pneumatic end effector, originally its design was a piston based system where an actuator would push a plunger down into a tube of material that would then be able to move thicker material through a tube to a nozzle. However, the design was changed to a pneumatic air based system that would push the material with a custom 3D printed plunger. During material trails it showed promise and was able to extrude the more viscous bio-material. However it broke after an end cap flew off from undergoing too much pressure. The reason for changing to a direct air pump system rather than an actuator pump system was to reduce the amount of parts needed to be able to push the material. Another difference that the pneumatic system had was that it was not able to be continuously fed material, which was deemed as an undesirable feature since the initial goal was to be able to print continuously.

Step 8: Gantry

The Gantry is a modified Shapeoko 1 that is expanded to accommodate for a deeper Z, longer Y and X axis. The dimension of the machine built is 100cm x 180cm x 50cm (w*l*h). It’s controlled by a Tiny G micro controller that operates through G-Code. The G-Code as mentioned is generated with the Grasshopper Definition. The parts required for the Gantry can be purchased here under Machine Components.

Step 9: End Effector

From the initial end effector design, it was then further refined and iterated by Joseph Chang, Wut Htwe, and Terry Alfaro. This new end effector improved on the original by miniaturizing the overall size since it was apparent that the larger version was too heavy to move on the gantry at times and when being removed for cleaning it became very dangerous to remove since it was so heavy. It also improved the bracket system by integrating the bracket into the Maker Slide’s grooves. Utilizing this helped also reduce the overall size and increased the ease in servicing the end effector when a print completed. The nozzle design also became a lot more customizable since we were able to fabricate different nozzles by simply adjusting a 3D Rhino file as well as being able to switch out nozzles to achieve different bead sizes.

The stepper motor used is a NEMA17 with a planetary gearbox with a 1:27 reduction. The reason for increasing the torque is so that we could be able to reliably move and push the viscous material being poured through the machine.

The motor assembly is designed to hold the motor, as well as a cooling fan for the motor. The cooling fan that needs to be connected to a power supply. The assembly also has an integrated bracket system which allowed for the end effector to be removed and serviced after being used on the gantry. It’s designed to be able to slide onto Maker Slide aluminum extrusion that is sold by Inventables. The motor assembly also connects to the ABS ‘Y joint’ pipe. There are two set screws that help hold the pipe to the motor assembly

The hopper for the end effector is a simple gravity fed tube system that allows for material to be manually fed into the machine. It was built out of some 2” ABS pipe and a 10” wide funnel. It was connected to the ABS Y Joint with a 2" ABS elbow joint.

The Auger used is a simple 2.75” diameter soil auger. It was modified to be able to be connected to the stepper motor with a traditional steel coupler.

The Nozzle for the end effector is a custom designed 3D printed part that has an adapter for securing the nozzle to the ABS pipe with set screws to prevent it from detaching. It also has the integrated bracket for sliding on to the Maker Slide. Its purpose is to prevent the end effector from moving from side to side.

Step 10: Printing Process

Step 01. Safety in numbers - A Team of Three

The machine must be operated by at least 3 people at all times (One person to monitor the computer and send G-Code; the other person is closely monitoring the machine’s operation and a third to pour material). All people should be wearing protective goggles and gloves if necessary. All should understand what the machine is about to do and understand when something is going wrong. Establish your team first, then move on to the next step.

Step 02. Take Charge

Let everyone around you know that you are about to use the machine. This also includes verifying with your teammates that the material and the code is ready to operate or to be mixed. When you are in charge of the machine you must keep your eye on the machine’s operation, but more importantly, you must ensure that nobody “crosses the yellow CAUTION line” with their hands, cameras, or by leaning in. The yellow line must not be crossed while the machine is operating. You should also use the cheap yellow caution tape to tie-off an area that might not be safe.

Step 03. Physical Obstruction Check

Treat the machine with respect and always walk around the machine and inspect it visually before operating it. Look for anything that might be obstructing the machine. Are the tracks free and clear? Is anything crooked or seems strange? Are the Emergency Stops dis-engaged, visible and ready to use? Are the limit switches engaged and or in working order? After you have plugged in and turned it on you should double check that the micro-controller fan is on and that its power light is on too.

Step 04. Manual Collision Check

Before homing the machine make sure that your machine’s custom end-effector does not collide with the limits of the machine. You can move the gantry by hand in the positive and negative X, Y, Z directions to ensure no collisions will take place. If you realize there may be a collision you should manually adjust the limit switches with an M5 screw driver. The limit switches will stop the machine from crashing into itself!

Important Note: If you change the location of the limit switches then it is critical that you update you digital model!

Step 05. Digital Model Obstruction Check and G-Code Validation

Does the digital model match the size and orientation of the physical machine and location of its limit switches? Are all X and Y G-Code values positive (greater than or equal to zero)? Are all Z G-Code values negative (less than or equal to zero)? When you scan down through the G-Code – does it seem logical? Where will your print start and end?

Tip: In Grasshopper – use the Bounding Box (BBox) command to generate a bounding box around your final intended toolpath / 3d piped extrusions. Does the size of this bounding box exceed the limits of the machine?

Step 06. Drivers and Software

Please see this short blog post that covers installing the FTDI Drivers to communicate with the TinyG microcontroller; installing and configuring CoolTerm to send G-Code to the TinyG over your serial post (USB). You need to do this before moving forward!!

Tip: Open CoolTerm first, then plug the TinyG’s USB cable into your laptop. CoolTerm will identify the COM Port assigned to the TinyG in the lower left of the window. You then manually press “Connect” to initiate communication and begin sending G-Code to the machine!

Step 07. G-Code + Homing the Machine

A great TinyG G-code cheat sheet is here. Always start with the G28.2 command to send the machine’s end effector to its origin point. Homing sends the machine to it’s Z Min, X Min and Y Min locations (in that order) by triggering the limit switches. You should always be ready to hit the Emergency Stop button during this process. You should also manually double check that your custom end-effector will not collide with anything prior to activating the machine as mentioned in Step 4. To start the homing process you just cut and paste G28.2 code into the CoolTerm terminal. Your personal reminder notes (in brackets) do not get sent to the micro-controller.

e.g. G28.2 X0 Y0 Z0 (Home XYZ axis)

Note: The machine’s firmware has been coded to offset the home 2cm from the X Min and Y Min limit switches, and 1cm above the Z Min Switch. This ensures that the gantry has backed-off the limit switches so we can begin operation.

Method for Homing just one axis: Sometimes you may want to home just one or two at a time.

For Example:

G28.2 X0 (Home just the X axis)

G28.2 X0 Y0 (Home both the X and Y axis)

G28.2 Z0 (Home just the Z axis)

Step 08. Setting Absolute Origin at current “homed” location:

Next we need to tell the micro-controller that its current position is 0,0,0. Type this into the terminal and hit “Enter”.

G28.3 X0 Y0 Z0 (Set Absolute Zero to current location)

Now – if everything was done correctly - the current position of the end-effector is 0,0,0 and this should now match up with 0,0,0 in your Rhino / Grasshopper model space.

Step 09. Rhino / Grasshopper Units

For now the X and Y axis G-Code should be in CM (centimeters), while the Z axis is using millimeters(mm). The X and Y units should always be positive, while the Z units will be negative numbers.

Step 10. Preparing the Printbed

Do not print directly onto the larger provided print bed! I recommend that each team use a ¼” or 1/2“ piece of plywood wrapped in plastic as your print bed. Please feel free to experiment with heating the area around the print to speed up drying times.

Step 11. G1 Traverse with Feedrate Commands

For now we’ll be sending our end-effector from point-to-point-to-point using XYZ coordinates. A G1 command is the most common command in G-Code.

Here is an example that will move the gantry orthogonally:

G28.2 X0 Y0 Z0 (Home XYZ axis)

G28.3 X0 Y0 Z0 (Set Absolute Zero to current location)

G1 X10 Y0 Z0 F100 (Go straight to X10 at a speed of 100)

G1 X0 Y10 Z0 F200 (Go straight across to Y10 at a speed of 200)

G1 X0 Y0 Z-100 F100 (Go up 1cm at a speed of 100)

G1 X0 Y0 Z0 F50 (Cut diagonally across back to 0,0,0 at a slow speed of 50)

Here is an example that will move the gantry diagonally / directly to the point:

G28.2 X0 Y0 Z0 (Home XYZ axis)

G28.3 X0 Y0 Z0 (Set Absolute Zero to current location)

G1 X10 Y10 Z-100 F100 (Go to X10, Y10 and Z-100 at a speed of 100)

G1 X0 Y0 Z0 F50 (Cut diagonally across back to 0,0,0 at a slow speed of 50)

Step 12. Calibrating the Feedrate (F)

It takes a lot of trial and error to set the correct Feedrate. Each unique material and extrusion (augur) speed will demand its own unique Feedrate. Starting with a Feedrate of 200 (F200) is a good start point. I recommend that you print a few 20cm lines – back and forth on top of itself at least 4 times – to figure this out. You can also vary the Feedrate from the start to the finish. A slow Feedrate will release more material, while a faster Feedrate will release less material. For example almost all structures found in plants, animals and most (good) buildings vary the size and thickness of their components depending on their compressive, tensile or bending performance needs.

Step 13. Match the Z step height in Grasshopper with the extruded material height

Similar to calibrating the Feedrate, it takes a lot of trial and error to find the correct Z step height of your extrusions (this is essentially the height between layers). I suggest running the Feedrate test and Z Step height test at the same time. To establish the Z step layer height measure the height of the 4 layers you printed and divide that number by 4 to get your step size. There are more sophisticated ways to do this but this should be good enough for our low resolution architectural scale 3d prints.

Hint: To complicate matters further, most materials will shrink by a small percentage (sometimes as much as 5-10%!) as they dry (lose water). This can be simulated to a certain degree by using the Scale component in Grasshopper. Each material will shrink at a unique rate and %. Keep this in mind when you are doing multi-material prints, or you need your 3d print to interface or connect with other materials, objects or fasteners.

Step 14. Pause all motion for a few seconds

You may want to pause (also called “Dwell”) the machine to turn on an end-effector (extruder) or make last minute adjustments. The G4 commands makes this possible.

Here is an example of a 20 second pause in the middle of a move:

G28.2 X0 Y0 Z0 (Home XYZ axis)

G28.3 X0 Y0 Z0 (Set Absolute Zero to current location)

G1 X15 Y0 Z0 F150 (Go straight to X15 at a speed of 150)

G4 P20 (Pause / dwell the gantry for 20 seconds)

G1 X0 Y0 Z0 F50 (Return home to 0,0,0)

Step 15. Thinking ahead to the end of a print

When you are done your print you’ll want to move the extruder head away from your printed artifact in a rapid and controlled manner. Your last move might be a smooth rapid traverse line 4-5 inches away from your object. A lot of times you’ll drawing a tangent line up and away from your object – to open space - with 2X your current Feedrate. This final move will also make it easy to identify and turn off your attached extruder.

Tip: Your final move should NOT be to send the machines diagonally back to 0,0,0, or to Home the machine! Otherwise the machine could potentially collide with the print.

Step 16. Shared Clean-up

This is a group project. Everyone must help cleanup after a 3d print. Nothing should ever be unnecessarily left on the print bed, on the common tables, or in the circulation spaces. The space should always be cleaned and ready to continue printing on.

Step 11: Contour Habitats

Group members: Terry Alfaro, Eva Lai, Joseph Chang, Kyle Yamada, Mrnalini Mills Raghavan

Step 12: Adaptive Aggregate Housing

Group members: Gloria Asaba, Skye Pan, Wut Htwe

Step 13: Adaptive Screen

Group members: Sitou Akolly, Armughan Faruqi, Franca Martinez Ferro, Arash Sedaghatkamal

Arduino All The Things! Contest

Second Prize in the
Arduino All The Things! Contest