I was looking little further around in Google and noticed that often fancy and/ or 3d printed cases were used. I had something completely different in my mind. It was clear I need to build my own circuit board and arrange a compact design.
Screen
One could choose between 2.8” and 3.2” screen specially designed for the Raspberry Pi. I ordered both and compared the benefits. Clearly the larger screen would be better. 3.2” screen has the same resolution as the smaller one, nevertheless most, if not all, old games were designed with relatively low resolution and that’s not an issue. The main difference between the screens is the mechanical arrangement.
The 2.8” screen is glued with a tape on the PCB. It‘s not a perfect solution, but it works as long there are not much movement. After some screen rotation and looking the tape was already getting loose. The 3.2” screen is pre-glued with thicker pads. They looked more solid than the tape, still I was not convinced with the stability.
After some consideration how to assemble the screen in a stable way, I decided to add additional PCB layer that presses (gently) the screen on the PCB and fix it this way. With the 3.2” screen it’s not possible due to the pins under the screen. Thus, the choice to use 2.8” screen. Besides, it felt large enough to play Super Mario.
Mechanical Design
I don’t have a 3d printer and I was more into using normal PCBs. Thus, I designed the game console with 3 PCB layers. The middle PCB layer has almost all the connections allowing smooth surfaces on the outer ones.
The place was very limited and I was hoping I could skip the GPIO cable and do all the connections with the PCB. I was not fully sure if I could really solder it as needed, therefore I added the GPIO connector on the PCB. Soldering through two PCBs the plug worked very well and I was able to skip the large GPIO cable.
In the Adafruit design one doesn’t need any resistors between the switches and the Raspberry Pi. I decided to add small SMD resistors (they can be up to 100 Ohms) for some safety. Additionally, that allowed for me to access all the pins through resistors. If I want to modify the design later or when I need a signal, I can easily access it through a resistor or solder an extra wire there.
Battery
In order to be mobile, it requires a battery and suitable charger and voltage converters. In order to reduce amount of work needed I bought simple battery charger (a cheap one from ebay) and a boost converter (a cheap one from ebay) that can make very nice work. Resulting much less work for me. The battery empty indicator is achieved with a simple resistive voltage divider and a comparator. Not very sophisticated solution, but it’s very simple and it works.
The Raspberry together with the screen consumes 150-250mA current, depending on the activities done with it. The Raspberry is working with 5V, thus the voltage choice and micro-USB charging. No additional voltage conversation is needed. The LiPo battery (standard 18650 type) is charged up to 4V and voltage booster is needed to reach 5V. I noticed that 4.5V is actually enough, but eventually the battery is getting emptier and its voltage is reduced and I anyway need a voltage booster.
The battery charger has two LEDs on it indicating that the battery is full or charging. I used extension wires and placed two additional LEDs on the board so that one could see them without tilting the device.
Sound
I wanted to have a sound too, thus I needed access to the headphone plug. Due to the mechanical arrangement it was not possible directly and I made an extension. It required some extra wire soldering on the Raspberry, but it was simpler than I thought.
Schematics
Although it doesn’t say much it could indicate some hints behind the design. For better understanding one should read the Adafruit description, there are all the pins explained.
Software
Again Adafruit is providing everything. There is no need to rephrase it. Everything is well described and it worked well for me without any hassle.