Bubble Display



Introduction

Bubble Display:

A display utilizing air bubbles rising in fluid as pixels. Control of the bubble streams is used to produce text and simple images. The bubble display is an innovative, interactive artistic display medium for conveying many types of messages.

This group project was completed by the team Jon Bennett, Sahinaz Safari, and Gouting (Jane) Chang. This was our engineering fourth-year design project for electrical engineering at the University of Waterloo. The project was started in our third year (Fall 2008) and demonstrated to the public in March 2010, shortly before our graduation.

Inspiration for this idea came after seeing the Liquid Display project on Hack A Day. I thought it would be fun to have greater control over the bubbles and use them to make patterns.

Modes of operation:

1) Demo Reel - a pattern of bitmap images that is shown on the display

2) Bubble Symphony - midi keyboard input with each note corresponding with a bubble column (a note held creates a large bubble)

3) User Input - user can enter text or draw a pattern and have it shown on the display

Our project used 24 valves spaced 4.7 cm apart. I'm pleased with what we were able to accomplish and it was a big hit at the fourth-year project symposium. Some lessons learned: oil and glycerin are really messy, pneumatics are really expensive, and tanks are very difficult to construct and seal!

We started this project without really knowing what we were getting ourselves into. As electrical engineers, we knew the software and control hardware would be no problem. However, there were many questions that we needed to answer.

- What kind of tank material?

- What kind of liquid?

- What type of valve to use?

- What air pressure to use?

- Can we make the bubbles consistent?

- How do we stop liquid from flowing into the pneumatics?

- Etc.

All of these issues were eventually solved, mostly by trial-and-error.

This is not meant to be a how-to guide. This is meant to be a project description to inspire and share knowledge.

Hardware

Prototyping

Given the number of unknowns with this project, we started prototyping as soon as we had decided on this idea. We built a small test tank and found mouse valves from Clippard that we thought might be a good choice. We later decided against them. We used our small tank to evaluate different valve types, liquid types, and valve spacing. See the sections below for more details on the component selection. This prototyping phase was very important so that we didn't make any decisions that would be hard or expensive to fix later.

With the prototype tank we determined timing between bubble rows, saw how bubbles affected each other, how the viscosity of the liquid affected the bubble rise rate, and other variables that you can't look up on a datasheet. Note how the bubbles are semi-circular using mineral oil (2nd image), but round with glycerin (4th image).

Tank

The tank was the most frustrating and time-consuming part of this project. It was constructed of 1/4" lexan and held about 29 litres of liquid. The thickness of the sheets required is primarily determined by the height of the tank. Various aquarium-building websites recommend 3/4 - 1" for a tank of this height. We used 1/4" and ran in to a lot of problems. Thick lexan is expensive, so we didn't buy it. Also, we figured that since our tank was so skinny, we wouldn't face the same issues that aquarium builders did. Big mistake! The tank was put together using WeldOn 16.

The first time the tank was filled, it was filled to 29 L before a seam burst, dumping 29 L of water in to my basement! After that, all tank-related testing was done in a garage. We spent countless hours trying to stop small leaks with caulking and putting over 80 bolts all around the frame to try and squeeze the tank seams together. Before the project was over, we had completely rebuilt the tank by cutting off the bottom and making a new one, and installing a verticle bar down the center, effectively creating two tanks. After these measures had been taken, the tank was leak-proof and was filled with liquid for months with no problems.

Dimensions X Y Z Inside 48" 1 1/4" 29 5/8" Outside 48 3/4" 2" 30"

Channels

I had wanted to have the bubbles float freely in the tank. This is a pleasing effect. However, after much testing, the bubbles affected each other far too much with our spacing of 4.7 cm. With spacing this small, bubbles 'pushed' against each other and drifted into voids if there was no bubble beside it. We found that if we used every-other valve, effectively halving our resolution, but then having spacing of 9.4 cm, we didn't have this issue. Our final solution was to construct a set of channels using 1/16" lexan. This prevented the bubbles form affecting each other.

Frame

The frame was constructed of 1" steel tubing and 1/8" angle-iron. The welding and frame construction was done for us by Rob in the engineering machine shop. The frame worked really well and didn't give us any problems. It was later painted gold using metalic spray paint.

