The CNC Bubble Iris: a Computer Controlled Giant Bubble Machine




Introduction: The CNC Bubble Iris: a Computer Controlled Giant Bubble Machine

About: I'm a guy with diverse interests in San Francisco, CA. I enjoy solving problems, inventing and making things, exploring the unknown, making music, and learning new skills. Learn more about me at gordonkirk…

The CNC bubble iris makes big soap bubbles in a new way, by weaving soapy strings together and apart with a motorized iris. It was designed to allow large soap bubbles to be made automatically with great repeatability, opening up exciting new possibilities for art, science, and engineering with on-demand soap bubbles of controlled size and timing.

People respond to giant bubbles in wonderful ways. Swirling with colors, shiny and floating, bubbles reveal a microcosm of the surrounding world reflected on their surfaces. When larger bubbles fold and twist, buffeted by eddies, they distort in phenomenally interesting ways too, and can be thought of as airborn, irridescent, morphing fun-house mirrors. People are delighted and inspired by giant bubbles like nothing else. As light and insubstantial as they may be, materially, large soap bubbles carry an awesome payload of inspiration, beauty, and wonder.

In the following instructable, I share my experiences proceeding from the initial inspiration of this invention through a handful of early prototypes and mechanisms, culminating in the version shown here.

Step 1: Why Go to the Trouble?

You might be wondering why I built such elaborate apparatus, when a rope-loop held up with dowels can make big bubbles much more simply? The construction of this instrument is part of several ambitious projects currently in progress, which uniquely benefit from the consistency, automation, or liquid handling of this instrument.

  • Portraiture: As a photographer, I'm fascinated with sincere and unguarded facial expressions of curiosity and wonder, and giant bubbles bring these out readily. I have begun working on a series of portraits in which my subjects are seen in the moment just before a very large bubble meets their face. Not only are the expressions of people in this circumstance extremely interesting, candid, and generally delighted, but the reflections of their expressions as seen in the bubble show them from a second and very interesting perspective. The ability to create a very large bubble in a controlled position, such as this instrument permits, is a useful tool for this work.
  • Sculpted Fluid Membrane Photographs: I'm fascinated with the idea of deliberately shaping free-floating large single bubbles, by acting on the membrane of a bubble with influences like air and water jets, electrostatic forces, and high intensity electric discharges. This genre is completely unexplored; it does not exist yet. I've done some work towards this already, such as these photos I took of leaves, flowers and water drops being struck by lightning. The ability to produce a large bubble in repeatable position and with known timing allows me to iterate and tweak the influences acting on the membrane. Safety: Also, high voltage and high energy systems are very dangerous, and soap bubble juice is as conductive as saltwater. To blow bubbles oneself in the presence of high voltage would invite electrocution. This machine can make large bubbles when and where I want, remotely.
  • Bubbes-on-Bikes group ride: I enjoy organizing groups of people to ride bicycles and blow bubbles while in motion. A phallanx of bicycles in motion with a wake of such eddying irridescent pearls is a sight to behold! Blowing bubbles from a bicycle in motion is an obvious pairing since the wind past the bicycle means you only need hold the wand up to issue a stream of bubbles. I was inspired to make this device which would allow safe use on a bicycle, without removing hands from handlebars, and which would also be immune to sloshing or splashing problems.
  • Soap Film Condenser Microphone: I'm pretty sure that I can build a condenser microphone out of a soap membrane by placing an isolated conductive mesh parallel the soap film. It could be made very large, and thus sensitive. It probably would not have the highest fidelity, but it would be extremely interesting, and have DC sensitivity down to ridiculously low frequencies bordering on circadian barometric pressure changes. It would also afford the opportunity to "blow-out" your own mic in live performance, e.g. flip the mic around and blow bubbles with what used to be, and will shortly again be, your mic. It is a microphone with a regeneratable diaphragm, and therefore be useful in sensing sound levels which would be potentially destructive to another mic. Lastly, I'm curious how the currents of a liquid membrane would color the sound and self noise of such a sensor.
  • 3D printing on the wind: With the ability to release a bubble at very controlled times, a novel possibility is born: 3D printing patterns of freefloating bubbles on the wind. A 2d array of such mechanisms will face the wind and the third dimension will be controlled by the time at which bubbles are released. Patterns of free-floating bubbles will move together downwind. Of special interest will be the metamorphosis of such patterns as divergent air currents decorrelate the floating pattern.
  • The artist residency at Autodesk and Instructables is a huge honor and inspiration to reach for extremes. Given access to one of the most capable and well-equipped workshops in the world, what is the most awesome thing you would build in a few short months? This is my answer.

