Reuben L.

My name is Reuben. I am a rising senior at Fiorello H. LaGuardia High school. I chose the Bubblesteen Bubble Machine, a bubble-blowing robot. I chose this project because I wanted to get more exposure to the programming side of engineering, while still keeping my feet planted in mechanics. I chose the Mini POV peoject from Adafruit as my starter project, because I was drawn to its simplistic, artistic beauty.

Reuben L.
Area of Interest
LaGuardia High School
Incoming Senior


I learned so much in my process of building the Bubblesteen. I learned how to teach myself new fields of engineering, like working with a shift register.

The Bubblesteen Bubble machine helped me to understand myself as an engineer, and to be comfortable with the world of engineering. It also helped me be less afraid of failure; the Bubblesteen process was strewn with failure after failure, leading eventually to a success. As Jerry Seinfeld said, “Keep your head up in failure and your head down in success.”


Final presentation

The most difficult part of the last few stages of building the Bubblesteen was making sure that the bubble wand could effectively dip into the bubble fluid. In order for bubbles to be blown, the wand had to be able to submerge its tip completely in bubble fluid. The fluid cup had to be specially engineered to be the perfect size. Too large and the wand wouldn’t be able to fit in; too small and it wouldn’t hold enough fluid to completely submerge the wand. This task proved to be much easier after the wand system was elevated a quarter inch higher, on a cut piece of acrylic.

The other major achievement of the final stage of this project was getting the fan motor to spin quickly enough. In the previous stages, it had been impossible to blow bubbles with the motor controlled by the Arduino; it was too weak. The solution to this problem was simple. I separated the motor from the Arduino completely, and I replaced its power source with two 9v batteries connected in parallel. I also added a switch. This proved successful. The motor was strong enough to blow bubbles. It was somewhat inconvenient, however, because the two components of the robot worked separately only.

My first mod plan was to make the bubble machine wifi-controlled, but lack of access to reliable wifi without a login showed that to be impossible, or at least in need of a postponement. Instead, I focused my work on making the bubble machine into an alarm clock, that would wake me up with bubbles. There were two main concepts that I had to learn in order to accomplish this task: one, how to make a clock display, and two, how to keep time on an Arduino with an RTC.

The clock display was interesting, and not too difficult. The display had 12 pins: eight controlled each digit’s eight segments, and the remaining four would establish which of the four digits were receiving the image the eight determined. The pros of this 12-pin system is that it keeps the number of pins needed to a minimum, but unfortunately it also means that only one unique number can be displayed at a time. To circumvent this setback, I had to have the computer send its four-digit numbers one at a time. Luckily, persistence-of-vision made the display on the module look fluid and normal.

I wrote a simple counting code in order to get acquainted with the display. Each digit increases its value until it reaches 10, at which point it reverts back to 0 and alerts the next digit in line to increase by one. Once I saw it working, I felt ready to move on to controlling the display with an RTC.

But before I could, I was given an assignment. I was told to try to control the display with a shift register. Including this component would complicate the process of building a clock, but it would make it so that only three digital output pins on the Arduino would be necessary to control the whole clock.

To control the shift register, I had to become well acquainted with the shiftOut() function. It controls a shift register with four parameters: dataPin, clockPin, bitOrder, and value. DataPin and clockPin are the Arduino output pins that control the shift register. BitOrder just determines direction: Does the value enter the register headfirst or feet first? This is important, because the shift register sends data out of its eight output pins by giving the  information to the first pin, and sending its instructions down the line. Finally, value refers to a number between 0 and 127 that will determine the output the shift register gives. (With eight output pins, the shift register has 127 different combinations of ons and offs.) The number is translated into its binary code, and the eight digits of this binary number are assigned to the eight output pins on the shift register.

After figuring out how to send different arrangements of ons and offs to the shift register, I had to figure out how to turn the contraption at hand into a clock. It wasn’t as hard as it seemed: All I had to do was create four different variables, in the code: one for each of the four digits in a digital clock. Then, getminute() and gethour() were used to determine the values of these variables.

