There’s a post from @Vincent_Garvey
I’ve rigged up an Arduino on USB to detect when tool 99 is in the spindle, and then “ground” the brown wire of the receiver via a small relay which wakes the probe up - means batteries last for a year or more with the 1200ma LiPo
I messaged him this weekend to see if he would be willing to provide the details/code for his solution…
Here is what I have come up with on my own. With the PP USB Relay/Input module, it sounds like something like this NC that is called with tool changes would be the way to do it so that the solution is universal and I’m not relying on a modified Fusion post to turn the probe on/off for in-process probing (once I figure it out) or a standalone “manual” macro that I inevitably will forget to run (and end up crashing this probe, sigh).
# = #<_current_tool>
O901 IF [# EQ 99]
M64 P0
O901 ELSE
M65 P0
O901 ENDIF
Is there a “correct” place/way to hook into PP for a GC macro like this that I don’t have do version tracking and merge my patch for each PP update?
I have there files in the folder “gcode\python” (you will need to rename .csv to .py)
ProbeWake.csv (2.0 KB)
ToolSerial.csv (4.0 KB)
ui_hooks.csv (8.4 KB)
I am using 2 x EPS32-C6 (they talk over WiFi to avoid a long USB cable from PP panel to control panel). Code is a bit longer than necessary because has a few other “bits”:-
- detect Tool 99 and activate GP-800 probe
- detect Tool Length and adjust angle of servo directing nozzle
- interrupts power to auto-lubricator, and holds off until Z- starts to move (will add use adjusted timing later)
- PWM control of rear panel cooling fan - its too noisy - small NTC sensor detects panel temperature and speeds up fan as needed.
- a few additional relays/mosfets just in case.
MASTER code for front near PP with TFT touch-screen and SLAVE code for ESP32-C6 in rear panel (also small OLED just to show basic “I am awake” status). Change .csv name to .ino for Ardunio IDE programming
SLAVE.csv (13.7 KB)
MASTER.csv (12.7 KB)
eh .. my documentation is not a strong point - hope haven’t crossed a few versions, but working fine this end 
One one the “spare” outputs is for a DIY oil skimmer.
A few photo’s attached - whatd’all think of my BT30 tool storage location?
oh yea- also - don’t forget to inhibit flood coolant when T99 loaded.
1 Like
@Vincent_Garvey awesome work there! Thank you for sharing…
Dug around a bit and as of 2.14 (probably there a few releases back, too) having the wireless probe for the 1500MX, it looks like there may now be hooks for this built in as opposed to using Xoomspeed’s stuff (which is probably easier and the path that I take since it’s tested/proven) but figured I would share what I did find…
probe_prep.ngc
o<probe_prep> sub
(prepatory code called at the start of all probe subroutines)
(exact stop mode)
G61
(set to absolute position mode)
G90
(cancel G92 offset, maybe some day it should be allowed and accounted for in the travel limits)
(could cancel with G92.2 and restore with G92.3)
o<check_axis_offsets_nonzero> if [[#<_axis_offset_x> NE 0.0] OR [#<_axis_offset_y> NE 0.0] OR [#<_axis_offset_z> NE 0] OR [#<_axis_offset_a> NE 0.0]]
(MSG,G92 Axis offset disabled for probing operation, offsets can be restored with G92.3)
o<check_axis_offsets_nonzero> endif
G92.2
o<probe_prep> endsub
probe_power_recovery.ngc
o<probe_power_recovery> sub
#<receiver_timeout>=1.0
M66 P0
o<check_probe_on> if [[#<_hal[motion.probe-enable-request]> GT 0] AND [#<_hal[motion.probe-ready]> EQ 0]]
(MSG,Probe is turned on but not ready, power-cycling)
M47
M45
G4 P[#<receiver_timeout>]
M44
o<check_probe_on> elseif [[#<_hal[motion.setter-enable-request]> GT 0] AND [#<_hal[motion.setter-ready]> EQ 0]]
(MSG,Setter is turned on but not ready, power-cycling)
M45
M47
G4 P[#<receiver_timeout>]
M46
o<check_probe_on> endif
o<probe_power_recovery> endsub
M2
Looks like a bit of customizing your machine definition and/or these files. I haven’t gotten as far as if we can hook M45/M47 to the USB I/O board so that GP800 lines up with what Tormach has implemented.