Introduction: Animate a Billy Bass Mouth With Any Audio Source

About a month ago, an 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.

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.

Comments

author
AlexV202 made it!(author)2017-06-01

This is so cool. I'm currently working on this project on my own fish :) I do have a question though: to operate this would require that the Arduino be constantly plugged in? If so would it be possible to potentially just run it off a portable battery source such as with the original fish. I apologize if I'm mistaken.

Thanks :)

author
Donald+Bell made it!(author)2017-06-02

You could connect up a 9v battery with one of these and see how long it lasts (http://amzn.to/2rzCdMY), but I imagine it will chew through batteries quickly. I would add a power switch too. You could also try a USB rechargeable battery pack like this (http://amzn.to/2qIObjK) and see what happens. It may last longer than the 9v battery (and less wasteful) but suspect that the motor shield is going to be happier with the 9v connected power supply.

author
The+RetAardvark made it!(author)2017-05-22

Hello Donald!

I nearly fell out of my chair when I saw you made a walk through and video about this!

I've been buying every version of Billy and other singing fish or animal i come across for some time in preparation of right now.

About 7-8 years ago, I saw the video below and swore I would build one. I found several other videos and builds similar to this one from the same time period. Great work utilizing Alexa, BTW! I've compiled a bunch of info over the years including different versions of code, although some is for MBED/ARM.

I need to go through my notes and info and review this forum so I'm not repeating what's been discussed.

There were def some clever ways to get all 3 motors reacting independently to whatever input method you decide on. I liked the idea of using a simple talk to text engine that incorporates a randomized +/- millisecond stutter while assigning a value to vowels = 0 (mouth open), consonants = 1 (mouth closed) Sorry for babbling. I'm just excited at the prospect that there are others who are into this!

cheers!

author
Donald+Bell made it!(author)2017-05-22

I'm so glad you found my guide! It's a bit of a hack compared to proper animatronic program, but it's effective!

author
socialmeteor made it!(author)2017-04-21

I'm gathering the parts to make this now.

Donald, given your passion for maker projects, I suggest you put together a kickstarter campaign to create Animatronic speakers for Alexa. I think it would be quickly funded and would allow for a lot of creative flexibility. Something based off of Billy the bass w/be an ideal first project. It could use a universal audio input, or be configured specifically for something such as the Amazon Dot. Cheers!

author
Donald+Bell made it!(author)2017-04-21

Cool idea! I did recently pick up a couple of these dancing cat animatronic speakers to play around with. Just waiting for a free afternoon to tinker with them. http://amzn.to/2pMw2ln

author
Donald+Bell made it!(author)2016-12-10

After appealing to the Reddit Arduino forum, one lovely sole named Hello_Mouse gave me a few ideas to streamline the code and possibly get the tail moving without compromising the mouth movement. You can read the thread here (https://www.reddit.com/r/arduino/comments/5heyq7/n..., but the gist is that perhaps I'm wasting time by ramping the motors up and down instead of just driving them at a single defined speed. As for the tail, I'm told to investigate the "Blink without Delay" example, found here (https://www.arduino.cc/en/Tutorial/BlinkWithoutDel... and explained here (https://www.baldengineer.com/blink-without-delay-e.... I did some playing around with it and I'm optimistic, but it will take some time for me to figure out how to swap out the LED example given for a motor function. Seems possible, though.

That's it. Just wanted to give you all an update. I'm also exploring a way to simply drive both motors separately using two Arduinos and two inexpensive DC motor shields from Pololu.

author
DamienR3 made it!(author)2017-04-15

I'm about to attempt this project this week. Has there been any advancements in the code, or do I still use the one posted?

I'm super excited, this is my introduction to Arduino and coding.

Thanks for posting!

author
Donald+Bell made it!(author)2017-04-15

The code's still good, as far as I know. No updates from me. I did eventually add a second Arduino to animate the head/tail flapping and I need to post the guide and code for that when I have some time. Good luck!

author
DamienR3 made it!(author)2017-04-15

You added a whole second arduino and motor shield?? Do they flap up to your expectations? I'm all in to try that too!!

author
gonzotronn made it!(author)2017-03-14

Is the bass powered by the arduino uno or does it need to be powered by the ac adapter/batteries?

author
Tony--K made it!(author)2017-02-19

Great project!!

But I wonder about a different method: would it be possible to connect the jack for an audio source in such a way that it replaces the song signal Billy Bass uses, and not bother with the Arduino and motor shield?

author
ErikE37 made it!(author)2017-01-05

This was Great way to get introduced to Arduino. Everything has worked exactly as described. First time N00B on using the Arduino Programming tool and uploading code to the board. Now, since I know ZIP about coding, I may have to wait until others "perfect" the code...or...maybe not...I do know how to screw things up all by myself...

Alexa BMBB.jpg
author
KaiS30 made it!(author)2016-12-17

Hello, My big mouth bass has the red and black wires and also the orange and yellow ones. However, the yellow has another white attached and the oranges has another dark orange attached. And also it does not have those white connectors, it is directy wired to the bord What does this mean and how do I Do the project with it?

20161217_175933.jpg20161217_175927.jpg20161217_175919.jpg20161217_175908.jpg
author
piratetv1 made it!(author)2016-12-11

iv'e got some ideas for the tail and neck. im thinking a timer that taps the tail at a regular interval like it did during its normal songs .5 sec maybe. as for the neck im thinking a 4 second timer. if the audio threshold is reached set a timer for 4 sec, count down to 0. any time the threshold jumps up, reset to 4 sec.

if timer != 0 neck motor is on. 6 v is too much,( grinds the gears) im going to try 3.5v

im also thinking we can ground the motors with the output pins, and not need the motor drivers.

im going to mess with it tomorrow.

author
Donald+Bell made it!(author)2016-12-12

I like it. I'm looking into more motor sketches that integrate the (millis) function for timing things without introducing delay that would effect the mouth movement. There's a lot out there to wrap your head around (no pun intended) but I prefer that to there being no info.

author
Jesse_McBrower made it!(author)2016-11-29

So I got this thing put together and it works; great instructions! Now I want to make it more or less self-contained. Power is my main concern, though; has anybody tried running this all off of a LiPo battery?? I'm tempted to get a PowerBoost1000, make a power strip and give it a shot...

author
Donald+Bell made it!(author)2016-11-30

I haven't tried, but I'm optimistic. I don't expect that the power demands of just one or two little DC motors is all that much, but I could be wrong. Let me know how it goes.

My goal is to just have one power cord going to the whole thing and find a way to get audio to Billy wirelessly using a Bluetooth dongle like this: https://www.amazon.com/dp/B008AGQMQC/ref=wl_it_dp_o_pC_nS_ttl?_encoding=UTF8&colid=8ZA72X1NMKIT&coliid=I20UKXGESPER28

author
Jesse_McBrower made it!(author)2016-11-30

I was thinking the same thing, too; I tried using a 9v battery to power the motors and it seemed to work, I just don't know how long it would last for. I was also thinking of hooking up the power switch on the back to the battery so I could turn it on and off, and connect it to the Dot via Bluetooth like you were saying.

Any updated versions of the hardware code out there yet?? That's what I'm struggling with adjusting the most, and I'd love to get the head to face forward on activation like Brian's did.

author
katrinasiegfried made it!(author)2016-11-30

I also built this and I was thinking the next step would be to solder the power supply from the 4 AA batteries in series on the back of the billy bass to the 5-12V motor power on the arduino shield. I think you can leave the VIN Jumper sleeve on and that keeps the power supply the same between the board and the motors, though ideally I think you would want to have them separate to protect the board. The 9V battery probably wont last long because it will deliver inconsistent current, I would recommend a lead acid battery maybe?

author
Jesse_McBrower made it!(author)2016-12-03

I think I'm going to go with a PowerBoost and 3.7v Lithium Ion battery; I really want to set it up as an animated Bluetooth speaker I can connect Alexa (or even my iPhone to for podcasts like Bill Burr's) to, so that's the ultimate goal at this point.

Has anybody found or written any code to animate the head and/or tail on Alexa activation?? That'd be cool to include in the build, too, but my C skills are pretty n00b level

author
katrinasiegfried made it!(author)2016-12-04

I got the head and tail to move properly with initiation of Alexa, but I still haven't resolved the interference that Donald also encountered (the head would come up but the mouth wouldn't move properly). I originally was using the 2-DC motor setup on the newer Billy Bass, but after blowing up a capacitor trying to figure out how to get the head/tail to play nice with the mouth motor, I ordered an older Billy Bass that has the 3-DC motor setup (one for head, one for tail, one for mouth) so I'll see if I have better luck. Trying to integrate a signal filter and ordered a different power supply and hoping that will resolve the interference. If I make any progress I will be sure to let you know and link you to the code!

author
Donald+Bell made it!(author)2016-12-04

I'm excited to hear what happens! Thanks for the update.

author
Donald+Bell made it!(author)2016-12-01

I had the blessing and curse of a battery compartment that didn't work to begin with. I tried continuity testing the compartment and it's just mysteriously defective -- so I jumped right to using an external supply.

That said, if I were to make this a wireless project, I would probably try combining one of the larger 3.7v Lithium Ion battery packs from Adafruit and a Powerboost board to bring it up to bring it up to 5. You'd still want to wire a power switch though so it's not constantly running.

author
katrinasiegfried made it!(author)2016-11-30

Just wanted to say thanks with a gif (if it will work) for the great instructable!

20161130_213318.gif
author
Donald+Bell made it!(author)2016-12-01

I'm so glad it worked out! It really makes me happy to see something I made actually motivate and help others to make it too. It's a good feeling.

author
katrinasiegfried made it!(author)2016-11-29

So I am actually in the process of piecing this whole thing together using your directions! Everything you've suggested as worked thus far, however, I seem to be struggling with a lack of power to the mouth motor (or the head/tail motor I am playing with that as well). Any suggestions? The mouth just doesn't open up all the way. Thanks!

author
Donald+Bell made it!(author)2016-11-30

Is it opening and closing, but just not as much as you'd like? Is it similar to the action in the video, or much less pronounced? I'm using a 9v, 1amp power supply, for what's worth. Also, be sure to raise the volume on the audio you're supplying to the Arduino. Since the movement is based on the audio source, low volume will result in restrained movement.

