Bubble display proof of concept

A while back I saw the cool water display that Jeep has been showing off at conventions, http://www.youtube.com/watch?v=Z2LUz2WVcek It looked simple enough so I decided to build something similar. Instead of using falling water I decided to use air bubbles rising in water. I thought it would be simpler (though, I now I have my doubts). In this post I will share how the effort is going.


The idea is to build a small water tank with individually controlled solenoid valves at the bottom. By turning the solenoids on and off in specific patterns I should be able to make simple black and white images  float up slowly from the bottom of a tank. When I say black and white images I mean that wherever there is a white dot I will put a bubble and wherever there is black dot I will just leave as empty water.


Most of the stuff that I am using to build this is pretty common stuff like aquarium air hoses and pumps, plus an Arduino Uno for the brains and some random electronic components. The big ticket item in this is the solenoid used to control the air. I found some solenoids on Jameco’s website that allow for the control of airflow for about $10 each.

Here is a mostly complete list of bill of materials:

Bill of Materials

The circuit

The solenoids that I bought need 12 volt at 350 milliamps to open. Getting this kind of power through the Arduino isn’t really an option so I have a separate 12 volt power supply to power the solenoids. I also got a series of mosfets to handle switching the power to the solenoids on and off from the Arduino.

Here is how I wired the solenoids to the Arduino. Connect the Gate pin of the mosfet to one of the arduino’s output pins using a 100 ohm resistor. Then run a power line from the 12 volt power supply to one side of the solenoid. From there run a line out the other side of the solenoid and into the Drain pin of the mosfet. Lastly just connect the Source pin of the mosfet to the power supplies ground. Oh and to make everything kosher make sure you connect the grounds from the Arduino and the power supply. Once you have this in place all you have to is send your output pin high and the solenoid will open. Send it low and it will close.

I have eight solenoids so I just wired up this same circuit eight times. You can see in this picture how I ran the wires specifically. In this image the solenoids are barely visible at the top of the frame. The top power rail on the breakboard is connected to 12 volt power supply. The green LEDs at the bottom are just there to show me which solenoids are open and make things a little easier to debug.

Building the Tank

Attempt #1: Wood, Glass and Silicone

I seriously underestimated the difficulty involved with constructing a waterproof tank. Initially, I constructed tank out of two panes of glass and some pine 2″ x 4″‘s. I cut the 2″ x 4″s down to size and cut grooves into the sides for the glass to slide into. I sealed the seams up with silicone calk from Ace Hardware. Once the silicone had set for a while I filled it with water. I found a few small leaks, so I emptied it and added some more silicone. I must have done this half a dozen times without success. Whenever I fixed one leak two more would show up somewhere else. At one point I thought I had it sealed and left it over filled over night as a test, but by morning the tank was empty and there was water everywhere. I eventually gave up, chalking it up to the pine being too porous to contain water.

Attempt #2: Acrylic and Weld-On (And a couple dabs of silicone)

After that miserable failed attempt, I decided to try my hand at welding sheets of acrylic together. At my local Ace Hardware there are a couple employees that regularly screw up cutting 2′ x 4′ sheets of acrylic in half. So I was able to pick up several feet of acrylic for a couple dollars. To weld acrylic plastic together I went to a plastic manufacturer called Regal Plastics and bought a small can of Weld-On and little syringe like applicator. The weld-on stuff has the consistency of water which makes applying it to only the area you need and not marring the rest of your work a bit of a challenge.  I cut my acrylic on my table saw with a regular ripping blade. This cut the plastic alright but it had a bit of chip out and left a fairly rough edge. One of the other things about the WeldOn being so runny is that the two surfaces have to be nearly perfectly flush for it to make a good seal. My cuts weren’t, so when I glued it together I still had a couple tiny little leaks. I was able to apply more Weld-On in the areas where the leaks were very tiny. I did end up putting a bead of silicone calk all the way around the bottom. That pretty much took care of the leaks.

