This project uses streams of water to direct light, much like an optical fiber. You may have seen this trick used in laminar flow nozzles at theme parks. I've used it myself in some projects in the past (http://www.youtube.com/watch?v=eHUNQAujOUE )...
My goal is not so much to show you how to build this specific fountain (I'm sure many of you could do much better aesthetically), but to show you some cool tricks you can use in your own designs. All of the parts I used were very inexpensive, and once I had them, it only took a coupe of days to put the fountain clock together.
While this project is not complex, it does help to have some experience with Arduinos and some basic electronic hacking skills. You will be working with water and electronics, so please exercise appropriate care!
Let's get started!
The clock in action!
Setting the time...
Step 1: The Illuminated Nozzle
To create an illuminated nozzle I started with a vacuum hose "T" fitting, available at most auto parts suppliers. I cut off the end, leaving just enough space so that the LED would not block the flow of water. The opening needed to be drilled out slightly to accommodate a 5mm, high-brightness LED. Making the hole the right size allows for a water tight seal without the use of glue.
Water is passed in through the bottom connection, and emerges out the lit end. The stream may be somewhat turbulent, but this can be improved by adding a short length clear tubing to reestablish laminar flow.
Step 2: Driving the Servos
For this project, I used HXT-900 servos. These are very inexpensive (I paid ~US$3 each), small, low-power, and yet, quite strong.
Inexpensive servos are not known for their long lifetime or precision. I decided to limit each "hand" of my clock to just 12 positions - 1 for each hour, and 1 for every 5 minutes. This means that the servo is only moving at most, once every 5 minutes. To improve reliability, I used an NPN transistor (2N2222A) to disconnect the ground lead when the servo was not actually moving. This greatly extends the life of the servo - I only turn it on for 1 second every 5 minutes! This removes any concerns about the servos over-heating. This only works because the servos have no static load trying to make them turn while they are off.
In addition to disconnecting ground, one must be careful to also disconnect the control signal from the servo. Failing to do this can cause the servo to power up through that connection, and draw excessive currents. This is easily rectified by switching that control pin to input mode BEFORE breaking the ground connection.
Step 3: Attaching the Nozzle to a Servo
I cut a small notch in the servo arm to fit the tab on the T-fitting. I later secured this in place with a band of tubing or small cable ties. The notch helps to ensure that the nozzle points in the same direction at the servo arm.
Step 4: Pump
For the pump, I picked a small, submersible, brushless unit:
Although this pump is rated for 12V operation, I found it sufficiently strong for my purposes running at 5V. At this voltage, it only draws around 1/4 amp, making it very easy to power.
Step 5: Mounting
For simplicity, I mounted the hour and minute servos back-to-back on a strip of aluminum that I bent into shape. Originally, I used foam tape to adhere them, but this didn't seem sturdy enough, so I add cable ties for extra support. Ugly, but it works...
I then added two plastic plates - a base plate that holds the pump, and a numbers plate for the fountain to stream onto. To spread the light around the numbers, I used an opalescent plastic. I carefully engraved the numbers on it, but they weren't very visible. So I traced over them with a permanent marker. Again, one could do a prettier version...
Step 6: Adjusting the Nozzles
A sort length of tubing improved the flow characteristics, and also allowed me to easily adjust precisely where the stream was hitting. Basically, I just kept cutting it back until it hit at the right radius.
You can see in this picture how the nozzle is held on the servo with the short segment of tubing.
Step 7: Arduino
To control it, I used an Arduino. (This is actually my first Arduino project!) To make life simple, I used the Time and Servo libraries. In addition, I provide two push buttons for advancing the minutes and the hours in order to set the time without having to connect a PC.
For power, I used a 12V, 1A adapter. Although I run the pump at 5V, it draws too much current to be powered via the regulator on the Arduino Uno board. To fix this, I added an external 7805 5V regulator. This was getting a bit hot, so I added a small clip on heat sink.