A lot of people will disagree with me on this but, I am a big fan of Marlin Firmware for use on hobby CNCs. In my experiences with 3D printing I have learned the ins and outs of Marlin and am adequately able to manipulate the firmware to my needs. I've tried other firmware such as Klipper for my 3D printer, I end up back on Marlin for some new feature or it's reliability of operation. Are there other better options out there for CNC...? Yes. Am I willing to spent the money to upgrade...? Not at the moment. Especially with CNC workspaces and coordinate systems and the option to enable a 3rd Serial Port being added in versions 2.0.8.1 and later. My only complaint with Marlin had been the need to have some way to interface with the device for setup without fumbling through an LCD menu or having Octoprint or CNC.js running nearby with a monitor and keyboard in the way.
A couple months ago I decided it was time for better solution. Upon researching my options, I stumbled across a really well designed Gcode Sender by Lay3rWorks on Thingiverse. It checked most of the boxes for what I was looking for but lacked a rotary encoder and indicators for selected axis and resolution for moves. So, with my mediocre coding skills and habit of jumping into projects that are slightly outside of my comfort zone, I set myself to work creating exactly what I was looking for...


My only real requirement for the pendant were physical buttons for homing axis and setting zero, being able to jog in every direction, and indicators for which axis I was about to crash into the endstop My WANTS list included an encoder for jogging (because it feels cool to spin the wheel really fast and watch the machine move. What can I say, I'm a giant nerd). I can't help it. Another hope for the project was to keep current draw low enough that it could be powered from the control board, without the need for an additional power supply.
The programming and circuit design was pretty straight forward and easy to implement. Starting off with the Arduino sketch from Lay3rWorks G-code sender, I was able to cherry-pick the features I liked from their design and add my own code for the encoder and indicators. I took care to keep power requirements low and to use inexpensive, widely available parts to keep the costs and complexity as low as possible. Testing it with my control board was uneventful, thankfully. All the functions worked as expected on the first try and only a few minor adjustments were needed to adjust debounce on the encoder to avoid missed or distorted commands from the device sending them too quickly. All said and done, I spent around $25 on the components for version 1 and could have spent much less if I chose to source the components from AliExpress or another slow boat shipper instead of eating the additional for that sweet, sweet Amazon Prime shipping


I wanted the pendant to look somewhat professional so next step was to work out a design for the enclosure and faceplate in Fusion that would leave room for future changes if needed. With all of the important design details sorted out, I printed the faceplate and started fitting components. As with any electronics project, my signature tell on who made it continues to be gobs of hot melt glue and too much solder. The amber LEDs provide an indicator for selected resolution for movement (0.01mm, 0.1mm, 1mm, 10mm) and the R, G, & B LEDs indicate selected axis corresponding to the associated color in Fusion


I finished up by adding 4 wire lead for power and serial communication to the control board and a safety/lockout button to avoid accidental destruction of my CNC when I inevitably push a button at the wrong time. It is interfaced with my SKR v1.3 board via the AUX-1 serial port and acts just like any other serial device. Since early March when this was completed, I've made some minor revisions to the Arduino sketch to clean up the code and adding some button functions.

After a few weeks of testing and tinkering I made the decision to rework the pendant to include an IC2 OLED screen, replacing the LED indicators. The resulting v2 pendant turned out well also and has opened up the possibility of some additional features like displaying position and visual confirmation of keypresses that I plan to work on down the road. This was one of the bigger projects I've taken on just to make my workflow smoother in the shop. It was a lot of work but it exposed me to some new skills that will come in handy on future projects and was a nice change of pace from the normal 'get it done in a weekend' timelines I usually get saddled with.


If you are interested in making or improving on this project, you can find both versions on Thingiverse at the links below. I will be continually maintaining the code and adding features as my schedule and ability allow. I could likely refine this design and sell these pendants for a decent profit but I feel like I've pulled too much inspiration from other sources and would never want to take credit for the work that others did that gave me a solid footing to start on with this. Plus, CNC and 3D Printing as hobby is expensive enough without getting gouged on something that is easily replicated with minimal electronics and coding skills.
If you do replicate this project post a make/remix on Thingiverse or email me pics and details at Josh@TheOrneryMaker.com or message me on my Facebook page (fb.com/TheOrneryMaker). It would also be really cool to hear your ideas on how I might be able to improve the pendant and/or features that you'd like to see added in the future.