Liquid Tests

Liquid Viscosity cSt at 40°C Cost Observations Water 0.658 - Water was found to not be viscous enough for the type of resolution required for the bubble display. The bubbles would rise too quickly in water, deform, spiral around, and affect one another while rising upwards. Heavy-grade Mineral Oil 103 ~$80 for 20L Mineral oil was found to be considerably more viscous than water. The bubbles would rise in a more-or-less straight line. However, their speed of rising was still fairly fast and the bubbles were not perfectly round as desired. Glycerine / Glycerol 284 ~$150 for 20L Glycerine was found to be a lot more viscous than mineral oil and water. The bubbles formed were very round and would rise slowly in a straight line.

Our tank required about 29 L to fill. I would like to thank Xenex Labs for donating 40 L of glycerine for our project.

Pneumatics

The pneumatics were an expensive part of this project. Each valve was about $30 (x24), each manifold about $35 (x4), each accumulator $25 (x4), each check-valve $6 (x24), each fitting $1-2 (x196), etc. This isn't including the regulators, gauges, filters, and tubing required! Also, we evaluated 3 sets of valves and each set of valves for evaluation cost about $200 to try out.

System Overview

We had a compressor hooked up to a filter-regulator. That bumped the 115 PSI from the compressor to about 12 PSI used in the rest of the system. The filter-regulator fed 4 manifolds. Each manifold had 6 valves attached. Each manifold also had an accumulator to smooth out the pressure changes when we 'fired' the valves.

Compressor

We used a Campbell Hausfeld (FP209499AV) tool air compressor purchased at Home Depot for $90 on sale. It could store 3 gallons of air at 115 PSI. This would run last our display for about 30 minutes if it was in constant use. It was very noisy when charging! During our public demostration we borrowed an air compressor with more capacity.

Valves

We evaluated three sets of valves as shown below. The parameters we tested were the minimum pressure that we could use the valve at, the minimum timing we could use to use the valve, and how consistent the valves were over time. The Festo and Parker valves performed roughly the same and both out-performed the Clippard valves. If I were to do it over again, I would use even smaller valves than the ones we used. We didn't want to operate them at the absolute edge of their operating capabilities. We ended up operating them at 12 PSI and with pulses around 10-20 ms in length which was above each of the valves' minimum stated response times. Each valve had a power consumption of around 0.6 W, but this was negligable since we were only turning them on for a very short period of time.

The valves were quite inconsistent amongst themselves. For example, we had to turn 1 valve on for 20.5mS and another for 32.5mS to get the bubbles produced from them to be consistent! The software had to be written to allow for per-channel timing configuration to deal with these inconsistencies. These configuration parameters were stored in config.txt and was used by the control software.

Model Operating Range Minimum Reponse Time Comments Parker A005-C23-2P 0 - 115 Psig 5 ms Selected. Better consistency at low pressures and better response time than the Clippard valves.

(datasheet) Festo MHA1-M5H-2/2G-0 0 - 115 Psig 4 ms About the same as the Parker valves

(datasheet) Clippard EV-2M-12 0 - 105 Psig 5 - 10 ms A bit bigger and not as reponsive as the other valves.

I would like to thank Parker for supporting our project by donating 6 (of 24) valves as well as some pneumatic components.

Check Valves

We knew that we had to stop the liquid from flowing out of the tank and into the pneumatics system. This was accomplished with a check-valve. A check-valve is a valve that allows fluid/air only in one direction. So air was allowed to pass through the check-valve, but fluid was not able to return in the other direction. We wanted to screw the check-valves right in to the bottom of the tank. The only check-valves we could find with male threading were MCV-1AB from Clippard. They worked well for us.

List of all Pneumatic Components Used

Component Quantity Description Comments Air Compressor (FP209499AV by Campbell Hausfeld) 1 Capacity:

3 gal.

Pressure Range:

0 - 100 psi An air compressor with tank used to supply air to the pneumatic system. Connector A (QS-1/4-6 from Festo) 2 Input and Output:

1/4” Male to 6 mm

