Because I’d like to have a bit more of an “analog” feeling when operating my machine I was looking for something like a DRO with a jog wheel or a joystick that works with GRBL.
I didn’t find much like that. What I found was this article about a man in the middle approach, but it was very rudimentary and the implementation of the rotary encoder didn’t really work out well, when I tried it with my high resolution rotary encoder.
For an analog feeling there should be beside a small lag also some kind of repeatability. I mean if I rotate the wheel and move it back in it’s old position, the machine should also end it it’s old position.
I used an Arduino Mega for this, because it has three hardware serial ports and most important, I already had one here.
For the DRO I used LEDs because they are nice and bright and easy to read form each angle – also from far away.
For some reasons I couldn’t manage to daisy chain the LED display with the Arduino library I’m using. So I just connected each one separately to the Arduino. The Mega has for sure more then enough pins for that, but the Library isn’t the fastest. Therefor I had to lower the communication speed to 9600 Baud. Sounds dramatic, but in fact it doesn’t make any difference for me. The buffer is still filled up nicely when I’m running jobs. On a laser cnc this might be an other story …
Maybe it’s worth giving it a try on a faster board then the Arduino Mega. I tried and the code compiles for a Teensy as well. But for me there is no need, cause it’s just doing fine with 9600 Baud.
Here are the parts I used:
- Arduino Mega
- four 8 digit 7 segment LED displays with a max72?? chip
- Rotary encoder with 600 steps per rev (maybe a bit overkill, but it wasn’t expensive)
- Two rotary switches for setting the axis and the resolution for the jog wheel
- Two potentiometers for the overrides – linear with center click (from 1k to 10k should be fine)
Of course there is some tweaking involved to get it run smoothly. All those parameters are found in the config.h file. There is also defined what to be connected to what pins.
I added some descriptions there, so it should be pretty much straight forward.
The code is still alpha. Use it only if you understand it and if you know what you’re doing.
This is potentially dangerous.
For the first test I’d recommend not to use it on an actual machine. Use an Arduino (not connected to anything) running GRBL with the same settings then your machine for testing.
All on your own risk. Here is the code – have fun!