I found these handy little widgets in the aquarium section of Pet Smart called check valves.  They keep water from backing up into the line and messing up your pump. In my case they make a handy dandy consistent nozzle for the bubbles to come out of. Also since they are made of acrylic I was able to just drill holes in the bottom of the tank and weld them in place using the same Weld-On product. Getting them in place was surprisingly simple and didn’t yield a single leak or headache.

The rest of the construction was done using basic wood working techniques and isn’t really worth mentioning.


What fun would a project be if it just worked the first time out of the gate? Here is a video of it of its first run:

It is supposed to be printing out letters but as it turns out (and probably rather obviously in retrospect) the bubbles just flow around randomly. Hell, on the right  side you can see bubbles actually going down instead of up.

Since that obviously was no good I set to work on creating some dividers to slide in there. It was at about this point that I  joined a somewhat oddly named hackerspace called  The Cowtown Computer Congress that resides in the supercool workspace provided by Hammerspace. This proved handy because it allowed me use the laser cutter there to print out these brackets to hold the dividers in place

With these in place the bubbles started moving a bit more predictably:

This made quite an improvement but the bubbles still weren’t moving consistently. So I replaced the water with mineral oil. Which as it happens is available from CVS labeled as a laxative. Honestly, I was a little disappointed with my coworkers when I brought in half a gallon of laxatives to work and not one of them batted an eye.

Here is what it looked like after I replaced the water with mineral oil:

That is where I am currently. The big problems I am still having is that bubbles are floating up and different speeds thanks to different amounts of air being blown into them. Its not hugely obvious with just one valve open at a time, but when I try to actually print images that have different valves on at the same time all hell breaks loose. I am working on the arduino firmware to account for how many valves are open at a time and adjust the time the valves are open. If that doesn’t work I will be looking into a better regular or individual regulators per line.

On side note here are a couple of videos of food coloring defusing inside the tank before the dividers were in place:

Tagged , , , ,

