Do-it-yourself domestic portable console
Hello reader!
Once I was debugging a phone program on the domestic Aurora OS and suddenly got bored. Then I put RetroArch on it and downloaded some games. After connecting the gamepad, I spent several hours watching them. Later, scrolling through the games section in the Aurora developers’ chat, I came across the idea of connecting joysticks-cases to the phone. But I didn’t like their appearance, so I sketched a couple of concepts of a mobile console and decided to bring it to life.
So, in recent decades, many portable game consoles have been released, from Elektronika IM-02 to Nintendo Switch, Steam Deck and others. These devices have allowed players to enjoy their favorite games anywhere and anytime. And I decided to sell something of my own.
Somehow I developed the idea of creating a mobile set-top box based on a tablet. After buying Steam Deck, he abandoned the idea of assembling his counterpart: the device turned out to be quite bulky and heavy, and with the best Intel Atom processor, just a large retro console loomed.
I will disassemble the device and supplement it with new functionality. I immediately decided that it is necessary to leave a SIM card slot for mobile communication and the Internet, the possibility of connecting external devices, a camera. In addition, joints, buttons and louder speakers should appear.
Want to win merch? Try to solve the IT crossword! Over 256 questions, 7 crosswords on various topics from the IT world every day from September 23 to 29. It is enough to register using the link.
Use the navigation if you don’t want to read the entire text:
→ Decomposition
→ Joystick
→ Case development
→ Assembly
→ Conclusion
Decomposition
To assemble something, you must first disassemble something else. For experiments, I took an F+ smartphone on Avito (I wrote more about them in the first article about “Aurora”). Disassembly begins with dismantling the screen, since the screws on the back cover turned out to be decorative. With the help of a hair dryer, I carefully warm the screen around the entire perimeter and remove it from the housing. I carefully disconnect the loop and put it aside for further work.
From the inside, like any Chinese phone.
Next, I remove the rest of the elements that will be in the new device: camera, fingerprint sensor, connectors, buttons. For storage, it is convenient to use a case specially designed for phone analysis. I immediately threw in additional details that will be in the set-top box: sticks, speakers, amplifier module.
joystick
Surprisingly, “Aurora” supports “out of the box” work with gamepads: both USB and Bluetooth. It turned out to be quite a rational option to use a “wired” connection of the joystick controller to the device. This option guarantees its stable operation.
You can disassemble the joystick, take the board from it and insert it into a new device, but in this case it is easy to go beyond the dimensions. There are libraries on the web that implement the USB HID class on 8-bit and 32-bit microcontrollers. For this, it is suggested to use any microcontroller or Arduino debugging board (for example, Pro Micro), some buttons and a couple of analog sticks as an input processor. I chose an ATmega32U4 based board. This chip has a built-in USB 2.0 controller.
Cutout from the structural diagram and the USB module.
A library for Arduino IDE – Arduino Joystick Library – exists and is supported for this microcontroller. It has all the necessary functionality from processing buttons to turning on vibration.
Can I use other controllers? Of course. Any microcontroller is capable of solving this task. There is a good old V-USB library for 8-bit AVRs, and a great article on Habre to explain how it works.
Another work option was considered EasyHID by AlexGyver, but it is only intended for mouse or keyboard emulation.
You can also use STM32 and assemble a spaceship remote control.
To assemble the test gamepad, I connected a couple of potentiometers and several buttons on the breadboard, sketched a simple data collection and processing code. The get_axis() function returns the ADC value of the specified axis. This function processes values slightly faster than the standard Arduino analogRead due to fewer mappings (a similar example is in a good article on
accelerating algorithms
). Similarly, we get the values of the ports in one operation and prepare and send the values of the buttons in a cycle.
This device is defined as a standard gamepad on both the Windows virtual machine and the Aurora-based target device.
You can start creating the device. To do this, I cut out the shape of the future device from the breadboard, estimated the location of the elements and soldered the main components: buttons and a pair of connectors from the PSP Vita.
Game Frankenstein.
The board also included volume buttons, power on/unlock and a functional programmable button. I set up the function of quick transition to game mode (opening RetroArch), because first of all it is a console.
In addition, we wanted to give the possibility to connect not only a charger, but also gamepads or flash drives via USB. To implement this, I disassembled the simplest USB hub and soldered it to a board with a Type C connector.
Unfortunately, when working through a splitter, the ability to connect the device to a PC in flash drive mode or for debugging in Aurora IDE is lost. Maybe I will fix this functionality in the future.
Development of the case
After completing the work on the software and the board, I began to draw the body of the future device. It all starts with defining the required functionality and sketching ideas and sketches.
For this project, in general, the tablet itself, a pair of joysticks and speakers are enough, and the finished device should lie comfortably in the hands, similar to existing solutions. Additionally, I considered adding an OLED LCD screen to display the CPU load, current time, and running game, but quickly gave up on that idea. The fact is that the phone does not have some drivers.
Add a screen to your phone to display more information?
After you have decided on the general appearance, you can start engineering. I transferred the components that I removed from the phone (touch screen, battery, boards) to the editor. The main tool during this work is a caliper and drawing mode. Also modeled the circuit board and its details.
After receiving each component, you can start layout. To do this, I collect the “skeleton” in the assembly and, based on its projections, create a model of the case, which I immediately print and try on.
Drafting
To make the first sample, I used an FDM printer to create body elements. In order for the buttons to be pressed well, I additionally round the seats. The first mock-up was made of black plastic, and all the button pushers were made of fluorescent filament. It turned out funny.
After removing the masking tape, you can start assembling and starting the device. I made holes in the circuit board, fixed it in the case. Temporarily connected the screen to check the functionality of the device and the quality of the assembly of the pushers. Everything is going smoothly. Next, you can close the back cover and start gluing the screen with standard T7000 glue.
A game console with a camera and a phone was released.
Conclusion
It’s a wonderful feeling when you hold a hand-assembled device in your hands and it works. I was interested in assembling such a device and understanding what difficulties developers of such solutions might face. I think that in my spare time I will prepare printed circuit boards and housings for production, replace some elements (buttons, fasteners) with more reliable ones and assemble several devices for friends. I also want to see a slimmer portable in Famicom colors — a beige case with burgundy buttons and brass inserts. To give color and a nice texture, I have already ordered liquid rubber and cans of acrylic paint. Maybe it will turn into a startup.
Can this device compete with retro consoles from Anbernik? No, the cost is still quite high, and the target audience will more likely choose a popular manufacturer due to the community and technical support.
Would you like to get a similar set-top box based on a domestic OS? Write in the comments what functionality you would like to see in it?