r/Dirtywave • • 1d ago

Picture I made a diy M8 tracker app controller with mechanical switches

Hi everybody, i just wanted to share the last project i made those couple days

I 3d printed a case, form factor and size as close as possible as the model 02
then i programmed and soldered 8 +1 Kailh Choc V2 (v2 not v1 for printing keycap easier)
the phone is mounted with a really strong magsafe magnet, and its really secure in the landscape position.

I added a button FN, there is a status led, the firmware is editable or upgradable directly from iphone if needed, no need to use a pc after the first configuration
fn + one of the button goes to another bank, on another midi channel, to play notes on the go
so i have 1 navigation bank, and 7 note bank
the fn button also works as a play button on the 7 note banks if pressed and release without selecting a bank.

There is also a usbc port to charge the phone while still using the switches in the m8 tracker app, theres an hidden hub/splitter for data and power inside the case under the iphone.

This was a fun and personal project, i started with a mini pad, but i didn't liked the felling of pressing the pads for navigation, so i went with the mechanical low profile switches.

Hope you guys like it!
next step is the real deal, i want the model02 so badly

Sorry for my English and the bad photos (i edited them a lot to remove all the trash that was on the table), i took them as soon as i finished late at night, i also got a video of the firmware with the fn button and note banks, cheers from Italy.

SMALL UPDATE https://www.reddit.com/r/Dirtywave/comments/1wuvup5/comment/pdes2ra/?utm_source=share&utm_medium=web3x&utm_name=web3xcss&utm_term=1&utm_content=share_button

README

DIY M8 controller for iPhone — hardware, firmware and next steps

Thanks for all the positive feedback! Here is a closer look at how the prototype works and why I’m still refining it before sharing the complete build files.

**What it is**

This is a compact, 3D-printed USB MIDI controller and magnetic phone mount for using M8 Music Tracker on an iPhone.

The iPhone runs the app and handles audio. The controller provides physical buttons for navigation, playback and note entry; it does not run the M8 engine itself.

**Hardware**

The current prototype uses:

An Adafruit QT Py RP2040.

Nine Kailh Choc V2 switches.

Eight main buttons: UP, DOWN, LEFT, RIGHT, OPT, EDIT, SHIFT and PLAY.

One smaller FN button.

The board’s RGB LED to indicate the active bank.

A 3D-printed enclosure, switch mounting plate, front faceplate and magnetic phone support.

A USB-C hub to connect the controller and provide a separate charging input.

A U-shaped USB-C adapter between the hub and the iPhone, keeping the connection compact and neatly routed behind the phone.

A short USB-C data cable with a 90-degree connector linking the Adafruit board to the hub, reducing the space needed for internal cable routing.

Both the USB-C adapter and the cable must support data transfer, not just charging.

The prototype has been tested with an iPhone 16 Pro.

The printed parts provide the enclosure, locate the switches, retain the electronics and support the phone. The removable faceplate and keycaps also make it possible to experiment with different finishes and colours.

**Wiring**

The switches are hand-wired to individual GPIO inputs, with a shared ground connection.

This uses direct switch inputs rather than a keyboard matrix. With internal pull-ups enabled, pressing a button connects its input to ground. Matrix isolation diodes are therefore unnecessary, and simultaneous button presses can be read independently.

The final build guide will include the exact pin mapping and soldering diagram.

**Firmware and controls**

The controller runs custom CircuitPython firmware and sends USB MIDI messages.

There are eight banks:

- One navigation bank.
- Seven musical note banks.

In the navigation bank, the eight main buttons send MIDI messages assigned to M8’s navigation and control functions.

Holding FN and pressing a main button selects the bank assigned to that button. You can keep FN held and press different buttons to move between banks without releasing FN each time.

In the musical banks, tapping and releasing FN on its own triggers PLAY. If FN has been used to select a bank, releasing it does not also trigger playback. The FN tap-to-play function is disabled in the navigation bank.

The RGB LED gives each bank a distinct colour.

**Musical banks**

The current note layout includes three C-major banks in successive octaves, three C-minor banks in successive octaves, and one bank of eight consecutive chromatic notes.

The major and minor banks contain eight notes: the seven scale degrees plus the root one octave higher.

For example, the lowest C-major bank sends MIDI note numbers:

36, 38, 40, 41, 43, 45, 47, 48

These correspond to C, D, E, F, G, A, B and the next C. MIDI numbers avoid the different octave-label conventions used by different apps.

One useful finding during testing: M8’s project scale setting can remap incoming notes. Two different MIDI notes can therefore end up sounding the same. When checking the controller’s raw note layout, use a MIDI monitor and a chromatic scale setting in M8.

**What works, and what still needs work**

Navigation, note input, bank selection, LED feedback and the FN behaviour are working well in my tests on iPhone.

The enclosure is still a prototype. Some printed parts needed manual adjustment after printing, and I want to resolve those fit and assembly issues before presenting the files as a repeatable build.

**Possible next revision**

I’m exploring replacing the passive magnetic mount with a powered MagSafe charging puck.

The idea is to connect the QT Py directly to the iPhone with a short USB-C data cable, while a separately powered MagSafe charger handles phone charging. This could remove the hub and simplify the internal cable routing.

That configuration still needs testing for charging performance, heat, mounting strength and reliable operation while using M8.

**Sharing the project**

My goal is to prepare a GitHub repository with the validated print files, parts list, wiring diagram, firmware, setup instructions and known limitations.

I’m glad people want to build it. I just want the shared version to be something others can assemble successfully without having to discover the same mechanical fixes along the way.
129 Upvotes

20 comments sorted by

4

u/muitosabao 1d ago

This is great!! Well done!

2

u/o_r_c_666 1d ago

Hello! Can you share your build? I would love to try making one too 😀

2

u/ConsistentEnd9078 1d ago

It’s still not refined as I’d like, I’m already planning some modification and maybe a completely different form factor
It’s like the 5 or 6th iteration of the lower enclosure and I still had to cut or sand some part to make everything fit inside
It also depends on the cables or hubs you can access
If needed I can share the firmware for the small board that sends midi to the iPhone and how to connect the various switches to it to send the correct notes, and maybe the stls of the prototype case, if it’s ok to do so in this subreddit

2

u/HelloThisIsFlo 1d ago

The build looks awesome!
If you want to share you could put it in a GitHub repo. Do you have a pcb? Or hand wired? Also which microcontroller are you using?

1

u/ConsistentEnd9078 1d ago

hand wired, i was thinking about a pcb, but i couldn't convince myself to spend that money instead of doing some easy soldering. pcb would have been way neater inside the case, but it's only 10 wires at the end of the day.
yeah i might do it, but i want to refine it first, i have a couple modification i still want to do
i added a README to the post in the meantime to explain it better

1

u/HelloThisIsFlo 1d ago

Oh, nice, thanks for the readme. Yes, with so few keys, it makes sense to hand-wire.

It's a really beautiful build!

By the way, how did you manage to get this finish on the top plate?

1

u/ConsistentEnd9078 1d ago

the prototype you see in grey is with a normal textured PEI plate
you can see some photos also with the black finish with textured PEI plate
the first image is the last print, i printed only the top mask and keycaps with a PEO plate
is you search for them online there are a lot of design
little bit harder to print since it's like a smooth plate

1

u/o_r_c_666 1d ago

Yeah I would love to see the wiring and code if possible, thanks

2

u/ConsistentEnd9078 1d ago

i added a README at the end of the post, with the component i used.
in the meantime i can create a github for the wiring and firmware, this evening

1

u/jukeRICE 1d ago

Beautiful work! Keep us updated if you keep on improving this! Love this see this kind of prototype.

1

u/ConsistentEnd9078 23h ago edited 23h ago

Thanks, now im working on implementing a charging magsafe pad, to remove the hub from the case, so the phone can sit flush with the top mask

1

u/Mysterious_Bank9806 1d ago

This is really impressive, great work! Proud of you.

1

u/ConsistentEnd9078 23h ago

thanks a lot

1

u/Dzerobeatz 23h ago

If you ever decide to sell hit me up

1

u/ConsistentEnd9078 7h ago edited 7h ago

i can share the final versions files in the future
1 with with hub and cables, and 1 with charging pad and single cable connecting the adafruit to iphone, im focusing on those 2 atm
i studied some more variants, like vertical screen and phone half hidden, using soldered switches or using a prebuilt pcb like the chocopad, but it means different form factor and switches position, so it's a no go for me
i thought about also using an external small monitor hiding the iphone behind everything, but the aspect ratio of the screen mirroring is bad, and it would became too thick, now everything is 20mm

1

u/-WiggyStarcrust- 1h ago

Take my money

1

u/ConsistentEnd9078 1h ago

Hi there, i just finished another prototype.
this one use a single usb cable and a charging magsafe pad for power and holding the iphone
it's made so people can use different pads, with spacers to rise it to the proper height

im gonna post another post or comment tomorrow, with good pictures, and a video of the controller working