A cheap, 3D printed absolute position encoder knob based on a low-cost AS5600 breakout module.
Demo firmware using a TTGO T-Display ESP32 board is provided (PlatformIO Arduino).
See how it works:
Parts needed
- AS5600 module
- 4x M3x6 screws with countersunk head
- 608 "skateboard" bearing
- small zip tie (~2mm wide)
- 4mmx2mm axial magnet
- 3D printed parts (see below)
Note: I found that removing R1 on the AS5600 module, which sets it for 5V operation, make the module more reliable and stable, but note that you will need a level-shifter to interface with a 3.3V microcontroller. Beware that the module has its own I2C pullups (R2 and R3) so if you power it from 5V it will apply 5V to the SDA and SCL pins, which could damage a 3.3V microcontroller.
I used a 4mm axial magnet instead of a diametric magnet because the AS5600 module I bought didn't come with a proper diametric magnet. You could modify the design to mount a diametric magnet aligned axially with the knob instead, if you have one.
3D Printed Parts
Download the Fusion 360 design file here or preview it in your browser.
Base Plate
Print settings:
- 0.2mm layers
Download STL file
Bearing Mount
Print settings:
- 0.15mm layers (finer layers for small details of tabs)
Download STL file
Knob
Print settings:
- Seam: rear (seam is aligned with index notch to reduce visibility)
- I used hilbert curve bottom infill for a cooler top surface pattern (see 2nd photo above)
- 0.2mm layers
Download STL file
Notes
- All of the dimensions were tuned to my 3D printer, so they may not work exactly, depending on how my printer's over/under-extrusion compares to yours
- The M3 screws thread directly into the base plate, which isn't super strong. You could make the base plate thicker, widen the holes, and use captive nuts or threaded inserts for a more robust connection
- You could decrease the diameter of the knob if you removed the external mounting holes from the base plate -- you could use longer M3 screws through the bearing mount, PCB, and base plate to mount it to something else directly instead
- The Fusion 360 file is somewhat messy and isn't parametric; this was just as a quick hack, sorry!
License
Copyright 2021 Scott Bezek
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.