Functional Cosplay Props

In this guide you'll learn how to 3D print and build your own functional Pipboy 3000 using a Raspberry Pi and Adafruit 3.5" PiTFT. The pypboy python program for the Raspberry Pi features OSM for map data which allows you to browse your terrain rendered in glorious retro green graphics.

It features an audio amp + speaker with the actual score and background music from Fallout 4. An analog rotary switch lets you switch between different modes in the pypboy python program.

The 3D printed enclosure has cutouts for most of the IO ports for the Raspberry Pi, so you add your favorite peripheral like a WiFi dongle, keyboard and mouse.

The 2200mAh battery can be recharged over USB and fits inside an aesthetically looking cylindrical case.

Details like the super bright yellow LED, rotary encoder, speaker grill and faux gauges really make this look like a Pipboy 3000 Mark IV.

Tools & Supplies

Various tools and supplies below will help complete the build.

Parts & Materials

Download and 3D print the parts in your desired colored filament. We recommend PLA filament, to minimize warping and splitting. 

If you don't have access to a 3D printer, you can use a service like 3DHubs.com

Part Orientation

The parts are oriented to print "as-is". Only two parts require support material. We tested this parts on the Flashforge Creator Pro and Ultimaker 2.

armband.stl

base-cover.stl

base-main.stl

Add support material

bat-cap.stl

bat-case.stl

bat-clip-a.stl

bat-clip-b.stl

LED-diffuser.stl

LED-ring.stl

rotary-case.stl

Add support material

rotary-cover.stl

rotary-knob.stl

screen-cover.stl

screen-visor.stl

Modify Design

The parts were designed in Autodesk Fusion 360. The design file is open source available to download and customize - It can be downloaded in various formats such as IGS, STEP, SAT and many others.

Custom Supports

When slicing the parts in your preferred slicing program, you'll need to apply support material. Simplify3D has a nifty feature that lets you apply custom supports to specific areas in the part. This helps save on material and print time. The base-main part doesn't require support in the middle of the armband - only the overhand areas in the back and triangular flap.

Parts Cleanup

When the parts are finished printing, you may need to clean them up a bit. Remove the support materials using a pair of flat pliers. A pair of flush diagonal snips can help remove any string or bits. 

Tap Standoffs

First up, it's a good idea to tap all of the standoffs in the base-main part. Use a #4-40 tap or machine screws to create the necessary threads. Don't fasten the tap/screw all the way through - just until its about halfway through the standoff.

Add Magnets

The armband and base-main parts will be held together with rare earth magnets. On the bottom of the parts are 8 pockets – this is where the magnets will go. Insert one magnet in all the pockets to test tolerances – If they're too tight, use a hobby knife or filing tool to loosen it up. 

A helpful tip is to mark one of the ends with a sharpie - that way you can keep track of the polarities. 

I recommend using E6000 adhesives to glue the magnets in place. Drop just a dap of glue into the pocket and insert one magnet at a time. Make sure to keep anything metal at arms reach – My watch band has metal and it pulled out one of the magnets before it fully dried, so be cautious!

Be sure give the adhesives 3-4 hours to fully cure before handeling them.

Glue Screen Visor to Base Cover

Next up, we'll need to glue the screen-visor to the base-cover part. Notice the cutout on the visor part - this will allow accessibility to the ports on the Raspberry Pi. Orient the visor so the cutout is lined up with the opening on the base-cover part. Lay the screen-visor on top of the base-cover. It should nicely fit flush with the part. Once you are familiar with the correct orientation, glue the two parts together. Again, be sure to let the parts dry for several hours before handeling.

Prep Work

That's about all the prep work we need to do for the printed parts. In this tutorial, we won't go over any finishing or painting techniques to the parts, but you're totally welcome to do that yourself.

While the parts dry, let's go ahead and get the Raspberry Pi software ready.

Wired Connections

The diagram above depicts the connections for the PowerBoost 1000C, audio amp, PiTFT, rotary switch, LED and Pi. Use this as a reference for wiring the components. Note, the length of wires and position of components are not exactly how the circuit will be - it’s just a diagram to show connections.

The 3.5" PiTFT connects to the Raspberry Pi's GPIO header. The rotary switch, LED and PowerBoost connect to the GPIO breakout on the 3.5" PiTFT.

LED Wiring

The LED is wired to Pin 1 and 9 on the PiTFT.

Pin 1

3.3V

Positive

Pin 9

GND

Negative

Rotary Switch

The rotary switch is connected to various pins on the PiTFT. The table below lists out the pin number and GPIO. The colors correspond with the wires in the diagram - these however, can be whatever color you want.