Design Objectives:

  • make individual bubbles - including very big bubbles - on cue
  • operable from a bicycle without splashing/spillage: doesn't require a standing pool of liquid
  • adapt to variable wind speed: can work (release bubbles) in a range of wind-speeds
  • release or "pinch off" bubbles with accurate timing.
  • can be remotely controlled, so you can be a safe distance when using bubbles around high voltage.
  • look awesome.

Step 2: Inspirations for the Cable Iris

The bubble iris idea is a synthesis of two mechanical inspirations: the physicist Maarten Rutger's method of making large bubbles by pulling apart parallel wetted cables, and the iris end-effector on the space shuttle and International Space Station's robotic arm, the "Canadarm", to grasp satellites and spacecraft.

The Space Shuttle and International Space Station use a robot arm called the Remote Manipulator System, or Canadarm, to grasp satellites and spacecraft. On the end of this robot arm is a gripping iris mechanism similar to a camera's iris aperture but made with flexible cables, useful for grappling. Here is a video of the iris end effector of the canadarm. I came across a science museum website describing how a model of this iris could be made with disposable cups, tape, and string, and built the model out of curiosity. The black and white illustrations on this step come from the above linked tutorial. Later, when I came across Maarten Rutger's apparatus to make large soap films by wetting parallel cables, then pulling them apart, the germ of the CNC bubble iris idea formed.

Maarten Rutgers is a physicist who has created giant soap membranes by wetting parallel cables and then pulling them apart with auxiliary strings. Here is a paper describing the apparatus he created in the July 2001 Review of Scientific Instruments (Vol. 72 no. 7). By having a continuous flow of soap solution down the strings under gravity, he was able to create 20 meter tall and 4 meter wide (65 foot by 13 foot) soap membranes! Currently the best documentation of such a mechanism online, to my knowledge, is at the kindred engineer/bubble enthusiast Paul Carlisle's site, from which the colorful soap film photo above is shared with permission.

Together, these elements of making bubbles by pulling apart wetted strings, and the use of an iris to pull apart the strings, are the essential elements of creating large bubbles under computer control.

Wooden 1 hour prototype:

To the best of my research, nobody has ever used an iris mechanism like this to create or stretch soap films.

Step 3: How It Works

The principle of operation of a cable iris is to form an adjustable sized opening in the weave of three or more cables which are wetted with soap bubble juice. Above are shown 3-cable and 5-cable irises. By fully closing the opening, a soap film is begun, which can then be stretched open by moving the cables farther apart. In steady wind, the bubble will spontaneously inflate when the membrane reaches a certain diameter. In still air, a source of moving air - a fan, compressed air, a person's lungs, or motion of the iris itself through the air - can be used to inflate the membrane. The nice thing about this mechanism is that it can also pinch off a bubble before it would spontaneously tear free. This means that bubbles can be released on-cue in as little time as it takes the iris to close.

The most interesting and symmetric mechanism to cause cables to move nearer or farther apart is an iris mechanism: three or more cables are stretched between two nested rings that can rotate relative each other. As the rings change angle relative each other, each cable's length and distance from the center point changes. The only other critical mechanical elements needed are a means of tensioning the cables as the length of the chord they trace changes, and a means of wetting the cables.

Functional Requirements to make a Cable Iris

  1. Some way of moving or rotating one set of cable endpoints relative the other set of cable endpoints. This is accomplished by a pivot, axle, or other rotating bearing support like a ring or slew bearing. Or, in the previous example, even nested styrofoam cups.
  2. Some means of taking up the slack in cables and maintaining some tension as the attachment points of cables move closer and farther during the above motion. This makes sure that the cables lay in the same plane, in contact with each other.
  3. some means of wetting the cables
  4. optional: some means of collecting dripped juice (to avoid making a mess below).
  5. optional: some means of inflating a bubble: ambient air, a supplemental fan, or moving the iris through the air.

Here's an early primitive prototype. When I was selected to be an artist in residence at Pier 9, I elected to use their really nice CNC equipment to make a much higher quality, better engineered version.

Step 4: Experimenting With Various Mechanisms for Iris Rotation

This iris mechanism requires some means of rotating half of the cable attachment points. I experimented with numerous mechanisms as I clarified my ideas of how to build this. Ultimately I settled on a slew bearing design in which the rotating "rotor" ring was supported by roller wheels attached to the fixed outer "stator" ring. The roughest prototype simply used plywood pivoting around a screw in a hole - see video below. The first automated functioning prototype used a scavenged head tube and steering column from a discarded bicycle. (This may be the most accessible avenue for a hobbyist following along with this project.) During my residency at Autodesk's Pier 9 facility, I leveraged the tooling there: top notch 3D printers, a waterjet, and CNC mill.

