Introduction: Animate a Billy Bass Mouth With Any Audio Source
Update 12/18: Because the world is weird, Amazon now actually sells an Alexa-compatible Big Mouth Billy Bass. The bad news is that it's very limited and the reviews are terrible. The good news is that it's one of the most hackable versions of the fish yet with lots of swappable JST connections inside and optimized for 5v USB power. You can see my teardown of this new fish, if you're curious. The bottom line is that the following guide should still work for this new breed if you want to get it working with any audio source.
Update 06/19: By popular demand, I've written a follow-up guide to this one that addresses many of the shortcoming of this tutorial (expense, tail/head movement, wires, lack of onboard sound). That bad news is, the guide is on another site. Here's the video for it, though, to give you a sense of what's involved.
This project started when artist named Brian Kane published a viral video showing a Big Mouth Billy Bass novelty singing fish, seemingly voiced by Amazon’s Alexa virtual assistant. The internet went nuts for it, and so did I -- but mostly I just wanted to know how it worked so that I could make my own.
After seeing a number of Raspberry Pi projects that made use of Alexa, I initially assumed that Brian had created an Alexa-powered Pi project that doubled as a means to animate the existing Billy Bass hardware -- and that may be the case. I even posed this idea on my weekly YouTube show, Maker Update.
But after giving it some more thought, I figured the easiest hack would be a way to simply use the audio from a $49 Amazon Echo, and process it through an Arduino to drive existing motors.
I already had an Arduino and a motor shield handy (though this was my first time using the shield).
Next, I ordered the Billy Bass used on Amazon for around $15. I’m sure you can pick up a used one at a yard sale or Thrift store for less money, but I wanted one quickly. I also ordered the Echo Dot new.
With those ordered, I moved on to research. Two Instructables provided me with hope: this 2012 guide from sfool on using an Arduino to make a servo move to sound and this 2013 guide from Dotten on understanding the animatronics of a Billy Bass toy.
Understanding that the Billy Bass (much like a Furby) is essentially driven by two cheap 5v DC toy motors -- the problem then becomes simply how to make these motors twitch in response to sound. With a little trial and error, I found a workable solution. The code is far from perfect and there are a lot of other features I want to build in, but I wanted to get this up so that everyone can help make this better.
Materials Needed
- Big Mouth Billy Bass Singing Fish (1)
- Arduino Uno (1)
- Arduino Uno power supply (1)
- Adafruit Motor Shield v2 (1)
- Panel-mount minijack (1)
- Stranded hookup wire (multiple colors helps)
- Amazon Echo Dot (though any audio source should work) (1)
- Small rechargeable speaker of some kind (1)
- Minijack (⅛”) audio cable (1)
- Minijack splitter cable adapter (1)
Tools Needed
- Small Screwdriver
- Soldering Iron and Solder
- Wire strippers
- Snips
- Drill and bits
Step 1: Prepare the Fish
For better or worse, by used fish was dead on arrival. At least I had no hesitation about opening it up and hacking it. For my hack, simply undo the screws on the back, open it up, and apply gentle pressure to unseat the cable harnesses so that the back can be removed completely.
To create more room for the electronics we’ll be adding, unscrew and remove the Billy Bass circuit board and piezo buzzer.
What you have left is one 4-wire harness sticking up from the fish. This includes two wires that animate the mouth (you can see them trail into the fish) and two wires that raise either the head or the tail depending which way direction you run the motor.
The last step in preparing the fish is to cut four equal lengths of different colored wire, expose and tin the tips, and insert the ends into each of the four sockets in the wire harness. In the next step, we’ll connect these to the Arduino motor shield.
Step 2: Prepare the Motor Shield
There are only 4 connections you’ll need to make to the motor shield, and only two of them are soldered. You can also hook up an additional two wires if you want to experiment with the tail/head motor.
Let's start with the soldering to get it over with. To create an audio input for your fish, take two equal lengths of different color wire, strip the ends, and solder one to ground, and one to Analog 0. Clip away any excess wire running through the board.
Now let’s run these wires to the panel-mount mini jack for our audio input. The jack I had was one of those fancy mono switch jacks with three possible connections. All that matters is that you create a mono input by running the wire from Analog 0 to the lead on the jack that makes contact with the tip of the audio connector. Then run the Ground wire to a lead on the jack that makes contact with the base (or sleeve) of the audio connector.
Next, to connect up the fish motor(s) to the shield, run the pair of wires leading to the fish mouth motor (black and orange) into the terminal blocks for motor 1 and screw them down. Optionally, you can run the tail/head motor wires (white and red) to the terminals for motor 2, though the code does not yet do anything with this motor (more on this in the next section). For my fish, the wire coloring on the terminal blocks goes black, orange (yellow in my case) for the mouth motor (M1) and white, red from for the optional tail motor (M2).
Finally, check that the motor shield has the jumper sleeve attached to the pins labelled VIN Jumper. I missed this initially and was scratching my head wondering why the shield wouldn’t power on. You should now be able to sandwich the shield onto the Arduino Uno, power up the Arduino, and see a power indicator LED light up on the shield as well. If the shield doesn’t light up, I’d check the jumper.
Step 3: Load the Code
So, the code’s a messy hack that pulls together elements of the DC Motor Test sketch (essentially the demo for the motor shield) and the Sound to Servo sketch by Cenk Özdemir (2012), included in that Arduino Sound to Servo Instructable I linked to above.
Also, be sure to download the Adafruit MotorShield V2 Library, as this code will reference it and it's needed to drive the motor shield. You can find the library here (or install it directly through the Arduino Library Manager): https://learn.adafruit.com/adafruit-motor-shield-v2-for-arduino/install-software
The code in its current state does not yet animate the head/tail motor. I had one version that did, but it slowed down the responsiveness of the mouth movement. Ideally I’d like the mouth to remain responsive while the head and tail slowly cycle through their own animation, but this is the current limit of my Arduino coding capability. As soon as I figure it out or get suggestions from you guys, I’ll post updated code.
Attachments
Step 4: Putting It All Together
With the code loaded, and the audio cable connected to the jack, you should be able to make the fish’s mouth move just by connecting an audio source to the free end of the cable (I used my phone playing a podcast). If it’s working, drill a small hole somewhere on the plastic fish plaque, push the jack through and tighten it in place.
To get Alexa (or whatever you want) talking through your fish, connect the free end of the audio cable to the Y-adapter, the rechargeable speaker to the other input of the adapter, and then run the male plug of the adapter into the audio output of the Echo Dot.
Make sure your speaker is switched on and the volume is up on both the speaker and Alexa. Then, summon Alexa and ask her a question to get her talking (weather, jokes, news). You should hear her voice through the portable speaker while simultaneously witnessing your fish’s rubber lips flapping in time. The closer the speaker is to the fish’s head, the more uncanny the effect is.
If it’s all working out, the trick then becomes packing the speaker and Arduino into the Billy Bass enclosure and closing it up. Honestly, I’m still figuring this bit out.
Step 5: Where Next?
There’s a lot left to do here, and I welcome all your suggestions on making this better. I'd love to post a version 2.0 for this in the near future.
1. I want the head and tail to animate. The connections are there and I’ve been able to get them working but not without sacrificing the responsiveness of the mouth, which is critical.
2. I want the speaker to be able to recharge from the Arduino. Seems simple enough, but I haven’t done it yet.
3. I want the Billy Bass red button (or a substitute) to toggle between a “speech” mode (more about mouth movement and the whole “talking fish” appeal, and a “music” mode that’s more about the fish flopping around in time to music.
4. Cleaner code. I’m certain there’s a lot of leftovers in the code from the mashup I did. I welcome any efforts to clean it up.
5. Use a smaller Arduino. The Uno and Motor Shield are totally overkill for what we’re using it for. I think that an Adafruit Feather and their 2-motor shield for the feather would be a nice alternative. Perhaps you can have one powering the mouth and a separate one powering the tail-head motor.
80 Comments
1 year ago
Hello
I'm looking for urgent help to my Billy Bass DIY mod. I've followed the instructions and used the code, but I only get a very weak signal to the fish. I can hear a whisper around the servo motor on the fish, but no movement.
I've used the same tools, as the tutorial - except the motor shield, which is not an Adafruit Motor shield but a MH Electronics motor shield.
Any help would be very appreciated!
4 years ago
Hi. Is there any way to put the speaker inside the fish?
Thanks!
Question 4 years ago
Hi There! I'm having an issue getting this to work. I've got an Arduino Uno and Adafruit Motor Shield V2 in place. The code seems to work and the first time we connected it, things started to move slightly. The boards were "whistling" a high pitch sound at first, and then it stopped, along with the motor movements. I've tested the motors by connecting them to a power source outside the motor shield and they do work. I'm not sure if the Motor Shield just isn't wokring anymore or what, but it is getting a power light. Any suggestions?
Question 4 years ago
Hi Donald, I am currently trying to finish my Billy Bass, but am having problems getting the mouth motor to move enough. I am using an Osepp motor shield because the adafruit one would not get to me in time to give this as a Christmas gift. The motors are running but it does not seem to have enough power to move the mouth.
Thanks, Josh
Question 4 years ago on Introduction
I think I have it all wired up but as far as I can tell I'm not getting audio in to the motor shield. How could I try to trouble shoot it?
Answer 4 years ago
Serial print the value of the variable
Question 4 years ago
Hey Donald, is there any way to have the sound still come out of the Alexa and not have an external speaker?
Answer 4 years ago
Not without opening up your Echo. Like many devices, the Echo's minijack output is wired to disconnect the speaker when a cable is inserted. I'm sure it's possible to bypass, but messy.
4 years ago
Some folks have asked me for the code I used to get the head and mouth movement at same time. I posted my code here:
https://github.com/jswett77/big_mouth/
Hope this helps. The one issue I have now is that voltage out isn't really enough to fully articulate the body. For example, when I hooked up batteries directly to the motor I could get more articulation than when I set the motor to 255. I measured the voltage out at about ~3V so maybe there is a max on the motor shield? (I really am new to hardware so I don't know if it is work aroundable)
Reply 4 years ago
The motor shield may drop too much voltage; when operating, there would be one transistor between ground and output, and one between input power and output. One could use a bit higher voltage, or find MOSFET drivers with less voltage drop (but capable of handing the amperage of the motors).
Question 4 years ago
Great instructable! Trying to figure out if it would work similarly with one of these giant dancing/ singing Santas: https://www.homedepot.com/p/Home-Accents-Holiday-72-in-Animated-Dancing-Santa-5230-72625HD/206954020 Please try this next! hahaha
Question 4 years ago
Any update on getting the head/tail to move?
Answer 4 years ago
Here is the code I got to work for both head to move while mouth is moving:
https://github.com/jswett77/big_mouth/tree/master
Question 4 years ago
Do you sell these yet?! Thanks!
Question 5 years ago on Introduction
Hey Donald. I got my Billy Bass mouth motor working but the lips don't move much. Do I need more power? Thanks again for your help. -- John (johnsigwald@texasonline.net)
Answer 5 years ago
Got it! I just needed to reverse the motor and ground wires! Now if I can just get Katrina's code to work to move the head out I'll be a happy camper . . .
Question 5 years ago on Step 5
Hey Donald. I have the same setup kaiS30 had a year ago (I didn't notice an answer, though). When I connect the red and orange wires I just get a clicking sound, even without any sound input. I think I uploaded the .ino file correctly to the Arduino but I just can't figure out what I'm doing wrong. Thanks so much for your help. -- John (johnsigwald@texasonline.net)
Question 5 years ago on Step 3
What can I use in place of the adafruit motor shield v2?
5 years ago
I've got to believe that this Adafruit 3 part series on State Machine's would help with the multiple servos: https://learn.adafruit.com/multi-tasking-the-ardui...
Reply 5 years ago
Hallelujah! This looks promosing. Thank you!