Pin 14

GND

White

Pin 7

GPIO 4

Green

Pin 11

GPIO 17

Blue

Pin 13

GPIO 27

Purple

Pin 15

GPIO 22

Yellow

Pin 16

GPIO 23

Brown

Raspberry Pi GPIO

Below is a color-coded graphic of the Raspberry Pi GPIO. It has the pin number, GPIO number and pin type listed. It great for referencing the wired connections.

The code for this project is out of date and some reverse engineering will be required.

Ready-to-go Image

To get the software running on the Pi, we'll need to first burn the .img to a 8GB microSD card using an app. Once burnt, insert it into the Pi and install the PiTFT onto the Pi. Use a proper 5V power supply wall adapter to boot it up.

The screen should display the terminal. Plug in a keyboard to one of the USB ports and use the default credentials to login (username pi password raspberry).

This IMG is only for the Raspberry Pi Model B+ It will not work with Pi 2 or 3.

Adapting for Pi 2 or 3

If you're using a Raspberry Pi 2 or 3, you'll need to manually install the Pipboy python software on a fresh install of Jessie. Start by downloading and burning the Jessie-based PiTFT 3.5" Resistive Image.

PiTFT on Pi 2 and 3

The Jessie-based PiTFT 3.5" Resistive Image has preconfigured software for running the touch screen display. It will automatically boot into the raspbian desktop.

Installing Pypboy 3000 on Pi 2 and 3

This is a work in progress for the Pi 2 and 3. The software used in this build is a modified version of this code on github by sabas1080. It requires some tweaks to the config.py file to adapt it for the 3.5" PiTFT and the rotary switch. 

WiFi Setup

We'll need to get the Raspberry Pi setup with internet so it can download map data. To do this we'll need to add our Wifi network credentials to our wpa supplicant config. 

In the terminal, type in the following command:

sudo nano /etc/wpa_supplicant/wpa_supplicant.conf

Add WiFi Creds

You'll see a text file with a few parameters. Type in your wifi ssid (the name of it) and password in the fields.

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev update_config=1
 
network={
ssid="YOUR_NETWORK_NAME"
psk="YOUR_NETWORK_PASSWORD"
proto=RSN
key_mgmt=WPA-PSK
pairwise=CCMP
auth_alg=OPEN
} 

Save Creds

Once done, press cmd+x to exit the text document and then type "y" to save and "enter" to confirm the file name. Now you can type "sudo reboot" to restart the Pi. Once it boots up, the Pi should automatically connect to your wifi network.

Start Pypboy Python Program

To start the pypboy program, type the following commands into the terminal:

cd pypboy
sudo python main.py

The pypboy program should start up and the audio will automatically start playing if you have headphones or a speaker plugged into the A/V jack.

Controls

The following keys will let you navigate through the pypboy UI.

Q,W,E,R

Switch between modes

1, 2, 3, 4, 5

Switch between sub-menus

Up, Down

Navigate sidebar menu items

Add Your City to Map

The pypboy python program uses OSM to pull map data from the internet. By default, we have it set to display a map of NYC. To change this, you can edit the location in the following config.

cd pypboy
sudo nano config.py

You should see some parameters in the config file. Look for the line with "MAP_FOCUS" and type in your desired location. It needs to be formatted for longitude and latitude. You can get this from google maps. Type in your location in google maps and you pull it from the URL in your address bar. For example, the URL https://www.google.com/maps/place/West+Palm+Beach,+FL/@26.7422403,-80.2700968,11z/ is for West Palm Beach, FL - So the numbers we need are 26.7422... and -80.2700... Note that the pypboy python program has the order of these flipped.

import pygame

WIDTH = 320
HEIGHT = 240

# OUTPUT_WIDTH = 320
# OUTPUT_HEIGHT = 240

MAP_FOCUS = (-102.3016145, 21.8841274)

Customize Pypboy Program

If you'd like to add functionality to the pypboy program. You are welcome to fork the github repo. The pypboy python program was written by github users grieve and modified by sabas1080.

Power Switch

Let's start off the circuit by putting together the slide switch. We'll need two pieces of 26AWG wires. 

Prep Switch Wires

Use a pair of wire strippers to remove about 5mm of insultation from the tips of each wire. Then, secure the wires to a set of helping third hands and tin the tips by applying a bit of solder.

Connect Wires to Switch

Remove one of the legs from the switch – We only need two of them. Then, secure the slide switch to helping third hands. Tin the remaining two legs by applying a bit of solder. Now, heat up the legs with the tip of the soldering iron and place the wire onto it. The wires should be fused to the legs of the slide switch.

