A Rotary Encoder: How Hard Can It Be?

As you may have noticed, I’ve been working with an STM32 ARM CPU using Mbed. There was a time when Mbed was pretty simple, but a lot has changed since it has morphed into Mbed OS. Unfortunately, that means that a lot of libraries and examples you can find don’t work with the newer system.

I needed a rotary encoder — I pulled a cheap one out of one of those “49 boards for Arduino” kits you see around. Not the finest encoder in the land, I’m sure, but it should do the job. Unfortunately, Mbed OS doesn’t have a driver for an encoder and the first few third-party libraries I found either worked via polling or wouldn’t compile with the latest Mbed. Of course, reading an encoder isn’t a mysterious process. How hard can it be to write the code yourself? How hard, indeed. I thought I’d share my code and the process of how I got there.

There are many ways you can read a rotary encoder. Some are probably better than my method. Also, these cheap mechanical encoders are terrible. If you were trying to do precision work, you should probably be looking at a different technology like an optical encoder. I mention this because it is nearly impossible to read one of these flawlessly.

So my goal was simple: I wanted something interrupt driven. Most of what I found required you to periodically call some function or set up a timer interrupt. Then they built a state machine to track the encoder. That’s fine, but it means you eat up a lot of processor just to check in on the encoder even if it isn’t moving. The STM32 CPU can easily interrupt with a pin changes, so that’s what I wanted.

The Catch

The problem is, of course, that mechanical switches bounce. So you have to filter that bounce either in hardware or software. I really didn’t want to put in any extra hardware more than a capacitor, so the software would have to handle it.

I also didn’t want to use any more interrupts than absolutely necessary. The Mbed system makes it easy to handle interrupts, but there is a bit of latency. Actually, after it was all over, I measured the latency and it isn’t that bad — I’ll talk about that a little later. Regardless, I had decided to try to use only a pair of interrupts.

Continue reading “A Rotary Encoder: How Hard Can It Be?”

A DIY CAD Mouse You Can Actually Build

When you spend a lot of time on the computer doing certain more specialised tasks (no, we’re not talking about browsing cat memes on twitter) you start to think that your basic trackpad or mouse is, let’s say, lacking a certain something. We think that something may be called ‘usability’ or maybe ease-of-use? Any which way, lots of heavy CAD users gush over their favourite mouse stand-ins, and one particularly interesting class of input devices is the Space Mouse, which is essentially patented up-to-the-hilt and available only from 3DConnexion. But what about open source alternatives you can build yourselves? Enter stage left, the Orbion created by [FaqT0tum.] This simple little build combines an analog joystick with a rotary knob, with a rear button and OLED display on the front completing the user interface.

The idea is pretty straightforward; you setup the firmware with the application you want to use it with, and it emits HID events to the connected PC, replacing the mouse or keyboard input. Since your machine will take input from multiple sources, it doesn’t replace your mouse, it augments it. It may not be very accurate for detailed PCB layout work, but for moving around in a 3D view, or dialling in a video edit, this could be a very useful addition to your workstation, so why not give it a try? The wiring is simple, the parts easily found and cheap, and it’s only a few printed parts! This scribe is already printing the plastics right now, if you listen carefully you might be able to make out the sound of the Lulzbot in background.

There are many other takes on this idea, with varying levels of complexity, like this incredible build from [Ahmsville] that sadly doesn’t make the PCBs available openly, and here’s one we covered earlier mashing the expensive 3DConnexion spacemouse into a keeb.

Continue reading “A DIY CAD Mouse You Can Actually Build”

3D Printed Absolute Encoder Is Absolutely Wonderful

When you need to record the angle of something rotating, whether it’s a knob or a joint in a robotic arm, absolute rotary encoders are almost always the way to go. They’re cheap, they’re readily available, and it turns out you can make a pretty fantastic one out of a magnetic sensor, a zip tie, and a skateboard bearing.

When [Scott Bezek] got his hands on a AS5600 magnet sensor breakout board, that’s just what he did. The sensor itself is an IC situated in the middle of the board, which in Scott’s design sits on a 3D-printed carrier. A bearing mount sits atop it, which holds — you guessed it — a bearing. Specifically a standard 608 skateboard bearing, which is snapped into the mount and held securely by a zip tie cinched around the mount’s tabs. The final part is a 3D-printed knob with a tiny magnet embedded within, perpendicular to the axis of rotation. The knob slides into the bearing and the AS5600 reads the orientation of the magnet.

Of course, if you just wanted a rotary knob you could have just purchased an encoder and been done with it, but this method has its advantages. Maybe you can’t fit a commercially-available encoder in your design. Maybe you need the super-smooth rotation provided by the bearing. Or maybe you’re actually building that robotic arm — custom magnetic encoders like this one are extremely common in actuator design, and while the more industrial versions (usually) have fewer zip ties, [Scott]’s design would fit right in.

Continue reading “3D Printed Absolute Encoder Is Absolutely Wonderful”

Minimalist Timer Counts Down With LED Matrix

Looking for something with a bit more style than the traditional kitchen timer, [Martin Jonasson] decided to take the last couple of months to design and build his own take on the idea using a rotary encoder, 16×9 LED matrix, and a Teensy 2.0 microcontroller. Were there better things he could have spent that time on? Possibly. But you probably wouldn’t have been reading it about it here, so we won’t trouble ourselves with such thoughts.

