A friend wanted some funny light for a party and for some reason this came to mind:
A giant squishy balloon-ball that when you push on it changes its color and creates sounds.
I wanted to make something original and fun. It uses an air pressure sensor to determine how much the balloon part is being squished and is quite sensitive. It's programmable so it can have interesting behavior like sitting quietly cycling through a rainbow of colors until someone presses into the ball, then can change colors or even play a game like having the user try to match (via pushing/pressure) a color being shown on one or more of the LED's. Future additions could include a motion detection chip so that it starts to make noise and colors when someone is moving nearby, and a small inflation motor as the balloon part can deflate over a few/several days.
I tried several variations before settling on this design and a few of the pictures will hint at that but I will focus on making the final version.
Also, I did a lot of the building before thinking of making an Instructable for it since I didn't see the Make It Glow contest until later. I don't have as many pictures as I'd like but will try to cover the key points in building it so you can make one yourself. Anyway it's better to have enough understanding that you can "wing it" during building and know where the limits are so you can build without slavishly following a recipe.
The name is just for fun, Spectra Bauble™.
Step 1: Parts and Tools
- bandsaw or coping saw
- router (not absolutely necessary)
- soldering iron & solder
- 3D printer (you could make the LED holder some other way too; see below)
- drill and set of drill bits
- Forstner bits
- Pen (silver ink)
- compass (to draw circles)
- wire cutter and stripper
- grommet pliers and some grommets (not absolutely essential)
- spray on adhesive
- double-sided tape
- Dupont crimps and crimper (e.g. PA-09 but there are lots of other options; check out this other Instructable)
- some kind of high-volume air pump
- Vaseline (for air joints)
- a printer is helpful to print out some templates but not essential
* I'm including prices if I have them on hand
* I don't always have the link for the exact item I used but might link a similar item using "like this" or "e.g."
- 5 ring of addressable LED's (but you could use any assortment of WS2812 LED's really) $8.55
- MS5611 pressure sensor (the BMP280, $0.69, should be a drop in replacement, but slightly less sensitive) $4.72
- tubing, ~50cm
- hose connector (like this "pagoda joint hose connector")
- ball air insertion needle (it came with the 60cm/Medium balloon/ball--but not with the 120cm one)
- power supply 5V, 6A, 30W $5.50
- breadboard wire
- small breadboard (like this) $1
- stranded wire, say 22 or 24AWG
- small speaker (I salvaged it from a speaker I found junked on the street)
- Arduino Pro Mini (e.g. the atmega328 but I depending on your program, could also be the atmega168, or even better a wireless board like an ESP8266) ~$2
- power cable with wall plug (found in my junk collection)
- screw terminal connector (like this)
- round pin female header
- fake wool fur (from local fabric store) ~$5
- fake leather (from local leather store) ~$3
- MDF board ~ $5
- wood screws
- airtight container (I used an old vitamin bottle with a tight-sealing pop-off top)
- sealant (probably glue would also work but I happened to have a sealant)
- a couple of old wine bottle corks
- plastic bucket ~$3
- big squishy balls (I tried both a 60cm/M and 120cm) ~$10
- elastic cord, ~3mm diameter x 1 meter ~$1
- metal screw hooks
- piece of super stretchy fabric (I just searched at the local fabric store but this might work even better) The most expensive part! $14
So, how much did the parts cost all together? Maybe on the order of $75, which doesn't include the things I found in my junk/treasure piles--corks, power cable, speaker, tubing, air connector, airtight container, wires, screws, sealant--all of which might add another $15 or so if you purchased new.
Step 2: Pressure Sensor Chamber
I needed to have a pressure sensor connected to the ball somehow. I considered other options like sensing the pressure of the lower surface of the ball pushing on some kind of sensor, or having the sensor inside the ball or on the surface of the ball but the most reasonable option I found was to attach a separate air-tight chamber with the sensor in it to the ball via a tube.
I actually spent quite a while on a 3D printed pressure chamber design which theoretically would still work but ran into a glitch in the sealing of it and then just decided to go mano-a-mano with my junk pile and use whatever I had on hand, which was an old vitamin container with an airtight lid that makes a "pop" sound when you take it off.
Some pictures of the discarded 3D printed chamber included also, part of the unseen 'failure' work that goes into most any project.
Two holes drilled into vitamin container, one for wires (power and data), one for a tubing connector.
Wires and connector were glued in with some underwater sealant I had on hand but you could probably use silicone or anything that would be airtight and not develop a crack between the sealant-container interface after prolonged bending back and forth (what happens when you're fiddling around during construction and testing).
I sawed the vitamin tube off to the minimum sufficient length that wires and sensor would still fit inside since I knew space would be tight in the final construction.
I crimped Dupont connectors onto the wires so I could easily plug either the MS5611 high sensitivity pressure sensor, or the BMP280 cheaper one (I haven't had time to test the BMP280 yet unfortunately).
Make the wires long enough that it's easy to attach the sensor board outside of the container then stuff it all in and put the cap on.
The tubing shown in the picture was just for initial testing and later replaced with a much longer length, perhaps 30-40cm, so you can hold the balloon part and stick the needle end of the tube into the balloon without having to work in the cramped space of the bucket container.
Step 3: Base
I originally thought of just using the stretchy fabric to hold the balloon part down onto a platform of some kind, possibly made from styrofoam so that the whole construction could be mounted on the wall (this is still possible for a different version). Although I envisioned the fabric sort of being 'invisible' as it stretched taught everywhere, in reality it bunches up. If the base was huge, you could stretch the fabric way out to the sides and it would not bunch up but I wanted to avoid a huge base. I had the idea of increasing the base perimeter to take up fabric slack by making it kind of crenellated/stellate (see pics of cardboard prototype with 5 protrusions) and that sort of worked but finally decided to make a heavy base with a bucket.
In the concrete section of the hardware store I found a very cheap, awful-plastic-smelling bucket that was just about perfect (and only ~$3). I originally poured a bunch of old plaster of paris into the bottom to make a heavy base, and that would have been the end of the base, but the old plaster never set up and I just had a big clay-like mess I had to dig out of the bucket. So, another failure.
Pics of 5-lobe cardboard and plaster failure included above.
On second thought, I liked the idea of a separable base and also not so extremely heavy. I decided to try MDF.
In order to avoid having to work in the confines of the bucket, I cut the bottom of the bucket off and developed a system to pinch a base on to the bottom between two pieces of MDF. A circular piece of MDF slightly larger than the hole in the bottom of the bucket is screwed down onto the other pieces of the base below, so pinches the bucket down tightly, enough that you can carry the whole construction by the bucket and the base will hang on.
Other construction notes:
I eyeballed where I could cut the bucket off and leave enough room for the electronics beneath the lower radius/surface of the balloon as it pressed down. I drew a line on the outside of the bucket at that height with a silver marker (because the bucket is black) and used a box cutter/utility knife to slice (carefully) through the bucket. The plastic was very soft and it went fairly easily.
I put the cut-off bucket on the MDF and drew around the inside bottom of the bucket for where to route a channel that the bottom bucket edge could sit in. This is probably not absolutely necessary as the fur will cover up this edge but I thought it looked nicer.
The base is made of three disks of MDF, two below the bucket bottom edge and one inside the bucket that pinches the bucket down onto the other two pieces. The bottom two are slightly bigger in diameter than the bucket bottom--it's arbitrary but I made them a few cm bigger based on what I thought would look nice. They could be any size really.
I cut the MDF with a small bandsaw (that I got for $20!) and routed the top visible edge round, again not absolutely necessary but I think it looks nicer. You could cut the MDF with a coping saw; good arm workout.
I routed the MDF "pincher" disk's bottom edge so it was slightly more of a wedge shape that conformed to the sloped bucket sides when it got screwed down. It's probably not critical but I think it helped in centering the inner MDF disk a little more easily.
You can see in one of the pics how the bottom bucket walls bulge out slightly as the inner MDF pincher disk is forced down, locking the bucket onto the base.
Step 4: Feet for the Base
Because I decided to route the power cable out the bottom rather than the side, I wanted to add some feet to raise the whole construction up a bit to give the cable room to get out. I used an old cork and a few screws to make three feet (three points define a plane, so it wouldn't wobble).
There was nothing too complicated here:
- cut cork into three equal sections with utility knife
- measured each section and filed it until they were all about the same height
- drilled countersunk hole carefully through the center of each cork
- screwed into bottom plate of MDF at 120° apart using a template printed out on paper
Step 5: LED Holders
I went a little overboard on this part as I had many visions of variations of lighting and wanted something generic. I ended up with something semi-generic which you can adjust the rotation and angle of and which plugs into any 10mm hole (I used a Forstner bit to make a very clean-sided hole). I had other designs where the LEDs slid along a rail or did other things but it started taking up too much time. In fact, you don't have to have this holder, you could probably cut the bottom off a paper cup and put the LED ring on that then glue the cup end down.
Picture of some of the many failed versions. I must have had 20-30 versions and different geometries but finally opted for the split base which pinched the yoke part. Could be better but it works all right.
For printer settings see pictures.
The smallest part of the LED mounts snap into place as pictured and keep the LED ring from wobbling.
It's a tight fit to get the LED slid into the semi-circular yoke piece but it goes (snap the little anti-wobble parts in first).
Step 6: Fur Coat
Since it's a tactile toy I wanted the base to be something pleasant to touch too so I decided on fake fur and fake leather, white since the device itself should provide the color.
I had some fake fur left from another project, not big enough to cut what I needed in a single strip so I cut it into two pieces but it was not hard to hide the seams by pressing the edges together.
The base I covered with a piece of cardboard (from a pizza box) and sprayed adhesive on the sides then carefully applied the strip of fake white leather. It came out surprisingly well and the leather conformed to the top edge curve pretty well too. I trimmed the ends of the leather strip with a utility knife then simply pulled on them to close the gap as the material was quite elastic. The joint is barely visible from a distance.
Step 7: Putting in the Electronics
I 'dry-fit' parts often throughout the process to try to avoid any surprises later on that something wouldn't fit or there wouldn't be clearance or it wouldn't look right or whatever. I think this is a good habit when making things as it helps avoid a lot of mistakes.
I soldered some 24AWG (22?) gauge wire that I found in my box of random wire onto the power connections of the LED's. I soldered some round female header pin connectors onto the in and out data channels. I wanted to have some ability to remove the LED's without having them connected to a big mess of wires. This solution is not great but it worked. Each ring has a +/- power connection plus a data in/out connection. The yellow-brown wires (see pics) are the power, and the purple (breadboard wires) connect from the Arduino on the breadboard all the way to the last LED ring by daisy chaining from one ring to the next with one purple breadboard wire to the IN socket from the last LED and one purple wire coming from the OUT connector. I used the female round pin headers on the IN/OUT so the breadboard wire would fit in snugly. The last LED ring in the chain has no wire connected to its OUT pin.
The LED rings don't take a huge amount of power, but, it is 5 x 16 = 80 LEDs and altogether I was estimating up to 4A maximum with all on full power (apparently each is about 50mA on full, comparing to similar product https://www.pololu.com/product/2537). Therefore the 6A power supply. Since the power was going to each LED ring individually I thought that 24AWG would be sufficient (compare to ampacity ratings for different AWG's https://www.powerstream.com/Wire_Size.htm). I used slightly thicker wire (I think it was 22AWG) from the power supply to the connector block that distributed power to the LED's since there were fewer wires, more current per wire. I was not extremely cautious as I did not plan to run all LED's at full power for any significant length of time. I guess if that's how you wanted to run it, you might want to check the wire gauge more closely to see if it supports that current without overheating.
I printed a power cable strain relief from Thingiverse, "rtideas" https://www.thingiverse.com/thing:1232881
I screwed the 5V 6A power supply down with two tiny screws. The first power supply I used blew up as some wires shorted out since the power cable wires weren't firmly attached so I was more careful after ordering a replacement supply. I really tightened down the input and output power wires to this supply.
I used a connector block to bring the 5V power to the LED's and to the breadboard in order to have strain relief between the power supply and components and a kind of distribution point for the power other than straight from the supply (maybe not absolutely necessary).
The breadboard has a piece of double-sided tape to keep it in place. Might work loose in a very hot climate? It holds pretty well for me.
The MS5611 wiring is not totally obvious--with the library that was used it expects that its SDA pin is connected to A4 on the Arduino, and that the SCL is connected to A5 on the Arduino.
Sorry the wiring diagram is kinda ugly but I wanted to at least put some kind of diagram in.
Step 8: Protective and Diffusing Fabric Shield and Mounting Balloon
I like the look of the ball with no fabric on it but there are some issues with that:
- it can just be pushed off, which would rip the tube out of it
- in a party/play setting where people might get carried away pushing things into the ball it raises the risk the ball gets punctured.
- the lights are not as diffused...which is not really a problem, just a choice of aesthetic and either way can be good
I imagined a super stretchy fabric that would go over it smoothly but in reality the fabric on the bottom side bunches up. It's possibly that stocking/nylon fabric might stretch more and bunch less but I don't have that on hand. I could have cut the fabric like a basketball I think and sewn it on those seams to be form fitting to the balloon part but it's have ugly seams then, although potentially doing that on the bottom part where the fabric bunched up could be a nice solution. I didn't have time to try that and decided to pull the fabric down by adding grommets on the bottom side and pulling them to the base with metal hooks. Not great visually, but passable when viewed from slightly above.
I considered diffusing the LED's with that special plastic foil made for diffusing light in light boxes (see pics) but decided the balloon plus fabric made it diffuse enough.
Adding the Fabric:
- cut fabric to roughly square shape
- marked out 8 roughly equi-distant points along a circle offset from the edge by a few cm (to give anchor points some buffer against ripping out)
- put grommets in (after much trial and error to find a way to get them to pinch the fabric); used a little ring of thin cardboard to help pinch the fabric better.
- draped fabric, centered, over bucket
- put inflated balloon onto bucket with fabric
- threaded elastic cord through holes and cinched it up around balloon (tricky to do as one person)
- tightened and tied off cord
Then it's just a matter of inserting the balloon needle (put a little vaseline on it to help seal the joint from leaks; ditto for vitamin container cap) then putting the balloon on the bucket and reaching down to loop the elastic cord over the metal hooks which are protruding around the base.
This anchors the balloon down so it can't be pushed off by the user but leaves enough elastic slop that it can easily be unhooked and also can withstand severe pushes of drunken revelers or crazy kids high on sugar.
I had a hard time inflating it. First of all there was apparently no hole and so I very carefully poked a hole in where it was supposed to be with a large needle (~1mm diameter). Then you kind of need a high-volume pump of some kind to inflate it. I happened to have an air compressor. I think with a bike pump it would take an infinitely long time to inflate (at least an hour).
Step 9: Software
That's about it.
Oh, software. Make it alive.
(in this final pic of the assembly in the bucket, you might notice an extra chip hanging on wires off the breadboard. It's an audio amplifier, PAM8403, which I am testing out. You can get sound out of the speaker without it, but the amp makes it much louder. It works but with a terrible buzz (no doubt given the wiring situation) so I am not describing it for now). The video at the top of this step shows the sound without the PAM8403 and you can see it's reasonably loud.
The brain of the Spectra Bauble is an Arduino Pro Mini 368.
The code is a 'work in progress.' I only had time so far to code this behavior:
When you switch on the power it makes a kind of R2D2 beep. When you push on the ball and the pressure raises it emits a tone whose pitch rises with ball pressure. When you reach a certain maximum pressure the lights go berserk, making random bright flashes and finally doing a wolf-whistle. The idea behind the max. pressure trigger was to keep people from pressing so far into the balloon that it might get punctured. So, some slightly negative feedback.
Thanks to Connor Nishijima for the Arduino sound library (and sound effects) which lets you output sound on the speaker without any extra hardware. The LED's are driven with the Adafruit_NeoPixel.h library but I believe there are other libs that will work as well (libs for WS2812 LEDs). The pressure chip is controlled with the MS5611.h lib.
The code shown running in the video is attached.
There are a ton of behaviors that could be programmed, some of the ideas I had, "todo":
- push a pressure pattern to unlock secret color displays or use user-push pattern to switch behavior
- change behavior/response over time so user doesn't get bored or 'figure it out'
- rolling/swirling: lights swirl on individual rings one by one and 'pass off' light to next ring
- enhance super sensitivity to just atmospheric changes (so will flicker; expand color range probably)
- delay response (more confusion/unexpected behavior to keep the interaction fresh)
- game mode:
-- flash a color and user has to push with just the right pressure to match color
-- user has to follow a color (some rings show target color, others show user's current pressure color)
-- choose favorite color from color sweep then following light show will be in that color
-- color bounces between opposite-ish rings and if user 'hits' at midpoint(time) then execute new behavior
-- repeats user input, lures user into playing with different patterns of input
- can pressure sensor pick up yelling?
- default to 'breathing' light, occasionally flash to attract attention; if radar chip added react when people approach
Step 10: That's All She Wrote
So, that's it. It's not as done as I would have liked but I ran low on time.
I would have liked to have added the amplifier to make the sound louder (although the sound using the smaller ball inflated to the same size was very much louder...I think the extra rubber in the large ball damped the sound out tremendously).
I have an mp3 board and would have added spoken word sound effects or music.
I wanted to add a radar chip (RCWL-0516) so it knows when someone is nearby and will start acting up.
I have a small blood-pressure type pump and wanted to add that into the balloon tubing circuit so the Arduino can turn it on to inflate the balloon if it measures too much of a pressure drop (deflation of balloon).
I thought about using it as a controller for other things, like a small flame thrower made from a plant-watering pressure-mister, the flame size being related to pressure value, or household items like a light or stereo system volume control
The sound output could also be routed via bluetooth to external speakers.
The ball should inflate to over 1.2 meters but I haven't tried that yet. Might be an interesting experience.
So many ideas and so little time..
Well, here is at least something. Give it a shot.
Special thanks to Tom for testing the Bauble and showing how much fun it can be. :)