Hey, I'm a big fan of Fallout too! But PIP-Boys don't look anything like this! Trust me, I know. This isa prototype that just takes design cues from both versions of the Pip Boy and also some elements from the computer terminals in the games.
But wait! If you can make this much, why not just go ahead and build the 2000 or 3000A models? I'm not just going to buy a plaster cast of the FO3 PIP-Boy 3000 Clock and slap an iTouch in there. My goal is a functional device, not something that just looks functional. I do really want to make one of the models from the game, but until my budget expands, bringing completely accurate copies of the devices into reality is beyond my reach. On that note, should I win, making the PIP-Boys will be significantly easier. I've been planning my own open source hardware business for a while now, and a 3D printer or decent camera would help immensely. Vote for me and I promise you won't be disappointed.
So grab a seat, pop the cap off an ice cold Nuka-Cola, and enjoy the Instuctable. By the end, you'll have hopefully learned a lot more and will be able to design and build your very own Personal Information Processor Boy.
For those interested in getting started on the build, skip ahead to the section labeled Hardware.
Step 1: History and Features
How did I go from staring at a few pictures of devices on a computer screen to holding a real device in my hands? Persistence, a clear schedule, and plenty of hot glue. By now, I think I've put about 200+ hours since November (not to mention the countless hours I spent playing Fallout 3 and New Vegas in the name of "research" ;). I broke down the project into major chunks and set aside certain tasks to be accomplished daily. I broke my tasks into two main categories: software and hardware. From there, I broke down everything into smaller chunks, coding a function here, adjusting the layout of a speaker there and so on. This helped me to avoid much of the mental fatigue and frustration that can come from building an intensive project. My daily goals were straightforward and reasonable for me to accomplish, and seeing the small leaps of progress were a confidence boost that made everything seem more manageable. But that's not to say that I was perfect in my execution, quite the opposite. Many times I procrastinated for days at a time. I encountered software bugs that stumped me for hours. I simply stared at my screen many times, boggled at some hardware design problem, but I didn't stop. My new favorite quote, which really applies to almost every aspect of life is, "Don't give up what you want most, for what you want now." It's short and simple, but it strikes me pretty deeply. I want most to improve as an artist and engineer, to create ever more amazing designs, and to have my very own PIP-Boy, despite my urges to browse Reddit, watch Netflix, or sleep in. With the money I've spent on research and design over the last six months, I could have bought myself a shiny new iPad, but I can't buy the satisfaction of knowing I took my desire and brought it into reality. It honestly may not look like much, but this little green box is far more valuable to me than the cost of it's parts.
Okay, enough motivational mumbo jumbo, so what can the prototype PIP-Boy 2000+ do? Although many of the functions of the devices are purely for game mechanic reasons, there are still quite a few functions useful to those of us in the real world. Here's a list of in-game features (based off of FO3 and FNV) and their status in development:
Automapping and waypoint navigation: (Partially Complete) Waypoints and simple GPS navigation is relatively easy, automaps without advanced laser rangefinders/sonar is not possible . Currently only latitude, longitude, heading, speed, altitude, and number of satellites used are displayed.
Moral status and local reputation: (Not Implemented) These can't be automatically gauged, but the graphics would be trivial to add.
External interface to computers: (Partially Complete) The device must be disassembled in order to be reprogrammed, and no local data downloading is available for the time being. It would be neat to stick a decently sized flash drive in there, and even better if that information or the file system could be read on-screen.
Real-time health monitoring and feedback: (Not Implemented) there's certainly no way to measure the health status of specific body parts or automatic notification of addiction, but I suppose the next best thing might be to add a heart rate monitor, although this would require the external chest strap. An accelerometer/pedometer to gauge steps taken and as a simple fitness measurement wouldn't be too hard to add too.
Inventory status and item condition: (Partially Complete) I see no way for this to be automatic, but this version has RFID-reading capabilities, so some form of inventory management would be possible with unique tags for items, however crude.
Character level and experience: (Partially Complete) As the only real world task the PIP-Boy can be aware of is discovering a new location, that is the only way to "gain experience." Although purely for fun and no practical reason, I could set this to gain experience/levels by traveling and have the user get to distribute skill points. Of course, you could always cheat since you have access to the code and could have whatever stats you wish, but that's no fun ;) Perks are not implemented.
Ambient radiation measurement and level of irradiation: (Partially Complete) There is a small working Geiger-counter module, but this is also for fun and should by no means be used for situations in which serious radiation detection is necessary. Measuring how much of a dosage you have absorbed in RADs is also impractical.
Flashlight:(Complete) Just like in the game, the prototype has an "overbright" mode, although the LCD is not terribly bright, it does glow decently. For another version, I'm considering just popping in some high-power LEDs for some serious luminosity.
Time stopping/auto-targeting: (Not Implemented) Although awesome, V.A.T.S. is, for many reasons, ridiculously fictional, but I'd be interested to see what could be done with an IMU and a web cam/Kinect sensor strapped to a "weapon" pointed at a specially colored or marked target. I imagine a computer could determine the probability of a hit based on the current vectors of angle and acceleration of both the weapon and the target. This couldn't be handheld, but would make for an interesting computer vision project.
Wrist-mounted: (Not Implemented) This version is handheld
Data storage and playback: (Not Implemented) No internal storage or audio playback for now, I've already designed holotape cases, but it's too cost prohibitive to make them the way I want to make them for now.
Radio: (Not Implemented) This will be added at later version.
Clock with date and time: (Not implemented) Time and date can be read from the GPS, but I plan to use a RTC for when the GPS is disabled.
Screensaver: (Partially Complete) It doesnt come on automatically, but you can switch to a mode that displays the falling bomb screensaver that is pretty much identical to to the graphic from the first two games.
Unlimited battery life: (Not Implemented) If only fission batteries were real! This version runs on 6 humble AAs.
Step 2: Hardware
Screen: The focal point of the PIP-Boy is of course the screen, and for this I needed something that could display all the data I wanted to at once. My first prototype used a 320 by 240 pixel LCD, but this was a graphically tight fit, so I upgraded a 4.3 inch 480 by 272 pixel LCD from 4D Systems (for reference, this is the same resolution/dimension as a SONY PSP). I picked this particular screen because it provided sufficient resolution for text and graphics in a decent form factor. It is a full color LCD, but I'm only using green colors on a black background as an approximation of the old CRTs. As an added bonus, this screen (like most of their products) has a built-in 16-bit processor (in this case, the Picaso GFX-2) that does all the nitty-gritty interfacing to the LCD and has a ton of built in graphics functions. This greatly reduces the complexity of most projects and is why I often use their displays. It even has a tiny built-in speaker and the ability to play .WAV files! The processor runs a proprietary language called 4DGL which is very similar to C or Processing, which makes it none too difficult to program. Alternatively, the screen can be controlled by serial commands from a host processor, but we wont be using that feature.
Auxiliary Processor: I chose to use an Arduino Duemilanove with an Atmega 328 as I'm familiar with using them and it can handle the GPS data more easily than the LCD. For now, I've used up all the available memory on the Picaso processor, so the Arduino picks up the slack and will also do more of the hardware interfacing in the future.
GPS: I chose the Adafruit Ultimate GPS because it's small, high quality, cheap (for a very decent GPS) and well documented like all Adafruit products.
RFID: I chose the RFID-12 from Sparkfun, as it's a tiny self contained module with a built in antenna, and it's dead simple to use. Just power it up, hold up a tag, and out pops the ID over 9600 Baud serial. This is used as a security feature for this version, but I plan to upgrade it to "equip/unequip" items. For what purpose? Nothing practical, but it'd sure be cool.
Input: The main input is a tiny 8 position rotary switch that I found browsing the Electronic Goldmine. Even though it's surplus, it's still a really high quality mil-spec component with a solid metal body and gold plated contacts for < $3. I also found a little square illuminated pushbutton on their site, which seemed almost idential to the "power" light on the in game terminals, it even glows orange! This can be used as a generic input, but I only use it to activate the "Overbright" mode for now. Also, I popped in two rotary encoders for even more input. Unfortunately I decided to program the rotary encoder interface last, but until I optimize my 4DGL code, I don't have any more code space to utilize them :/ The power switch is a key lock (also an Elec-Goldmine find) that was cheap and seems fitting for a military piece of hardware. This also prevents accidental powering or use by anyone with out the key. You can't unlock it with a bobby pin and screw driver. I tried :P
For those curious about my skill level and how I even know how to do this, I'll be honest, I still consider myself quite the novice. I've owned an Arduino for a few years, but only really began seriously working on projects about a year ago. I've fed my curiosity and sharpened my skills by reading most of the Make, Sparkfun, Hack a Day, and Adafruit tutorials, not to mention the countless little random blogs and personal webpages of makers and hackers everywhere. This was my first time designing a lasercut case and working with GPS modules, so don't be discouraged if you feel this project is above your skill level. Work your way up by taking on projects that are slightly more than you can chew, and eventually you'll grow and be far beyond where you imagined, and be tackling projects like this with ease!
I tried my best to find components that were readily available and (relatively) inexpensive for the desired functionality. For the basic model, you'll only need to order from a handful of suppliers: Sparkfun, 4D Systems, Radioshack, The Electronic Goldmine, TAP Plastics, and Ponoko. For most of the components, I've linked to their direct pages so you should have no problem purchasing the exact parts used in this project. Depending on what you have on hand, the complete BOM of the base model should cost around $300.
Electronic Components and Hardware:
(3x) scrap metal
(4x) scrap electronics
sensor module...Just kidding! If only it were that easy... Here's the real parts list:
uLCD43 (I ordered mine from this US distributor)
Adafruit GPS (The one I own was slightly older, but now they've upgraded to a module that now has built-in data logging!)
Arduino Duemilanove (or UNO, just as long as it has an Atmega 328)
(11x) 10k ohm resistor
220 ohm resistor
(4x) 6-32 3" machine screws (I picked mine up at Lowes)
(4x) 6-32 nuts
(8x) 4-40 1/2" machine screws
(8x) 4-40 nuts
9V battery clip (the kind that holds it in place, not the little power snaps)
1/8" shaft diameter knob (I bought this assortment and chose the largest)
12mm^2 illuminated pushbutton switch (the one I used is no longer sold by the Electronic Goldmine :(
(here's a replacement that should fit the dimensions of the hole, although this one has a round button)
8 position rotary switch
key lock switch
double sided foam tape
mini protoypting board
1/8" thick 2 5/8" W x 4" L polycarbonate sheet (abrasion resistant)
OPTIONAL UPGRADE PARTS *******************************************************************************************************************************
Geiger Counter: I originally purchased this module when it was cheaper, but here's a similar one still sold at the Electronic Goldmine
(2x) rotary encoder with (2x) 1/4" shaft diameter knobs (I preferred some that I picked up at Radio Shack to the default Adafruit ones)
sculpter's mesh (thin metal wire sheet with a little diamond pattern, available at most arts and crafts stores)
RFID-12 module and matching breakout board
Tools and Supplies:
small screwdriver (flathead or phillips depending on what screws you use)
black electrical tape
computer running Windows OS (unfortunately this is necessary for one of the programs)
SD/MicroSD card reader (I just plug mine into an SD adapter and into my printer)
USB-A to USB-B cable
USB to TTL serial board
hot glue gun w/ plenty of glue
wire (I use this 22 gauge wire)
heat shrink tubing
rotary tool (Dremel etc.)
lighter or heat gun (I just got my hands on a Heaterizer XL 3K from Sparkfun. I enjoy it way too much ;)
military green spray paint (I used Krylon "Camo")
Power tool safety
A steady hand
This is by no means a beginner project (You'll need a Repair Skill of 50 and a Science Skill of 40 :P ), but don't be discouraged! To successfully build this project you must be familiar with basic electronics. While this model requires very little soldering, you should know the difference between a pull-up or pull-down resistor and not be confused by terms like COM, VCC, GND etc. As I intended this for people with intermediate skills in electronics, I won't show every single step of the circuit building process, but I will explain the schematic as best I can and my design considerations for each part. If you don't have any experience working with electronics and soldering, check out these greatInstructables as a primer!
Step 3: Building the Main Circuit
I'm using the the Radio Shack mini protoboard for the main interconnect between the Arduino, hardware and LCD. First, solder 9 of the 10k ohm resistors to one of the power buses (this will be VCC at 5V). We'll mostly be making power and signal connections from this board to the sensors and Arduino, as everything is modular.
-Solder the module to the breakout board.
-Solder the pin headers to the breakout board.
-Using female jumpers, make four 3" long connections to the main board
-Connect to of the wires to GND and two to VCC
-When attaching the module to the female headers, connect the module's VCC and RST pins to the 5V output and the module's GND and FS pins to the GND wires
-solder the male header to the board
-solder the battery holder to the board
-make connections from the main board to the GPS with one line for VCC and one for GND
-Keeping the black plastic tube down the wires, solder the wires to the inside of the unscrewed plug
-seal wires with hot glue
-screw black plastic plug cover back on
-test with a multimeter to find out which contacts form the switch (since this is a surplus part, they might be different from mine)
-solder two 3" long wires from the contacts
-splice the VCC line of the battery pack in between the plug and attach the wires to the switch wires
-solder a wire to the + end of the led contact and a wire to the - end
-solder the negative LED wire to the main board GND
-solder the positive LED wire to a 220 ohm resistor on the main board
-solder the other end of the 220 ohm resistor to a 4" long wire (solid core) extending off the board to a female header (output from LCD)
-solder a wire to each end of the switch contacts
-solder one end of the switch contacts to one of the pull-up resistors on the main board
-solder another wire to that last connection to a 4" long wire (solid core) extending off the board to a female header (input to LCD)
-solder the other switch contact wire to GND
-solder a 3" long wire to the big center common pin on the underside and connect it to the GND on the main board
-solder a 3" long wire to the pin labeled "1" (cover in heat shrink tubing or hot glue to prevent a short)
-repeat for the next 7 pins (the contacts are pins 1-8)
-solder the pin "1" wire to one of the pull-up resistors on the main board
-repeat for the next 7 pins
-solder a 4" long wire (stranded core) extending off the board to a female header (input to LCD)
-repeat for the next 7 pins
Hooray! That's it for soldering. Since the speaker and rotary encoders aren't used for now, we'll just be popping them into the front panel unwired.
Step 4: Making the Case
Back Plate Design:
The LCD mounts into back plate flush as it too (from the top of it's PCB) is only 1/8" thick. The sides also have very long slots into which the side panels mount.
Middle Plate Design:
The middle plate serves as a retaining frame for the polycarbonate sheet along it's edges, and also provides the sides slots for the panels as well.
Cover Plate Design:
Just to make everything more aesthetically pleasing, I wanted the cover plate to look nice. Its functional purpose is to retain the polycarbonate sheet in place and provide holes for the knobs to attach to. The inner hols for the screen and speaker are wider than the heads of the screws themselves, so the screws will appear to be "counter-sunk" into the case. Nothin' much else to say, the speaker cover is a tiny little Vault-Tec logo and there are a few symbols etched near the rotary encoders to mark their future purpose as input knobs.
If you're going to use Ponoko to make your case you'll first need to make an account. Once you've properly registered, log into your account and go to My Designs. Upload the files I've provided. The project uses a single sheet of P3 (15"x30") 3mm glossy hardboard. You can use whatever material you like so long as it's 1/8" thick, but I preferred the hardboard as it's the cheapest option :P
If you received your case from Ponoko, you'll first have to remove the adhesive paper that covers both sides. The cardboard flap that the board is shipped in makes a wonderful spray painting surface, so that's what I used.
Front and back plate construction:
1. Sand until the hardboard is no longer glossy. Wipe off excess dust.
2. Take the boards to a well ventilated area for painting.
3. Spray a nice even layer of primer. Allow to set according to the instructions on the can.
4. Spray the first coat of regular paint. Allow to set
5. Spray three more additional coats from alternating directions each time. (top->bottom, right->left etc.)
6. Allow to dry.
I don't have any shots of the final painted plain sheets, but just feel free to paint until you achieve the desired color.
Step 5: Software Overview and Programming
UPDATE: For anyone interested in the 3000 model code from my other youtube video, you can find it here as oldPip3k.txt. This only displays various graphics if you have them and interfaces with an arduino for reading switches, but lacks any functionality compared to the handheld version. It's old and clunky, but you're free to see it now!
Now that you've built it, it's time to bring your PipBoy to life. Failed your G.O.A.T test? Not a problem! Follow these next few steps and you'll be a bonafide PipBoy Programmer in no time!
So what's actually going on inside both processors? On the Arduino side, not a whole lot. The Arduino is just parsing the NMEA data from the GPS, reformatting it into a fixed packet length of around 45 bytes and spitting it out on serial to the uLCD43's Picaso processor. If you take a look at the 4DGL code, thing seem a lot more complicated, but the majority of the program is just writing all the graphics for the display. The 4DGL program mostly just waits for the packet from the Arduino and then updates the display information on the Navigation tab for the user to look at. I commented a lot of my code, so it should be pretty straight forward if you're trying to read it. I hate when people provide lengthy code, but fail to comment properly, leaving readers to struggle. What's the sense in sharing your program if you're not going to share it with users of all skill levels? So hopefully there is no mystery to my code and you can learn from it. I can't really claim any credit for 90% of the Arduino code as it's mostly from the example Adafruit Library. The 4DGL code is however entirely my own labor of love and due to being 1000+ lines of code, I wont display it as an image here. It'll open fine in any code editor like Notepad++ if you just want a peek without having to download the 4D systems' suite. It's very much like the Processing language, so it should be relatively easy to follow.
To get started you'll need two different programs:
Download and install the programs to your computer (Unfortunately the 4D software is Windows only, so Apple and Linux users will have to find a Microsoft machine for these next steps)
I extracted the images and sounds directly from my game files on my computer so I can't legally redistribute them. I wouldn't want to have to delete this Instructable for silly legal reasons :( So I won't detail how to extract them either, BUT it is very easy to do should you search elsewhere. I will still show you how to properly put graphics and sound files onto the uSD card for use with 4D systems LCD and OLED screens.
Before we can upload a bunch of images to the micro SD card and plug it into our screen, we'll need to format the card. According the the Graphics Composer user guide, you need to do a full format, so uncheck "quick format" and go for a stretch or snack. My computer took about 5 minutes to completely format a 2GB card.
Loading images onto the micro SD card:
1. Fully format card
2. Open Graphic Composer Software (4D Workshop-->Tools-->Graphic Composer)
3. Click the "add" button at the bottom left corner of the software
4. Select all the images you want to add and hit OK
5. Once all the images are loaded into the software, click the build button
6. Select the first option (4DGL, SGC Picaso - GCI - FAT Selected Folder)
7. Make sure the output folder is your micro SD card (usually drive D:\)
8. Click ok and double check the SD card drive to see that the files were downloaded (two files called ".gci" and ".dat" on the card)
9. Open the ".dat" file and save in at another location on your computer
10. remove the card from the computer and pop it into the micro SD slot on the LCD
There are multiple ways to diplays images using 4DGL, but I'm using a function that requires you to name the images by it's index position in the ".dat" file. So the first three images in that file are thus indexes 0, 1, 2 etc. This will make more sense when you refer to the code in the included program.
Compiling and loading the 4DGL code to the LCD screen:
1. Download the attached file "PIP4DGL"
2. Open the 4D workshop software
3. Change the "Platform" in the toolbar to uLCD-43PT_GFX2
4. Plug in the board to USB to Serial board (TX to RX0, RX to TX0, VCC to 5V, GND to GND, and RST to DTR
5. Make sure the output is set to the right COM port of the tab next to the Compile and Download Button
6. Wait for the colored circle on the toolbar to turn blue (should only take a couple seconds)
7. Check the "Destination->Flash" option on the toolbar
8. Click the "Compile and Download" button
Compiling and loading the code the Arduino:
Before loading the code to the Arduino, we need to follow the instructions from Adafruit here
1. Download the attached files "PIPARDU.ino"
2. Open the PIPARDU file and double check that it compiles
3. Plug in the board.
4. Upload the code.
Step 6: Putting It All Together
Back Plate Construction:
-With the painted side of the plate facing outwards and the hole for the pack on the left, pull the keyswitch through the hole first
-Pop in the battery pack. It fits very snugly and won't come loose, add glue now to reinforce it if you wish.
-Secure the Arduino to the inside of the place with the double side foam tape and plug in the power jack to the board
Side Panel Construction:
-if you have the same Geiger module, stick it to the inside of the little plastic carrying case that it came in.
-glue the case and battery snap to the inside of the panel
-pop in the battery and attach the power snaps
-on the opposite shorter side panel, affix the RFID-12 module to the inside with the double sided foam
-with the back plate facing down, place the long side panels with the slots in first, make sure the longer tabs are facing up
-on the top right corner of the long place the GPS and secure it with the double side foam tape
-pop in the two side panels with the Geiger counter in the lower right side and the RFID on the left
Front Plate Construction:
-with the innermost frontplate facing down (as it would look from inside the case) pop in the LCD screen
-flip that plate and the LCD over, and place the middle plate on top
-screw in the LCD
-place the polycarbonate sheet in the middle layer (it should pop in snugly and fit flush with the layer)
-place the cover layer over the front and then flip over everything over so you're looking from the inside again
-cut a small .5" by 1" rectangle from the sculpter's mesh and place it in the little slot in the middle layer, glue in place
-pop in the speaker and turn it around
-screw in the keyswitch and rotary encoder
-place the knob on the rotary switch
-Double check to make sure both the LCD and Arduino are programmed correctly (it's quite a hassle to open the device up)
-Hook up the switch input of the illuminated power light to the 3rd IO of the LCD
-Hook up the LED input of the power light to the first IO of the LCD
-Hook up pins 15,17,19,21,23,25,27,and 29 to the switch outputs of the rotary encoder
-Hook up the RFID's D0 pin to Pin 30 of the LCD
-Hook up the Arduino's Tx to the Rx of the LCD
-Hook up the Arduino's software serial pins (3 and 2) to the Rx and Tx of the GPS
-Hook up all power connections, making sure every module has a connection to VCC and GND (remember, the RFID requires 4!)
-holding the front panel, place the layers on the side panels, it will take a little wiggling, but everything should fit flush.
-place the four 3" screws through the corner holes and secure them with the nuts on the back panel
-enjoy a nice cold Nuka Cola Quantum, you're done!
Step 7: User Guide
Geocaching is a global scavenger hunt! People from all over the world have hidden items in every nook and cranny of the planet, so get out there and explore! (To be honest, I haven't personally gone geocaching yet. While my phone has a built-in GPS, that's too lame. I told myself I would start once I built my own GPS, so now I can go!)
Urban exploration is exactly what it sounds like: the rediscovery of urban ruins and general architectural decay. A GPS isn't technically necessary for this activity, but this ain't no ordinary GPS! It's a PIP-Boy, and it what better place to take it than to a decaying old building in the middle of nowhere? But be cautious! Many buildings may be condemned for very good reasons (i.e. asbestos, noxious fumes, structural instability) so be aware of your surroundings. Be mindful of your local laws too. Many of the best locations require that you trespass to gain access and while awesome, it's still illegal. The area where I live is a very modern development, so no nearby ruins to take my PIP-Boy to, but I do live in the Mojave desert, so maybe I should take a quick trip over to Goodsprings. Only a two hour drive, hmm...
Step 8: The Future
For those of you who've read this far, thanks for reading! Hopefully you have learned something or two from my ramblings in this Instructable. If you think this is worthy of winning, vote for me and you won't be disappointed in the future, I promise to put the 3D printer/Camera to very good use! :) For those dedicated enough to build their own PIP-Boy, please post in the comments and let me know what you made! This project is very open to customization and I would love to see the results of your own creativity! As a platform this device is really open for development. Even with the base hardware, so much more can be done, so I'll be working on upgrades as I go along.
And what I'm sure you've all been waiting for, here's the demo video to see it in action (well, indoor action at least)