Pip-boy 3000 Mark II





Introduction: Pip-boy 3000 Mark II

About: entrepreneur hardware hacker writer for hackaday

This is my attempt to build the most advanced Pip-Boy 3000 on planet Earth, and I believe I've succeeded. It includes the following technologies:

  • 4d Systems 4.3" capacitive touch display
  • Adafruit 66 channel GPS
  • Sparkfun WTV020SD audio player
  • Adafruit L3GD20H 3-axis gyroscope
  • Adafruit LSM303 3-axis compass
  • Adafruit LSM303 3-axis accelerometer
  • Adafruit BMP180 barometric pressure/temperature sensor
  • Arduino Pro Mini 328p 5v 16MHz microcontroller
  • Adafruit PowerBoost 1000 power and charging system
  • 4400mAh LiPo power pack
  • 9 LED Flashlight
  • Frikin' Laser
  • TV-B-Gone circuit (turns off hundreds of models of TVs)
  • 3D printed PLA and laser cut acrylic body
  • Methane Gas sensor (used for RAD sensor)
  • Photon light detector

This instructable will go into great detail on how to construct and assemble the Pip-boy 3000 Mark II, allowing you to make your own. The project is 100% open source, and all files and source code will be available for download in the downloads step at the end. All parts can be obtained from places like Adafruit, Sparkfun, and eBay. The case is made with a 3D printer and laser cutter. You can buy the printed case if you don't have a printer. Other miscellaneous hardware can be found at any hardware store.

Let's get started!

Note - You can find the Mark I build here.

Step 1: Parts

These are the parts used to build the Mark II.

4.3" display

Adafruit GPS

Sparkfun audio player

Adafruit 10 DOF board

Arduino Pro Mini board

Adafruit PowerBoost 1000 board

4400mAh LiPo battery

9 LED Flashlight

Laser diode

TV-B-Gone circuit

Methane Gas sensor

Sparkfun light detector board

Custom IO board

You will have to make the custom IO board yourself. Its job is to create 3.3 volts and distribute the 5v and ground to all the parts listed above. It also takes many outputs from the display and drives the flashlight, laser and gas sensor. I will talk about the IO board and show you how to make your own in a separate step.

Step 2: What Is That?

Step 3: Screens

Step 4: Workflow

This diagram shows the overall workflow of the Mark II. We will discuss each component in detail in the following steps.

Step 5: LiPo Battery Power Pack


This is a 4400mAH LiPo battery. Its voltage is around 3.5 volts. It connects directly to the PowerBoost 1000 board. It requires a charger rated at 2 amp. Most smart phone and tablet chargers are 2 amp, but always check. It is written on the charger under output.

The one used in the Mark II is painted green and a metal shield is applied to the wires. This is only for looks and not necessary for normal operation.

Step 6: GPS


Source Code

The Adafruit GPS board communicates to the Ardunio via software serial on pins D2 and D3. Load the library linked above into the Arduino loader and select the "parsing" example, as demonstrated here. You can easily edit this code so that the output gets written to your display instead of a terminal. The way this is done in the Mark II is as follows:

if (GPS.fix)<br>
    genie.WriteObject(GENIE_OBJ_USER_LED, 0x00, 1); //LIGHT FIX LED
    genie.WriteStr(12,  GPS.latitudeDegrees, 4); //LAT
    genie.WriteStr(13,  GPS.longitudeDegrees, 4); //LONG
    genie.WriteStr(14,  GPS.speed); //SPEED IN KNOTS
    genie.WriteObject(GENIE_OBJ_CUSTOM_DIGITS, 0x08, GPS.angle);
    genie.WriteObject(GENIE_OBJ_CUSTOM_DIGITS, 0x09, (int)GPS.satellites);

The above function will write the GPS parsed data coming in from the software serial port to the 4d systems display. You can see the results of this code in the GPS Status screen in the Screen step.

Step 7: PowerBoost 1000


