|
| 1 | +// LASER Focus Pattern Generator Macro For OpenBuilds Control |
| 2 | +// V0.9 |
| 3 | +// Change these values to customise basic operation: |
| 4 | + |
| 5 | +const z_Range = 3; // Z movement each side of current position (mm) |
| 6 | + |
| 7 | +const power_Percent = 80; // Engraving power (0-100%) |
| 8 | +const engrave_Speed = 2000; // Engraving speed (mm/min) |
| 9 | +const num_Lines = 8; // Number of lines in test pattern (must be >0) |
| 10 | +const line_Spacing = 0.3; // Spacing between lines (mm) |
| 11 | + |
| 12 | +const power_Max = 1000; // Maximum power in spindle speed units - Check value of $30 in GRBL settings |
| 13 | +const power_Min = 0; // Minimum power in spindle speed units - Check value of $31 in GRBL settings |
| 14 | +const x_acceleration = 320; // Machine X acceleration value (mm/s^2)- Check value of $120 n GRBL settings |
| 15 | + // (Used to calculate over-travel - Set to zero to disable over-travel) |
| 16 | + |
| 17 | +const xplus_Only = "no"; // "no" = move to left of X0 to allow acceleration |
| 18 | + // "yes" = start acceleration from X0 - pattern will be shifted to the right |
| 19 | +const tilt = 0.12; // Slope of test pattern (mm/mm) |
| 20 | +// |
| 21 | +// Generates GCode to produce a pattern with varying Z height to assist with LASER focussing |
| 22 | +// Running this macro will replace any existing GCode in Control |
| 23 | +// The GCode uses M4 to control the LASER and so needs LASER mode enabled ($32 = 1 in GRBL settings) |
| 24 | +// |
| 25 | +// Use at own risk! |
| 26 | +// DAG 23/4/23 |
| 27 | +// |
| 28 | +// Macro continues below... |
| 29 | + |
| 30 | +var p_Power = ((power_Max - power_Min) * power_Percent / 100 + power_Min).toFixed();// Calculate engraving power in spindle speed units |
| 31 | +var over_Travel = 0; // Distance required to accelerate to engraving speed |
| 32 | +if (x_acceleration > 0){ over_Travel = (engrave_Speed / x_acceleration)}; // Calculate over-travel if X axis acceleration is set |
| 33 | + |
| 34 | +var line_Length = (z_Range * 2) / tilt; // Calculate pattern length |
| 35 | +var start_X = 0; |
| 36 | +if (xplus_Only != "yes" ) {start_X = -over_Travel}; // Starting point for X travel - NOT engraving |
| 37 | + |
| 38 | +var z_Min = z_Range * (-1); |
| 39 | +var z_Max = z_Range; |
| 40 | + |
| 41 | + |
| 42 | +// Start building the GCode string that will be the eventual output |
| 43 | + |
| 44 | +var gcode = "; Laser Focus Test Pattern\n;\n"; |
| 45 | +gcode += "; Z Range +/- " + z_Range + "mm\n"; |
| 46 | +gcode += "; Generated by Openbuilds Control macro V0.9 by Misterg\n;\n"; |
| 47 | +gcode += "G21; mm-mode\nG90; Absolute Positioning\n"; |
| 48 | +gcode += "F"+ engrave_Speed +" ; Set engraving speed\n"; |
| 49 | +gcode += "M04 S" + p_Power + " ; Laser on at set power\n"; |
| 50 | + |
| 51 | +// Draw lines |
| 52 | + |
| 53 | +for (var lineCount =0; lineCount < num_Lines; lineCount ++){ |
| 54 | + var gcYval = (line_Spacing * lineCount); // Current Y position |
| 55 | + |
| 56 | + gcode += "G0 X" + start_X +" Y" + gcYval +" Z"+ z_Min + "\n"; // Rapid to start of row |
| 57 | + gcode += "G91\nG0 X" + over_Travel + "\n"; // Rapid to start of line (relative) |
| 58 | + gcode += "G1 X" + line_Length + " Z" + (z_Range * 2) + "\n"; // Cut to end of line (relative) |
| 59 | + gcode += "G0 X" + over_Travel +"\nG90\n"; // Rapid to end of deceleration zone (relative) |
| 60 | + } |
| 61 | + |
| 62 | +// Add Tick Marks |
| 63 | +gcode += "G0 Z0; Add tick marks\n"; |
| 64 | + |
| 65 | +var major_Ticks = z_Range * 2; // 1 majortick per mm |
| 66 | +var minor_Ticks = 10; // 10 minor tick marks per mm |
| 67 | +var y_Pos = (line_Spacing * (num_Lines -1)); // Bottom of tick marks |
| 68 | +var gcXval = 0; // Calculated position |
| 69 | +var line_Start = start_X + over_Travel; // Start of labels |
| 70 | +var label_Z = z_Min; |
| 71 | +var z_MajorIncrement = (z_Max - z_Min)/(major_Ticks ); |
| 72 | +var z_MinorIncrement = z_MajorIncrement / minor_Ticks; |
| 73 | +var x_Increment = line_Length / (major_Ticks * minor_Ticks); |
| 74 | + |
| 75 | +for( var i =0 ;i<= major_Ticks;i++){ |
| 76 | + gcXval = line_Start + line_Length * i / major_Ticks; |
| 77 | + label_Z = z_Min + z_MajorIncrement * i; |
| 78 | + |
| 79 | + gcode += "G0 X" + gcXval +" Y" + y_Pos +" Z" +label_Z + "\n"; // move to start of major tick |
| 80 | + gcode += "G91\nG1 Y4\n"; // draw tick & stay in G91 |
| 81 | + |
| 82 | + // add labels |
| 83 | + |
| 84 | + if (i < major_Ticks / 2){ // Add +/- sign if needed |
| 85 | + gcode += ";minus\nG0 X2.571 Y1.5\nG1 X-2.571\nG0 X3 Y-1.5\n"; |
| 86 | + } |
| 87 | + else if (i > major_Ticks /2){ |
| 88 | + gcode += ";plus\nG0 X1.286 Y0.214\nG1 Y2.572\nG0 X1.285 Y-1.286\nG1 X-2.571\nG0 X3 Y-1.5\n"; |
| 89 | + } |
| 90 | + gcode += getGcode( ""+ Math.abs(i-major_Ticks/2)) +"G90\n"; // Get numeral & switch back to G90 |
| 91 | + |
| 92 | + gcode += "G0 X" + gcXval +" Y" + y_Pos +" Z" +label_Z + "\n"; // move back to start of major tick |
| 93 | + |
| 94 | + |
| 95 | + if (i < major_Ticks){ // Fill in minor ticks |
| 96 | + for( var j = 1; j <minor_Ticks; j++){ |
| 97 | + gcode += "G91\nG0 X" + x_Increment + " Z" + z_MinorIncrement + "\n"; // Move to start of tick |
| 98 | + if (j == (minor_Ticks /2)) { |
| 99 | + gcode += "\nG1 Y3\nG0 Y-3\n"; // Draw '5s' tick |
| 100 | + } |
| 101 | + else { |
| 102 | + gcode += "\nG1 Y2\nG0 Y-2\n"; // Draw minor tick |
| 103 | + }; |
| 104 | + } |
| 105 | + gcode += "G90\n"; |
| 106 | + } |
| 107 | +} |
| 108 | + |
| 109 | +// Tidy up the end of the GCode and pass to OB COntrol |
| 110 | + |
| 111 | +gcode += "G0 X0 Y0 Z0\n"; |
| 112 | +gcode += "M5 S0\nM2\n"; // LASER off & End of program |
| 113 | + |
| 114 | +editor.session.setValue(gcode); |
| 115 | +parseGcodeInWebWorker(gcode) |
| 116 | +printLog("<span class='fg-red'>[ Laser Test Pattern ] </span><span class='fg-green'>GCODE Loaded</span>") |
| 117 | + |
| 118 | +// The End |
| 119 | + |
| 120 | +function getGcode (numeral){ // Returns GCode string representing numbers 0 - 9 |
| 121 | + // No error checking! |
| 122 | +const gc_num = []; |
| 123 | + |
| 124 | +gc_num[0] = `;zero |
| 125 | +G0 X0.857 Y3 |
| 126 | +G1 X0.286 |
| 127 | +X0.428 Y-0.143 |
| 128 | +X0.286 Y-0.428 |
| 129 | +X0.143 Y-0.715 |
| 130 | +Y-0.428 |
| 131 | +X-0.143 Y-0.715 |
| 132 | +X-0.286 Y-0.428 |
| 133 | +X-0.428 Y-0.143 |
| 134 | +X-0.286 |
| 135 | +X-0.428 Y0.143 |
| 136 | +X-0.286 Y0.428 |
| 137 | +X-0.143 Y0.715 |
| 138 | +Y0.428 |
| 139 | +X0.143 Y0.715 |
| 140 | +X0.286 Y0.428 |
| 141 | +X0.428 Y0.143 |
| 142 | +`; |
| 143 | + |
| 144 | +gc_num[1] = `;one |
| 145 | +G0 Y2.429 |
| 146 | +G1 X0.286 Y0.142 |
| 147 | +X0.428 Y0.429 |
| 148 | +Y-3 |
| 149 | +`; |
| 150 | + |
| 151 | +gc_num[2] = `;two |
| 152 | +G0 X0.143 Y2.286 |
| 153 | +G1 Y0.143 |
| 154 | +X0.143 Y0.285 |
| 155 | +X0.143 Y0.143 |
| 156 | +X0.285 Y0.143 |
| 157 | +X0.572 |
| 158 | +X0.285 Y-0.143 |
| 159 | +X0.143 Y-0.143 |
| 160 | +X0.143 Y-0.285 |
| 161 | +Y-0.286 |
| 162 | +X-0.143 Y-0.286 |
| 163 | +X-0.285 Y-0.428 |
| 164 | +X-1.429 Y-1.429 |
| 165 | +X2 |
| 166 | +`; |
| 167 | + |
| 168 | +gc_num[3] = `;three |
| 169 | +G0 X0.286 Y3 |
| 170 | +G1 X1.571 |
| 171 | +X-0.857 Y-1.143 |
| 172 | +X0.429 |
| 173 | +X0.285 Y-0.143 |
| 174 | +X0.143 Y-0.143 |
| 175 | +X0.143 Y-0.428 |
| 176 | +Y-0.286 |
| 177 | +X-0.143 Y-0.428 |
| 178 | +X-0.286 Y-0.286 |
| 179 | +X-0.428 Y-0.143 |
| 180 | +X-0.429 |
| 181 | +X-0.428 Y0.143 |
| 182 | +X-0.143 Y0.143 |
| 183 | +X-0.143 Y0.285 |
| 184 | +`; |
| 185 | + |
| 186 | +gc_num[4] = `;four |
| 187 | +G0 X2.143 Y1 |
| 188 | +G1 X-2.143 |
| 189 | +X1.429 Y2 |
| 190 | +Y-3 |
| 191 | +`; |
| 192 | + |
| 193 | +gc_num[5] = `;five |
| 194 | +G0 X1.714 Y3 |
| 195 | +G1 X-1.428 |
| 196 | +X-0.143 Y-1.286 |
| 197 | +X0.143 Y0.143 |
| 198 | +X0.428 Y0.143 |
| 199 | +X0.429 |
| 200 | +X0.428 Y-0.143 |
| 201 | +X0.286 Y-0.286 |
| 202 | +X0.143 Y-0.428 |
| 203 | +Y-0.286 |
| 204 | +X-0.143 Y-0.428 |
| 205 | +X-0.286 Y-0.286 |
| 206 | +X-0.428 Y-0.143 |
| 207 | +X-0.429 |
| 208 | +X-0.428 Y0.143 |
| 209 | +X-0.143 Y0.143 |
| 210 | +X-0.143 Y0.285 |
| 211 | +`; |
| 212 | + |
| 213 | +gc_num[6] = `;six |
| 214 | +G0 Y1 |
| 215 | +G1 X0.143 Y0.429 |
| 216 | +X0.286 Y0.285 |
| 217 | +X0.428 Y0.143 |
| 218 | +X0.143 |
| 219 | +X0.429 Y-0.143 |
| 220 | +X0.285 Y-0.285 |
| 221 | +X0.143 Y-0.429 |
| 222 | +Y-0.143 |
| 223 | +X-0.143 Y-0.428 |
| 224 | +X-0.285 Y-0.286 |
| 225 | +X-0.429 Y-0.143 |
| 226 | +X-0.143 |
| 227 | +X-0.428 Y0.143 |
| 228 | +X-0.286 Y0.286 |
| 229 | +X-0.143 Y0.571 |
| 230 | +Y0.714 |
| 231 | +X0.143 Y0.715 |
| 232 | +X0.286 Y0.428 |
| 233 | +X0.428 Y0.143 |
| 234 | +X0.286 |
| 235 | +X0.428 Y-0.143 |
| 236 | +X0.143 Y-0.286 |
| 237 | +`; |
| 238 | + |
| 239 | +gc_num[7] = `;seven |
| 240 | +G0 Y3 |
| 241 | +G1 X2 |
| 242 | +X-1.429 Y-3 |
| 243 | +`; |
| 244 | + |
| 245 | +gc_num[8] = `;eight |
| 246 | +G0 X0.714 Y3 |
| 247 | +G1 X-0.428 Y-0.143 |
| 248 | +X-0.143 Y-0.286 |
| 249 | +Y-0.285 |
| 250 | +X0.143 Y-0.286 |
| 251 | +X0.285 Y-0.143 |
| 252 | +X0.572 Y-0.143 |
| 253 | +X0.428 Y-0.143 |
| 254 | +X0.286 Y-0.285 |
| 255 | +X0.143 Y-0.286 |
| 256 | +Y-0.429 |
| 257 | +X-0.143 Y-0.285 |
| 258 | +X-0.143 Y-0.143 |
| 259 | +X-0.428 Y-0.143 |
| 260 | +X-0.572 |
| 261 | +X-0.428 Y0.143 |
| 262 | +X-0.143 Y0.143 |
| 263 | +X-0.143 Y0.285 |
| 264 | +Y0.429 |
| 265 | +X0.143 Y0.286 |
| 266 | +X0.286 Y0.285 |
| 267 | +X0.428 Y0.143 |
| 268 | +X0.572 Y0.143 |
| 269 | +X0.285 Y0.143 |
| 270 | +X0.143 Y0.286 |
| 271 | +Y0.285 |
| 272 | +X-0.143 Y0.286 |
| 273 | +X-0.428 Y0.143 |
| 274 | +X-0.572 |
| 275 | +`; |
| 276 | + |
| 277 | +gc_num[9] = `;nine |
| 278 | +G0 X1.857 Y2 |
| 279 | +G1 X-0.143 Y-0.429 |
| 280 | +X-0.285 Y-0.285 |
| 281 | +X-0.429 Y-0.143 |
| 282 | +X-0.143 |
| 283 | +X-0.428 Y0.143 |
| 284 | +X-0.286 Y0.285 |
| 285 | +X-0.143 Y0.429 |
| 286 | +Y0.143 |
| 287 | +X0.143 Y0.428 |
| 288 | +X0.286 Y0.286 |
| 289 | +X0.428 Y0.143 |
| 290 | +X0.143 |
| 291 | +X0.429 Y-0.143 |
| 292 | +X0.285 Y-0.286 |
| 293 | +X0.143 Y-0.571 |
| 294 | +Y-0.714 |
| 295 | +X-0.143 Y-0.715 |
| 296 | +X-0.285 Y-0.428 |
| 297 | +X-0.429 Y-0.143 |
| 298 | +X-0.286 |
| 299 | +X-0.428 Y0.143 |
| 300 | +X-0.143 Y0.286 |
| 301 | +`; |
| 302 | + |
| 303 | +return gc_num[numeral]; |
| 304 | +} |
0 commit comments