Heat Shrink

Slip on pieces of heat shrink tubing to the exposed connections and appy some heat to them to shrink them - a lighter or hot airgun will do just fine.

Connect Switch to PowerBoost 1000C

Tin the EN and GND pins on the PowerBoost by applying some solder to them. Heat up the pins using the tip of the soldering iron and insert the wires into the pins.

Test PowerBoost Circuit

Let's test out the circuit by pluging in the JST connector from the lithium battery to the JST port on the PowerBoost 1000C. The blue LED should turn on, indicating the battery is charged and running. The slide switch should turn off and on the PowerBoost.

Power Wires for PowerBoost 1000C

Next up, let's prep two female/female jumper cables. We'll connect these to the Raspberry Pi later.

Prep Power Wires

Remove the plastic connectors from the ends of both wires using a hobby knife - lift the clip and slide off the connector. Add pieces of heat shrink to the exposed connectors and carefully bend the connectors so they're angled. Then, app;y heat to insulate the exposed connectors, like shown in the photo.

Cut off one end of both wires and remove 5mm of insulation. Tin the ends of each wire and solder them to the positive and negative pins on the end the PowerBoost 1000C.

Finished Power Circuit

Now our power circuit is nearly complete! Next up, we'll work on the audio circuit.

Audio Parts

Gather up the parts we need for the audio circuit. We'll need four pieces of 26AWG wires, two slightly longer than the others. Go ahead and remove 5mm of insultation from the tips and then apply solder to tin them.

Connect Wires to Speaker

Heat up the solder pads on the speaker and remove the existing wires. Then, connect the new longer wires. Appy a bit of heat shrink to keep the wires tidy.

Connect Wires to Audio Amp

Secure the PAM8302 to a panavise or helping third hands. Tin the audio out pins then VIN and GND. Connect the speaker wires to the audio out pins and then the remaining short wires to VIN and GND.

Connect Audio Amp to PowerBoost 1000C

Now we can connect the VIN and GND wires from the audio amp to the 5V and G pins on the PowerBoost 1000C.

Connect Audio Cable to PAM8302

You'll need to cut the audio cable short to a length so it can reach the audio jack on the Raspberry Pi - leave a little extra slack just in case its too short. 

Remove about an inch of insulation using a hobby knife - be careful not to cut any of the inner wires or stranded wires. 

The stranded wires are actually the ground. Twist these together to group them. Then, remove about 5mm of insultation from the red and white wires (these are the left and right audio channels). Tin all three wires (right, left and ground). Now we can solder the ground to the A– pin,  and both left and right wires to the A+ pin on the PAM8302.

Test Completed Audio Circuit

Alright! Now our audio circuit is ready for some testing. Power on the PowerBoost 1000C using the slide switch. Plug in the audio connector to your computer or mobile device and play some audio, music or anything that makes sound. You should hear it play through the thin plastic speaker.

I recommend turning up the audio gain on the PAM8302. Use a small flat screw driver to twist the tiny potentiometer located on the amp PCB. This will make the sound play loud as possible.

Cut the Fat

The connector from the audio cable is a bit excessive - it actually won't allow the Raspberry Pi to fit inside the enclosure as is, so we'll need to trim it down a bit. 

Using a sharp hobby knife, carefully cut away from the back of the audio connector - like in the photo. We need to remove about 3mm of plastic from it. Cut it all the way down until you just barely reach the audio cable. 

Test Fitting

Do a test fitting by inserting the audio connector to the audio jack on the Pi and placing it over the standoffs on the base-main part. 

Prep Things for LED 

Now it's time to work on the yellow LED. We'll need two female/female jumper cables, one 220ohm resistor and our 5mm super bright yellow LED.

Prep LED

Secure the LED to a pair of helping third hands. Trim the legs short and apply solder to tin them. The longer leg is postiive, shorter is negative. The bigger metal piece inside the LED diffuser indicates positive polarity.

Prep Jumper Cables

We'll need to prep the two jumper cables just like we did for the PowerBoost 1000C. Remove the plastic connectors using a hobby knife, exposing the metal contacts.

Jumper Connectors

Slip on a piece of heat shrink over the exposed contact and carefully bend the connector so its right-angled. Appy heat to shrink and insulate the exposed metal. You'll need to do this to both wires but only one end. 

Connect Jumper Cables to LED

Slip on another piece of heat shrink to the other end of the jumper cable. The straight jumper contacts can be inserted to the shorted legs of the LEDs. Appy a bit of solder to secure the wires, then apply heat to insulate the exposed connections.

