Video wird geladen...
Video konnte nicht geladen werden
I built a thing to fulfill a meme. Bluetooth smooth scrolling wheel. Please don’t buy one. I can’t make very many. But if you must….
164,777 Aufrufe • vor 2 Jahren •via X (Twitter)
10 Kommentare

How did we get here? I’ve been mildly interested in doing a haptics / input device for years. While doing some dingboard edits on the Rabbit R1 a few months ago, this one came to mind. How hard could it be???

Requirement check Bruey is going to give me a hard time if I don’t capture requirements on a project, even if it’s a hobby. • Communicate via Bluetooth. • Compatible with Android, PC minimum. iOS optional. • No drivers needed, must work out of the box. • No perceivable lagging/stuttering/chunking on scroll • >10hr battery life and 14 day standby time • >15 second free spin time on bearings • >6ft radio range • Must be prototyped under $500 • Must work with Twitter, Instagram, TikTok • Must be easily operated one-handed • Ergonomics must not suck • Aesthetics must not suck

Unexpected: This one was definitely a full stack project, my favorite kind. Pure programming is never quite as satisfying as something that touches the physical world. There are all sorts of emergent problems to solve once a system starts interacting with humans. As soon as I started using it, I realized there were all sorts of functionality needed. For example, it needs to have an idle timeout and ISR wake to conserve battery and not scroll while rolling around in your pocket. I programmed the encoder chip to raise a flag high on XXX degrees of rotation in Y seconds of window and used that to trigger an interrupt to wake the microcontroller from sleep mode. Another fun emergent issue was eddy currents! The contactless magnetic encoders from MPS use a diametric magnet to sense the absolute field orientation relative to the chip. Originally I was using a fairly large neodymium ring magnet embedded in the wheel, as I was paranoid about maintaining a minimum field strength. This ended up inducing a fair amount of drag on the wheel, as it rotated above the aluminum case flange. I had to downsize the magnet quite a bit to reduce this to an acceptable amount.

Iterations…iterations….iterations The bearings ended up being the most finicky mechanical part of this whole system. I wanted the feel to be very a very freewheeling spin, like a Logitech MX mouse. The two unique challenges being that my design has a cantilevered wheel and a blind bore in the wheel, instead of capturing it in double shear like Rabbit or a traditional mouse. If you want 1,152 pages of bearing goodness, check out SKF’s guide. Ideally, a COTS double row track roller bearing would be used. Unfortunately, nothing quite fits the needs of freewheeling, everything on the market is designed for load rating and therefore has a high preload and drag. Some off-roading is needed. First concept, dual radial steel bearings on a shoulder bolt. Preload internal races. Press fit outer races into wheel bore. Result= excessive drag even with a 0.0002” press fit. Second concept. Similar but use a high strength gap filling Loctite with a .0001” clearance sliding fit. Dropping bearing size to the smallest ball size possible helped. Result = Moderately better but still high drag. Third concept. This was a hopeful idea, but I knew it probably wouldn’t work. Instead of using two bearings on the shoulder bolt, I tried to use a single large 22mm ceramic ABEC9 bearing. Result= Drag was beautifully low, but the single bearing wasn’t sufficiently stiff in moment loading. Typical for even a high grade radial bearing. Fourth concept. Pull out the big guns. Full zirconia ceramic bearings arranged in a dual configuration with preload on the outer races. The yoyo crowd would be proud. Result= 30 seconds of smooth spin. Only downside is that these bearings are a bit expensive.

Not sure if I can use the bird logo, is Elon done with it? This is a super cool process which I recently discovered. You can actually control the energy deposited into the surface by controlling the frequency of the laser at several hundred khz. You’re essentially performing controlled oxidation of the surface. By tuning the speed / frequency of a galvo steered MOPA laser, you can achieve nearly any color.

HID descriptor hell Why couldn’t I just emulate a standard mouse and scroll smoothly? Sounds easy. Unfortunately there is a holdover from two decades ago in the way mouse drivers are written into USB. Because mice used to use low resolution encoders, a single “detent” event would be about 22.5 degrees. Hard coded into the kernel level of Android and Windows is the instruction to interrupt this single detent as a 40 pixel scroll for generic devices. This is what results in the chunky style scrolling on a PC. Only recently have specialty devices like the Logitech mice used custom drivers to bypass this and offer high resolution single pixel scrolling instructions. Unfortunately these drivers were not rolled into the Android kernel, so even when I sniffed the BLE traffic with Wireshark and impersonated a Logitech device, I wouldn’t get that silky smooth scrolling on mobile. No go. The slightly hacky workaround was to go one level deeper than the standard Arduino libraries. A quick description of how USB devices work. HID stands for Human Interface Device and is a protocol implemented over USB protocol. HID devices do advertise their capabilities through the HID report descriptor, a fixed set of bytes describing exactly what HID reports may be sent between the device and the host and the meaning of each individual bit in those reports. For example, a HID Report Descriptor may specify that “in a report with ID 3 the bits from 8 to 15 is the delta x coordinate of a mouse”. The HID report itself then merely carries the actual data values without any extra meta information. My goal was to use a customized descriptor to send the byte package of a one finger touchpad with absolutely coordinate system and 1 button to the host. This way I could perform the digital emulation of a finger making contact with the screen, performing a Y axis movement while remaining in contact, and then lifting off the screen before reaching the top. This movement would have to be repeated hundreds of times seamlessly to provide the illusion of smooth scrolling. Additional complications arose from the fact that Bluetooth low energy has a minimum latency of 8milliseconds, with most hosts negotiating an even slower rate such as 20 milliseconds. Simply blasting commands at a few hundred hertz doesn’t work. The internet is filled with unanswered forum questions about how to do all of this. I think I’m probably the first one to achieve a working implementation of this particular smooth scrolling solution. This single problem occupied much time than the rest of the project combined. No doubt that Logitech or Apply could achieve a more elegant solution. My hope is that a big company takes interest in Doomscroller takes it off my hands.