To make the first functional cable iris bubble machine out of a bicycle head tube, I cut and ground off the rest of the frame tubes from the steering tube, ground off the paint, and welded on three metal wands to both the outer and inner tubes.

First prototype: testing the weaving cable iris with a simple screw-pivot

The second prototype used a bicycle's steering-column bearing, cut out of a scrapped bicycle.

this worked well enough to proceed to make the first automated version, shown here outside my office in Pittsburgh:

When I got to Pier 9, I decided that I would use the excellent machining resources there to make an improved iris using large ring or slew bearing, ie. a pair of nested, large diameter, concentric rings. This would allow the soap film to be created in the center of the rings with no impediment to a direct view through the mesh.

I went through several concepts for the fabrication of such ring bearings:

  • making a deep-V-groove bearing from scratch (cut on the 5-axis waterjet),
  • buying a cheap lazy-susan slew bearing,
  • using friction slides or bushings
  • using roller wheels to support the rotating inner ring. Of these approaches, I chose roller wheels, actually stainless steel skateboard bearings, because they are cheap, modular, easy to replace, and easy to make.

Of these options, roller wheel bearings are readily available, inexpensive, strong, and require a minimum of additional components, mainly just a length of shaft and 3D printed blocks to support the shaft. "608" ball bearings are perhaps the most mass-produced bearings commonly available and can be sourced, even in stainless steel, for less than $2 each in packs of 8 on Amazon and Ebay. These cheap bearings sometimes are not as "stainless" as advertised, but the low cost and ease of replacing them make up for some made-in-china-itis.

Step 5: Design Roller Bearings to Support the Inner Ring - Radial Bearing Evolution

The rotation of concentric rings dominates the functionality of the iris, so I elected to design the bearing supports for that rotation, first. Illustrated above are the radial bearings, which keep the rings coaxial. (The "axial" bearing assemblies constrain the rings to be coplanar. )

After reviewing many options to support the rotating ring, I settled on the inexpensive and strong method of using stainless steel skateboard wheel bearings. These bearings, termed "608" bearings, can be bought for less than $2 each, in packs of 8 on Ebay. and are 7mm wide, have an 8mm inner diameter, and 22mm outer diameter.

These bearing fit perfectly onto 8mm stainless steel shaft, which can be bought for about $7/ft from The shaft can be cut easily with a hacksaw or bandsaw.

To support the bearing shafts, I 3D printed support blocks to hold the 8mm shaft. These were printed on Stratasys Objet Connex 3D printers which make very dense and strong parts with very high accuracy, and most of the parts shown here took less than 2 hours to print. After printing, I used an 8mm reamer to clean the bore of the hole that the shaft would be inserted into, since I discovered that the plastic is brittle, and forcing the shaft through could otherwise cause expansion which would crack the part. The axial bearings shown here had sufficient friction after insertion that no additional shaft restraint was necessary to hold them in place.

After designing the bearing support block and the holes through which it would bolt to the aluminum ring, I used Inventor's ability to edit parts in an assembly, and the "project geometry" feature, to transfer the bolt pattern from the bearing block onto the aluminum ring. I also transferred the shape of the raised part of the bearing block, and made a pocket in the aluminum ring so that the two parts would fit together perfectly. I offset the pocket about 0.005" larger in all directions so that I'd have a little leeway, since waterjet cutting often is slightly over or under size.

I test cut a small portion of the ring with the bolt pattern and cutout for the bearing block, to check the fit (shown) It fit like a glove. In later iterations of design I integrated the shaft supports for both axial and radial bearing rollers into a single assembly of 3D printed bearing block

  • I added a 2mm thick tread of delrin to the rolling surface of each radial bearing (a 26mm OD, 21.9mm ID, 7mm wide ring of delrin) which would press-fit over the bearings and
    • reduce noise,
    • provide a failsafe slippery surface in case the bearing seized up, and
    • electrically isolated the stainless bearings from the aluminum ring, to eliminate galvanic corrosion.
  • I made the bearing block in halves which clamped together around the bearing, on either side of the ring.

Step 6: Design Roller Bearings to Support the Inner Ring - Axial Bearings

The rotating ring also needed to be supported on it's flat faces, front and rear, to keep it coplanar with the housing or stator ring. I used three pairs of roller wheels, on each side of the ring. Initial designs had the axial and radial bearings as distinct mechanisms on the frame. The final revision unified axial and radial bearing support blocks.

The design of the axial bearings was more complex than the design of the radial bearings because the bearing needs to be cantilevered off the side of the fixed ring. The bearing's support shaft can only then be supported on one end, and so the bearing might slide off the other end of the shaft. To keep the bearing from sliding off the other end of the shaft, I used a retaining clip. Retaining clips require a round groove for the retaining clip to grip. . I made this groove with an improvised grinding lathe, made with a handheld drill and a dremel tool with a thin cutoff wheel.