28 thoughts on “Bubble display proof of concept

  1. […] ‘falling water display,’ [Matt] figured he could turn that idea on its head. He built a display that uses bubbles for pixels. Even though the build isn’t complete, we love the results so […]

  2. […] saw a ‘falling water display,’ [Matt] figured he could turn that idea on its head. He built a display that uses bubbles for pixels. Even though the build isn’t complete, we love the results so […]

  3. You should probably figure out a way to inject controlled amounts of air with something like they use in the liquid pumps that are based on a soft hose arranged in a loop, and a ring with rollers on the inside of that loop, so that when it rotates – the rollers squeeze the tube and move the liquid along in fixed portions…

    hxxps://shainin.com/case_summaries/med_pump <– like this one here

  4. […] saw a ‘falling water display,’ [Matt] figured he could turn that idea on its head. He built a display that uses bubbles for pixels. Even though the build isn’t complete, we love the results so […]

  5. kj6epl says:

    Have you tried varying the length of time each valve is open? You might be able to achieve reasonable results by adding a “calibration value” for each valve in your code, adding or subtracting milliseconds the valve is open. Might be worth a shot, and probably is easier than metering the air that flows through the valve.

    • Matt Bell says:

      Yes that is what I am working on now. I have individual calibration values for each one of the valves as well as a scalar for how many valves are open at a time

  6. Brandon Lee says:

    I think part of the issue is how many bubbles are in each tube. The tubes on the ends move slower because less bubbles are in them at a time. During one full cycle (one time left, one time right), the end tubes have 1 bubble in them, while all other tubes have 2.

    I also noticed that the second to end tubes, their bubbles are combining, making one really fast bubble.

    The tubes in the middle will have the most evenly spaced bubbles too.

    I don’t think its really the size of each bubble, but rather a number of factors.

  7. effgee says:

    I think Vasili has a good idea, using either a peristaltic pump or tiny piston/syringe pump to inject a known volume of air each time. The calibration you’re working on will help thinks, but won’t cope with the variable reaction time of each solenoid, plus any timing variations induced by the program I guess you could use timed interrupts to make the timing more exact, but this complicates the program.

  8. […] ‘falling water display,’ [Matt] figured he could turn that idea on its head. He built a display that uses bubbles for pixels. Even though the build isn’t complete, we love the results so […]

  9. asechris says:

    I was talking with a friend just last night about bubble propagation in liquids. He had done some work with trying to find a medium that would maintain a uniform bubble size and rate of propagation. The ideal medium they found, and they don’t know why it worked exactly, was Guinness Beer. I would be curious to see if you would have the same success by replacing the mineral oil with Guinness. The contrast of the dark beer as the medium would look pretty cool too.

  10. Steven Mitchell says:

    I don’t know what air compressor you are using, but you might have a problem with the pressure dropping in your lines–the supply tubes might be too small or too long. Suggest you try a manifold just before the 8 valves to absorb the pressure difference of several valves open at once. First make sure the manifold’s supply tube is large enough, then size the manifold’s volume to prevent pressure drops.

    I am not sure of the scale you are working with, but if your tubes were 1/8″, you might try a 1″ copper pipe 8″ long, capped soldered in both ends, with 8 short tubes (1/8″ od 1/2″ long) soldered into holes in the side of the 1″ pipe, and a supply nipple of 3/8″ id soldered into the 1″ pipe on the opposite side (or on an end cap). You can solder the whole thing together with a propane torch kit form the hardware store that you get the copper pipe from.

    I have done that on industrial machines and it solved timing issues.

    There may be other factors like the speed of 8 solenoids not being identical, or relays not taking the exact time to energize, but if you
    eliminate the air supply problem, the others could probably be done in software as you are working on now.

    4 of these byte-sized displays side by side and you could have 4 digits for a nice binary clock display…

  11. Steven Mitchell says:

    One other thought, you might be able to use a precise metering valve on each line to restrict the flow of air into the tubes.
    If placed just before the on/off valves, it could offer two advantages:
    1. each metering valve can be adjusted individually.
    2. if metered down enough, it could lengthen the time (in milliseconds) that it takes for the air to get through, so any milliseconds of variance in the on/off valves is less a part of the cycle time per bubble.

    Just a thought.

    • Matt Bell says:

      Thanks for your thoughts, Steven. I think you have some good advice, and I will be looking into to implementing it. Especially the manifold and the individual line pressure regulators

  12. Steven Mitchell says:

    Have you considered using 8 round acrylic tubes instead of 1 tank with baffles? Just wondering if varying area between the baffles might affect the rate the bubbles rise.

  13. […] about the build-instructions and inspiration can be read here and […]

  14. […] about the build-instructions and inspiration can be read here and […]

  15. […] the bubble size and steadies the speed at which the bubbles rise. For consistent bubble movement, Matt recommends using mineral oil and keeps each “bubble channel” (as I like to call it) in its own vinyl tube. […]

  16. […] the bubble size and steadies the speed at which the bubbles rise. For consistent bubble movement, Matt recommends using mineral oil and keeps each “bubble channel” (as I like to call it) in its own vinyl tube. We’re looking […]

  17. […] about the build-instructions and inspiration can be read here and […]

  18. […] Bell has been working on a small bubble display and making steady progress improving it. His display uses solenoid operated valves to inject the […]

  19. Christian Skoven says:

    Hi 🙂

    I’m thinking of using some of your ideas for a new setup/experiment that I’m planning.
    I need very specific amounts/durations of air (e.g. 50ms), every time I open the valve.

    But I just have a couple of questions for your setup:
    Are your pumps turned on, all the time?
    Do you have some overload/fallback/mechanism for when the valves are closed? E.g. a
    T-connector with an open outlet.
    Or do you control the on/off state of the pumps simultaneously with the valves?

    I’ve read some place, that you are stressing the valve (and/or the pump) when the pump is running and the valve is closed. Also, some say that the valve might have trouble closing again, when the pump is constantly running – i.e. forcing it to stay open (which sort of defeats the purpose).

    Thanks for the guide/tutorial. Very interesting read!

    Best regards,
    Christian Skoven

  20. andres felipe medinillo says:

    hello , please can you tell me. source code in arduino

  21. andres felipe medinillo says:

    hi there , if i could put mosfet: SSS10N60A , what would happen? should it work properly with it.
    another stage, if i could put electrical resistencia 2K what would happen?

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: