Making a Custom Ball for the Logitech M570 Trackball4 Aug, 2020
Recently, I got very interested in trackballs due to my wrist and shoulder pain issues worsening -- and, of course, the skin-like coating on my two-year-old MX Master 2S starting falling apart. It began as a friend recommended me to try out trackballs during my complaints about wrist pain, after which I quickly went down the rabbit hole and pulled trigger on an entry-level thumb-operated trackball, the Logitech M570. This article is not about how trackballs are somehow better than normal computer mice, but I can't really stress enough how much more comfortable it is after switching to the trackball. Naturally, it quickly replaced the old mouse as my daily drive.
The M570, to me, has a few issues though. The first complaint I had with it was that it has no tilt angle, unlike the MX Ergo, and thus the operating hand can still get a bit uncomfortable after extended period of use. This was solved without a hitch by 3d-printing a pre-made model of a tilted mount for the trackball. I went with the 20-degree version and find it way easier to the wrist after the modification. The second complaint, which is also the theme of this article, is that I want to be able to replace the stock ball, the blue one, which I do not exactly like, with something custom.
I know it may sound stupid to some, but the blue stock ball simply did not look good to me, plus that the finish somehow became quite slippery pretty quickly with my oily and sweaty hands. The slipperiness also reduced my precision since it's too easy to trigger a movement of the ball, and I do not have the most steady fingers -- even lifting my finger after movement could trigger another movement with the original ball. This particular issue could have been fixed by simply enabling pointer acceleration, but let's be honest, that option just feels wrong. I'd prefer a ball with another color that has a slight matte finish instead of the perfect mirror finish, which adds a bit of friction. I am aware that most people want their trackballs to be extremely smooth, and my preference do look a bit strange. But hey, there are balls from other vendors that do have a matte finish out there for sale1, so I feel at least moderately justified to articulate such preference.
Having looked around the web about custom balls for the M570, I realized there do not seem to be many. Most people that tried alternative balls either failed completely2 or just bought a ball from another trackball mouse3 that happen to have the same diameter, pretending it to be "custom" and called it a day. That is, however, not fine for me as a self-proclaimed DIY nerd. As a result, I set out to try to source, or make, my own ball for my shiny new M570 trackball. This article records some of the numerous failed attempts and the final attempt that actually worked, producing a usable replacement trackball.
That friend who dragged me into the rabbit hole of trackballs was using a Kensington Orbit, for which he replaced the ball with a wooden one with the same diameter. The wooden ball he bought was just a random normal one sourced from Taobao, from the same company known as AliExpress to most of you outside China. The size of the ball for the Orbit happens to be a common size (40mm) in which people make these wooden balls, and he had success with replacing the original one with the wooden one, with no serious issues preventing daily usage.
Not so lucky with the Logitech M570. This trackball has an awkwardly-sized ball, whose diameter is 34mm, while people normally only make those wooden balls in sizes in 5mm increments. Thus you can get a 20mm, 30mm, or 35mm wooden ball, but never a 34mm one. What I decided to do was to get a 35mm ball and sand it down to 34mm, which would then hopefully work in my M570.
It turned out to be the worst decision I have made in 2020. The 35mm ball itself was fine -- it was the sanding process that I WAY underestimated the tediousness. Yes, 1mm of diameter sounds pretty diminutive, but when you actually try to do it with hand and sand paper, it becomes downright madness. I started sanding it down with ~P800 sand papers, but quickly realized it was too weak for my target -- the ball was still too big after almost an hour and a half of sanding. I then turned aggressive and switched to ~P100 sand papers instead, and they did improve the speed a lot, but I still had to smooth out the surface with increasingly fine sand papers after the diameter reached the target. In total, the sanding process took around 3 hours. It was a mess on my table, with dust and garbage everywhere, and I hadwo completely fatigue hands and arms as a bonus.
All these efforts turned out in vain. The ball, after all the sanding, did roll in the socket of M570, but unfortunately the sensor had a very, very hard time picking it up. The pointer only moved a tiny bit after rolling the ball for several rotations. This was obviously unacceptable. What I tried then was to paint the wooden surface with some water-based paint to give it some pattern, in the hope that maybe this was what was missing for the sensor to pick up.
Please forgive my kindergarten-level artistic skills, but this was the best I could do. Disappointingly, this was not the kind of pattern the sensor needs to pick up movements. The sensitivity did absolutely not change before and after this painting was applied to the ball.
After the previous failure, I assumed that the problem was wood itself, not the lack of patterns or anything. The next thing easily available to me after wood was PLA plastic, because I own a 3D printer at home for my various DIY projects.
Making a ball out of PLA is fairly straightforward with a 3D printer. I quickly made a STL model for a ball with 34mm diameter and put that through the slicer and printed out using my printer. The result was a legit-looking ball, but due to the precision of my printer, the diameter was a bit too small for the socket. This was fixed after several blind attempts trying to find the exact offset value to produce the perfect diameter. Although I have already used the smallest layer height option available for my printer, the ball still came out very rough and required a lot of sanding to get it to actually roll in the M570. Afther sanding the wooden ball, such task no longer look any difficult to me.
As you may guess, this plan did not work at all either. Just like the wooden one, the ball rolls fine, but the sensor could not pick it up at all. The most dramatic rotation only produces the most diminutive pointer motion on the screen. At this point, I was almost about to give up and just buy the Perixx ball with matte finish instead, forgoing all ideas for my custom-designed ball.
Resin Casting with PLA Mold
What stopped me from giving up, ironically, was actually an unassuming line of text in the description of the Perixx ball on Taobao.
The marked part of the above screenshot in Chinese reads: "Material: Polyester / Epoxy Resin". This was almost the only source that I could find on the internet that describes the exact source material of the balls of all the trackballs.
It did not state what polyester and epoxy resin was used for in production though. However, according to common sense, epoxy resin should be a pretty hard material usually used for casting, while polyester can be found in a lot of paints or coatings. I then assumed that the main body of the ball should be made out of epoxy resin, and a layer of polyester coating is then added either for the color, the pattern or for protective purposes.
Casting epoxy resin is common stuff that one can normally get with a cheap price tag and is faily safe to use in a DIY environment. In China particularly, there is a trend going on where people, especially younger girls, like to cast clear epoxy resin with some items inside to make something that looks like a crystal ball or other shapes. This is called "水晶滴胶", which literally translates to "crystal drippped glue" in English. Thanks to this trend, there are plenty of cheap epoxy resin available for sell on Taobao, complete with a full set of tools, the clearness of which is really surprising given the price tag. For those of you outside China, I am pretty sure any clear cast epoxy resin should work for this purpose.
What I was also able to find is some colored fine glitter powder made out of Mica that they may also add to their resin casts. The purpose is normally just to add some shiny effect to their products, but when used in larger quantities, they looked a lot like the pattern inside the official blue ball of the M570 to me. Since I am not sure what polyester was used for in the Perixx ball, I figured that I can for now just try casting clear epoxy resin with colored glitter powder to see if such a material and pattern is enough for the sensor to pick up. At this point, I was already fairly confident that the epoxy resin would work, so I ordered a package of the clear cast epoxy resin, along with some red and gold glitter powder for a test cast.
The next step is to make a mold for casting. I wanted to do a silicone mold using the original ball, but I had no backup ball for daily use, neither was I willing to pay some extra to buy an extra ball for this single purpose. I need to first make something that at least works as a backup before considering anything else.
With this goal in mind, I decided to make a solid mold using my 3D printer. With a handy tool on Thingsverse that could generate the model of a negative mold of any given solid in OpenSCAD, I was able to produce a promising-looking PLA negative mold for casting my resin.
One thing to note is that epoxy sticks to plastic very well, and therefore a bare plastic mold is a terrible idea for epoxy resin casting. Since the PLA mold was very rough just as any other 3D printed part, it needed a layer of coating anyway. For the coating, I mixed up a small amount of silicone, and applied a very thin layer to the entire inner volume of the mold, along with the top opening for pouring. I also added some silicone to the plane between the two parts of the mold to help adhesion and prevent the resin from spilling.
After doing all of these, I mixed up a batch of resin, added the glitter powder, and then poured into the mold. When a day passed, I opened up the mold, which did release fairly easily, only to find out that the resin had shrunk a lot while curing. The silicone coating also added quite some wrinkle to the finished product, while also causing the bottom to flatten out a lot despite my best effort trying to get excess silicone out of the mold. I tried to sand it down with my best effort, until the point where my arms become so sore that I literally could not sand it anymore, but some of the wrinkles still remained, along with the very, very flattened bottom, inhibiting scrolling. However, the good news is that, apart from parts where I cannot scroll smoothly, the sensor seem to be picking up the movement of this ball very, very well. The only issue left here is how to make the ball perfect enough to scroll inside the socket.
Resin Casting with Silicone Mold (worked)
The major issue of the last attempt was that I was trying to make a hard mold for a hard casting product. This always requires some sort of mold release, and in my case, my silicone coating resulted in the flattened bottom and the wrinkles. In addition, 3D-printing a precise mold was probably not the best idea -- it is not possible for all the layers to be lined up precisely, which always introduces some gaps and incontinuities.
Since I had silicone already, the proper way should be to just make a soft mold of the original ball using silicone. The reason why I did not do this from the very beginning was that I was afraid that I may damage the original ball while taking it out of the finished mold and the resin-casted one may end up not working, leaving me with no usable ball whatsoever. Now that I have confirmed resin casting to be a viable approach, I felt moderately confident to try to just use the original ball to make a mold for casting.
The molding process was fairly straightforward. I mixed up a small bunch of sillicone, poured it to a plastic cup and waited for it to cur -- this is to make a solid bottom layer for the ball to sit on. Then, I mixed up a much larger batch of silicone, put the ball on to the already solid layer of silicone, and poured the whole batch upon the ball. I also tried to stick a small 3D-printed cone shape to the top to try to make an addition funnel, but that didn't work and simply popped out when I checked the mold the next day. This was fine because I simply made a new hole where the funnel was intended to be using a knife when the mold was set.
The next day, I cut the mold open horizontally with a knife, making sure the opening has a zig-zag pattern to ensure adhesion when closing it back up for casting. I took the original ball out carefully, and fortunately, except for a few minor scratches, the original one was mostly intact. After making the aforementioned addition funnel, I prepared a new batch of resin with glitter powder, and poured it into the mold -- this time, I added way more than I needed, filling up the whole mold and over halfway through the addition funnel I made (it was around 1 cm in diameter and 1 cm in height), in the hope that the extra amount can make up for the shrinkage -- which it did. After waiting for around 24 hours, the ball became completely solid and kept a full ball shape, without a flat face like last time. There was a bit of extra material on the top due to the addition funnel, and a bit of imperfection along the line where the mold was cut open, and, also, unfortunately, a fair amount of air bubbles at the top. I have already let the resin degas itself for over 30 minutes, but apparently this was not enough.
I tried to sand it for a long time but just could not get rid of the bubbles. What I ended up doing instead was making a hand-powered vacuum chamber like this one on YouTube -- although I used several plastic pipes with a three-way splitter to connect the one-way gas valves instead of modifying the syringe itself because I was worried I could not get a perfect seal after cutting the syringe open. When I tried a new batch of resin degassed using such a vacuum chamber, the outcome was an almost perfect ball except for imperfections at the addition funnel and the cut line of the mold, which I got rid of with a little bit of sanding very easily. Although there were still one or two bubbles on the surface of the ball, it was much fewer than last time and does not really affect scrolling anymore.
This ball was the ball I have been using since it was made. Of course, I sanded it down a bit with some fine sand paper to give it a little bit of matte finish, and then lubricated it with some oil. It scrolls perfectly in the M570, and has the right amount of friction to both the ball bearings and my fingers. And of course, the price of having something like this is that I have wasted two weeks plus over $100 just to get the "manufacturing procedures" right.
It was fun trying to make a custom replacement for something that is not intended to be replaced on one's own. During the process, I have learned a few molding and casting techniques that I could not have had the motivation to try out without diving into this project. I have also made a DIY vacuum chamber like a lot of DIY YouTubers which I had not even thought of making one myself before this experience. Although the final cost of doing something like this was probably much higher than just buying one, I felt that it was worth it given all the things that I have learned, plus that I can now basically make as many balls as I like at a very low cost.
An example is this one from Perixx: https://www.amazon.com/Perixx-PERIPRO-303-MR-Trackball-Compatible/dp/B071F52MZG
From Reddit https://www.reddit.com/r/Trackballs/comments/8hohjj/looking_for_custom_logitech_m570_ball/dylh59u/, who used a 34mm ball bearing which was apparently too reflective to work