Connect Resistor

Cut the ground wire and remove a bit of insulation for each half. Tin the two wires and shorten the legs of the resistor.

Add a piece of heat shrink to one of the ground wire halves.

Tin the shortened legs of the resistor and solder the resistor inline with the two ground wires.

Insulate Resistor 

Slip the piece of heat shrink over the resistor and appy heat to insulate the exposed wire and resistor.

Test Wired LED

With the resistor added and exposed connections insulated, it's a good idea to test the LED using a coincell battery. Place the positive wire over the positive side of the battery and negative over negative. The LED should instantly light up.

Install LED diffuser

Insert the LED ring over the LED diffuser cap. If it doesn't fit, you'll need to use a filing tool or hobby knife to loosen the tolerances. Then, insert the LED diffuser over the LED - it should press fit and stay in place. If not, use filing tool or hobby knife. If it doesn't stay in place, use glue to secure them together.

Final LED

With the LED ring and diffuser installed, test the LED once again using a coincell battery. You should get a nicely diffused light. Without the diffuser, you get a sharp light that doesn't look too great. 

Rotary Switch

Now it's time to work on the analog rotary switch. We'll need 5 female/female jumper cables for this setup. Just note: there's actually 10 available position in this particular rotary switch, but we're only using 5 of them.

Prep Rotary Switch

There's a little piece of metal thats in an upright position - let's flatten it using a pair of pliers. You can alternatively snip it away. It gets in the way when mounting it to the cover, so best to remove it.

Prep Jumper Cables 

Let's go ahead and prep our jumper cables. Use an assortment of colors so we can tell them apart later. Remove the plastic connectors from each wire, on both sides. Cut and remove the connector for each wire, but only on one side. Strip away insulation and tin the tips. 

Add Heat Shrink

Add some pieces of heat shrink to the jumper cables with the connetors. Like we did previously, carefully bend the connectors to make them angled and appy heat to insulate the exposed metal.

Connect Wires to Rotary Switch

Now its time to solder up the wires to the rotary switch. Start by tinning five of the pins and the middle one. The leg close to the middle of the switch is ground. Make sure to note which colored wire you're soldering to the ground pin. Then, solder up the jumper wires to five of the of available pins.  

Wired Components 

And now we have our wired components finished and ready to start mounting to the 3D printed enclosure, yay!

Mount Rotary Switch

Get the rotary-case and rotary-cover parts. Remove the hex nut and washer from the rotary switch. Then, insert the rotary switch into the hole of the rotary-cover part with the knob facing the flat surface. Push it all the way through and fasten the hex nut back onto the rotary knob - we don't really need the washer, so you can discard it. 

Now, thread the angled connectors from the jumper wires through the rotary-case part. Pull them all the way through and press the rotary-cover into the rotary-case. They should snap fit together.

Install Rotary Knob and Case

Orient the printed rotary-knob with the metal shaft of the rotary switch. The flat sides should be line up together. Press the printed knob onto the metal one until it goes all the way in. 

Thread the angled jumper cable connectors through the hole on the side of the base-main part. Now we'll need to glue the rotary-case to the side of the base-main part. This can be done a bit later, after we install the battery. Hold off until we get there. Alternative you can use mounting tack to hold it in place.

Mount PowerBoost 1000C 

Now we can mount the PowerBoost to the main-base part. Tap the mount holes on the PCB using a #4-40 tapping tool or simply fasten #4-40 3/8 machine screw into the two holes near the microUSB connector. We need to create the threads so do this before mounting the component to the case to make it easier. Once the threads are made, lay the PCB over the standoffs with the recessed area and line up the hoels with the standoffs. Hold the PCB down while fastening the screws to mount it in place. The screws should go a little over half the way through.

Mount PAM8302

Now we can do that same thing to the amp PCB. Use a #4-40 tapping tool or machine screw. I found tapping the back of the PCB easier - but it can be done either or. Again, place the PCB over the standoffs (the ones near center of the faux latch of main-base) and hold in place while fastening screws. Screws should also go a little over half the way through.

Install Speaker

Lay the speaker over the cavity and press it down to snap it into place. If the tolerances are too loose you can add some glue or mounting tack to hold it in place.

Install Switch

Now's a good time to thread the slide switch into the cutout on the side of the base-main part. You should be able to press the switch through the cutout, but if its too tight, you'll have to use a filing tool or hobby knife to loosen it up. I recommend pulling it all the way through and glueing it in place after all the components are mounted in place.

Install Battery Cable

Before we connect the JST from the battery back into the PowerBoost, we need to thread it through the battery-cap part and through the hole from the bottom of the base-main part.

