A month and a half has passed since starting this building project, and most of the components for Raspberry Pi zero DIY pocket game console have arrived. I have almost all the internal components now. It took a while for some shipments from China, but finally all my pending orders except one have been delivered.
From left to right:
Thumbstick similar to one PSP, three push buttons
Breakout board for connecting thumbstick cable, a bag of very tiny PCB mounted push buttons
Adafruit Arcade Bonnet board
2.2" TFT display
Raspbery Pi Zero board
8 ohm 0,5W speaker
Some pin connectors suitable for Pi and Bonnet boards
Another project, another tool
Also, I've started learning new CAD software that is more suitable for this project. Last year, I used SketchUp for modeling a bartop arcade cabinet. That worked out quite well. I could have tried to use SketchUp for this project, but this time, I was thinking to use a bit more versatile tool. The features I was seeking were:
- ready-made electronic component models. The design work I want to focus on is the case parts and assembly, and if I can, avoid creating the components myself
- capability to work with submillimeter precision. After all, everything in this project is smaller.
- ability to export models for 3D printing
- reasonable price
After a bit of searching I decided to try to do the design with FreeCAD, which is open source software. So at least the last of my criteria is nicely fulfilled. In fact, I tried to use FreeCAD already for the my bartop game cabinet design more than year ago, but put it aside when I noticed SketchUp was easier for the task at that time. Well, a few weeks ago it was time to bite the bullet and give FreeCAD a serious try.
FreeCAD seemed pretty OK in its ability to read various types of CAD/CAM file formats. I started by sourcing the virtual equivalents of my physical components. It was relatively easy to find the models for the most common ones, such as Raspberry Pi Zero, and connectors and pins. Most could be found by googling images of '3d model' plus whatever the component name was. There are number of services that supply free 3D models for personal projects. I downloaded models from several of them. For the others, I had to take a digital caliper in hand, measure the components on my workbench, and painstakingly create the models for them from scratch based on my measurements.
Being free software, FreeCAD may not be the most polished or capable CAD tool available, but its models are parametric, which feels powerful once you grasp the idea how they work. Typically model starts with a 2D cross section shape or shapes, which are then extruded and further refined using a number of other tools, such has boolean operations, and operations that correspond to typical machining techniques such as drilling holes or milling pockets. Although I'm planning to 3D print the case, it is often more intuitive to understand how to create a model when it is based on actual machining techniques. The ability to define shapes using constraints is also very useful, because it allows the designer to focus on the features, and get them precisely right, once you know how, of course. FreeCAD constraints for 2D shapes include such things as being able to lock two points on curve to a precise distance from each other, making too lines parallel, creating a set of circles with same radii, fillets with same arcs, and so on.
With all this parametric versatility, figuring out how to model a certain shape or solid can also be a challenge to a beginner. There are often many ways to accomplish the same end result, so I've already used quite a lot of trial and error in my attempt to design the components and the case.
First steps with FreeCAD
So far, I've modeled Adafruit Arcade Bonnet, the 2.2 " display, and analog thumbstick. I also modified an existing push button model to match my push buttons, as the models that I found for similar buttons were slightly larger. For the speaker I'm planning to include, I used an existing model for a speaker that is similar in size and shape, though not exactly the same.
Once I had all the components (sans wires) as separate 3D files, it was time to do rough virtual assembly, in other words, figure out how to position the components in relation to each other so that they would fit into a nice compact case shape. This part is quite fun after all the groundwork.
My current design is to place the Arcade Bonnet at the bottom of the case, Raspberry Pi Zero at the top of the case, and display with its board in the middle, partially overlapping at least the Pi board and the speaker. The joystick or thumbstick and buttons are placed on top of the Arcade Bonnet, sticking out from what will be the bottom front surface of the case, or control panel area. Here is a work-in-progress video from FreeCAD, including a shape of the outer shell of the case. It is still a bit rough, but still way more detailed than my first pencil-and-paper sketches.
This placement of the I/O board (Arcade Bonnet) and CPU board (Pi Zero) requires a ribbon cable between the boards as they are not placed on top of each other - the Arcade Bonnet is designed as a hat type accessory to the Pi, but I don't want to make the case too thick, hence the placement at the opposite ends of the case, and aligned almost on the same plane. I will be using right angle male pin connectors on both boards, and the cable in between will be modified from old IDE hard disk ribbon cable and female connectors.
I have to work out more on the details of the control panel section. I need to somehow connect the buttons and the thumbstick to the Arcade Bonnet pins and sockets, and especially the thumbstick may prove tricky as the space above the board is full of connector sockets and pins. The button caps I have for push buttons are bit too large to my liking. Little Knight Arthur only needs three buttons, and can be played with only one, but I may want to try other games in the same case and they typically need at least four push buttons. I need to come up with smaller or thinner caps. One option would be to design and 3D print the button caps as well.
While figuring out the detailed innards of the case, I also need to check that my components aren't broken. I've already run a few test with the small display, and know how to get it working with Pi. I will need to make a more complete smoke test and verify that buttons, stick and speaker work with the display simultaneously.