Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

bed mesh calibrate tested #210

Open
elettosilva opened this issue Jun 24, 2024 · 0 comments
Open

bed mesh calibrate tested #210

elettosilva opened this issue Jun 24, 2024 · 0 comments

Comments

@elettosilva
Copy link

elettosilva commented Jun 24, 2024

macros.zip
Macro Bed Mesh (macros.cfg)

 [gcode_macro BED_MESH_CALIBRATE]
  rename_existing: BED_MESH_CALIBRATE_BASE
  ; gcode parameters
  variable_parameter_AREA_START : 0,0
  variable_parameter_AREA_END : 0,0
  ; the clearance between print area and probe area 
  variable_mesh_area_offset : 5.0
  ; number of sample per probe point
  variable_probe_samples : 2
  ; minimum probe count
  variable_min_probe_count : 4
  ; scale up the probe count, should be 1.0 ~ < variable_max_probe_count/variable_min_probe_count
  variable_probe_count_scale_factor : 1.0
  ; enable preference index
  variable_enable_reference_index : False
  gcode:
      LOAD_CELL_TARE
      {% if params.AREA_START and params.AREA_END %}
          {% set bedMeshConfig = printer["configfile"].config["bed_mesh"] %}
          {% set safe_min_x = bedMeshConfig.mesh_min.split(",")[0]|float %}
          {% set safe_min_y = bedMeshConfig.mesh_min.split(",")[1]|float %}
          {% set safe_max_x = bedMeshConfig.mesh_max.split(",")[0]|float %}
          {% set safe_max_y = bedMeshConfig.mesh_max.split(",")[1]|float %}
  
          {% set area_min_x = params.AREA_START.split(",")[0]|float %}
      {% set area_min_y = params.AREA_START.split(",")[1]|float %}
      {% set area_max_x = params.AREA_END.split(",")[0]|float %}
      {% set area_max_y = params.AREA_END.split(",")[1]|float %}
  
      {% if bedMeshConfig.probe_count.split(",")|length == 2 %}
              {% set meshPointX = bedMeshConfig.probe_count.split(",")[0]|int %}
              {% set meshPointY = bedMeshConfig.probe_count.split(",")[1]|int %}
          {% else %}
              {% set meshPointX = bedMeshConfig.probe_count.split(",")[0]|int %}
              {% set meshPointY = bedMeshConfig.probe_count.split(",")[0]|int %}
          {% endif %}
  
      {% set meshMaxPointX = meshPointX %}
      {% set meshMaxPointY = meshPointY %}
  
  
          {% if (area_min_x < area_max_x) and (area_min_y < area_max_y) %}
              {% if area_min_x - mesh_area_offset >=  safe_min_x %}
                  {% set area_min_x = area_min_x - mesh_area_offset %}
              {% else %}
                  {% set area_min_x = safe_min_x %}
              {% endif %}
  
              {% if area_min_y - mesh_area_offset >=  safe_min_y %}
                  {% set area_min_y = area_min_y - mesh_area_offset %}
              {% else %}
                  {% set area_min_y = safe_min_y %}
              {% endif %}
  
              {% if area_max_x + mesh_area_offset <=  safe_max_x %}
                  {% set area_max_x = area_max_x + mesh_area_offset %}
              {% else %}
                  {% set area_max_x = safe_max_x %}
              {% endif %}
  
              {% if area_max_y + mesh_area_offset <=  safe_max_y %}
                  {% set area_max_y = area_max_y + mesh_area_offset %}
              {% else %}
                  {% set area_max_y = safe_max_y %}
              {% endif %}
  
              {% set meshPointX = (meshPointX * (area_max_x - area_min_x) / (safe_max_x - safe_min_x) * probe_count_scale_factor)|round(0)|int %}
              {% if meshPointX < min_probe_count %}
                  {% set meshPointX = min_probe_count %}
              {% endif %}
          {% if meshPointX > meshMaxPointX %}
                  {% set meshPointX = meshMaxPointX %}
              {% endif %}
  
              {% set meshPointY = (meshPointY * (area_max_y -area_min_y ) / (safe_max_y - safe_min_y) * probe_count_scale_factor )|round(0)|int %}
              {% if meshPointY < min_probe_count %}
                  {% set meshPointY = min_probe_count %}
              {% endif %}
          {% if meshPointY > meshMaxPointY %}
                  {% set meshPointY = meshMaxPointY %}
              {% endif %}
  
              {% set algorithm = "bicubic" %}
          {% if "algorithm" in bedMeshConfig %}
              {% set algorithm = bedMeshConfig.algorithm %}
              {% endif %}
              {% if meshPointX >=7 or meshPointY >=7 %}
                  {% set algorithm = "bicubic" %}
              {% endif %}
  
              {% if enable_reference_index %}
                  {% set referenceIndex = (meshPointX * meshPointY / 2 - 1 )|round(0)|int %}
                  BED_MESH_CALIBRATE_BASE mesh_min={area_min_x},{area_min_y} mesh_max={area_max_x},{area_max_y} probe_count={meshPointX},{meshPointY} samples={probe_samples|int} algorithm={algorithm} relative_reference_index={referenceIndex}
              {% else %}
                  BED_MESH_CALIBRATE_BASE mesh_min={area_min_x},{area_min_y} mesh_max={area_max_x},{area_max_y} probe_count={meshPointX},{meshPointY} samples={probe_samples|int} algorithm={algorithm}
              {% endif %}
          {% else %}
              BED_MESH_CALIBRATE_BASE {rawparams}
          {% endif %}
      {% else %}
          BED_MESH_CALIBRATE_BASE {rawparams}
      {% endif %}

start_print
...
G90 ; use absolute coordinates
G1 Z10 F1800 ; move the nozzle near the bed
# wait for bed to reach temp, don't wait for stabilization
TEMPERATURE_WAIT SENSOR=heater_bed MINIMUM={bed_temp}
M109 S{extruder_temp} ; set and wait for nozzle to reach temperature

BED_MESH_CALIBRATE AREA_START={area_start} AREA_END={area_end}
# BED_MESH_PROFILE LOAD=<default>

# prime nozzle before print if not disabled
{% if not disable_priming %}
    _PRIME_NOZZLE
{% endif %}

...

orca slicer
start g-code

START_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single] AREA_START={first_layer_print_min[0]},{first_layer_print_min[1]} AREA_END={first_layer_print_max[0]},{first_layer_print_max[1]};

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant