Introduction: Building BMO

About: A tinkerer at heart, and computer scientist by trade. I'm particularly interested in embedded systems, robotics and computer vision. In my free time I love working on any creative projects from music, to art, …

Welcome to the MoFactory! This is an instructable on building everyone's favorite Mo from the show Adventure Time. Ever since watching the show and seeing people on the internet build all kinds of versions of her, I've wanted to make one too. After many years and finally getting my hands on a 3D printer, I knew it was finally time to make the dream a reality.

While this instructable focuses on the hardware side of things, my hope is in the coming weeks/months, to add in as many software features as was seen in the show like the games, being able to chat with BMO and more. (No video tape player though :D). There will be a bit of the software side at the end just to get the buttons working and it will still be a full-fledged mini computer, able to play games, watch Youtube etc.

So without further ado "Who wants to play video games?"


UPDATE: Just wanted to add that I found an alternative to finding a powerbank that will fit. The pisugar 2 plus is an alternative that will fit without changing the dimensions of the case and makes BMO lighter as well.

Also, I've added a couple of games, namely pro football 1861 and conversation parade and you can get them and the rest of the software from my github page. Future updates for both hardware and software will be added there.

Supplies

The following are the parts I used in the build. Since I wanted to use components I already had instead of buying everything, some things might be harder to find or may be less efficient than other components. Specifically the battery, but don't worry it should be easy to use a different power bank.

That said, I'll try to add links to everything I used so it's easier to follow the build process:

Here are the tools I used when prototyping/building:

  • 3D Printer - I use a Creality Ender-5 Pro but if you don't have access to a 3D printer, there are several online services you could try
  • Soldering iron
  • Hot glue gun
  • Super glue
  • Screwdrivers
  • Mask (for spray painting) Zip ties (for cable management) Acrylic paint and paintbrush (to paint the directional and action buttons)

Step 1: Print the Parts & Raspberry Pi Setup

First, we need to print out the casing that will make up BMO's body.
I have added the files here. If you don't have access to a 3D printer, you might be able to find some services online that can print and deliver them too you. We'll use PLA and can keep the default settings (20% infill). There are 6 files to print:

  • face: BMO's front plate
  • back: the backplate
  • body:
  • d-pad:
  • action buttons:
  • BMO Typography: This is a stencil to use to paint "BMO" on the sides

While the parts are printing, we can install Raspbian, the official operating system for the Raspberry Pi. If you haven't installed raspbian or used a raspberry pi before, there's a great instructable by Utsource who sets it up in four easy steps.

Step 2: Spray Painting

If you used the Aquamarine filament when printing, you can skip the first part.

Make sure to paint outside or in a well ventilated room, and don't forget to wear a mask. Each part should get 2-3 coats of paint, so switch between parts while waiting for one to dry. I had acrylic paint lying around so I used that to paint the buttons.

For the words on the side, you will need to press the typography part against the side and use the black spray paint (or black acrylic paint). Be sure to press firmly so that paint doesn't leak underneath the stencil. It will be helpful to wear gloves so you don't have to worry about getting paint on your hand.

Step 3: Fitting the Screen

The screen fits snugly in the groove on the back of the face part. If you are using the same screen as listed, it comes with mounting screws that you can use to mount the screen in the back of the face part. Be careful when doing this as LCD screens are fragile. Also try to make sure that the screws are straight when screwing, otherwise it will pull the screen and make it harder to screw in the opposite screws.

You can connect the HDMI cable to the screen and bend the cable a couple of times to make it more flexible.

Step 4: Adding the Buttons

For this step we will need the push buttons, the PCB board, jumper wires and a soldering gun. (be sure to see the pictures for reference)

In order to fit in the case you will need the 4x6cm board for the directional buttons and the 3x7cm board for the action buttons. The push buttons have two pins we will use, one which we can connect all to the same point will provide power while the other will each connect to their own pin on the pi so we can tell what button is being pressed.

The buttons fit very snugly in the PCB board so the first step will be arranging them on the board. For the directional buttons, we'll place the buttons in the center of the 4*6cm board, leaving a clear row in at least one of the ends of the board.

The buttons are arranged such that the inner corners are just nearly touching each other and that none of the pins are facing the center of the board (see picture for reference). To make sure that the buttons will fit, you can grab the face part or d-pad and ensure that the buttons fit in the part.

Once that is done, the next part is to solder the power cable. Get a male to male dupont cable and connect it to the top pin at the end of the board that you left clear in the first step. It's a loose fit, so you will need to solder the cable in place. Make sure the cable is pointing away from the buttons (as shown in the picture)

Next we'll need to add a resistor to the circuit which will limit the amount of current flow. Add it next to the cable that was just soldered and solder one end of the resistor to the cable. You can use a pliers to trim the pins of the resistor and make them the same size as the cable pins.

Next we will add a cable in the same row as the resistor, soldering their ends passing the wire next to one of the pins of the button. Solder these points too and repeat for the remaining 3 buttons (see picture for reference)

Once there is a cable connecting each button to the power line, we add cables and solder them to the adjacent pins on the buttons. We'll leave the ends sticking out for now and connect them to the pi in a later step. (see picture for reference)

