Handheld Portal Device From Portal

by KaitlynTseng in Circuits > Arduino

1062 Views, 15 Favorites, 0 Comments

Handheld Portal Device From Portal

0.jpg
0.jpg

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

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

Aperture_Science_Handheld_Portal_Device_Portal.png

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

body screenshot.png
CONTINUED FROM PAGE-1.png

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

shell screenshots.png
CONTINUED FROM PAGE-2.png

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

LED mounts screenshot.png
CONTINUED FROM PAGE-3.png

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

unnamed.jpg
0.jpg
unnamed.jpg
unnamed.jpg

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:

Protopasta Recycled Black PLA

Cotton White PolyTerra PLA

Setting Up the Nano and FX Board

Capture 1.PNG
Capture 2.PNG

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

unnamed.png
0.jpg

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

Screenshot 2024-03-13 164221.png
unnamed.jpg
unnamed.jpg
unnamed.png
Imported File (4)-1.png
unnamed.jpg

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!

Handheld Portal Device

Now your Handheld Portal Device is complete! Above is a video of my Handheld Portal Device in action.