author
katrinasiegfried made it!(author)2016-11-30

Ah ha! Thanks for the reply. In the interim since commenting I bumped up the current and added an audio gain, that seemed to solve the problem as you suggested. I also ordered a 9v 2A power supply in the event that the interference is due to a lack of current? I need to measure the current draw from the motors still, it's on the to-do list. Presently working on a filter for some of the low-signal noise and trying to address that pesky head/tail and mouth motor interference you were referencing. If I make considerable headway (get it... head motor, headway...) I will let you know!

author
Donald+Bell made it!(author)2016-11-30

Excellent! I'm excited to see the result.

author
katrinasiegfried made it!(author)2016-11-30

So in my experimentation I blew off the electrolytic capacitor on the head/tail motor. By chance can you see what size that capacitor is on yours?

20161130_200056.jpg
author
Donald+Bell made it!(author)2016-11-30

Ha! I just went looking for this hidden little guy and found that I melted mine at some point to. I can still see that it's a 100uf though. Hope that helps.

author
piratetv1 made it!(author)2016-11-28

ive got an idea to make the neck bend out on the first sound and bend bck a few seconds after the sound stops.

author
Donald+Bell made it!(author)2016-11-28

Excellent! If you like, you can email me the modified code at Donald@makerprojectlab.com and I can test it. If it works, I'm happy to credit you in the updated code.

author
SirCoffeeFish made it!(author)2016-11-21

Is there any way to hook up a device that would enable switching
between the original audio and movement and this whole setup? (Space
would not be an issue)

author
Donald+Bell made it!(author)2016-11-24

It's possible. I would just find a way to switch the motor connections between the original board and the Arduino.

author
zkilo made it!(author)2016-11-20

Currently I have 6 billy 'bigmouth' Bass. My goal is to oneday have a wall of billy's, connected to sign a chorus. First the fish then the music!

author
Donald+Bell made it!(author)2016-11-24

Have you checked out the Sashimi Tabernacle Choir? https://www.youtube.com/watch?v=kYlSTvAW1Po

author
zkilo made it!(author)2016-11-20

Sorry, great project and thanks for the assistance with my project. Looking to hear of the program updates

author
zkilo made it!(author)2016-11-20

uh... that's sing..... uh

author
gravityisweak made it!(author)2016-11-19

This is the most fun type of hacking! Taking something old and irrelevant, and spicing it up with a hybrid mix of newer tech and older aesthetics, and a different functionality.It would be awesome if you could turn the Billy Bass into a wireless bluetooth speaker that hung on the wall and sang songs to you!

author
Donald+Bell made it!(author)2016-11-19

Great idea! In it's current configuration it doesn't do so well with music -- just sorta hangs its mouth open. Speech is perfect though, so audiobooks and podcasts. You could also easily tweak it into a sorta of fortune teller fish. Maybe press a button and have it randomly select a pre-recorded fortune to tell.

My next step is to try and adapt this so that it can be a self-contained thing for my wall instead of a mess of electronics on my table. So that means I need to figure out a battery solution and maybe find a way to amplify audio from within the plaque so that an external speaker isn't necessary.

author
gravityisweak made it!(author)2016-11-20

It's like a modern day Teddy Ruxpin!

author
hammer9876 made it!(author)2016-11-20

I wish we could've had this 20 years ago. "Step. Away. From. The. Printer."

author
Spetznatz1 made it!(author)2016-11-20

That is hilarious! I'll bet that can be done with those talking toy parrots I've seen at Cracker Barrel!

author
Donald+Bell made it!(author)2016-11-20

Yes, there's a whole world of these types of toys thatI'm eager to try. I want to get my hands on a Furby next, but a parrot would be great too. You could upgrade it with a longer recording time and use it to leave messages for your family.

author
Penolopy+Bulnick made it!(author)2016-11-18

This is great! I haven't seen a Big Mouth Billy Bass in forever!

author
Donald+Bell made it!(author)2016-11-18

It's also fun to have him read podcasts!

author
Swansong made it!(author)2016-11-18

This is hilarious! I love it :)

author
Donald+Bell made it!(author)2016-11-18

Thanks! I can't believe it's taken me this long to write my first Instructable.

About This Instructable

22,745views

159favorites

License:

Bio: I run the Maker Project Lab blog, and a weekly video series called Maker Update. Email me at donald@makerprojectlab.com
More by Donald Bell:Raspberry Pi Home Network Music SystemAnimate a Billy Bass Mouth With Any Audio Source
Add instructable to: