# Mai Pico - Maimai Style Mini Controller Features: * Made with a 15.6 inch portable screen. * Arcade-like experience. * All source files open. Thanks to many respectful guys/companies who made their tools or materials free or open source (KiCad, OnShape, InkScape, Raspberry things). ## Notes This project is the most complex one. * It needs a custom etched ITO glass and a portable display. * Heavily depends on 3D printing. * Requires skills to solder tiny components. * Requires many other DIY hands-on skills. * The IO PCB is still in prototype state, it works, but the layout and connectors are not perfect. * I didn't design the housing, so it's your job to make it look nice and structually stable, follow your imagination and taste. You can also check out my other cool projects. * Popn Pico: https://github.com/whowechina/popn_pico * IIDX Pico: https://github.com/whowechina/iidx_pico * IIDX Teeny: https://github.com/whowechina/iidx_teeny * Chu Pico: https://github.com/whowechina/chu_pico ## **Disclaimer** ## I made this project in my personal time with no financial benefit or sponsorship. I will continue to improve the project. I have done my best to ensure that everything is accurate and functional, there's always a chance that mistakes may occur. I cannot be held responsible for any loss of your time or money that may result from using this open source project. Thank you for your understanding. ## About the License It's CC-NC. So DIY for yourself and for your friend, don't make money from it. ## HOW TO BUILD ### PCB * Go JLCPCB and make order with the gerber zip file (latest `Production\PCB\mai_io_v*.zip` and `Production\PCB\mai_button_v*.zip`), regular FR-4 board, 1.6mm thickness. You need 1x io PCB and 8x button PCBs for one Mai Pico con. * 1x Rasberry Pico Pi Pico or Pico W. https://www.raspberrypi.com/products/raspberry-pi-pico Becareful of 3 pins that are at the other side, they're difficult to solder and may leave air bubbles. * 1x USB Type-C socket (918-418K2023S40001 or KH-TYPE-C-16P) * 3x MPR121 modules, there're many types in the market, choose ones like this. https://www.sparkfun.com/products/retired/9695 Before solder MP121 module to the main PCB board, remember to **cut (unshort) the ADDR pin** which is short by default. * Leave U5, U6, U7 area discrete components empty as we're using MPR121 module, not the chip. * 2x 0603 5.1kohm resistors (R20, R21) for USB. * 1x SN74LV1T34DBVR (SOT-23-5) level shifter (U8), if you can't find one, use a 0603 10ohm resistor (R4) as an alternative. https://www.lcsc.com/product-detail/Buffer-Driver-Transceiver_Texas-Instruments-SN74LV1T34DBVR_C100024.html * 4x 0603 1uF (0.1~1uF all fine) capacitors (C1, C2, C3, C7), OPTIONAL, recommended. * 16x WS2812B-3528 RGB LEDs (each button needs two). * 8x Kailh Choc v1 key switches, linear, 30gf to 45gf ones. https://www.kailhswitch.com/mechanical-keyboard-switches/low-profile-key-switches/burnt-orange-switch.html ### ITO Glass * Find a service to make custom etching ITO coated glass. The AutoCAD file is `Production\CAD\mai_pico_ito_v*.dwg`. Use 2mm thickness, 10-20ohm sheet resistance ITO coated glass. * The ITO coated glass is connected to the IO PCB by "zebra cable" (1.6mm pitch: 0.8mm black part and 0.8mm clear part). A silicon heater head at 200°C is used to stick the zebra cable to the gold finger part of PCB and ITO coated glass. The formal name of this cable is "Heat Seal Connector". ### Button Ring * Print out the 8x set of base, link, button and cover from `Production\3DPrint\mai_*.stl`. * Buy 8x 2mm (diameter) * 40mm (length) steel shafts, they're used as the button hinge. * Here's how to assemble them, hinge shaft and components on PCB are not shown in this rendered image. * Here's how I assembled the ring. Please note that wiring for the button switches is missing in these pictures. * All discrete components ready. * Solder the button PCB first. * PCBs are daisy-chained using short 4-wire cable, they're LED_GND, LED, LED_5V and BUTTON_GND. So the BUTTON signal pin is not soldered yet. * You need 3M5423 UHMW film tape (or similar hard and super-smooth PTFE tape with 0.2-0.3 thickness). It is to lubricate the button surface that touches the keyswitch. * Assemble the 3D printed parts together with the PCBs. * Use shaft to expand the support holes a little bit, and apply some keyboard switch lubricant such as Krytox 205G0 to make the shaft super smooth. * Each `link` needs 8x M2*4mm screws to connect two `base`s together. * Install the cover, each needs 2x M2*5mm screws. ### Portable Display * Resolution: 1920*1080, size: 15.6inch, refresh rate: 120Hz (recommended) or 60Hz, built-in speakers. * They're easy to find. Choose cheap or even tiny-flawed ones, they work fine. * There're 2 types of driver board, one is micro-HDMI only and the other supports type-C display (for convenient Nintendo Switch connection). They're both OK. https://www.amazon.com/s?k=portable+display+15.6+120hz&s=price-asc-rank&crid=1CCA2EAYLZDBE&qid=1697276847&sprefix=portable+display+15.6+120hz%2Caps%2C387&ref=sr_st_price-asc-rank&ds=v1%3AqoS0mks05q225yuL8reh50fEEBkTZ583nMPEZJwjXAk ### Glue Things Together * I use 3M VHB tape (0.5mm or 1mm thickness) to stick the button ring, the ITO glass and the monitor together. * Only use a little tape, I use 4 small pieces to stick ITO glass to the display and another 4 small pieces to stick button ring to the ITO glass. * Don't apply the tape on the traces of the ITO glass, you can see the traces or pads at certain angle. ### Housing * It's your job to design it and make it look nice. ### Firmware * UF2 file is in `Production\Firmware` folder. * For the new build, hold the BOOTSEL button while connect the USB to a PC, there will be a disk named "RPI-RP2" showed up. Drag the UF2 firmware binary file into it. That's it. There's a small hole at the bottom side of the Chu Pico, it is facing right to the BOOTSEL button. * LED and Touch protocols are implemented following Sucareto's research at https://github.com/Sucareto/Mai2Touch. * It has a command line to do configuration. You can use this Web Serial Terminal to connect to the USB serial port of the Chu Pico. (Note: "?" is for help) https://googlechromelabs.github.io/serial-terminal/ * It implements 3 COM ports, one is for command line and the other two are for LED and Touch. By issuing "whoami" to the command line, each COM port will print their identities. * Button signal is sent to the host by HID Joystick or HID NKRO (keyboard). There're two set of NKRO keymaps, use `hid ` to switch between them. ## CAD Source File I'm using OnShape free subscription. It's powerful but it can't archive original designs to local, so I can only share the link here. STL/DXF/DWG files are exported from this online document. https://cad.onshape.com/documents/d8b39d27c9cb7990d9ce4d46/w/2c1baa71e391bfd1246f122b/e/f87f0f1c373fe2186ddc5c9c?renderMode=0&uiState=652a665608b4e07137e3861a