Handheld Portal Device From Portal
by KaitlynTseng in Circuits > Arduino
1412 Views, 22 Favorites, 0 Comments
Handheld Portal Device From Portal
Have you ever wanted to experience several hours of testing while being forced to listen to one (or sometimes two) somewhat murderous artificial intelligences? If your answer is yes, this your place to begin your portalling adventure at Aperture Laboratories!
This Handheld Portal Device is a 1:1 scale recreation of the same gadget from the games Portal and Portal 2, developed by Valve, and was heavily based on EVARATE's own Handheld Portal Device and Lunchbox7985's additions and modifications.
This project was made for my SIDE Project in Ms. Berbawy's Principles of Engineering class, and would not have been possible without her and Berbawy Makers' help. Thank you so much! Lastly, I would like to thank the Maker community for being so supportive and willing to share their creations online for others to see.
Supplies
Materials
- 1 Arduino Nano
- 1 Adafruit Audio FX Mini Sound Board - WAV/OGG Trigger - 2MB Flash
- 1 Micro USB Board
- 1 Mini 5V Digital Amplifier Board with Switch Potentiometer
- 1 NeoPixel Ring - 16 x 5050 RGB LED with Integrated Drivers
- 2 NeoPixel Jewel - 7 x 5050 RGB LED with Integrated Drivers
- 1 Flora RGB Smart NeoPixel
- 2 Gikfun 2" 4Ohm 3W Full Range Audio Speakers
- 5V power source, such as a portable battery
- 1 large breadboard (10 holes by 63 holes)
- 2 switches
- 2 arcade buttons, blue and orange
- 2 pushbuttons, red and black
- Solid core wire
- Solder
- 1 2.5" Clear Tube, at least 14 centimeters in length
- 1 Bubble Acrylic Rod, at least 18 centimeters in length
- Velcro strips
- Some spare black cables
- ~1300 grams of black filament
- ~750 grams of white filament
- Loctite Gel Super Glue
- 6 M3x20 screws
- 6 M3 nuts
Tools
- Prusa XL 5T
- Prusa i3 MK3S+
- USB-A to Micro USB cable (for the Adafruit FX board)
- USB-A to Mini USB cable (for the Arduino Nano)
- Hacksaw
- Wire cutters
- Wire strippers
- Soldering tools: soldering iron, solder sucker, tip tinner, fume extractor, sponge
- Multimeter (for troubleshooting)
Planning
Here is an image from the games that I referenced through this project. From the colors, we can split the Handheld Portal Device into several larger components:
- Black main body
- End of the nozzle
- Nozzle
- Body enclosing the tube
- Cap, which will include all buttons and handle
- Large shell
- Small shell
- 3 Claws/cables
Due to the complexity of the Portal Device, several of these components will have to be split into subcomponents. All of my CAD has been done in Fusion 360.
Main Body CAD
The first step is designing the black main body. This includes the (from left to right) end of the nozzle, nozzle, Main Body 1, Main Body 2, the cap, and the handle. I also added speaker grills and mounts based on the dimensions of the speakers used.
Here's how I scaled my design to the dimensions I wanted: I imported my reference photo as a canvas, scaled it by selecting the very front and very end of the pictured Portal Device, and defined my preferred length. Now, I have a reference that helps me maintain my proportions and make sure everything look great. Personally, I scaled my canvas so my Portal Device was 70 centimeters long. Feel free to alter according to your own goals.
Pictured above is a page of my documentation for this part of my CAD, which I will be including for every step concerning CAD. I strongly suggest you document each of your steps as well, since having a document to refer back to is a great help, especially when troubleshooting.
Shells CAD
Next are the white shells, which I will refer to as Small Shell and Big Shell. Notably, I included protrusions for the cables and rectangular indents for the base of the claws. I wanted the shells to be easily removable in case I wanted to go back and sand them down later, so the connectors on the small shell slide on and will stay on without the use of any glue. On the other hand, I designed Big Shell so it would accommodate a bit of Velcro (since you will need to lift it up a bit in order to slide it over the cap and handle). More on this later.
You'll also notice a hole at the top that the Neopixel Single mount will fit in later and that helped me align the shell with Body 2.
LED Mounts & Miscellaneous CAD
Next are the LED mounts, which includes the Neopixel Ring mount, the two Neopixel Jewel mounts, and the mount for the Neopixel Single. I have pictured them here in the approximate position you would assemble them on the acrylic rod.
Also pictured is the tube holder (the disk skewered by the acrylic rod), which has been dimensioned to the inner radius of my plastic tube and will secure it.
3D Printing
To print everything, I sliced each part in Prusa Slicer, then printed them on the Prusa XL 5T and Prusa MK3. In order to 3D print Shell 1, Shell 2, and the handle with more ease, I cut them in half in Prusa Slicer.
All prints were printed at 0.2mm QUALITY. I changed the infill to 10% so my project could be a bit lighter and would not use as much filament. Please note that Big Shell and the nozzle will both need supports--you can paint them on pretty easily in Prusa Slicer, just make sure to cover everywhere with overhang (denoted by dark blue layers).
Here are the filaments I used, though you can substitute them with any black and white filament as long as you adjust the settings accordingly:
Setting Up the Nano and FX Board
Next, I had to set up the Adafruit FX board. It has a built in 2MB flash, so no SD card is needed. I plugged in the Adafruit FX board with my USB-A to Micro-USB cable to a computer. It pops up in your file directory, similar to how a flash drive would. Then, just I just dragged and dropped all of my sound effects into it.
Some are provided in Lunchbox7895's GitHub, but I needed to procure the song file myself. Instead of the song "Stay Alive," I found the song that the in-game radio plays and used that instead. I compressed it down as much as I could and converted it to a .WAV file, since I only had 2MB to work with. I renamed it T06.WAV, but you could also rename it in Arduino IDE on line 61 (the line that defines "alivesong").
The rest of the code was good to go; You can find all of here on, you guessed it, Lunchbox7895's GitHub. I uploaded the code onto my Arduino by downloading Arduino IDE and plugging the Nano into my computer with a USB-A to Mini USB cable.
If you get errors, it's likely you don't have all of the libraries installed. Here are the ones you need:
- Adafruit Neopixel
- QueueArray (you will have to upload this library onto Arduino IDE as a .zip file)
- SoftwareSerial
- I2C
- Adafruit Soundboard
Electronics
Now that everything is printed, I started to assemble my electronics. Since I had a lot of space in Main Body 2, I could afford to mount everything on a large breadboard. I followed the circuit diagram from Lunchbox7895; Linked is their GitHub that includes their circuit diagram and a mockup in Fritzing. Make sure to make the wires for the LEDs are extra long so you can mount them on the breadboard while the it's outside of Main Body 2. It'll also generally make your life easier, since you will have solder a Neopixel to another Neopixel while assembling.
Above is an annotated image of my wiring, in case you need more references. Please note that I chose to forego the three red LEDs that Lunchbox7895 included.
Assembly
Now that we have all of the parts ready, we can start the final assembly. Included is an exploded view and an annotated section analysis for reference.
Shells
Since I needed to print both shells in two pieces, I cut it in half in Prusa Slicer and added dowels as connectors. Unfortunately, they broke when I was assembling it, but I just cut some chopsticks to the length I needed and glued both parts together (as shown above). I suggest you forgo printing dowels and just design around some you already have.
The small shell can slide right on and will stay put without any glue, but as I mentioned earlier, I added Velcro on the connections between Big Shell and Main Body 2. I used a lot of Velcro since I only could find pretty old strips, but if you're using new/heavy duty Velcro, you should only add about 1/3rd of a strip and only to the connectors in the front. This is because the motion to remove Big Shell is a sliding/lifting motion, which will be greatly resisted by the Velcro.
Main Body
First, I cut the plastic tube with a hacksaw to about 14 centimeters in length, then assembled all Main Body parts around it. All parts of the main body should slide right into each other, no glue needed. If some fits are tight, go over them with some sandpaper or a file.
Mounting Buttons/Switches
I designed my cap to the dimensions of my buttons and switches, so most of them friction fit for me. I hot glued the red and black buttons because the fit was a bit loose. You can do the same if needed. If the fit is too tight, sand down the holes. Usually, arcade buttons include fixing rings to hold them in place, but if they do not, some hot glue should also work. Make sure to solder them before mounting them for your own sanity.
Mounting Electronics
All of the Neopixels don't need any glue to snap right into their mounts, but you will either need to use screws or glue to mount your speakers to the speaker grills. I included holes that were already present on my speakers with the intent of using screws, but I found supergluing to be a much easier endeavor.
Claws
The claws can be assembled with the use of M3 screws and nuts. I superglued the last piece onto the third piece, then, I superglued them onto Main Body 1 and Small Shell.
Cables
I cut up some old AUX cables to use. I superglued one end into a wire holder, then adhered a bit of Velcro on the other end and also on the inside of the protrusions I designed for the cables, since you would have to remove them in order to remove Big Shell.
Overall, the only parts that require glue are the base of the claws (to attach to Main Body 1 and Small Shell), the holders for the decorative cables, the very end of the claw, and the handle.
Completion!
Now your Handheld Portal Device is complete! Above is a video of my Handheld Portal Device in action.