The dremel tool's cutoff wheel is just the right width - about 1.5 mm - for the required groove, but would by itself be difficult to make a smooth and uniform groove with. I improvised a way to smoothly rotate the shaft while cutting the groove: I used a cordless drill to hold the shaft and turn it slowly, while the dremel cutting wheel ground a thin groove. This made excellent thin uniform grooves and only took about 1 or 2 minutes per groove. The retaining clips popped right in, and were easily removed as well in the few instances I needed to replace a bearing.

Step 7: Cable Tensioning Methods - Elastic Cord, Leaf Springs, Compound Bows, and Torsion Spring Spools.

The iris cables need to be held in tension as their lengths change while the rings rotate. For a 3-cable iris, the amount of cable length change between fully-closed and fully-opened positions is about 14% of the maximum aperture diameter. Using more facets require greater fractions of the cable length be taken up, since more highly faceted polygons have shorter sides, relative to their diameter.

I considered four ways to tension the cables and take up slack: elastic cord, leaf springs (cut by a waterjet out of a sheet of spring steel) , leaf springs with a compound pulleys like a compound bow (to reduce spring deflection and extent beyond the frame), pendant weights. and stainless steel torsion springs. tip: If making your own iris, pendant weights or elastic are probably the most simple methods of keeping the tension on the cables.

I favored making 3D printed pulleys that would be twisted by stainless steel springs because of the small size.

Step 8: Making the Torsion-pulleys to Keep the Strings Taut

I was really enjoying the speed with which I could design and fabricate rotating bearing supports with skate bearings, 8mm shaft, and 3D printed shaft supports, as seen elsewhere in this project as the rollers which support the rotating ring. So I decided to evaluate a more compact method of tensioning the cables: winding up the excess on a pulley that was torqued by a spring. A pulley is mounted on a shaft, which sits in the center of two adjacent skate bearings. A torsion spring sits between the pulley and the bearings. One arm of the spring is captive in the pulley, the other arm is captive in the mounting block. Redundant grooves allow the position at which the spring comes to rest to be adjusted in steps.

This method of winding the strings up on a pulley is compact, and with the right spring constant, and pulley diameter, any desired tension can be achieved in the closed position. However, there are a few downsides I should note as well:

  • Potential for cable coming off of pulley. I addressed this by adding a hard-stop (with limit switch sensor) to prevent the iris from opening too far, and making the cable grooves in the iris deep enough to have the entire cable thickness seated in the pulley.
  • Changing tension on cables in open/closed positions of iris. The spring force is approximately proportional to the amount of twist on the pulley (and thus how much of the cable is taken up) and so ramps up from zero to maximum over the travel of the spring (in this case, 3/4 turn). this means that the tension changes during the opening of the iris. Tension affects the absorbency of strings: strings will either squeeze out or absorb additional juice as they are made more taut or slack, respectively. I considered making a non-round pulley, or cam, to level out tension over the whole cycle, but held off to see how the uniform pulleys would work in practice.

These pulleys cost about $6 plus 3D printing resin, each. Here's the breakdown:

$1 torsion spring.

$4 for two stainless skate bearings, "608"

$1 for 2 inches of 8mm stainless steel shaft.

3d printing resin (or filament)

The procedure to make the bearing blocks:

  1. design pulley and holder in Inventor CAD.
  2. 3D print housing / block
  3. clean 3D print, and ream holes to precise diameter
  4. cut shaft to correct length.
  5. make a groove close to one end of shaft for retaining clip, using dremel tool and hand-drill to rotate shaft.
  6. epoxy shaft to pulley, making sure no epoxy gets elsewhere on shaft
  7. hold shaft perpendicular to pulley by inserting shaft into bearings in support block, and holding pulley flush against block (and thus perpendicular to shaft).
  8. wait for epoxy to dry.
  9. remove pulley-shaft assembly, install spring and retaining screws in pulley, then assemble onto frame.
  10. install retaining clip on bottom end of shaft to prevent

Step 9: Motion Control: 100 Watt DC Servo Motor Controller for $120, or for $30+some Coding.