This is one of the handiest little boards I've run across as an engineer.

  1. It takes the 3.5 volts from the LiPo battery and brings it up to 5v for TTL circuitry.
  2. It pulls a pin to ground when the battery gets low.
  3. It charges the LiPo battery.
  4. It allows a signal to turn the 5v on and off.

Anytime you're dealing with a battery powered project, you're going to need all of these things. And this little board does them all! For the Mark II, the TV-b-Gone circuit requires 3 volts and pulls A LOT of current. More than you would think. So I tie it to the LiPo pin, which is connected directly to the battery. Pin 19 of the display is hooked to the low battery pin, so when the battery gets low, the display will load a screen telling you to charge the battery.

Pulling the Enable pin low will cut the 5v, turning the Mark II off. This is done via the on/off switch.

The 4 status LEDs are pulled directly from this board. There are no pinouts for them...I removed the 1206 SMD LEDs from the board and soldered in some wires. BE CAREFUL if you want to do this. This is not easy and requires descent soldering skills.

Step 8: Audio Board


This is a neat little board that provides a cheap and easy way to get audio into your project. You'll need to store the audio files on an SD card. It uses a weird .ad4 format, so you'll need a special tool to convert your .mp3 or .wav into the correct format. You can get the tool here.

It has a built in amplifier so you can hook your speaker directly to it. This is strictly a 3.3 volt device, so you can't just hook your 5v microcontroller to it. I use a 1k resistor for the reset pin, as the Arduino is a 5v device.

There are two modes of operation - push button and serial. I did not use serial because I ran out of pins on the Arduino. I control the push button pins directly from the display. They are 3v pins.

In order to get the sound effects to work, I have to reset the audio board and then hit the next button to get to the needed track. This causes a slight delay from when the, let's say flashlight for example, is turned on and when the sound is played. Below is the bit-banged code to play a selected audio track.