Connect Battery JST to PowerBoost 1000C

Pull the JST cable from the battery all the way through the hole and plug it into the JST port on the PowerBoost 1000C

Mount Raspberry Pi

Before we mount the Pi in place, its a good idea to plugin the audio cable to the A/V jack. Once connected, go ahead and lay the Pi over the standoffs. You don't need to tap the mounting holes on the PCB because it's slightly loose for #4-40 screws. I ended up only needing two #4-40 3/8 screws to mount the Pi to the standoffs. These can be fastened all the way through so the head of the screw is flush with the PCB.

Mounted Components

And now we have mounted most of the components to the enclosure, Yay! We're almost done. Next up we need to connect the jumpers from the rotary switch to the PiTFT display.

Install LED

Insert the jumper wires from the LED through the hole on the corner of the base-cover part. Pull them all the way through and press the diffuser so it snaps into the hole with the ring being flush with the surface.

Connect Jumpers to PiTFT

OK, now it's time to plug in the jumpers from the rotary switch, LED and PowerBoost 1000C to the GPIO breakout on the 3.5" PiTFT. You'll need to follow the circuit diagram to get the placement of each but reference the photo to get best position of the connectors. The nice thing about this is we can easily plug and unplug if we get it wrong or want to use different GPIO. It's a good idea to double/triple check the connections.

Once you think it's all good, go ahead and install the PiTFT onto the Raspberry Pi by laying it over, lining up the pins from the PiTFT with the header from the Pi. Press it down until the pins are fully seated onto the Pi.

Mount Rotary Encoder

Now is a good time to mount the rotary encoder to the base-cover part. It's very similar to the rotary switch, remove the knob and hex nut and press it through the bottom of the part. Make sure its flush with the surface before fastening the hex nut back on. 

Rotary Encoder

You'll notice at this point our rotary encoder actually isn't wired to anything. That's because we haven't written any custom code to make it work with the pypboy software. This is more of a prop but it can totally be implemented in the future. If you're a programmer and know how to do this, we'd love to hear about it!

Secure Slide Switch

Remember that slide switch? Now is a good time to secure it into the cutout. Use quick drying glue to secure it in place. Best to do this before we close it up.

Install Cover

OK now most of the components are installed. Next, we can fasten the base-cover to the base-main part using four #4-40 3/8 machine screws. Place the cover over the part and line up the mounting holes. Hold the parts together while inserting and fastening the screws. Make sure everything is flush.

Install Screen Cover

The screen-cover part can now be installed. The tolerances should be pretty tight so you can simply orient it so the corners match up and press it down. Friction should hold these pieces together.

I didn't glue mine together cause the tolerances / friction worked out. I can also remove it incase I need to get in there and add upgrades or service the components / wiring.

Install Cylindrical Battery

Now we can insert the lithium battery into the battery-case part. Press the battery all the way into the case and slip the battery-cap so it snaps into the case.

Battery Clips

The battery will be held onto the base-main part with these two clips. They both have different contours so you'll need to test fit them before gluing them in place. The clips can be slipped or snapped onto the battery-case part. Follow the photo to reference best placement.

Once you've sorted out a good spot for the clips, add some quick drying glue to the bottom of the clips and work them onto the side of the battery-case part. I found the best location to be right under the rotary switch case. I tried to keep the clips right above the seam which the base-main and armband parts meet. I'd avoid securing the clips in the middle of them so the two arm parts can be separated.

Secure Rotary Case

Once the battery clips are glued dried, apply glue to the rotary-case to secure it to the base-main part.

Add Foam to Armband

This is where you'll need to sort out how much foam insulation you need for your arm. The armband is fairely large for my arm personally, but it should hopefully fit most arms. I used this foam that has a sticky adhesive side - it's meant for insulating windows or underneath doors. Stick them onto both the armband and base-main parts to your liking.

Final Build

And now we have our functional 3D printed Raspberry Pi Pipboy! Flip the switch and see if everything turns on.

Use the software page to reference how to launch the pypboy python program. Rotating the rotary switch should change the menu items. The audio should start playing too.

Final Thoughts and Things

The pypboy python program could be extended and developed further to include the rotary encoder and perhaps optimized for better performance - it can be slow at times. A lot of the pages are empty and lack inventory items but this can be modified to include more things. The foundation is there, so if you'd like to extend it, you're more than welcome to. Credit to the developers of the pypboy python program goes to githubber's Grieve and Sabas1080

This guide was first published on Feb 04, 2016. It was last updated on Mar 08, 2024.