A Teensy -> Python Interface Manualmatic MPG/pendant
30 Dec 2021 20:52 #230361
by fletch
A Teensy -> Python Interface Manualmatic MPG/pendant was created by fletch
De
scription
A Teensy based pendant using the user space Python LinuxCNC interface.Theoretically will require copying just two files to config directory (or globally?) and adding a single line to custom.hal.
Will one day optionally use an ini file for config and read options from machine config ini file.
Why?
Once I convert my mill to CNC, I want to continue to be able to use it manually – replicating some of the functionality of a DRO and having a pseudo power feed.So, slightly inspired by the rotary button reset on RotarySMP’s Maho control panel (the reset is mentioned elsewhere) and partly by This Old Tony’s ‘manual cnc’ comment at the end of one of his Maho videos , I thought I’d make a pendant my 2021 Christmas project.
Unfortunately, thanks to my location it has recently become much more expensive to get MESA cards (or anything) shipped from the EU - my $119 7i96 card cost me €194.58, so while the $49.00 7i73 pendant/control panel interface card is well priced, it would cost €113.91 to get it in my hands...
A bit of digging in the forums led me to ArcEye’s Arduino pendant - very good for almost a decade ago but microcontrollers have moved on somewhat since then. I also wanted to build something that is easy for anyone to install and flexible to use without tying it to a particular UI.
None of the solutions I found (and there are many, some of which I don’t understand) appear to make full use of the user space Python interface, so I thought I’d give that a try.
This pendant uses a touch screen primarily because there seems to be a dearth of non-touch screen SPI displays – and I like to support Adafruit as they contribute massively to the makerspace. I wouldn’t mind a screen that wasn’t offset though (I’m tempted to use it portrait for soley that reason). All primary operations will be button or encoder based (I prefer tactile Uis) – the touch screen will only be used for entering zero offset values and minor functions.
Huge credit also to PJRC , not just for the Teensy but also for the interrupt based fast encoder library that enabled me to wrap an callback based encoder/button library around it – 100% lossless encoder steps FTW!The schematic is designed to work with a Teensy 4.1 – it will also work with a 4.0 but you will lose the pins for the 5 physical buttons under the screen (so they would have to be operated via the touchscreen).All the button switches and rotary encoders are easily obtainable from eBay, including the MPG. It is intended to have a hard wired Estop but the backlight control pin can be traded for a soft estop.
Obviously this is a work in progress/proof of concept but here is a quick and some pictures and my notes (anything maked with a '~' is not even looked at!):
A Teensy based pendant using the user space Python LinuxCNC interface.Theoretically will require copying just two files to config directory (or globally?) and adding a single line to custom.hal.
Will one day optionally use an ini file for config and read options from machine config ini file.
Why?
Once I convert my mill to CNC, I want to continue to be able to use it manually – replicating some of the functionality of a DRO and having a pseudo power feed.So, slightly inspired by the rotary button reset on RotarySMP’s Maho control panel (the reset is mentioned elsewhere) and partly by This Old Tony’s ‘manual cnc’ comment at the end of one of his Maho videos , I thought I’d make a pendant my 2021 Christmas project.
Unfortunately, thanks to my location it has recently become much more expensive to get MESA cards (or anything) shipped from the EU - my $119 7i96 card cost me €194.58, so while the $49.00 7i73 pendant/control panel interface card is well priced, it would cost €113.91 to get it in my hands...
A bit of digging in the forums led me to ArcEye’s Arduino pendant - very good for almost a decade ago but microcontrollers have moved on somewhat since then. I also wanted to build something that is easy for anyone to install and flexible to use without tying it to a particular UI.
None of the solutions I found (and there are many, some of which I don’t understand) appear to make full use of the user space Python interface, so I thought I’d give that a try.
This pendant uses a touch screen primarily because there seems to be a dearth of non-touch screen SPI displays – and I like to support Adafruit as they contribute massively to the makerspace. I wouldn’t mind a screen that wasn’t offset though (I’m tempted to use it portrait for soley that reason). All primary operations will be button or encoder based (I prefer tactile Uis) – the touch screen will only be used for entering zero offset values and minor functions.
Huge credit also to PJRC , not just for the Teensy but also for the interrupt based fast encoder library that enabled me to wrap an callback based encoder/button library around it – 100% lossless encoder steps FTW!The schematic is designed to work with a Teensy 4.1 – it will also work with a 4.0 but you will lose the pins for the 5 physical buttons under the screen (so they would have to be operated via the touchscreen).All the button switches and rotary encoders are easily obtainable from eBay, including the MPG. It is intended to have a hard wired Estop but the backlight control pin can be traded for a soft estop.
Obviously this is a work in progress/proof of concept but here is a quick and some pictures and my notes (anything maked with a '~' is not even looked at!):
Please Log in or Create an account to join the conversation.
30 Dec 2021 20:58 #230363
by fletch
Replied by fletch on topic A Teensy -> Python Interface Manualmatic MPG/pendant
Here is a quick
Youtube video
which I would edit into the post but the url links go a bit mad when I open the edit window!
The following user(s) said Thank You: tommylight
Please Log in or Create an account to join the conversation.
- tommylight
- Away
- Moderator
Less
More
- Posts: 19188
- Thank you received: 6432
30 Dec 2021 22:11 #230369
by tommylight
Replied by tommylight on topic A Teensy -> Python Interface Manualmatic MPG/pendant
Very nice, thank you.
The following user(s) said Thank You: fletch
Please Log in or Create an account to join the conversation.
30 Dec 2021 22:18 #230370
by fletch
Replied by fletch on topic A Teensy -> Python Interface Manualmatic MPG/pendant
Thank you - still a long way to go, but I think the concept is proven. I will release it all once the embarrassment factor is reduced in my code (neither Python or C++ are my first language)
The following user(s) said Thank You: billykid
Please Log in or Create an account to join the conversation.
12 Jan 2022 20:13 #231600
by fletch
Replied by fletch on topic A Teensy -> Python Interface Manualmatic MPG/pendant
Making good progress on this now (although a bit more than a Christmas project).
The first part of releasing the source code is the EncoderButton library that underpins the MPG and spindle/feed controlsand button callbacks - I've cleaned it up, documented and published it here on github .
It is also available in the Arduino IDE Library Manager if anyone is playing with Arduinos and encoder buttons (they really are an excellent interface for microcontrollers).
Feel free to nudge me if you're interested in testing or playing with this project.
The first part of releasing the source code is the EncoderButton library that underpins the MPG and spindle/feed controlsand button callbacks - I've cleaned it up, documented and published it here on github .
It is also available in the Arduino IDE Library Manager if anyone is playing with Arduinos and encoder buttons (they really are an excellent interface for microcontrollers).
Feel free to nudge me if you're interested in testing or playing with this project.
Attachments:
Please Log in or Create an account to join the conversation.
15 Jan 2022 03:56 #231855
by tuzki
Replied by tuzki on topic A Teensy -> Python Interface Manualmatic MPG/pendant
Does the mpg have a delay? I see that the mpg and the PC are not synchronized. When the mpg stops rotating, the value on the PC is still changing. Is this the real situation.
Please Log in or Create an account to join the conversation.
15 Jan 2022 09:53 #231878
by fletch
Replied by fletch on topic A Teensy -> Python Interface Manualmatic MPG/pendant
The MPG can generate jog instructions far, far faster than the CNC machine can move (I suspect this is the case for all MPGs?) so if the MPG quickly sends a single or multiple instruction(s) to jog (say) 25mm, that may take the machine a couple of seconds to complete the move, especially if you have the jog velocity set low.
The axes on the pendant display and the gmoccapy display show the same values at the same time (well, within 0.2 seconds, which is the refresh rate I have set for the pendant display).
Short answer: No, there is no delay from the MPG - although it is not real time, as operates in the linuxcnc userspace like all the other GUIs.
The axes on the pendant display and the gmoccapy display show the same values at the same time (well, within 0.2 seconds, which is the refresh rate I have set for the pendant display).
Short answer: No, there is no delay from the MPG - although it is not real time, as operates in the linuxcnc userspace like all the other GUIs.
Please Log in or Create an account to join the conversation.
15 Jan 2022 10:01 #231879
by fletch
Replied by fletch on topic A Teensy -> Python Interface Manualmatic MPG/pendant
Addendum: The 'lossless' bit of the EncoderButton library enables me to send a single instruction to the LinuxCNC Python Interface for multiple jog instructions, so avoids swamping the userspace component with both serial and jog instructions to linuxcnc. This should, in practice, make the pendant more responsive than a touchscreen or keyboard. Eg, if you whizz the MPG around 50 steps of 0.1mm, the pendant will send a single instruction to jog 5mm rather than 50 x 0.1mm instructions.
Please Log in or Create an account to join the conversation.
15 Jan 2022 13:58 #231891
by tuzki
Replied by tuzki on topic A Teensy -> Python Interface Manualmatic MPG/pendant
Very nice, thank you.I'm going to try
The following user(s) said Thank You: fletch
Please Log in or Create an account to join the conversation.
19 Jan 2022 09:14 - 19 Jan 2022 09:17 #232421
by fletch
Replied by fletch on topic A Teensy -> Python Interface Manualmatic MPG/pendant
Another step fowards, this is a new (as in written for this project) Arduino utility library to help work with the various display areas and the flicker free drawing of the large rapidly changing X, Y, Z & A axes.
Available on github and as DiplayUtils in the Arduino Library Manager:
The rest of the Manuamatic code is nearly there - all the manual and auto functionality is now in place - just needs a fair bit of tidying up though. Refactoring FTW...
Available on github and as DiplayUtils in the Arduino Library Manager:
The rest of the Manuamatic code is nearly there - all the manual and auto functionality is now in place - just needs a fair bit of tidying up though. Refactoring FTW...
Attachments:
Last edit: 19 Jan 2022 09:17 by fletch.
Please Log in or Create an account to join the conversation.
Time to create page: 0.163 seconds