PCB adventures I did a few things that might be considered mildly clever, along with a super dumb mistake that cost a board revision. In large scale consumer production, typically the enclosure would be injection molded plastic. Because my prototype enclosure is aluminum, I need an RF transparent lid on the back side. I could get two birds stoned at once by using the PCB as a lid. This would also let me use a cool trick of making the branding logo as a ENIG gold solder pad on the bottom side of the PCB. I successfully routed all my power and SPI traces on one layer, avoiding the need for any cosmetically distracting vias. I’m super pleased with the result, and the cost is <$1 per board. The magnetic encoder I’m using has a tiny 3mm QFN package. If you haven’t seen this tech, it’s incredibly cool. MPS makes a chip that doesn’t need to be mounted coaxial, meaning you can hang it offset of the centerline axis and comp the nonlinear rotational response electronically. Admittedly, I’m not very good with surface mount soldering. Luckily I could use a reflow oven with hand placed components, if I checked the alignment of the chip under the microscope before reflowing. Another quick fix was the reset button. The NRF dev board has a physical reset button that needs to be clicked during the flashing process. I hated the idea of having one of those ubiquitous small pinholes in the case, like many devices. I ended up using a single axis hall effect switch on the PCB to switch the reset pin, this way I can wave a magnet over the lid and everything can remain closed. The big problem with rev 1 was intermittent and erroneous angle data on the SPI line. After probing the MISO lines, I saw that my signals were totally garbage. Initially I attributed this to my less-than-ideal 1 layer routing strategy, and the fact that I had ignored the manufactures' recommendation to use a low pass filter. I’m lazy and don’t like sprinkling decoupling caps everywhere, so sue me. After tripling checking the encoder datasheet, I realized that I was supposed to provide BOTH Vdd and VIO power sources. I had misread the sheet and thought that I only needed VDD, as the chip would internally buck it down to 3.3v. Nope. The insidious thing is that the chip continued to transmit data that was sort of correct, but noisy and with a crappy waveform. @KenCondon1 absolutely nailed the diagnosis sight unseen. The chip was back driving through a sneak circuit, stealing just enough power from VDD to power the SPI circuit. After I routed my 3.3v supply to both pins, the waveform was absolutely perfect at 5mhz.

What’s the endgame??? I had considered doing a Kickstarter, but that’s more hassle than it’s worth. The goal is to have some fun, and maybe hand it off to someone like KeyChron, Ducky, Razer, or Logitech to scale up. I don’t have time to make more than a few dozen of these things on the weekend. Anyone want to make an intro?

But…why??? Honestly, building stuff is fun. I like to wade into the deep end of subjects I’m not qualified for and come out the other side with a story and a new skill. In this case it was developing the firmware building blocks to do more haptic computer interface devices in the future. Insatiable curiosity, or just poor impulse control? Might just be touched with a little bit of the ‘tism. Many such cases, I think. Wired had a hilarious quote in their LK99 interview, which I have come to like. “McCalip preferred not to dwell, but instead chose to focus on what he had set out to do: making the thing”.

Why are your hobbies so weird? Mandatory plug for Varda, if you’re looking for a grand adventure, please get your resume to us ( My day job is a something of a cross between mechanical / automation / manufacturing engineer to enable autonomous hypersonic spacecraft. I’m extremely lucky to work on some of the coolest hardware in a small tight-knit team. I wish I could post more about the nitty-gritty details of the engineering we do on a daily basis. ITAR, HR, and Legal would prefer I keep my hobbies to non-spacecraft activities, so this is why my hobbies push in such orthogonal and silly directions. The common theme is hopefully good engineering, even if the subject is at times odd.
Ähnliche Videos
Sensitive content
“I raped her” “After he finished raping her my father killed her” If there is one you video you must 𝙬𝙖𝙩𝙘𝙝 and 𝙨𝙝𝙖𝙧𝙚 today it’s this one. It’s a very difficult thing to watch for 5 mins but sometimes the most difficult things to face are the most important. Please, 𝗱𝗼 𝗻𝗼𝘁 look away. 🎥 Canary Mission
Kosher
92,990 Aufrufe • vor 1 Jahr