void playTrack2() <br> {
  delay (150);
  genie.WriteObject(GENIE_OBJ_PINOUTPUT, 0x02, 0); //0
  delay (10);
  genie.WriteObject(GENIE_OBJ_PINOUTPUT, 0x02, 1); 
  delay (250);
  genie.WriteObject(GENIE_OBJ_PINOUTPUT, 0x02, 0); //1
  delay (10);
  genie.WriteObject(GENIE_OBJ_PINOUTPUT, 0x02, 1);
  delay (250); 
  genie.WriteObject(GENIE_OBJ_PINOUTPUT, 0x02, 0); //2
  delay (10);
  genie.WriteObject(GENIE_OBJ_PINOUTPUT, 0x02, 1);

Step 9: Adafruit 10 DOF Board


Source Code

The Adafruit 10 DOF board supplies the following information:

  1. Pressure
  2. Temperature
  3. Gyro
  4. Compass
  5. Magnetometer

The board communicates to the Arduino via its I2C function on pins A4 and A5. Getting the data to the Display is similar to how it's done with the GPS board. Below is an example.

/* write gyro data to sensor screen */<br>void Gyro() 
    sensors_event_t event;
    gyro.getEvent(&event);           //gyro
    genie.WriteStr(6, event.gyro.x); //x
    genie.WriteStr(7, event.gyro.y); //y
    genie.WriteStr(8, event.gyro.z); //z

Step 10: Display


IDE Program

This display has a lot of power and its own on-board processor. Images are stored on an SD card and the display is programmed from the IDE linked above. There's no actual code done in the programming of the display. It's more of a WYSIWYG type of programming environment. I would suggest downloading the file from the Downloads step and install the IDE on your computer. Load in the file and have a look around.

You will need this programmer in order to program an actual display.

Have a look at the datasheet linked above and it will lead you in the right direction on how to program the IO pins. It's very easy and you probably could figure it out through just messing with the program a little.

The display communicates with the Arduino via the hardware serial port on D0 and D1 at 9600 speed.

Step 11: Gas Sensor


The gas sensor is a basic device. Its purpose is to simulate the RAD / Geiger counter of the stock pip-boy 3000. You apply voltage and it produces an analog voltage out proportional to the amount of gas it detects. This device uses quite a bit of power so you want the ability to turn it on and off. The Mark II has this ability to maximize battery life.

It should be noted that there is a short warmup period when first powered on. The sensor will usually peg the meter for a few seconds when first powered on, but it will come down again shortly. It will feel warm to the touch during normal operation.

The output of the sensor is tied directly to the A7 analog input of the Arduino. This value is passed to the gauge on the display as follows:

void AirGauge() //write to gas (rad) gauge

  air = analogRead(AirGaugePinA7); 
  genie.WriteObject(GENIE_OBJ_GAUGE, 0x01, air);

The ground of the gas sensor is connected to the IO board, giving the ability to turn it on and off via a TIP31 transistor.

Step 12: Light Sensor


The light sensor works the same way the gas sensor does, except it does not have a switch to turn it on or off. It is always on. The amount of light hitting the sensor is proportional to the analog voltage out on the signal pin. This analog voltage is fed to the Arduino pin A6 with the following code:

/* read light sensor and write to display */<br>void RadGauge() //write to photon gauge
  rad = analogRead(RadGaugePinA6); 
  genie.WriteObject(GENIE_OBJ_GAUGE, 0x02, rad);

Step 13: Flashlight

The flashlight is just a basic LED flash light. The one I used is one of the free ones you get from Harbor Freight with the 20% off coupon. The red wire connects to 3v on the IO board and the black wire connects to J2 on the IO Board, allowing the Arduino to turn it on and off with a 2N2222 transistor.

This is the code used to turn the flashlight on and off:

fOn = digitalRead(5); //flashlight ON<br>     
      if (fOn == LOW)
          digitalWrite(12, HIGH);
   fOff = digitalRead(4); //flashlight OFF
      if (fOff == LOW)
          digitalWrite(12, LOW);

Step 14: Laser

The Laser works just like the flashlight. The red wire is connected to 3v on the IO Board and ground is connected to J1 on the IO Board.

This is the code used to turn the laser on and off:

lOn = digitalRead(6);  //laser ON<br>     
      if (lOn == LOW)
          digitalWrite(11, HIGH);
   lOff = digitalRead(7); //laser OFF
      if (lOff == LOW)
          digitalWrite(11, LOW);

Step 15: Power Inlet

The power inlet assembly allows you to charge the LiPo battery with a standard mini-USB cable. The black and red wires hook directly to the Powerboost 1000 board.

Step 16: Arduino Pro Mini


The Ardunio is the heart of the Mark II and performs all of the functions that the display cannot handle on its own. You can get the full source code and the programming environment on the Downloads step. You'll want to ensure you get the correct one, as there are several varieties. You need the 5volt 16MHz version with a 328p processor. Be careful because some of the cheap knockoffs have a 128 processor and will not work.

Also keep in mind that you cannot use an Arduino Uno because the Mark II utilizes the A6 and A7 pins, which the Uno does not have.

Step 17: TV-B-Gone Assembly


The TV-B-Gone Assembly is a self-contained circuit that spits out hundreds of TV remote "off" signals. The way it operates in the Mark II is the arduino is wired to the fire button. So when you press the fire button on the display, it's the same as pressing the fire button on the TV-B-Gone device.

This thing draws a lot more current than I thought it would, so I have it wired directly to the LiPo battery pin on the PowerBoost 1000 board. This will prevent any type of power surge harming other circuitry.

The LED for this does not need a 1k resistor. Also, you cannot share the ground for this LED. You MUST run the positive and negative wires from the tv-b-gone board to your LED. You need to remove the original LED from the tv-b-gone board. Or not install it as this is purchased as kit you have to put together.

The following code shows how to fire the TV-B-Gone with an Arduino:

tvOn = digitalRead(13); //fire tv b gone<br>     
      if (tvOn == LOW)
          digitalWrite(16 , HIGH);
          digitalWrite(16 , LOW);

Step 18: IO Board

The IO Board serves 3 functions:

  1. Provides 3 volts for the laser, flashlight and audio player.
  2. Distribute 5 volts, 3 volts and ground to all the components.
  3. Act as input / output for the display and Arduino to turn on and off the flashlight, laser, gas sensor and tv-b-gone circuits.

You will need the following components:

  • 2 - 2n2222 npn transistors
  • 2 - TIP31 power transistors
  • 4 - 100 ohm resistors
  • 1 - lm3940 3 volt regulator
  • 1- 0.47 uf capacitor
  • 1 - 33 uf capacitor
  • 1 - 1000 uf capacitor
  • 3cm x 7cm proto-board
  • Headers

Note that you do not need to use the exact components that I did. You should be comfortable with understanding how transistors / resistors / capacitors work and interchanging them before attempting a build like this anyway. I did my best to make the diagrams of how the parts hook together are as easy to understand as possible.

Step 19: Build Images

These are images of the build process and a video of when I was starting to get the code finalized.

Step 20: Finished Product Images

These are images of the completed Pip-Boy 3000 Mark II.

Step 21: Downloads



  • Casting Contest

    Casting Contest
  • Make it Move Contest

    Make it Move Contest
  • Clocks Contest

    Clocks Contest

We have a be nice policy.
Please be positive and constructive.




can you make the mark III read holotapes?

I saw you used the Grove - Gas Sensor (MQ2) to simulate Rads. In the description it says it can also detect LPG, i-butane, alcohol, Hydrogen, smoke. Is that also possible with your build?

thats a awesome proyect, but i have to ask..

did you cell it?

1 reply

one more stupid question. when trying to compile the 4ds screen, i keep recieving cant resolve value of PAx for data OutPin[x} what am i doing wrong?

1 reply

Make sure you have the correct display selected. It should be


Awesome thank you. I am trying to find a way to print these laser pieces in pla for sadly i have no laser cutter.........

trying to open the laser cut files. They are .rld what can i open them with?

1 reply

Use this program:


from a fallout standpoint, this is possably yhe worst pip boy ever. touchscreens break easaly. then your pip is a brick.

great work!!! I believe that Adafriut actually has a geiger counter now for the Pi. would you still be able to intergrate it into this pipboy?

Great work!
I have a key fob called a "NukeAlert" http://www.nukalert.com/index_a.html

If you do nothing else at the website, read their myth-busting expose... near the bottom of their web page.

I found the NukeAlert key fob while surfing the Internet when looking for mods and stuff for Fallout 3 when it was at it's peak. NukaAlert has a tiny circuit board inside that could be added to that for the RAD detection part as well. Is Methane an early warning condition for detecting RADs?

2 replies

No, but it will let you know who had beans for lunch. :-)

I will have to go with the clicker screamer device on mine then. There might be a real lady in the house who does not take kindly to people proving the old rhyme about girls incorrect. Maybe you've heard it, "Girls are sugar and spice and everything nice."

I'm writing this way because I just got warned [ We have a "be nice" comment policy. Please be positive and constructive with your comments or risk being banned from our site. ] I got warned for typing the short version of laughing out loud, I'm almost sure I won't be able to tell you what happened when I proved to my older sister that, that rhyme was a myth and I busted it.

That is the most amazing Pip Boy I've ever seen!

this is actually really amazingly cool everyone knows how there was a massive scramble to get the pipboy edition of fallout 4 becuse everyone wanted basically what was a 100 pound phone case..... instead 3d print one

I will be putting it on eBay soon. I still need to get a pelican case and make a sign for it.

Looks awesome, but why not go the extra mile and put a little light up gage in the cornner and find a different spot for the power switch.
Im not saying its not great, because it is. But if you are going to go that far with it, why not go all the way..?

1 reply

Basically I ran out out of ports on the microcontroller board and I was pushing the limits of how much I could fit in a small space.