Put together on a piece of perfboard, the handwired circuit also includes an Adafruit PowerBoost 500 Charger, a 3.7 V 2500 mAh LiPo battery, a IS31FL3731 Charlieplexed PWM LED driver, and a piezo buzzer. The top of the rotary encoder has been capped off with a sold metal knob, which combined with the enclosure made of stacked laser cut 3 mm acrylic sheets, really gives the device a very sleek and classy look.

While the hardware is quite nice, it’s the software that really pulls this whole project together. A game developer by trade, [Martin] went all in on the timer’s GPLv3 licensed firmware. From using the toneAC library to play melodies at the end of the countdown, to the custom fonts and the code that pauses the timer while the user is spinning the knob, there’s plenty of little touches that should make the timer a joy to use. We’ve seen some unique kitchen timers over the years, but the attention to detail put into this build really raises the bar.

[Martin] has provided everything you need to create your own version of his timer, including the SVG file for the laser cut case. While not strictly required, coming up with a custom PCB for this project would be a nice touch, should you want to put your own spin on it.

[Thanks to Tom for the tip.]

Rotary Time Tracker Puts A New Spin On Productivity

Like many of us, [quincy] feels the distracting pull of non-work programs on what has become a mixed-use computer. So what’s the answer to the puzzle of work-life balance? We’re not sure, but time management and keeping track of tasks will probably get you most of the way there. The only problem is that keeping track of these things is boring and tedious and way too easy to forget, even for the fun tasks.

Similar commercial gadgets exist to serve this time-tracking purpose, but [quincy] wanted something much cooler that would work the same way: turn the indicator to the current task, and the status gets recorded on a computer. Rather than some smart polygon with informative stickers on each face à la the Timeflip2, [quincy] built a rotary task manager that serves the same purpose, but does it with magnets.

Our favorite part aside from the magnets has to be the clever binary encoding work. [quincy] is using three photoresistors and a single green LED to create a 3D-printed gray encoder that sidesteps the need to ever flip two bits at once. An Arduino takes care of reading the 3-bit code and converting it back into a decimal. There are more updates to come, including the main .ino file, but you can start printing the pieces while you wait.

If you have trouble staying on task, maybe you need a Pomodoro timer. We’ve seen a few over the years, ranging from the minimal to the sculptural.

One Giant Button To Mute Them All

The second round of this year’s Hackaday Prize is coming to a close, and we asked you to come up with ways of refreshing work-from-home life. Well here’s one we probably all could use — a large emergency mute button that can also turn off video with an extra click. You know, in case your kid or your roommate decides to walk around in their birthday suit.

[Colin Russell-Conway]’s software-agnostic mute button uses a Seeeduino Xiao and rotary encoder, plus three momentaries that give it a second function as a media controller. Two chunks of LED strip go blinky blinky when the mute is on, and are otherwise solidly lit and color-coded by videoconference type — blue for Zoom and Starleaf, green for Webex, and purple for Teams.

The companion app that [Colin] created is using the Windows Management Instrumentation (WMI) to check which program is control of the microphone. Whenever the mute button is pressed, the app makes note of the current program in focus, switches to the active videoconference, mutes it, and then switches back to reddit or twitch or whatever you had in focus when the kid started screaming for you from the bathroom. Check out the demo after the break.

Some of us like to celebrate a little when videoconferences are over. For those people, there is the pull-chain exit.

Continue reading “One Giant Button To Mute Them All”

Custom Built 12-Port A/V Switch Keeps CRT Well Fed

Classic gaming aficionados who prefer to play on real hardware know the struggle of getting their decades-old consoles connected to a modern TV. Which is why many gamers chose to keep a contemporary CRT TV around for when they want to take a walk down memory lane. Unfortunately those old TVs usually didn’t offer more than a few A/V ports on the back, so you’ll probably need to invest in a A/V switch to keep them all hooked up at once.

That’s the situation [Thomas Sowell] found himself in, except he couldn’t find one with enough ports. Rather than chain switches together, he decided to build his own custom 12-port console selector. With an integrated amplifier to keep everything looking sharp, a handsome walnut and metal enclosure, and a slick graphical interface that shows the logo of the currently selected console on a Vacuum Fluorescent Display (VFD), the final product is a classic gamer’s dream come true.

A peek under the hood.

To switch the audio [Thomas] is using a pair of ADG1606 16-channel analog multiplexers, while video is shuffled around with four MAX4315 8-channel video multiplexer-amplifiers. The math might seem a bit off at first, but he’s using one ADG1606 for each stereo channel and since the switch is for S-Video, each device has a luminance and color signal that needs to be handled separately. The multiplexers are flipped with a ATmega2561 microcontroller, which is also responsible for reading user input from a rotary encoder on the front of the case and displaying the appropriate console logo on the 140×32 Noritake VFD.

You may be surprised to find that [Thomas] considered himself an electronics beginner when he started this project, and that this is only the second PCB he’s ever designed. Was this a bold second project? Sure. But it also speaks to how far DIY electronics has come over the last years. Powerful open source tools, modular components, and of course a community of creative folks willing to share their knowledge and designs, has gone a long way towards redefining whats possible for the individual hacker and maker.

Continue reading “Custom Built 12-Port A/V Switch Keeps CRT Well Fed”