Push-in Pneumatic connector fitting that screws into the output of the air compressor and allows a 6mm pneumatic tube to be connected to the air compressor output. It also screws into the filter regulator unit and allows a 6mm pneumatic tube to be connected to the input and the output of the filter regulator. Pneumatic Tubing (Polyurethane) 3x30 cm and

7x10cm Outer Diameter:

6 mm Pneumatic tubing to connect the air compressor to the filter regulator and the filter regulator to the manifolds. Filter Regulator (LFR-1/4-D-7- MINI by Festo) 1 Standard Nominal

Flow Rate:

1500 l/min

Grade of Filtration:

40 micrometer

Operating Pressure:

1 - 16 bar Pneumatic tubing to connect the air compressor to the filter regulator and the filter regulator to the manifolds. Manifold (MMFS-6- A00M5 by Parker) 4 Valve-capacity: 6 The manifold allows six valves to be mounted onto it and all the outputs of the manifold have M5 female threading. There are three types of ports on the manifold: - Port 1: Where the input air supply (from the air compressor) needs to be connected to. - Port 2: Where the valve output air will flow out (to the check valves). - Port 3: These ports are not really used for this project (they allow exhaust air to be expelled in general pneumatic systems). Connector B (QSM-M5-6 from Festo) 8 Input and Output:

M5 Male to 6mm

Push-in Pneumatic connector fitting that screws into the inputs and outputs of the manifold and allows a 6mm pneumatic tube to be connected from the filter regulator to the manifold. Connector C (QS-1/8-6 from Festo) 7 Input and Output:

1/8” Male to 6mm

Push-in Pneumatic connector fitting that screws into the inputs and outputs of the accumulator and allows a 6mm pneumatic tube to the connected from the manifold to the accumulator. Accumulator (AVT-24-8 from Clippard) 4 Capacity:

8.0 Cubic Inch The accumulator allows air to be stored in it, so that there will be enough air available when multiple valves are opened. This also allows the pressure in the system to remain more constant. Valves (A00S-C23-2P from Parker) 24 Type:

3-Way, 2-Position

(Normally Closed)

Flow Rate:

0.02Cv

Pressure Range:

0 - 100 Psig

Response Time:

5 ms

Power Consumption:

0.6 W

Voltage:

12 V DC These valves are used to control the bubble release into the liquid filled tank. The valves will remain closed until an electric pulse is sent to them which will cause the valves to enter the energized position and open to allow air to flow through. Connector D (BC03M5 from Parker) 24 Input and Output:

M5 Male to 3mm

Barb Pneumatic connector fitting that screws into the valve outputs on the manifold and allows a 3mm or 1/8” pneumatic tube to be connected from the valve outputs on the manifold to the check valves. Pneumatic Tubing (Polyurethane) 24 x 10 cm Outer Diameter:

1/8” Pneumatic tubing to connect the valves to the check valves. Connector E (CN-M3-PK from Festo) 24 Input and Output:

3 mm Barb to #10-32

Male Pneumatic connector fitting that screws into the check valve inputs and allows a 3mm or 1/8” pneumatic tube to be connected from the valve outputs on the manifold to the check valves. Check Valves (MCV-1AB from Clippard) 24 Flow Rate:

280 l/min (at 6 bar)

Pressure Range:

0 - 300 Psig

Pressure to Open:

1/2 Psig Check valve that only allows air flow in one direction in order to prevent liquid from flowing back from the tank into the pneumatic system.

Control System(s)

We built two control systems for this project. We figured that millisecond control resolution would be sufficient to match the valves (since the valves themselves are inherintly inconsistent). However, after extensive testing we found that 50 microsecond timing resolution was required. Our first control system couldn't perform at that speed, so a second had to be constructed. Both systems were designed in Eagle and the PCB was fabricated by BatchPCB. Power was supplied using the 5 V and 12 V rails of a PC power supply.

First System

The board was built to support up to 64 outputs. Each output had an LED. It was a simple design of several I/O expanders on an I2C bus. Each I/O expander output was connected to a darlington transistor array (ULN2803A IC) The bus would be driven using an Arduino microcontroller. The board was designed and built with millisecond timing resolution in mind. The Arduino wasn't able to drive the I2C bus fast enough for 50 microsecond timing resolution on the outputs that we later required.

Second System

