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

Datasheet

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

Datasheet

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

Datasheet

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

Datasheet

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> {  audioReset();  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

Datasheet

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

Datasheet

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

Datasheet

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

Datasheet

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);          playTrack2();        }
   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);          playTrack3();                }
   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

Datasheet

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

Datasheet

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);          playTrack4();          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

Full Spectrum Laser Contest 2016

Participated in the
Full Spectrum Laser Contest 2016