We will repeat the process for the action buttons. Using the 3x7cm board we will place the buttons in the center. The button placement isn't as uniform as with the directional buttons so we will use the face part to make sure the alignment is correct (see picture for reference).

All the other steps involving soldering are the same as the previous steps.

Step 5: Adding the Speaker

We're actually going to need to remove the speaker from its casing. (sorry for the lack of images)
There are speaker modules you can buy and add an amplifier to but at the time I thought this might be a simpler solution. That and I wasn't sure how that worked. Definitely something I could improve later.

Removing the speaker is easy enough as it is just unscrewing the case, however to remove the USB cable you may have to break the casing. I found using pliers was helpful but be careful not to hurt yourself with the plastic pieces. Another option would be to cut the wires on the speaker and re-solder them after pulling the cable from the casing.

But once that is done, you can connect the USB to the right-angled USB adapter. This will connect to the upper right USB port on the raspberry pi

The speaker should fit snugly on the left side of the body part. The padding should help with this though you may have to exert a little bit of force. If it is not secure or falls out don't worry, we'll be gluing it in in a later step.

Step 6: Adding the Microphone

Grab the mic and fit it in the lower right USB port. Done! :D

Step 7: Adding the USB Ports

Add the left-angle USB adapters to the upper and lower left USB ports.
These will go to USB port at the bottom of the face part. They should be a snug fit but we will glue it in a later step

Step 8: Adding the Earphone Jack

Connect the earphone adapter to the earphone jack. We will glue it to the earphone port on the face part in the next step.

Step 9: Bringing It All Together

Okay, we are ready to glue everything in. We will want to use the glue gun as it will help gluing in parts that aren't completely flat.

First, let's glue the buttons, specifically, the board to the face part. Press the board to the face part and place glue on the buttons closer to the edges of the board, careful not to stop the button from being pressed. Next reinforce the board by gluing the corners of the board to the face part. You may need to use a generous amount to ensure it's secure.

A future improvement could be to use screws to mount them to the face part, but for now we will make do.

Next we'll glue the two left-angle USB ports to the face part. Be sure to push the USB adapters until the ends are flush with the front of the face part, then add glue to secure it in place.

We will do the same with the earphone jack. It may be a too tight to go all the way but so long as your earphones can still connect you should be fine. (I used a box cutter to carve a bit more wiggle room).

Next we will glue the speaker in the slot, adding the glue to the outer edges.

Now we can connect the button cables to the pi. The power wires will go to the 3.3v pins on the pi (pins 1 and 17), then the rest will follow this configuration:

  • up = pin 13
  • down = pin 15
  • left = pin 16
  • right = pin 11
  • green button = pin 18
  • red button = pin 31
  • blue button = pin 29

(I found cable/zip ties helpful to manage all the wires and constrict them to certain areas. It's not needed if you don't have them but they may make fitting everything a little easier. )

You can now also connect the HDMI cable.

The final piece to glue will be the face part to the body. For this part we will use super glue. Add the glue to the edges of the front piece and then press to the body piece for a few minutes till it's firm. You can place it face down so you won't have to hold it the whole time. Just be careful for the screen, we know how many times BMO has cracked his face :)

Once the glue is all set we can add the button parts which should fit fine without any glue.

We are just about done! Next let's add some batteries!

Step 10: Note on the Battery

As mentioned earlier, I was trying to use as many parts I already had lying around and so it turns out the power bank I used is not very common to get (Unless you are in South Africa). Have no fear though, we should be able to use any other power bank, just make sure it has:

  • 5V 2A output
  • not much bigger than 25mm x mm x 120mm (these were the dimensions of mine)
  • If it has an 'on' button, you can access it after fitting it in.

To fit it in, place the battery between the raspberry pi and the back of the buttons. Connect the output USB cable to the 5v input on the pi (micro USB port), and let the cable that charges the power bank stick out of the hole on the back part.

I ended up not gluing the back so that I can still access it when needed. Perhaps in the future I will try it with Li-Po batteries.

But after all that, we are done!!

Step 11: Powering Up and Activating the Buttons

Phew! we are (almost) all done now. Just power up your power bank BMO should power up too. You can connect a mouse and keyboard to the USB ports and use it like a regular computer. You can connect to the WiFi, watch videos on YouTube and play some of the inbuilt games.

Of course that's not the full BMO experience, I'll be working on adding some software to add in games, voice recognition and responses (hopefully with BMO's voice too!) in a future instructable (or just make it downloadable). But I think this instructable has been long enough :).

But before we wrap up, let's get BMO's buttons working! To do that copy bmoButtons.py and requirements.txt files onto BMO (place on the desktop).

Next open the terminal and type "cd Desktop"and press Enter to go to the desktop folder.

Then type "pip install -r requirements.txt" and press Enter to install the required software

Then finally just type "python bmoButtons.py &" (and press enter) to activate the buttons. You can minimize the terminal and use the buttons. (The red button = Left Click, the green button = Right click, and the blue button = Escape)

And all done, the buttons should be active now.

Thanks for following along. If you'd like to vote for the project it will be greatly appreciated and if you have any questions or suggestions, feel free to let me know :D