I elected to control the CNC bubble iris with a DC servo motor. DC servo motors are vastly higher performance than stepper motors of equivalent power consumption: faster, stronger, more accurate, and especially, able to preserve accuracy in spite of any obstructions. A DC servo motor is a DC motor that has some means of sensing it's position, particularly a quadrature optical encoder, attached to the shaft. A controller compares where it is to where it should be, and adjusts the motor's torque as necessary to bring it to the desired position, using an algorithm called "Proportional, Integral, Derivative" control, or "P.I.D. control". They are more complex to set up and control both because there are more wire connnections to be made - typically four additional wires (power, ground, channel A, channel B, connect to the encoder), and because a dedicated microprocessor needs to constantly monitor and adjust the torque to the motor, depending on it's position. I have done this previously and will publish under seperate cover a detailed procedure to build your own for about $30. ($20 for an arduino or teensy 3.1 microcontroller running an arduino script, and $10 for a LMD18200 H-bridge amplifier module , and using the open-source encoder library and PID library.) There is also a great commercial product which simplifies using DC servomotors tremendously, allowing you to talk to the drive just like you would to a stepper motor driver: with step and direction pulses. I elected to use this controller, the GeckoDrive G320X drive. After a one-time initial setup, the drive is as easy to use as any stepper motor driver.

Here's a video of it opening the bubble iris at ridiculous speed.

Smooth Acceleration and Maximum Step-Speed with the AccelStepper library

The AccelStepper library is a free open source library for arduino compatible microcontrollers to do fast calculation and timing of step sequences to achieve smooth acceleration profiles and trapezoidal speed profiles. It is useful for stepper motors, and servo motors that are commanded in discrete steps such as with the Geckodrive used here. I found that on an Arduino Uno running at 16MHz, the maximum step rate was approximately 1.2Khz. This is insufficient speed for a servomotor that, effectively, as 2048 steps per revolution (this is determined by the resolution of the optical encoder attached to the servo motor). So, with the Arduino uno, the maximum speed in this case would be about 30rpm. To increase the speed of steps issued with the accelstepper code, I upgraded to the Teensy 3.1 microcontroller, which runs at 72MHz and can be overclocked to 96MHz. I clocked the AccelStepper library producing smoothly timed step sequences up to well over 10Khz or approximately 300rpm which is more than enough speed for this application (see videos).

Step 10: Motion Transmission: a Simple, Low-cost, Cable-drive

I chose to couple the rotation of the motor to the rotation of the iris using a cable and pulley system. The cable follows a figure 8 course around the rotating iris ring, and the motor pulley.

First, I turned a pulley for the motor on the manual lathe.A set screw fixes the pulley to the shaft.

I made a groove on the rotor of the iris by sandwiching different water-jet cut rings of aluminum, all held together with frequent #4-40 machine screws.

To ensure that the cable didn't slip, I wrapped the cable twice around the motor drive pulley, and twice around the iris's rotor. The free ends of the wire rope were then anchored to the iris rotor by screw clamps. I used a spring pressing sideways on the cable, towards the interior, to take up any slack and maintain cable tension.

How to tension the cable with a spring was a puzzling challenge. I had seen fancy spring tensioning cable terminations in some old dot matrix printers, but these were always complex machined parts. I wanted something simple and quick (unlike everything else in this project, I know), and this might be the simplest of all ways to tension the cable. In nautical terminology, pulling sideways on a rope to magnify the tension along it's length is called "sweating the line". It offers a large mechanical advantage, so the system can be kept taut as a drum, and eliminate any slipping of the iris position relative to the motor position. The spring's helix can be pinned in place on a strut or screw to keep it from shifting or buckling.

One nice aspect of this design is that the spring, which is a helix, is it's own screw adjustment. The cable passes between turns of the spring, and to increase or decrease tension one need only twist the spring in the appropriate direction. In practice, friction keeps it from loosening very well. This tensioner was improved by placing a screw through the center of the spring, to keep it aligned and prevent it from buckling.

Step 11: Bubble Juice Recipe

The principal ingredients required to make giant bubbles are dish soap, water, and a lubricant such as astroglide, KY-jelly, or J-lube powder (which I prefer for the smallness of the amount required). Culinary thickeners like Guar gum and Xanthan gum also have been used to make exceptionally large bubbles.

I mix these recipes up exactly as described and have great results.

Here's the recipe I used tp make the bubbles in the video:

Following text copied from the soap bubble wiki linked above:

Mike's "Stir-&-Go"
Mike Ashe writes: This recipe which I call "Stir & Go" is a variation of Mike Miller's "Mike's Gooey Mix" found at Soap Bubble Wiki. I did a LOT of experimenting to get these amounts just right. Recipe:

1 gallon of HOT tap water

.5 gallon of COLD tap water

1.25 cups of Dawn Professional Manual Pot and Pan detergent

2 level teaspoons of Clabber Girl double acting baking powder (Other baking powder should work too)

.5 level teaspoon (1.5g) of J-Lube (see note)

Instructions: Fill bucket with 1 gallon of the hottest tap water possible. (Mark your bucket at this level for future mixes so you can fill directly from the sink) Sprinkle in the J-Lube as slowly as possible to avoid clumping while quickly stirring the water with a chopstick. (I use a coated/lacquered chopstick to keep the J-Lube from sticking and accumulating on it, you can probably use a knife or fork)Continue stirring for a minute.Add .5 gallon of cold tap water.(Mark the bucket at this level for future mixes)Pour in the Dawn and let it settle on the bottom of the bucket without stirring.Now, sprinkle in the baking powder while quickly stirring the entire solution. You may feel the solution thicken after a few stirs!Once all the baking powder on top has been mixed in, you're ready to make some awesome bubbles.Don't forget to pray for gentle and steady wind, high humidity, and no bugs! IMPORTANT NOTE: The amount of J-Lube you use may have to be adjusted. This recipe is based on full-potency J-Lube. The result will be a slightly string mix. The amount of J-Lube is about 8 times what we call the nominal minimum effective concentration (NMEC) of fresh J-Lube (see PEO). If your mix is not "stringy" (see the PEO article) at all you may need to increase the amount by 2-4 times.

Step 12: Fluid Delivery: a Small Peristaltic Pump and Copper Tube

I wanted to be able to turn on and off, and modulate, the liquid delivery to the cables, so I used a small electric pump and controlled it with a small MOSFET and one of the Teensy microcontroller's output pins, whose output could be modulated by pulse width modulation (PWM). The liquid is delivered to the uppermost cable by a rigid tube which is anchored securely to the frame with a 3D printed clamp, and bent into precise position manually. Liquid follows gravity and capillary tension to wet all the remaining strings when the iris is closed and in the "inverted Y" configuration.

The pump is not well protected against splashes of juice and so I printed a small mounting bracket and enclosure for the motor to guard against soapy splashes from getting inside.

In the version shown here, the pump draws liquid from the liquid-collection trough that surrounds the lower half of the iris. For use on a bicycle I would direct runoff from the trough to a lower collection bottle, from which the pump would pull the needed juice to wet the cables.

Step 13: Protecting the Motor From Splashes: 3D Print an Enclosure.

The optical encoder on the rear of my servo motor would not do well if any splash got into it, and I also needed some means of strain-relieving the cables connecting to the motor and encoder too. Both needs were met by making an enclosure with 3D printed ends, and a thin aluminum tube for the main length. These ends, The flange and cap, both attached to the aluminum tube with O-ring compression seals to keep out moisture. The cables connecting to the sensors and motors on the iris connected to the rear cap through a cable grip with gland seal, further guarding against liquid entry to the sensitive electronics compartment.

Step 14: Design Attachments for Ultrasonic Sensor and Fan

I wanted to add the option of fan so this could work in still air conditions, and an ultrasonic sensor to detect the presence and distance of the soap membrane. Since both of these work best from an axial position, I unified the mounting assembly for both.

First, I accurately measured the ultrasonic sensor and fan and modeled them in Inventor CAD. This allowed me to make the housings fit these items perfectly- Note the tight fit. I found some 1/4" diameter aluminum rod stock for the struts, and 3D printed clamps for that diameter.

The ultrasonic sensor I put into a housing to protect it's bare circuit board from any splashes.

Step 15: Cut the Rotating and Fixed Aluminum Rings

After the design is complete for all the parts that attach to the frame and rotating rings - the cable tensioners, ring support bearings, pump fittings, cable terminations - the design can be finalized and cut for the frame and rotating ring of the concentric iris.

I made a model of the rings based on the desired soap membrane size and minimum ring thickness needed for strength. I then made an assembly, and constrained the various attached parts to lay where I wanted them. Then I used the helpful feature of Autodesk Inventor to edit parts in assembly, and project the geometry of bolt holes and other intruding parts onto the rings. In this way, complex mating assemblies can be built up relatively simply.

The first concentric iris I made entirely using the waterjet cutter, but the edge-quality of the waterjet cut is rough, and the rolling noise of a metal roller wheel on this rough surface was undesirable. Sanding it manually worked, but since I had access to a HAAS CNC mill, I elected to finish the rings there. This also allowed me to drill and tap many holes automatically, saving several hours of work compared to doing so manually. I cut parts on the waterjet, slightly oversize, and finished them to final dimensions on the HAAS CNC mill.

To simplify the workflow of roughing a part on the waterjet and finishing it on the CNC mill, I placed registration features in the part to be cut out on the waterjet. These consisted of three 1" circular bores around the perimeter of the large ring, whose center points could be found very accurately using a Renishaw Touch Probe such as our HAAS CNC mill is equipped with. I also made a Jig plate to hold the large flat rings. Much of this process is written up in a separate instructable, CNC it however it lays.

Step 16: Making a Stainless Steel Collection Trough

Soap solution flows down the cables during operation, and needs to be collected to prevent a mess, as well as to make efficient use of liquid by recycling. I made a stainless steel collection trough that surrounds the entire lower half of the iris. It attaches to the iris with nylon stand-offs, which electrically isolate the aluminum ring from the stainless steel. (This is necessary to prevent galvanic corrosion of these dissimilar metals.)

I cut the 16 gauge 304 stainless steel out on the water jet. In total, there were four pieces: the front and back "C" shapes, and the two rectangular strips which unite them.

A Jig to hold parts while tack-welding together: To TIG weld the stainless together with minimal distortion, I held the front and back "C" shapes at the correct distance from each other with spacers cut from aluminum tubing, and clamped them to these spacers with through-bolts. bolt holes for mounting the trough onto the iris had been cut at the same time as the overall part contours.

Slip-roll the pieces that will form the bottom of the trough so they approximately fit the curvature of the outside of the "C" face pieces. I pre-bent the rectangular pieces that form the outer edge/bottom of the trough using a slip-roller. First, I applied masking tape to all sides of the stainless to prevent it's smooth finish from becoming scratched. Then I passed it through the rollers until it's curvature closely matched the curvature of the "C" pieces. Final adjustment of the curvature was performed by hand, bending over the edge of a table.

TIG welding: I used a current of 50 amps with a 1/16" tungsten sharpened to a fine point, and made tack welds every inch or so until the whole assembly fit together well. Then, I stagger-welded alternate 1-inch lengths of the seam, so that heat would not concentrate in any area too much. Stainless steel expands a lot when heated, and also conducts heat very poorly. As a result, it is common for stainless parts to warp a lot during welding. I wanted this to fit very well and so aimed to minimize distortion by the following steps:

weld fast:

  • don't use too low a current, which counterintuitively leads to more heating and warping, because it takes longer to form the puddle and heat is spreading out the whole time.
  • keep the tungsten VERY close to the work piece. Most of this was done with 1/16" distance between tungsten and puddle. you need a steady hand- brace off the part.
  • If the fit-up is good, you won't need to add filler metal: you can just melt the edges together. This is called an endogenous fusion weld. The strength of the weld is less important in this application, compared to having a watertight continuous bead, and low distortion.

Don't let heat concentrate in the any area

  • Weld in short lengths, an inch or two at most at a time.
  • skip around, so heat is spread evenly.
  • let it cool off for 15 minutes every few minutes of welding.

Step 17: Position Registration

To sense the home position of the iris, I installed a hermetically sealed magnetic sensor. When a magnet on the rotor nears this sensor, a contact is closed which is detected by the microcontroller. This then defines the home position.

The magnet is held onto the rotor with a 3D printed mount which has long slots to allow fine adjustment of what angle the system sets as 'home'.

Step 18: Make a Stand for the Iris

I made a simple stand for the iris by welding a 2" tube to a flange. Nylon inserts support an inserted mast / shaft at the top. This mast bolts to the iris.

  • Cut a flange with bolt holes to clamp it to a base board, and a hole to insert the tube.
  • TIG-braze the tube to the flange.
  • lathe-turn two collars to insert into the tube, one with no shoulder which will insert some distance down into the tube, and one with a collar which will sit at the top of the tube. Both collars have a central hole for the mounting post attached to the iris.
  • I waterjet-cut the mast for the water jet using Inventor's Project Geometry features in assembly-view. This allowed me to align bolt holes so they would line up when the iris and it's trough were perfectly vertical.

Step 19: Arduino Code

The control of this iris is in two modes, determined by the position of a toggle switch:

  • automatic mode - a button press triggers a cycle of cable wetting, iris opening, fan activation, and iris closure.
  • manual mode - motions of the control knob are mapped to the iris position - the iris follows intimately the position of the control knob, with such fidelity as to suggest a mechanical linkage. A button triggers the activation of a fan.

