USB CNC Pendant project
-
I would like to quickly present a small project that I finally had some time to do over the last few days:
https://github.com/hurzhurz/Duet-USB-CNC-Pendant
It is a bit similar to the CNC-Pendant-Firmware, but instead of modifying a simple (but still not cheap) CNC pendant, theoretical any USB HID device can be used.
It is based on a Raspberry Pi Pico, easy and cheap to build.Multiple months ago, when I looked for the pendant that is needed for the CNC-Pendant-Firmware, Amazon suggested me the combination of a cheap wireless numpad and matching CNC-themed key-stickers, which lead to this idea.
At that time I already managed to figure out the basic USB HID part, but had no time to go further.
Later I found the WHB04B-6 wireless USB pendant and recently bought it to motivate myself to do this project.So at the moment, the cheap numpad (LogiLink ID0120) and the WHB04B-6 pendant are implemented.
Other numpads should work too, but I have filtered for the VID and PID of the LogiLink one. But this can be changed easily in the code.
And other USB HID devices (keyboard, mouses, gamepads, …) should probably be relatively easy to implement as well.I would be happy if someone would like to try it out and give some feedback.
Though I want to point out that some things might not be implemented in the best way… I'm whether a full-time developer nor an experienced CNC operator
Any help is welcome!
-
@hurzhurz Unfortunately the WHB04B-6 is sold out, so I couldn't find more info about it.
I was wondering if your firmware supports analog joysticks, too? (if only for variable jogging speed)As a sidenote: I'd rename
Duet
inDuet3D
where ever applicable for better matching search results in github. -
@o_lampe Depends on where you look for the WHB04B-6.
I got mine from Amazon DE, where it is still available with Prime-Shipping: https://www.amazon.de/RATTMMOTOR-Fernbedienung-Handsteuerung-Drehmaschinen-Graviermaschine/dp/B096TNP5NF/
And AliExpress is a possible source, too.I have not implemented joysticks, but if they present themselves as HID devices, it should not be hard to do that.
Well, at least for button presses...
I'm not sure what's the best way to implement continuous movements via G-codes, as of course, you surely want it to stop as soon as possible, after the joystick (or a long pressed key) is released.I'm not sure if I want to rename it, but you have a point.
I have now added a small repository description that contains "Duet3D". -
Maybe some news:
- Just for fun, I have implemented support for the PlayStation 3 controller
- The limitation for the mentioned LogiLink Numpad is removed, so any keyboard can be used. But the key mapping might be less ideal on other devices.
And I have also made an attempt to implement some kind of continuous mode (move as long as button is pressed).
This can be found in a different branch: https://github.com/hurzhurz/Duet-USB-CNC-Pendant/tree/continuousEDIT: already merged into master branch
And here is documented how it works: https://github.com/hurzhurz/Duet-USB-CNC-Pendant/blob/master/doc/ContinuousMode.mdIt uses the daemon.g to generate the actual movement commands. This is a bit hacky, but at least, it seems to work...
-
I was thinking in getting one of those pendants, but I don't know a lot of the duet3d programming yet. Can you tell me how to get it to work? like, where do I put the files or what I need to do? I kinda need a crash course in the duet environment to be honest.
Also Aliexpress is running Summer sale so you could get the pendant easily
If I get one I can maybe help test stuff if I'm available too -
@IlI_Cnc the only thing you would need on the Duet side is to enable the serial connection (if you use a paneldue that's already happened). You do this by adding
M575 P1 B57600 S1
to your config.g -
@IlI_Cnc For the Duet side, the most important part is to enable the PanelDue port via M575, like @oliof already said.
In addition, you may want to create macro files to define what should happen when you press on the various buttons of the pendant.
If you press a button, you should be able to see in the console in the Duet Web Control which file it tried to execute und you have to create, to give that button a function.And to flash the Raspberry Pico, you can simply take the compiled firmware.uf2 file from my GitHub repository.
You need to connect the Pico via USB to your computer. But while plugging it in, you have to press the BOOTSEL button.
There should then appear a new drive. Just copy firmware.uf2 on that drive. -
THX, I'll build this instead of the old wired version
-
@hurzhurz Will this work with the 4 axis version, WHB04B-4? I don't need to control that many axes and it seems to be half the cost of the 6-axis on AliExpress
-
Great work @hurzhurz. It would be cool to see if you (or anyone else) could adopt the FluidNC M5Dial Pendant as well.
-
@chimaeragh said in USB CNC Pendant project:
@hurzhurz Will this work with the 4 axis version, WHB04B-4? I don't need to control that many axes and it seems to be half the cost of the 6-axis on AliExpress
I can't tell for sure, but I think the chances are good that the 4 axis version works as well.
For the most part, I used the protocol description from the LinuxCNC driver: https://github.com/LinuxCNC/linuxcnc/tree/master/src/hal/user_comps/xhc-whb04b-6
I think I read a comment somewhere that the WHB04B-4 was used successful with the LinuxCNC WHB04B-6 driver by someone.
And I can't imagine that there would be a difference needed in the protocol.Though it could be that the dongle of the 4 axis version has a different USB PID. But that would be trivial to fix.
-
@oliof said in USB CNC Pendant project:
Great work @hurzhurz. It would be cool to see if you (or anyone else) could adopt the FluidNC M5Dial Pendant as well.
Thanks!
The FluidNC M5Dial Pendant looks like another neat solution!
And as it is already made to communicate via serial / G-code commands, it should probably be not that hard to adapt.
Most work should be needed for the part with the status display for coordinates etc. -
I'm waiting for parts and the pendant now, when they arrive and I'll try to get everything working and post if everything works fine.
Thanks for the help -
In case i want to connect with a IO port what should i do with the activation part?
Also, since in my board (Duet 3 6XD) seems to have a different panel due pinout what should i wire the usb to?
-
@IlI_Cnc You actually have two ports on your board where a PanelDue can be connected, the 10-pin "PANEL DUE" connector and the 5-pin IO_0 connector.
Both share the same serial interface (that you can enable withM575 P1 B57600 S1
).
The 10-pin connector is used if you want to use the SD card slot on the PanelDue.
https://docs.duet3d.com/en/User_manual/Connecting_hardware/Display_PanelDueI would suggest using the IO_0 connector like shown in my wiring diagramm on GitHub.
-
Hi, just start to saying amazing project, and thanks for sharing ;), now one little problem... i tried to use continuous mode, but im getting some errors.
Error: Failed to read code from macro daemon.g: Failed to evaluate "global.run_daemon": unknown value 'global.run_daemon'
If i take that part, then i get another error when trying to use Continuous mode, another thing, how do i get the values to appear on the WHB04B-6?
Error: Failed to read code from macro pendant-continuous-run.g: Failed to evaluate "{exists(param.A)} && {exists(param.F)} && {exists(param.D)}": unknown value 'param.A'
Error: Failed to read code from macro pendant-continuous-loop.g: Failed to evaluate "global.pendant_continuous_ttl>0": unknown value 'global.pendant_conti'
-
@ajmartins The errors look like these two lines might be missing in your config.g, can you check that?:
M98 P"pendant-continuous-init.g" global run_daemon=true
Or you can run them manually in the console once for testing.
And about your other question, doesn't your WHB04B-6 show the coordinates on the LCD?
It should work automatically... -
Yes, i added both lines to config.g, i tried manully running and i get the other error i sent.
If i run M98 P"pendant-continuous-init.g", the system just stalls and i need to reset the board.
Should i put both lines in the end of config file?
-
@ajmartins Well more tests, added both lines to the end of config file, and now at least i dont get any errors when restarting the board.
But when trying to make a continuous move, i still get the error:
Error: Failed to read code from macro pendant-continuous-run.g: Failed to evaluate "{exists(param.A)} && {exists(param.F)} && {exists(param.D)}": unknown value 'param.A'
-
@ajmartins Which version of RepRapFirmware have you installed?
I'm wondering if the macro parameters or the exists() function for them is "too new".
On my machine I'm running 3.4.6. And from the changelog I guess that at least 3.3 could be required.