By the time we realized that we needed 50 microsecond timing resolution on the outputs, we had scaled our initial (ambitious) design from 64 valves to 24. With this lower output count, we could use the microcontroller output pins directly. We selected a PIC18F4455 because it had enough outputs and could be clocked at a high frequency. For future reference, a PIC @ 48 MHz is performing 12 MIPS (1 instruction per 4 clock cycles), however an Atmel microcontroller will perform 1 instruction per clock cycle, so an Atmel might be a better choice if performance is an issue.

I was able to simulate the microcontroller code in MPLab and verify that we had less than 50 microsecond timing resolution on the outputs (source code available below).

This board was connected to the computer by a serial port and the system worked quite well. This board has an LED for each output and you can see the outputs being turned on/off as the midi keyboard is being played in the video at the top of this article.

Software

The software is what ties the whole system together and makes it usable. There are 4 pieces of software involved in this project. There is a visual basic GUI program that is used to set which mode of operation the display is in and also to send user-generated text and images to the pixel decoder software. The pixel decoder software decodes bitmap images and also accepts pixel data from the visual baisc GUI. It handles the per-channel timing configuration and sends data to the hardware control system over a serial port. The midi decoder software decodes midi data from an attached midi piano keyboard and sends the data to the hardware control system. Each note is mapped to a bubble column, so that the keyboard can be played and that will create a "bubble sympthony". The last piece of software is the microcontroller firmware that accepts control commands from the PC serial port and turns the microcontroller outputs on for a very specific period of time (with 50 microsecond timing resolution).

This software is only provided as an example so that you can see how the system operated. It would be foolish for anyone to try and duplicate our exact system, so please don't try! The software provided is meant to be educational, but not instructional.

Visual Basic GUI



This software was literally completed at about 2 AM the night before our public design symposium. To communicate between the 3 pieces of software running on the PC (written in VB, C, and C++), I had wanted to use environment variables. However, VB6 has no way to set environment variables, it can only read them. The hack I implemented to make the system work was that the visual basic GUI would create text files and the other software programs would poll, looking for the command data in that text file. It wasn't the prettiest approach, but it worked pretty well as far as the end user was concerned.

With this control software, the use was able to enter text or draw a pattern and send it to the display, or turn it to "Keyboard Input" mode and use the midi piano keyboard to control the bubble display.

Source code: included in zip below

Pixel Decoder

This software decoded a black and white bitmap image file and sent it to the display. It also read data from a text file (generated by the VB software) with pixel data in it that the user had drawn, and sent that to the display using the PC serial port. The image we used for our demo loop is shown below. This software was written in C++ using the Dev-Cpp Windows IDE.

Below are 2 sets of demo images that we ran on the display.

Source code: included in zip below

Midimon (Midi Decoder)

I found an open-source set of midi utilites that were really easy to use and modify. I used the midimon utility and modified it to map each midi note to a bubble column and send the data to the microcontroller using the PC serial port. Open source software is great! Many thanks to Div's Midi Utilities for providing the midi portion of this software.

Source code: included in zip below

Microcontroller Firmware (for PIC18F4455)

This software is written in C using the HI-TECH C compiler. It read in an array of pixel data. Each pixel data value specifies how long the valve should be turned on for (with 50 microsecond resolution). When the next row of data is required, the microcontroller sends an ACK character to request more data. The data is provided by either the midi decoder or the pixel decoder, depending on the mode of operation specified using the VB GUI. A note about efficiency: a significantly higher timing resolution could have been obtained by sorting the pixel data array on the PC before sending it. However, our performance targets were met, so that was not required.

Source code: 4455.c (also included in zip below)

Download All (221 kB)

Project Costs and Conclusion

Between the multiple prototype revisions, expensive pneuamtics, multiple control systems built, and a myriad of other problems, we spent quite a bit of money on this project. The total bill was about $3500 CAD, $1796 of which was reimbursed by our school.

I had wanted to take on an ambitious project that had a large visual impact and I think we succeeded in that. I wouldn't mind building another bubble display sometime in the future, having learned many lessons from this one. It was an interesting project, but I would caution anyone considering to take ona similar project -- there are many unforseen complications that you will face!



If you liked the project or write-up, add a comment below or send me an e-mail at .