Hot keys from a hot slice! This Arduino powered keypad was cooked up fresh and comes dripping with cheese in its own box!
If you're a streamer, you know that hotkeys can make switching scenes, activating and deactivating sources, etc. a breeze. Commercial units are available, but are fairly pricey. Building your own can save a ton of dough for real pizza!
But it is not just for streaming either! The keys can be programmed to emulate a plethora of keyboard shortcuts, combinations, phrases, etc. to increase your productivity in virtually any software!
But seriously, who doesn't love pizza? It's rad! Let's get started!
Step 1: Ingredients: Parts, Supplies, Tools
To get started, we need to gather our ingredients!
- For the StreamBox Pizza Controller:
Step 2: Laying Out and Modeling a Delicious Slice
After gathering the necessary parts and supplies, it is time to get cooking! With my Fusion 360 skills on the novice/beginner side, I begin with a layout in Adobe Illustrator. Illustrator is a vector based drawing application, and pairs well with CAD-type software. Bonus points for the ability to export as a DXF or DWG straight from Illustrator.**
The design is fairly simple: a triangle with a rounded side for the crust, and ten 24mm circles for the buttons/pepperonis. Then a mockup for the cheese drips. These will act as my sketches for modeling in Fusion. Once everything is sized, spaced and scaled to proper dimensions we're ready to export to DXF and head over to Fusion 360. I chose to export 3 files: The main slice, Cheese Left, and Cheese Right, for the respective cheese drips.
In Fusion 360, There's no need to get fancy. I used 3-4 basic tools to complete the entire thing. I chose insert>sketch and selected my DXF of the main slice. From there I selected my various surfaces and used either Extrude or Push/Pull. Once I had my basic shell laid out with proper thickness, I extruded a new body for the top of the cheese, with all the holes through it.
To get the cheese drips, I chose again to insert a new sketch, this time selecting the vertical face of each side of the pizza, so that the sketch would be on the same plane. Again, using an Extrude command, I make the cheese drips the same thickness as the cheese top. Once I had both sides and the top done, I selected the bodies, and used the Combine tool to make them into a single body.
I modeled some buttons based on simple circle sketches, and used the default settings in the Threads tool to create a little detail on them. A little rounding with the fillet tool and I had a pretty realistic and size accurate mockup.
Once I had the model complete, I sought to minimize the amount of filament used and a way to make the print more stable. I decided to cut the crust into 2 bodies (the main and a "lid" of sorts) using registration pins to lock it together. I cut the cheese *ehem* into 3 main bodies (the top, and each side). Changing the crust gave me room to place the Arduino Pro Micro out of the way, while saving a good bit of print time and filament.
From there, I drew simple sketches for the Pro Micro area and cord opening. To make these spaces as well fitting as possible, I used a set of digital calipers to measure the parts. The end result was a perfect fit. I also added some facets to hold the cheese "lid" in place with friction. To tidy things up, and make the crust more realistic, I applied a fillet to round things off.
With the model complete, I select each body and hit the Make tool to send to Ultimaker Cura for 3D printing.
TL;DR - Layout basic design in illustrator, create the 3D model in Fusion 360, send to Cura for 3D printing.
**Yes, I know, Fusion 360 can handle SVG perfectly well, but in my experience, my Illustrator SVGs come into Fusion at about 76% scale, while DXF comes in at 100%.
Step 3: 3D Printing
Once the model is complete in Fusion, it's as simple as selecting each body and clicking "Make" to send to Ultimaker Cura for slicing. The completed device is ridiculously life-size, and as such would require an investment of time and filament. So, before I committed to printing the entire crust, I cut and printed the small section that housed the OTG cable and Pro Micro to make sure I had it measured properly. Luckily, I did. But if I hadn't, it's better to find out this way than at the end of a 13 hour print.
For printing, I use the Maker Select V2 from Monoprice. It has roughly the same build area and specs as the Prusa i3, making it a nice preset to use, since there isn't one for my printer. I used yellow and tan PLA filament for the prints, with 0.2mm layer heights and 20% infill. I chose to slow down the print and travel speeds to ensure clean prints.
The entire model was printed in 4 rounds: The cheese top (3h48m), the cheese sides (2h19m), the main crust (15h37m), and finally the top crust (4h7m). That's a total printing time of 19 hours and 44 minutes! I used around 50g of yellow and 140g of tan filament total.
Seeing it come to life really makes the mouth begin to water! Now it was just a matter of gluing the pieces together and assembling the shell. I used Gorilla Super Glue to assemble the cheese. The crust printed with pins and snapped together, but I sealed the deal with few drops of glue to hold it permanently.
This is the easiest, but most time consuming step, by far.
TL;DR - Slice, print and glue together pieces.
Step 4: Electronics
Now that the crust has baked, it's time to focus on the delicious toppings. For this step, we will need our 3d printed parts, Arduino, buttons, and jumper wires, as well as the soldering iron and some solder.
At the heart of this project is an Arduino Pro Micro. It has an ATmega32U4, making it ideal for keyboard simulation and function as a Human Input Device (HID). More on that in the next step.
The buttons are designed to snap into place and are held in with tabs. With all 10 pushed through, it's time to start wiring things up. I first bend over one tab on each button. Then with a length of wire, I expose a small section every inch or so and solder to the bent over tabs, daisy chaining the buttons together. This will be our ground.
The jumper wires I used have both male and female ends. I only need the female end, so I cut off and exposed a small bit of wire on the male end. Each button gets its own wire, and the button at the end of the ground chain gets a second. When finished, there should be 11 total wires with females ends: 1 for each button, and a single ground.
To solder the pins to the pro micro (or any microcontroller for that matter), I like to use a bread board. It holds everything nice a square. This may look tedious, but the solder flows right to the pin and pad. You'd have to try to get them to bridge.
For this particular project, I didn't want to hardwire the buttons, hence the jumper wires. But they were too tall to fit as assembled. Luckily, it's easy to bend over the pins on the pro micro and reduce the overall height.
The buttons were attached to pins 2 through 10 and 16, with the ground attached to one of the ground pins. Then the Micro-USB to USB-A OTG cable was pushed into place, the cord coiled to fit and hold the Pro Micro in its slot. Now it was just a matter of cramming it all into the crust and snapping on the cheesy lid. It's held it place with friction, but comes off with little effort if anything needs to be repaired or replaced in the future.
The USB-A fits well and provides a finished look and feel to the device. A USB-B connection would have been nice as well, but I had this on hand and it works fine.
The physical part is done!
TL;DR - Put in buttons, wire it up, assemble.
Step 5: Code
My skills in the Arduino world are almost on par with my Fusion skills. Developing, but marginally effective. It's not pretty, but it works.
The Pro Micro board and its ATmega32U4 chip make use of the Keyboard library to simulate a USB keyboard. Once programmed and connected, most computers will recognize it as an input device immediately.
The code is written using the Arduino IDE from arduino.cc. The code is fairly simple, more or less telling the computer that each button is a keypress. There are many parts to the Keyboard library, but in this instance, I simply want to emulate the additional function keys (F13-F22 specifically).
The code follows a few steps:
- Include the Keyboard.h library, so that the pro micro has all the tools needed to act as a keyboard.
- Define each button and its corresponding pin
- Determine the pin mode for each button
- Start the keyboard function
- Tell the Arduino that when ButtonX is pressed, do Y, and when it is released do Z.
Since we're only emulating single buttons, Keyboard.press followed by the key we are pressing suffices. When the button is pressed, the pin reads LOW, as it's grounded out, and the key press is sent. It will continue to send as long as it is held. I added a delay to slow the repetition and quell any flickering in scene changes in OBS. When the key is released, it is no longer grounded and reads HIGH and stops sending the keystroke. This code is repeated for each button in the void_loop area of the code.
Once the code has been validated, it can be uploaded to the Arduino. Connect the USB cord to your computer and hit upload. Once upload is complete, the device should immediately begin to function as an input device. Test it out, make sure it does what you want, and fix the code to better suit your needs.
I use it for scene switching and device control while streaming to Twitch through Open Broadcaster Software (OBS). OBS allows hotkeys to be set for so many different things, just by selecting the item and pushing the button. It is an ideal pairing.
At this point, the device is 100% functional and complete. But why stop there? Let's package it!
TL;DR - Code it up like a keyboard and plug it in.
Step 6: Packaging
StreamBox, the fictitious manufacturer of Customizable Digital Keypads has just dropped the hottest keypad of 1987: The 10 Button Pizza Edition! RAD!
The sky is blue, Pluto is a planet, and pizza comes in a box. These are facts.
For this step, I jumped back to Adobe Illustrator and used my original sketch as the basis for the shape and branding of this single slice of goodness. Served up in an 80s theme, I think the product packaging really brings it all together.
A couple design tips for printed items and packaging before we dive in:
- Bleed full color coverage past the margins to allow room for trim error.
- Be aware of the way each face/flap of a package or box will face once it has been assembled, otherwise you may end up with upside-down or even hidden areas.
- Boxes and packaging need tabs for each side or face to attach to each other, don't forget to design those in!
The box design is a relatively simple triangular shape with a top flap cover. I took some measurements of the finished controller and translated that to the shape. I took the height and added a little extra to account for the thickness of the cardboard and laid out the side flaps. Then it is just a matter of mirroring this shape for the top.
Once I had my template laid out, I printed it out on copy paper, taped it together and then attached it to a sheet of cardboard. I used a ruler as a straight edge and an XACTO knife to cut out the shape. Using the edge of the ruler, I scored a crease along each fold for nice clean edges. Using a few drops of glue on each glue tab, I glued the shape together and tested it out. With the slice fitting snuggly in its new home, it's time for a little style.
That same box template will also serve as the template for the design. I found a few typefaces that screamed "80s AND PIZZA!" at my face and went to work. I even used my initial pizza layout in the logo!
It went through a few iterations and color changes before the design was complete. Finished off with a color halftone filter to complete that 1980s dot-matrix vibe.
I chose to print my design with my large Epson printer on printable vinyl film, but it could just as easily be printed at a print shop, or tiled and assembled just like the template. I rough cut the shape and begin the process of wrapping the box. As you contour around a shape, it's important to trim and slit as necessary for proper fitment. I had some issue with wrapped edges staying put, so I applied a bit of clear tape to hold them in place.
For a final finishing touch, I mocked up a quick insert thanking the buyer and describing just how awesome The Pizza Edition StreamBox will make the consumer. The controller, USB cable and insert all fit nice and neat in the finished box. Hear hear!
TL;DR - Make a box for it to go in.
Step 7: Conclusion
Welp. That's it!
This project is completely ridiculous, but it doesn't have to be. That's what makes 3D Printing so great. With a little ingenuity and some software, you can create virtually any combination of design and function to suit your needs.
That doesn't mean you HAVE to have a 3D printer to do any of this though. You can purchase a premade plastic project box, drill some holes in it and add all the functional parts to have something that works just as well as this delicious piece of awesomeness.
Never let your lack of tools outweigh your creativity. Find alternatives and work around your limitations and you'll be better for it!
Jonathan at Beard & Bot - This pizza slice stream box wouldn't have happened without him. Beyond the initial concept of pepperoni buttons, he contributed to this project in many ways and made it the success that it is.
Second Prize in the