Be the First to Share


    • Big and Small Contest

      Big and Small Contest
    • Game Design: Student Design Challenge

      Game Design: Student Design Challenge
    • For the Home Contest

      For the Home Contest



    Reply 7 years ago on Introduction

    Thanks so much Paolo!! It was invaluable to have your input along the way of making this.


    7 years ago on Introduction

    This is insane! The amount of design and machining to make all these parts and assemble it so flawlessly... amazing. I'm stunned... wow.


    Reply 7 years ago on Introduction

    Hi askjerry- thanks for appreciating that! It was intended in some part of my mind to be a tour-de-force of manufacturing capabilities, i.e., to take maximum advantage of the fabricating resources at Autodesk's Pier-9 workshop. Here's a cool video about the program; I feel so honored and lucky to have gotten to participate in it!


    7 years ago on Introduction

    Beautiful design. Really neat idea, watching the iris create bubbles is hypnotic!


    Reply 7 years ago on Introduction

    thanks! I also find the iris-creation of the membrane hypnotic.


    4 years ago

    Great project! I love the amazing amount of work for such a simple thing as blowing bubbles. A true artwork!


    7 years ago on Introduction

    Absolutely awesome job! Well thought-out, great pictures, descriptions, the whole works. The only thing I would change is to fix your usage of "it's" where it should be "its". Thanks for sharing!


    7 years ago on Introduction

    Beautiful work!

    A tiny sidenote: My experience with a few atmegas (UNO and mega) has always been the library can't keep up back 3900-4100 steps/second, not 1.3kHz. So i am curious what else was going on that slowed it down for you.

    My solution to that step limit was crude- just a linear ramp after 3800 steps/second and direct pin toggling. So, only using accellstepper for the nice ramping at the start.


    Reply 7 years ago on Introduction

    Kinnishian, I used a scope to check the output of the step pin after merely loading a bare-bones accelstepper script so not too much else for overhead; Switching to the cheaper Teensy3.1 afforded a more than necessary increase in speed though - and the Teensy also comes cheaper at only $20. That said, I'd be interested in seeing your code for transitioning from accelstepper control to linear ramping period for the faster portions. Can you paste it here or provide a link? it seems like a worthy topic for writing an instruct able about too, since you know lots of people must also share the problem we both encountered.


    Reply 7 years ago on Introduction

    I went ahead and posted a short image-less instructable! I don't know if it'll be of any use, but perhaps down the line someone will like it or get an idea from it.

    The whole thing took a while to get together my old code, strip it, and make sure I actually commented things well enough to be understood by anyone looking at it. Makes me admire all the more how much work goes into such a thorough instructable like yours. Unfortunately just in my short tutorial I ran out of time and ill have to consider this current posting a "draft" until I can improve the code presentation and double check the flow.


    Reply 7 years ago on Introduction

    Errr...This morning I looked again and some of my code tags are suddenly working [I was trying PRE, CODE, and other tags] but new things randomly were added to the text...It's definitively not prime time yet! I'll clean it up a bit more tonight, though.


    Reply 7 years ago on Introduction

    Interesting that you had that experience with a thorough investigation (scope). I see to recall I based my numbers on crude timing (as what point of step/second max setting was my actuator not decreasing in time to complete its stroke) I also had done some research and found it idly mentioned as 4khz on adafruit forums or maybe the original google group for acelstepper. I can't verify my numbers as well as it seems you did.

    Not being a pro programmer I am always embarrassed posting code but I'll look at it this week and see what I did. It was not perfect but good enough and I think not terrible.Thanks for the encouragement- you're right it might be mildly useful maybe for someone and the thought crossed my mind a couple times. I think I did some simple experiment to estimate how much time my linear ramp code had in overhead then proceeded from there. It'll take me a second to get the code together since I'd like to post it without posting my entire program which is more complicated and I really can't stand by all of my code in it (it was one of my earliest projects.)

    You're right that the Teensy 3.1 is amazing and solves many problems by shear power. When I first was working on my project I almost worked on a ChipKit which is a similar idea, but I think Paul is an absolute powerhouse on software support for the teensies, so I prefer my experiences with the 3.1. Not to make it a battle match, I just mean that I do like the 3.1 as well.


    7 years ago

    This is absolutely, incredibly, stupendously, seriously, spectacular! Oh my God, to make something so simple from something so complex is just a work of art. Thank you so much for sharing this.


    Reply 7 years ago on Introduction

    Hi Creative Tinker- I actually did source one of those lazy susan bearings, and the idea of replacing the bearings with nylon or delrin is attractive. However, the V-groove bearings these contain would certainly collect a lot of bubble juice, and persistent juice exposure leads to pitting corrosion, especially on the likely 6061 alloy of which they are made. (5000 series aluminum is more resistant to corrosion in saltwater). I suspect that the open roller design is optimal in the sense of rapidly shedding any surface liquids.

    Glorious piece of work! I hope you make the microphone too, that would be very interesting...


    7 years ago on Introduction

    Hey Gordon! Really exciting to see the bubble machine on here. And you were in the AIR program! So cool. Hope all is well in the burgh.


    Reply 7 years ago on Introduction

    Hi Adam! It seems like eons ago we were looking at your laser cut helical springs at TS- nice to see you on here! how's Pittsburgh?


    Reply 7 years ago on Introduction

    Haha, yes, those were the days! I've actually been living in NYC for close to a year now. Love it here, but miss the TS life in Pittsburgh.