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 since Marlin 2.0.x added  CNC workspaces and coordinate systems and the option to enable a 3rd Serial Port in version 2.0.8.1 and later. My only complaint with Marlin has 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. In my research I stumbled across a really well designed Gcode Sender by Lay3rWorks on Thingiverse. It was close to what I was looking for but lacked an encoder and a way to tell what axis and resolution was selected for movement. 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 exacly what I was looking for...

Prototype_Pendant
275176257_329425052477695_2487051822259851852_n

My only real requirement for the pendant were physical buttons for homing axis and setting zero, being able to jog in every direction, and an indicators for which axis I was about to crash into an endstop.  My want's 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 by the control board and an additional power supply wouldn't be needed.

The programming and circuit design was pretty straight forward and easy to implement. Starting off with the sketch from Lay3rWorks Gcode sender I was able to cherrypick 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. Testing it with my control board was uneventful. All the functions forked correctly on the first try and only a few minor adjustments in the delay for debouncing the encoder was needed. All said and done, I spent around $25 on the components and could have spent much less if I sourced everything from AliExpress or another slow boat shipper instead of Amazon.

275167603_329424729144394_9024580938578066410_n
275131264_329424855811048_4071330354814867844_n

I wanted the pendant to look somewhat professional so I worked out a design for the enclosure and faceplate in Fusion that would leave room for future changes if needed. With the important details sorted out, I printed the faceplate and started fitting components.  As with any electronics project, I added my signature details, 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.

275205148_329422235811310_8958440819203093912_n
275224566_329422262477974_4725301109246268218_n

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.

Capture

After a few weeks of testing and tinkering I decided to rework the pendant to include an IC2 OLED screen to replace the LEDs. 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 a really fun and in depth project for me. 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.

279089891_358305766256290_6928510089534897088_n
278969884_358305796256287_7551631193237717626_n

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 can improve the pendant and/or features that you'd like to see added in the future.