The Bass Master 3000 is a game that I built for a work carnival along with a small and very talented team of co-workers.
I've seen this type of game on the net, but I wanted to kick it up a notch with some Arduino powered sensors that would trigger lights and sound when someone wins. What fun is a carnival without lots of noise and lights?
The trick was finding the right kind of sensors for the job. I accomplished this very successfully by using Piezoelectric Sensors to detect impact to a piece of felt. The sensors would not go off with basic back-and-forth motion such as wind or light movement. They required an actual "hit" to be triggered. Two sensors were all that we needed to get reliable coverage for an entire piece of weighted felt. Potentiometers were used to adjust sensitivity.
It works like this: Using a kids fishing pole with a small rubber ball attached, a player must cast the ball into the fish mouth. If they hit anywhere other than the red mouth, nothing happens. When they do hit the red, lights and bells go off.
As an added bonus, a webcam is mounted at the top of the frame. When someone wins, it captures a candid photo. A nearby display has an auto-updating slideshow displaying all winners for the day.
My team consisted of someone to build the frame, someone to paint the tarp, someone to work on the web slideshow, someone to work on the sensors, lights, and bells (me), and someone to help with everything else!
This was relatively easy to build and would be great for any work event or birthday party. It was a huge hit at our carnival! We always had a line of kids and adults waiting try their hand at being the best Bass Master!
This Instructable will show you how to build you own.
Oh, and I decided to enter this in the Epilog Challenge Contest because I could really use a laser cutter! The question isn't "What would I do if I won the laser cutter?", it is "What wouldn't I do if I won a laser cutter?". I would immediately put it to use making laser-cut kits for people to build along with my Instructables. If you think this is worthy, please vote for me in the Epilog and other contests I have it entered in.
Step 1: Gather The Materials
For this project you will need the following:
- One Arduino Yún (Radio Shack, Amazon)
You can also use a regular Arduino, but the webcam / slideshow features will not be available.
- Two 1 M ohm Potentiometers (Radio Shack, Amazon)
Any type will work. I bought a bulk pack from Amazon because they were dirt cheap and PCB mountable.
- Two 1 M ohm Resistors
- Two Piezo Elements (Radio Shack, Amazon)
- One 6x9' Blue Tarp
Exact size is not important. Use whatever works for you.
- One large piece of red felt
Size will depend on mouth opening for fish
- 1/2" Copper Pipe
Length will depend on width of red felt
- Duct Tape
- 30awg or similar size small wire (for piezo sensors)
- Kids Fishing Rod
- Rubber Ball (like those from vending machines)
Step 2: Assemble The Circuit
You can see from my picture that I created a DIY Arduino shield for this project. You certainly don't need to, but I knew I would be assembling and disassembling the electronics for this as we moved it around the building and outside. It was a simple circuit to assemble and having the shield make it a snap to connect and disconnect as needed.
I'm not good with Fritzing, but the wiring for this is pretty straight forward.
- First connect a 1 M ohm resistor between positive and negative on the piezo element. I soldered the resistor directly to my piezo as shown in the picture, but you may choose to mount on PCB or breadboard.
- Connect the negative end of each piezo to ground
- Connect the positive end of Piezo 1 to A0
- Connect the positive end of Piezo 2 to A3
- Connect one side of each Potentiometer to ground
- Connect the other side of Potentiometer 1 to +5v
- Connect the other side of Potentiometer 2 to +5v
- Connect the center pole of Potentiometer 1 to A1
- Connect the center pole of Potentiometer 2 to A2
- Connect the positive side of DC control to Digital Pin 3
- Connect the negative side of DC control to ground
- Assuming you won't be using a computer to run this, connect an external 5V power source to Vin and Ground
Once done, attach your sensors to the felt using duct tape as shown in photo. This is where you should use the small wire (30awg or similar) so the weight of the wire does not affect the sensors.
Step 3: The Arduino Code
The source code for this project can be found here:
There are three components to this:
- The Arduino webcam drivers
- The Arduino Sketch (Webcam.ino)
- The Angular JS Slide Show (in folder Yun_AngularSlideshow)
Part 1 - Arduino Webcam Drivers
In order to take pictures with a webcam, you must first prep your Arduino as described in this article. Go through the exercise of installing the fswebcam driver and test to see if you can capture an image. Once you have done this, move on to the next step.
Part 2 - Arduino Sketch
The Arduino Sketch is where the bulk of the action takes place. The code on GitHub is commented pretty well and should be self explanatory.
In essence, here is what happens:
- Upon starting up and entering loop(), the values from each potentiometer are read.
- The piezo sensor values are then also read.
- If the piezo sensor values are greater than or equal to the potentiometer values a positive "hit" is assumed.
- This causes the built in LED (pin 13) to light
- If picture taking is enabled, a filename will be generated based on timestamp, a picture is taken and written to the micro SD card, and then copied to /www/pictures/
- The picture filename is then appended to a file called "picturesList.txt" under /www/slideshow/
- Sensor values are reset to 0 after this process
- If the piezo sensor values are less than the potentiometer values, nothing happens, so we set the built in LED (pin 13) to low (off), and the acPin to Low so it will turn off whatever devices are on.
Debugging on the Yun can be a challenge so I added a "debugEnabled" option which can be set to true for easy troubleshooting. This will write to a text file just as it would to a serial monitor. The name a location of the text file can be adjusted in the sketch. Just don't forget to turn it off because this file will grow pretty large fast.
Part 3 - Slideshow
The Angular JS Slide Show consists of just three files that very simply rotate through all images found in "picturesList.txt". It will automatically reload the file as new pictures are added.
Once you have this up and running, all you have to do is point your browser to http://arduno.local/slideshow/index.html to begin the show.
Step 4: Lights & Sound
The lights and sound for this game are controlled by a single digital pin on the Arduino.
When this pin is raised "HIGH", it outputs 5v. That in turn drives a solid state relay (in the silver junction box) to turn on whatever I have plugged into it. In this case, I have the bell and red/blue lights plugged in.
one of these is very simple and out of scope for this Instructable. Just google "Solid State Relay" to find one that can be driven off 5V and can handle the load you are trying to drive and you will be fine. Be careful working with AC.
Step 5: Build The Bass
To paint your bass, find a decent picture on the net that you would like to use (If you search for "Bass Master Carnival" you should find several).
From here you can either take your best shot at recreating the image by hand, or do something a little easier like hanging the tarp on a wall and using a projector to display the image for easy tracing. After it is all traced out, apply the paint.
We used basic acrylic paint with pretty good luck, but be sure to cover it with some type of clear enamel coating when done. If you don't, you will find that the paint easily flakes off the tarp when hit (we learned this the hard way).
The mouth should be roughly 17" in diameter. You don't want to go smaller than this. The game is actually pretty hard even at this size!
When done and dry, cut the mouth out. I found that starting to cut with a razor blade, followed by scissors for the majority of the cut works best.
Now cut a piece of felt, rectangle in shape with at least 3" of overlap on the left and right sides. The top and bottom should have about 8" of overlap so it can be folded and height adjusted as needed (as you can see from my photo)
Measure and cut your 1/2" copper pipe to the width of your felt. Either sew, pin, or duct tape the pipe in place. The weight of the pipe helps make the sensors more reliable across the entire surface of the felt.
If using outdoors, you may want to add several "U" shaped cuts to accommodate wind as seen in my picture.
Step 6: Build A Frame
I'm not going to go into specific details on how to build a frame because you could really use anything here. We used 1" PVC which worked very well and was super-quick to assemble.
The key is that your felt needs to be somehow separated from your tarp. It has the sensors attached. If you attach it directly to the tarp, you risk it being "over sensitive" and getting a lot of false positive readings when someone hits the tarp instead of the mouth.
We decided to use a simple upside down "L" shaped arm extending from our PVC frame, very close to the tarp so there was only about 2" - 3" gap between the tarp and the mouth, but the felt mouth was separate.
This worked very well and we had very few false positive readings from the sensors aside from when the wind below really hard and caused the copper pipe to bang into the vertical arm. We later fixed this by securing the copper pipe with string so it wouldn't swing back and forth with the wind so much.
If anyone really wants to know how we built the frame, I have attached a simple Excel Worksheet that contains the parts needed and the assembly diagrams.
Step 7: Play The Game!
Above you can see a video of the finished product showing how well the sensors worked. Two piezo sensors provided just the right amount of coverage so that no matter where you hit on the felt, it reliably detected a "win".
As you can see from the pictures, our game was a huge hit. The two on the bottom are candid shots taken from the webcam. We had a constant line of kids and adults waiting to test their casting skill on the Bass Master 3000!