Prototype UGS Pendant

[Inkscape text problem with fengrave import]

Following on to my post from a few days ago with some FEngrave text and origin problems, I got past the issues and here is the finished prototype. Thank you for all your help and suggestions on that other thread, helped me get past this and keep me sane (well, as sane as when I started). This prototype is very simplified, now that I have the concept down, I can build a more full featured pendant after the holidays.


Front panel designed in Inkscape, gcode to cut holes for buttons and LED generated with Easel, gcode for text generated with FEngrave. My first time around, the Y origin for text was off by 5mm, so it cut through the holes and my clamps. Luckily, the hole pattern is symmetrical and centered, so I flipped it over, moved my Y work zero by 5mm and recarved, close enough.

The body is carved from 2x4 lumber that I faced with a 3/4 inch flat end mill. The pockets were created with Fusion 360.

Arduino UNO fits in the bottom pocket, the switches and LED fit in the top. Arduino talks over USB to a program on the laptop, which in turn communicates to UGS to send the commands.




Very Nice!!!

I would like to see more of the technical side of this pendant. Have you shared it already or will you be sharing more details?


looks great

Thank you both for the feedback! I’m just excited to have a pendant to do some of my basic operations, and more importantly going through a fun process designing and developing both the physical and technical parts of something useful.

@MichaelGrigg by “technical side” I’m assuming you mean the arduino and host program, rather than the carving and finishing details. never too certain on these forums because of the diverse backgrounds and interests of all the people. the attached zip file has the arduino sketch for the pendant, the java source for the host program that sits between the pendant and UGS, and finally an “install” folder with an executable jar file. Please keep in mind, this is very very prototype, and wasn’t built for easy redistribution and installation.

If you can understand the arduino code then wiring it up is very easy. Buttons on pins 3-13 plus A0 connect to ground, and a single LED from A1 to ground through a resistor. The 6-button pendant I built only uses 6 of those pins, but the code technically supports 12 buttons. You supply the desired GCode in file in the java install folder.


  1. Start UGS
  2. Start the Pendant UI in UGS via the menu or icon/button.
  3. Plug the arduino pendant into USB (can do this earlier, but just make sure you do it before step 4)
  4. Start the java program in the install directory with:
    java -jar hcPendant-0.0.1-SNAPSHOT-shaded.jar start COMM_PORT
    where “COMM_PORT” is the name of the pendant USB port (note: not the GRBL’s arduino comm port). If you forget this, it’ll show a list of possible port names and exit, helping you out.

Sometimes it fails the first time you press a pendant button after starting the UGS Pendant UI. Just visit http://localhost:8080 in a browser on the controller computer a single time, then re-try hitting pendant buttons and it’ll work.

Hope that is what you were looking for. If not, let me know, happy to discuss other details. (1.4 MB)

1 Like

Exactly what I was asking for. Thank you tremendously for sharing.

Looks like I have some homework to do now. Lol

Please feel free to ask if you have questions, in the forum or pm me. I do this as a hobby which means I’m pretty much happy to talk about it all day.

1 Like

Much appreciated!

I have been looking at to this to make custom machine controller, but latter I bought this and map buttons to control my machine. And it’s the best controller for CNC

Wow, I have to say I’m surprised that you hooked into the webserver used by the UGS Pendant. That’s really cool, and probably much more reliable than the keybinding approach most of these projects use!

I also see that your app is a java program, you might consider making a plugin for UGS so that you don’t need to launch a second program. I made a plugin archetype recently to make that process a little easier, you can find it here.

My first prototype had the arduino emulate a HID keyboard, and it would send gcode directly from arduino as though someone had typed it at a real keyboard. Only problem is that I kept forgetting to put the mouse cursor in UGS back in the command text input. Figured hitting the webserver would eliminate that.

I was thinking of plugging right into UGS. My only reservation is that the serial communication protocol between my java host program and my physical pendant is custom and I haven’t really considered wider application or usability. Well, my real reservation is time, I wanted to get this prototype done before the holidays so I can use it to help me build a couple gift projects I’m finalizing, writing a standalone program was quickest.

Is there a way to write a plugin that does not become part of UGS, but rather UGS just loads it at runtime? If there was a way I could implement an interface, put a jar file in the UGS classpath, and put my implementation classname in a properties file or something, then we’d be in business. From a quick 2 minute read, that archetype requires me to update the ugs-platform pom file and build my stuff into the main project.