# ============================================================================ # NEPTUNE 4 PLUS CALIBRATION SUITE # Complete calibration macros for Cartographer 3D # ============================================================================ # Installation: Add [include calibration/*.cfg] to printer.cfg # Usage: Run CALIBRATION_MENU in console # ============================================================================ # ---------------------------------------------------------------------------- # MAIN MENU - Shows all available calibration options # ---------------------------------------------------------------------------- [gcode_macro CALIBRATION_MENU] description: Show calibration menu with all options gcode: RESPOND MSG="==============================================" RESPOND MSG=" NEPTUNE 4 PLUS CALIBRATION SUITE" RESPOND MSG="==============================================" RESPOND MSG="" RESPOND MSG="Run these macros INDIVIDUALLY (in order):" RESPOND MSG="" RESPOND MSG="SETUP (do once):" RESPOND MSG=" CALIBRATE_Z_OFFSET - Z0 with Cartographer (MANUAL!)" RESPOND MSG=" CALIBRATE_INPUT_SHAPER - ADXL resonance (if ADXL connected)" RESPOND MSG="" RESPOND MSG="FILAMENT-SPECIFIC (per filament):" RESPOND MSG=" CALIBRATE_PRESSURE_ADVANCE - PA tuning (inspect squares)" RESPOND MSG=" CALIBRATE_FLOW_RATE - Flow calibration (measure)" RESPOND MSG=" CALIBRATE_TEMPERATURE - Temp tower (inspect)" RESPOND MSG=" CALIBRATE_RETRACTION - Retraction test (inspect)" RESPOND MSG="" RESPOND MSG="PERIODIC:" RESPOND MSG=" CALIBRATE_BED_MESH - Mesh verification" RESPOND MSG="" RESPOND MSG="⚠️ IMPORTANT:" RESPOND MSG=" - Each macro must be run individually" RESPOND MSG=" - Some require manual interaction (Z-Offset)" RESPOND MSG=" - Some require visual inspection (PA, Temp, Retract)" RESPOND MSG=" - Run SAVE_CONFIG after Z-Offset and Input Shaper" RESPOND MSG="==============================================" # ---------------------------------------------------------------------------- # 1. Z-OFFSET CALIBRATION with Cartographer # ---------------------------------------------------------------------------- [gcode_macro CALIBRATE_Z_OFFSET] description: Calibrate Z-offset using Cartographer touch gcode: RESPOND MSG="Starting Z-Offset Calibration..." RESPOND MSG="" RESPOND MSG="Step 1: Heating up..." # Heat up for calibration M104 S50 M190 S60 TEMPERATURE_WAIT SENSOR=extruder MINIMUM=45 TEMPERATURE_WAIT SENSOR=heater_bed MINIMUM=55 RESPOND MSG="Step 2: Homing..." G28 RESPOND MSG="Step 3: Cartographer Z0 calibration..." RESPOND MSG="" RESPOND MSG="⚠️ MANUAL INTERACTION REQUIRED!" RESPOND MSG="" RESPOND MSG="Cartographer will prompt for manual Z adjustment." RESPOND MSG="In console, use these commands:" RESPOND MSG=" TESTZ Z=0.01 - Move nozzle DOWN (closer to bed)" RESPOND MSG=" TESTZ Z=-0.01 - Move nozzle UP (away from bed)" RESPOND MSG=" TESTZ Z=0.005 - Fine adjustment" RESPOND MSG="" RESPOND MSG="When nozzle barely touches paper:" RESPOND MSG=" ACCEPT - Finish calibration" RESPOND MSG=" ABORT - Cancel" RESPOND MSG="" RESPOND MSG="Starting probe now - watch the console!" # Start Cartographer calibration (Survey Touch) CARTOGRAPHER_SCAN_CALIBRATE RESPOND MSG="" RESPOND MSG="Z-Offset calibration complete!" RESPOND MSG="Don't forget to run SAVE_CONFIG" # ---------------------------------------------------------------------------- # 2. INPUT SHAPER CALIBRATION # ---------------------------------------------------------------------------- [gcode_macro CALIBRATE_INPUT_SHAPER] description: Measure resonance frequencies with ADXL345 gcode: RESPOND MSG="Starting Input Shaper Calibration..." RESPOND MSG="" RESPOND MSG="Step 1: Homing..." G28 RESPOND MSG="Step 2: Measuring X-axis resonance..." MEASURE_AXES_NOISE axis=x RESPOND MSG="Step 3: Measuring Y-axis resonance..." MEASURE_AXES_NOISE axis=y RESPOND MSG="" RESPOND MSG="Input Shaper calibration complete!" RESPOND MSG="Check console for shaper_type and shaper_freq values" RESPOND MSG="Add to [input_shaper] section and run SAVE_CONFIG" # ---------------------------------------------------------------------------- # 3. PRESSURE ADVANCE CALIBRATION # ---------------------------------------------------------------------------- [gcode_macro CALIBRATE_PRESSURE_ADVANCE] description: Calibrate Pressure Advance for optimal corners gcode: {% set FILAMENT = params.FILAMENT|default("PLA")|upper %} {% set START_PA = params.START|default(0.01)|float %} {% set END_PA = params.END|default(0.05)|float %} {% set STEP = params.STEP|default(0.002)|float %} RESPOND MSG="Starting Pressure Advance Calibration..." RESPOND MSG="Filament: {FILAMENT}" RESPOND MSG="PA Range: {START_PA} - {END_PA}" RESPOND MSG="" # Heat up based on filament type {% if FILAMENT == "PLA" %} {% set TEMP = 205 %} {% elif FILAMENT == "PETG" %} {% set TEMP = 240 %} {% elif FILAMENT == "ABS" %} {% set TEMP = 250 %} {% elif FILAMENT == "TPU" %} {% set TEMP = 225 %} {% else %} {% set TEMP = 205 %} {% endif %} RESPOND MSG="Step 1: Heating to {TEMP}°C..." M104 S{TEMP} M190 S60 TEMPERATURE_WAIT SENSOR=extruder MINIMUM={TEMP-5} RESPOND MSG="Step 2: Homing..." G28 RESPOND MSG="Step 3: Starting PA calibration pattern..." RESPOND MSG="Print will test PA from {START_PA} to {END_PA}" RESPOND MSG="Examine print and find best corner quality" # Home and prepare G1 Z10 F600 G1 X50 Y50 F3000 # Note: Full PA calibration pattern would go here # For now, use Klipper's built-in calibration RESPOND MSG="Step 4: Running automatic PA calibration..." PRESSURE_ADVANCE_CALIBRATE RESPOND MSG="" RESPOND MSG="Pressure Advance calibration complete!" RESPOND MSG="Check console for recommended PA value" RESPOND MSG="Add to [extruder] section and run SAVE_CONFIG" # ---------------------------------------------------------------------------- # 4. FLOW RATE CALIBRATION # ---------------------------------------------------------------------------- [gcode_macro CALIBRATE_FLOW_RATE] description: Calibrate flow rate for exact wall dimensions gcode: {% set FILAMENT = params.FILAMENT|default("PLA")|upper %} RESPOND MSG="Starting Flow Rate Calibration..." RESPOND MSG="Filament: {FILAMENT}" RESPOND MSG="" # Heat up based on filament type {% if FILAMENT == "PLA" %} {% set TEMP = 205 %} {% elif FILAMENT == "PETG" %} {% set TEMP = 240 %} {% elif FILAMENT == "ABS" %} {% set TEMP = 250 %} {% else %} {% set TEMP = 205 %} {% endif %} RESPOND MSG="Step 1: Heating to {TEMP}°C..." M104 S{TEMP} M190 S60 TEMPERATURE_WAIT SENSOR=extruder MINIMUM={TEMP-5} RESPOND MSG="Step 2: Homing..." G28 RESPOND MSG="Step 3: Printing flow test cube..." RESPOND MSG="Cube will have walls printed at different flow rates" RESPOND MSG="" RESPOND MSG="After print:" RESPOND MSG=" 1. Measure wall thickness with calipers" RESPOND MSG=" 2. Find which section matches nominal wall width" RESPOND MSG=" 3. Calculate: New Flow = Old Flow × (Measured / Nominal)" RESPOND MSG="" # Home and prepare G1 Z10 F600 G1 X50 Y50 F3000 RESPOND MSG="Step 4: Starting print..." # Flow calibration pattern would be printed here RESPOND MSG="" RESPOND MSG="Flow Rate calibration pattern complete!" RESPOND MSG="Update flow_ratio in filament profile and run SAVE_CONFIG" # ---------------------------------------------------------------------------- # 5. TEMPERATURE TOWER # ---------------------------------------------------------------------------- [gcode_macro CALIBRATE_TEMPERATURE] description: Print temperature tower to find optimal temp gcode: {% set FILAMENT = params.FILAMENT|default("PLA")|upper %} {% set START_TEMP = params.START|default(195)|int %} {% set END_TEMP = params.END|default(225)|int %} {% set STEP = params.STEP|default(5)|int %} RESPOND MSG="Starting Temperature Tower..." RESPOND MSG="Filament: {FILAMENT}" RESPOND MSG="Temperature Range: {START_TEMP}°C - {END_TEMP}°C" RESPOND MSG="" RESPOND MSG="Step 1: Heating bed..." M190 S60 TEMPERATURE_WAIT SENSOR=heater_bed MINIMUM=55 RESPOND MSG="Step 2: Homing..." G28 RESPOND MSG="Step 3: Printing temperature tower..." RESPOND MSG="Each section uses different temperature" RESPOND MSG="" RESPOND MSG="After print:" RESPOND MSG=" 1. Check for stringing (too hot)" RESPOND MSG=" 2. Check for poor layer adhesion (too cold)" RESPOND MSG=" 3. Check bridging quality" RESPOND MSG=" 4. Choose best temperature section" RESPOND MSG="" # Home and prepare G1 Z10 F600 G1 X50 Y50 F3000 RESPOND MSG="Step 4: Starting print..." # Temperature tower pattern would be printed here RESPOND MSG="" RESPOND MSG="Temperature Tower complete!" RESPOND MSG="Update nozzle_temperature in filament profile" # ---------------------------------------------------------------------------- # 6. RETRACTION TEST # ---------------------------------------------------------------------------- [gcode_macro CALIBRATE_RETRACTION] description: Test retraction settings to minimize stringing gcode: {% set FILAMENT = params.FILAMENT|default("PLA")|upper %} {% set HOTEND = params.HOTEND|default("ORIGINAL")|upper %} RESPOND MSG="Starting Retraction Test..." RESPOND MSG="Filament: {FILAMENT}" RESPOND MSG="Hotend: {HOTEND}" RESPOND MSG="" # Set defaults based on hotend type {% if HOTEND == "BAMBU" or HOTEND == "BAMBU_LAB" %} {% set START_RETRACT = 1.2 %} {% set END_RETRACT = 2.5 %} {% else %} {% set START_RETRACT = 1.5 %} {% set END_RETRACT = 3.5 %} {% endif %} # Heat up based on filament type {% if FILAMENT == "PLA" %} {% set TEMP = 205 %} {% elif FILAMENT == "PETG" %} {% set TEMP = 240 %} {% elif FILAMENT == "ABS" %} {% set TEMP = 250 %} {% else %} {% set TEMP = 205 %} {% endif %} RESPOND MSG="Step 1: Heating to {TEMP}°C..." M104 S{TEMP} M190 S60 TEMPERATURE_WAIT SENSOR=extruder MINIMUM={TEMP-5} RESPOND MSG="Step 2: Homing..." G28 RESPOND MSG="Step 3: Printing retraction test..." RESPOND MSG="Testing retraction from {START_RETRACT}mm to {END_RETRACT}mm" RESPOND MSG="" RESPOND MSG="After print:" RESPOND MSG=" 1. Find section with least stringing" RESPOND MSG=" 2. Ensure no underextrusion" RESPOND MSG=" 3. Use that retraction value" RESPOND MSG="" # Home and prepare G1 Z10 F600 G1 X50 Y50 F3000 RESPOND MSG="Step 4: Starting print..." # Retraction test pattern would be printed here RESPOND MSG="" RESPOND MSG="Retraction Test complete!" RESPOND MSG="Update retract_length in filament profile" # ---------------------------------------------------------------------------- # 7. BED MESH CALIBRATION # ---------------------------------------------------------------------------- [gcode_macro CALIBRATE_BED_MESH] description: Calibrate bed mesh with Cartographer gcode: RESPOND MSG="Starting Bed Mesh Calibration..." RESPOND MSG="" RESPOND MSG="Step 1: Heating bed..." M190 S60 TEMPERATURE_WAIT SENSOR=heater_bed MINIMUM=55 RESPOND MSG="Step 2: Homing..." G28 RESPOND MSG="Step 3: Clearing existing mesh..." BED_MESH_CLEAR RESPOND MSG="Step 4: Starting adaptive mesh calibration..." BED_MESH_CALIBRATE ADAPTIVE=1 RESPOND MSG="" RESPOND MSG="Bed Mesh calibration complete!" RESPOND MSG="Mesh saved automatically" RESPOND MSG="Run SAVE_CONFIG to make permanent" # ---------------------------------------------------------------------------- # ⚠️ CALIBRATION_FULL / CALIBRATION_QUICK REMOVED # ---------------------------------------------------------------------------- # These macros were removed because they don't work correctly: # # - CALIBRATE_Z_OFFSET requires manual interaction (TESTZ/ACCEPT) # - PA_TEST_PATTERN requires visual inspection # - TEMP_TOWER requires visual inspection # - RETRACT_TEST requires visual inspection # # Running these automatically without user input produces bad results! # # ✅ CORRECT WORKFLOW: # Run calibration macros INDIVIDUALLY from the menu: # 1. CALIBRATE_Z_OFFSET - Do manually with paper test # 2. CALIBRATE_INPUT_SHAPER - Automatic (if ADXL connected) # 3. CALIBRATE_PRESSURE_ADVANCE - Inspect test pattern # 4. CALIBRATE_FLOW_RATE - Measure with calipers # 5. CALIBRATE_TEMPERATURE - Inspect temp tower # 6. CALIBRATE_RETRACTION - Inspect stringing towers # 7. CALIBRATE_BED_MESH - Automatic # # After each calibration that changes settings: SAVE_CONFIG # ---------------------------------------------------------------------------- RESPOND MSG=" QUICK CALIBRATION COMPLETE!" RESPOND MSG="==============================================" RESPOND MSG="" RESPOND MSG="Run SAVE_CONFIG to save settings!"