Finally, I had a clock. It was stationed on a breadboard, and I wanted to transition it to something more solid, but soldering the thing to a PCB proved an overly complex task. I settled for the breadboard.

The next obstacle I had to surmount was connecting the two projects – the clock and the bubble machine – to each other. The problem with this, I believed,  was that the servos and the clock occupied the same digital pins on the arduino, and the problem with this problem was that it was not clear which pins the servos were connected to. However, even changing the pins I was using did not seem to solve the problem.

I decided to keep building the project regardless. The problem would not interfere with the function of the project very much, because the clock part and the bubble-blowing parts of the machine did not often work at the same time.

The project was completely finished apart from this problem, so I decided that the trouble this problem caused me could be considered insignificant enough to ignore, at least for now.

I encountered another problem afterwards: The motor and propeller I had set up did not spin quickly enough and with enough force to blow bubbles at all. They once had, but since then I had switched out the motor for a weaker one.

At this point, I had two 9v batteries, in parallel, attached to a BJT that was controlled by the Arduino. I tried attaching them in series instead, but that didn’t work. My next idea was to replace the propeller with a more efficient one, but even this couldn’t get it to spin quickly enough.

For my final presentation, the motor was controlled by a switch. Unfortunately, the machine would have to be controlled by the Arduino in order to function as an alarm clock. My work was not done.

Getting the Arduino to control  the motor was so difficult because few BJTs or FETs are capable of handling the immense voltages I asked of them. To finish this project, I might have to experiment with a Relay – a kind of electronically-controlled switch.

My final schematic


My code and schematic:

The fan I used, download from Thingiverse:

Bill of Materials:


Second Milestone

At the second milestone, the two pieces had been mounted on a frame, and the arduino had been mounted beneath. The positioning of the arduino beneath the frame was important, because it kept the servo protected from splashes.However, there were multiple problems with the code that had to be fixed, and the fan proved to be too weak to blow any bubbles. The code that was posted on the bluestamp website was buggy; when any one servo was “waiting” for the other to complete its tasks, that servo would spin wildly, in circles, out of control. This was likely because the code was written for 180˚ servos, and the servos I had bought were continuous-motion servos. The code had to be rewritten for the servos I had. Also, no cup of bubble solution was put in place.

First Milestone

At the first milestone, the individual components (the wand controller and fan) were completed, and working. They were not, however, connected to any sort of structure. That would have to wait til the next milestone. The wand controller is made up of two servos, one on top of the other. The bottom servo controls the rotation of the two, and the top one controls the rotation of the wand. This way, the wand has two planes of rotation. This is necessary because the wand needs both the ability to dip into a cup of fluid and the ability to move itself in front of the fan. By this milestone, the servos were glued together and connected to the arduino. The code was written. Additionally, the fan motor was working.

Starter Project

Starter Project Video

The Mini POV project was a great project to get started with. It provided me with plenty of soldering experience (It included a grand total of 122 solder joints), and it also helped me gain a more complete knowledge of the uses of the electrical components involved. Most of the circuit’s components were used to regulate the voltage in the circuit. The circuit is powered by three AAA batteries, and if left unleashed, these batteries would fry the microcontroller and the LEDs. So 14 resistors are used, as well as three capacitors and two Zener diodes. The human eye can only process changes happening at about 40 times per second. This means that a movie that shows fewer than 40 frames per second will look like a collection of images, while a movie that displays more than 40 frames per second will like a smooth moving image. This also means that a fan’s blades will be visible as individual blades only if the blades pass by one’s eye fewer than 40 times in one second. There’s one more quirk of the human method of perception that is utilized here, and it gives the mini POV its name. It’s called persistence of vision. Fast-moving objects blur; they appear to the eye as existing in more than one place at once, or as stretched out. The mini POV takes advantage of these aspects of human perception. The POV can, when shaken back and forth, appear to be a two-dimensional image. (This is very cool.) The POV worked immediately when turned on, and no troubleshooting or rewiring was needed.

Leave a Comment

Start typing and press Enter to search