## Voron Design VORON2 250/300/350mm Spider TMC2209 UART config ## *** THINGS TO CHANGE/CHECK: *** ## MCU paths [mcu] section ## Thermistor types [extruder] and [heater_bed] sections - See 'sensor types' list at end of file ## Z Endstop Switch location [safe_z_home] section ## Homing end position [gcode_macro G32] section ## Z Endstop Switch offset for Z0 [stepper_z] section ## Probe points [quad_gantry_level] section ## Min & Max gantry corner postions [quad_gantry_level] section ## PID tune [extruder] and [heater_bed] sections ## Fine tune E steps [extruder] section [mcu] ## Obtain definition by "ls -l /dev/serial/by-id/" ##-------------------------------------------------------------------- serial: /dev/serial/by-id/usb-Klipper_stm32f446xx_420029001151383039343538-if00 ## Uncomment below if you're using the Raspberry uart0 to communicate with Spider #restart_method: command [printer] kinematics: corexy max_velocity: 300 max_accel: 3000 #Max 4000 max_z_velocity: 15 #Max 15 for 12V TMC Drivers, can increase for 24V max_z_accel: 350 square_corner_velocity: 5.0 ##################################################################### # X/Y Stepper Settings ##################################################################### [stepper_x] ## Connected to X-MOT (B Motor) step_pin: PE11 dir_pin: PE10 enable_pin: !PE9 rotation_distance: 40 microsteps: 32 full_steps_per_rotation:400 #set to 400 for 0.9 degree stepper endstop_pin: ^PA1 position_min: 0 ##-------------------------------------------------------------------- ## Uncomment below for 250mm build #position_endstop: 250 #position_max: 250 ## Uncomment for 300mm build position_endstop: 300 position_max: 300 # Uncomment for 350mm build # position_endstop: 350 # position_max: 350 ##-------------------------------------------------------------------- homing_speed: 100 #Max 100 homing_retract_dist: 5 homing_positive_dir: true ## Make sure to update below for your relevant driver (2208 or 2209) [tmc2209 stepper_x] uart_pin: PE7 interpolate: False run_current: 0.8 sense_resistor: 0.110 stealthchop_threshold: 0 [stepper_y] ## Connected to Y-MOT (A Motor) step_pin: PD8 dir_pin: PB12 enable_pin: !PD9 rotation_distance: 40 microsteps: 32 full_steps_per_rotation:400 #set to 400 for 0.9 degree stepper endstop_pin: ^PA2 position_min: -10 ##-------------------------------------------------------------------- ## Uncomment for 250mm build #position_endstop: 250 #position_max: 250 ## Uncomment for 300mm build position_endstop: 300 position_max: 300 # Uncomment for 350mm build # position_endstop: 355 # position_max: 355 ##-------------------------------------------------------------------- homing_speed: 100 #Max 100 homing_retract_dist: 5 homing_positive_dir: true ## Make sure to update below for your relevant driver (2208 or 2209) [tmc2209 stepper_y] uart_pin: PE15 interpolate: False run_current: 0.8 sense_resistor: 0.110 stealthchop_threshold: 0 ##################################################################### # Z Stepper Settings ##################################################################### ## In Z-MOT Position ## Z0 Stepper - Front Left [stepper_z] step_pin: PD14 dir_pin: !PD13 enable_pin: !PD15 rotation_distance: 40 gear_ratio: 80:16 microsteps: 32 ## In Z- Position endstop_pin: ^PA0 ## Z-position of nozzle (in mm) to z-endstop trigger point relative to print surface (Z0) ## (+) value = endstop above Z0, (-) value = endstop below ## Increasing position_endstop brings nozzle closer to the bed ## After you run Z_ENDSTOP_CALIBRATE, position_endstop will be stored at the very end of your config #position_endstop: 0 ##-------------------------------------------------------------------- ## Uncomment below for 250mm build #position_max: 230 ## Uncomment below for 300mm build position_max: 280 # # Uncomment below for 350mm build # position_max: 295 ##-------------------------------------------------------------------- position_min: -5 homing_speed: 8 second_homing_speed: 3 homing_retract_dist: 3 ## Make sure to update below for your relevant driver (2208 or 2209) [tmc2209 stepper_z] uart_pin: PD10 interpolate: False run_current: 0.8 sense_resistor: 0.110 stealthchop_threshold: 0 ## In E1-MOT Position ## Z1 Stepper - Rear Left [stepper_z1] step_pin: PE6 dir_pin: PC13 enable_pin: !PE5 rotation_distance: 40 gear_ratio: 80:16 microsteps: 32 ## Make sure to update below for your relevant driver (2208 or 2209) [tmc2209 stepper_z1] uart_pin: PC14 interpolate: False run_current: 0.8 sense_resistor: 0.110 stealthchop_threshold: 0 ## In E2-MOT Position ## Z2 Stepper - Rear Right [stepper_z2] step_pin: PE2 dir_pin: !PE4 enable_pin: !PE3 rotation_distance: 40 gear_ratio: 80:16 microsteps: 32 ## Make sure to update below for your relevant driver (2208 or 2209) [tmc2209 stepper_z2] uart_pin: PC15 interpolate: False run_current: 0.8 sense_resistor: 0.110 stealthchop_threshold: 0 ## In E3-MOT Position ## Z3 Stepper - Front Right [stepper_z3] step_pin: PD12 dir_pin: PC4 enable_pin: !PE8 rotation_distance: 40 gear_ratio: 80:16 microsteps: 32 [tmc2209 stepper_z3] uart_pin: PA15 interpolate: False run_current: 0.8 sense_resistor: 0.110 stealthchop_threshold: 0 ####################################### #### Enclosure Temp Sensor Section #### ####################################### # [thermistor chamber_temp] # temperature1: 25 # resistance1: 10000 # beta: 3950 [temperature_sensor chamber] sensor_type: PT1000 sensor_pin: PC1 min_temp: 0 max_temp: 100 gcode_id: C ##################################################################### # Extruder ##################################################################### ## In E0-MOT Position [extruder] step_pin: PD5 dir_pin: !PD6 enable_pin: !PD4 ## Update value below when you perform extruder calibration ## If you ask for 100mm of filament, but in reality it is 98mm: ## rotation_distance = * / 100 ## 22.6789511 is a good starting point for Bondtech 5mm gears ## 34.37086 for Bondtech 8mm gears (Galileo) rotation_distance: 22.90574 ## Update Gear Ratio depending on your Extruder Type ## Use 50:17 for Afterburner/Clockwork (BMG Gear Ratio) ## Use 80:20 for M4, M3.1 ## Use 7.5:1 for Galileo gear_ratio: 50:10 #BMG Gear Ratio microsteps: 32 full_steps_per_rotation: 200 #200 for 1.8 degree, 400 for 0.9 degree nozzle_diameter: 0.400 filament_diameter: 1.75 ## In E0 OUT Position heater_pin: PB15 ## Validate the following thermistor type to make sure it is correct sensor_type: ATC Semitec 104NT-4-R025H42G sensor_pin: PC0 min_temp: 10 max_temp: 270 max_power: 1.0 min_extrude_temp: 200 max_extrude_only_distance: 101 #control = pid #pid_kp = 26.213 #pid_ki = 1.304 #pid_kd = 131.721 # Try to keep pressure_advance below 1.0 pressure_advance: 0.032 # Default is 0.040, leave stock pressure_advance_smooth_time: 0.040 ## In E0-MOT Position ## Make sure to update below for your relevant driver (2208 or 2209) [tmc2209 extruder] uart_pin: PD7 interpolate: false run_current: 0.5 hold_current: 0.2 sense_resistor: 0.110 stealthchop_threshold: 0 [filament_switch_sensor switch_sensor] switch_pin: PB1 pause_on_runout: False runout_gcode: PAUSE # [pause_resume] is required in printer.cfg M117 Filament switch runout insert_gcode: M117 Filament switch inserted [filament_motion_sensor encoder_sensor] switch_pin: PB13 detection_length: 7 extruder: extruder pause_on_runout: False runout_gcode: # Detect but do nothing as it is triggering too much #PAUSE # [pause_resume] is required in printer.cfg M117 Filament encoder runout insert_gcode: M117 Filament encoder inserted [gcode_macro F_CONSUMED] variable_filament_consumed: 0 variable_filament_lenght: 20 # length between the sensor and extruder gcode: # save current filament consumption SET_GCODE_VARIABLE MACRO=F_CONSUMED VARIABLE=filament_consumed VALUE={printer.print_stats.filament_used} # start checking filament consumption UPDATE_DELAYED_GCODE ID=DELAY_M600 DURATION=1 [delayed_gcode DELAY_M600] gcode: # use set for easier reading {% set consumed=printer["gcode_macro F_CONSUMED"].filament_consumed %} {% set length=printer["gcode_macro F_CONSUMED"].filament_lenght %} # check if predetermine length is reached {% if printer.print_stats.filament_used|float <= (consumed|float + length|float) %} # start looping this script every second UPDATE_DELAYED_GCODE ID=DELAY_M600 DURATION=1 {% else %} error_tones PAUSE {% endif %} ##################################################################### # Bed Heater ##################################################################### [heater_bed] ## SSR Pin - In BED OUT position heater_pin: PC8 sensor_type: Generic 3950 sensor_pin: PB0 # TB Position ## Adjust Max Power so your heater doesn't warp your bed max_power: 1 min_temp: 0 max_temp: 120 control: pid pid_kp: 59.854 pid_ki: 1.596 pid_kd: 561.133 ##################################################################### # Probe ##################################################################### [probe] ## This probe is not used for Z height, only Quad Gantry Leveling ## In Z+ position ## If your probe is NO instead of NC, change pin to ^!PA3 pin: ^PA3 x_offset: 0 y_offset: 25.0 #z_offset: 0 speed: 10.0 samples: 3 samples_result: median sample_retract_dist: 3.0 samples_tolerance: 0.012 samples_tolerance_retries: 3 ##################################################################### # Fan Control ##################################################################### [heater_fan hotend_fan] ## Hotend Fan - FAN0 Connector pin: PA13 max_power: 1.0 kick_start_time: 0.5 heater: extruder heater_temp: 50.0 ## If you are experiencing back flow, you can reduce fan_speed #fan_speed: 1.0 [fan] ## Print Cooling Fan - FAN1 Connector ## Uncomment below for SpiderVersion 1.x #pin: PB1 ## Uncomment below for SpiderVersion 2.2 pin: PA14 max_power: 1 kick_start_time: 0.5 ## Depending on your fan, you may need to increase this value ## if your fan will not start. Can change cycle_time (increase) ## if your fan is not able to slow down effectively off_below: 0.10 [heater_fan controller_fan] ## Exhaust fan - In E2 OUT Positon pin: PB3 max_power: 1.0 shutdown_speed: 0.0 kick_start_time: 5.0 heater: heater_bed heater_temp: 60 fan_speed: 1.0 [heater_fan nevermore_fan] # nevermore fan in fan3 connector pin: PB2 max_power: 1.0 shutdown_speed: 0.0 kick_start_time: 5.0 heater: heater_bed heater_temp: 60 fan_speed: 1.0 ##################################################################### # LED Control ##################################################################### #[output_pin caselight ] ## Chamber Lighting - In E1 OUT Position #pin: PC8 #pwm: true #shutdown_value: 0 #cycle_time: 0.01 ##################################################################### # Homing and Gantry Adjustment Routines ##################################################################### [idle_timeout] timeout: 1800 [safe_z_home] ## XY Location of the Z Endstop Switch ## Update -10,-10 to the XY coordinates of your endstop pin ## (such as 157,305) after going through Z Endstop Pin ## Location Definition step. home_xy_position:209,300 speed:100 z_hop:10 [quad_gantry_level] ## Use QUAD_GANTRY_LEVEL to level a gantry. ## Min & Max gantry corners - measure from nozzle at MIN (0,0) and ## MAX (250, 250), (300,300), or (350,350) depending on your printer size ## to respective belt positions #-------------------------------------------------------------------- ## Gantry Corners for 250mm Build ## Uncomment for 250mm build #gantry_corners: # -60,-10 # 310, 320 ## Probe points #points: # 50,25 # 50,175 # 200,175 # 200,25 # Gantry Corners for 300mm Build # Uncomment for 300mm build gantry_corners: -60,-10 360,370 # Probe points points: 50,25 50,225 250,225 250,25 # # Gantry Corners for 350mm Build # # Uncomment for 350mm build # gantry_corners: # -60,-10 # 410,420 # # Probe points # points: # 50,25 # 50,275 # 300,275 # 300,25 #-------------------------------------------------------------------- speed: 200 horizontal_move_z: 10 retries: 5 retry_tolerance: 0.0075 max_adjust: 10 [bed_mesh] speed: 300 horizontal_move_z: 10 ##-------------------------------------------------------------------- ## Uncomment below for 250mm build #mesh_min: 40, 40 #mesh_max: 210,210 # Uncomment for 300mm build mesh_min: 40, 40 mesh_max: 260,260 zero_reference_position: 150,150 # # Uncomment for 350mm build # mesh_min: 40, 40 # mesh_max: 310,310 ##-------------------------------------------------------------------- fade_start: 0.6 fade_end: 10.0 probe_count: 9,9 algorithm: bicubic #relative_reference_index: 40 ##################################################################### # Displays ##################################################################### #-------------------------------------------------------------------- [display] # mini12864 LCD Display lcd_type: uc1701 cs_pin: PC11 a0_pin: PD2 rst_pin: PC10 encoder_pins: ^PC6,^PC7 click_pin: ^!PA8 contrast: 63 #spi_bus: spi1 spi_software_mosi_pin: PA7 spi_software_miso_pin: PA6 spi_software_sclk_pin: PA5 [neopixel fysetc_mini12864] # To control Neopixel RGB in mini12864 display pin: PC12 chain_count: 3 initial_RED: 0.1 initial_GREEN: 0.5 initial_BLUE: 0.0 color_order: RGB # Set RGB values on boot up for each Neopixel. # Index 1 = display, Index 2 and 3 = Knob [delayed_gcode setdisplayneopixel] initial_duration: 1 gcode: SET_LED LED=fysetc_mini12864 RED=1 GREEN=1 BLUE=1 INDEX=1 TRANSMIT=0 SET_LED LED=fysetc_mini12864 RED=1 GREEN=0 BLUE=0 INDEX=2 TRANSMIT=0 SET_LED LED=fysetc_mini12864 RED=1 GREEN=0 BLUE=0 INDEX=3 #-------------------------------------------------------------------- ##################################################################### # Macros ##################################################################### [gcode_macro CENTER] gcode: G0 X150 Y150 Z30 F3600 [gcode_macro G32] gcode: SAVE_GCODE_STATE NAME=STATE_G32 G90 G28 QUAD_GANTRY_LEVEL G28 ## Uncomment for for your size printer: #-------------------------------------------------------------------- ## Uncomment for 250mm build #G0 X125 Y125 Z30 F3600 ## Uncomment for 300 build G0 X150 Y150 Z30 F3600 ## Uncomment for 350mm build # G0 X175 Y175 Z30 F3600 #-------------------------------------------------------------------- RESTORE_GCODE_STATE NAME=STATE_G32 [gcode_macro PRINT_START] # Use PRINT_START for the slicer starting script - please customise for your slicer of choice gcode: # This part fetches data from your slicer. Such as bed, extruder, and chamber temps and size of your printer. {% set target_bed = params.BED|int %} {% set target_extruder = params.EXTRUDER|int %} {% set target_chamber = params.CHAMBER|default("45")|int %} {% set x_wait = printer.toolhead.axis_maximum.x|float / 2 %} {% set y_wait = printer.toolhead.axis_maximum.y|float / 2 %} ## Uncomment for Beacon Contact (1 of 4 for beacon contact) #SET_GCODE_OFFSET Z=0 # Set offset to 0 # Home the printer, set absolute positioning and update the Stealthburner LEDs. STATUS_HOMING # Set LEDs to homing-mode G28 # Full home (XYZ) G90 # Absolute position ## Uncomment for bed mesh (1 of 2 for bed mesh) #BED_MESH_CLEAR # Clear old saved bed mesh (if any) # Check if the bed temp is higher than 90c - if so then trigger a heatsoak. #{% if params.BED|int > 90 %} #SET_DISPLAY_TEXT MSG="Bed: {target_bed}c" # Display info on display #STATUS_HEATING # Set LEDs to heating-mode #M106 S255 # Turn on the PT-fan ## Uncomment if you have a Nevermore. #SET_PIN PIN=nevermore VALUE=1 # Turn on the nevermore #G1 X{x_wait} Y{y_wait} Z15 F9000 # Go to center of the bed #M190 S{target_bed} # Set the target temp for the bed #SET_DISPLAY_TEXT MSG="Heatsoak: {target_chamber}c" # Display info on display #TEMPERATURE_WAIT SENSOR="temperature_sensor chamber" MINIMUM={target_chamber} # Waits for chamber temp # If the bed temp is not over 90c, then skip the heatsoak and just heat up to set temp with a 5 min soak #{% else %} #SET_DISPLAY_TEXT MSG="Bed: {target_bed}c" # Display info on display #STATUS_HEATING # Set LEDs to heating-mode #G1 X{x_wait} Y{y_wait} Z15 F9000 # Go to center of the bed #M190 S{target_bed} # Set the target temp for the bed #SET_DISPLAY_TEXT MSG="Soak for 5 min" # Display info on display #G4 P300000 # Wait 5 min for the bedtemp to stabilize #{% endif %} # Heat hotend to 150c. This helps with getting a correct Z-home. SET_DISPLAY_TEXT MSG="Hotend: 150c" # Display info on display M109 S150 # Heat hotend to 150c ## Uncomment for Beacon contact (2 of 4 for beacon contact) #G28 Z METHOD=CONTACT CALIBRATE=1 # Calibrate z offset and beacon model ## Uncomment for Trident (Z_TILT_ADJUST) #SET_DISPLAY_TEXT MSG="Leveling" # Display info on display #STATUS_LEVELING # Set LEDs to leveling-mode #Z_TILT_ADJUST # Level the printer via Z_TILT_ADJUST #G28 Z # Home Z again after Z_TILT_ADJUST ## Uncomment for V2.4 (Quad gantry level AKA QGL) SET_DISPLAY_TEXT MSG="Bed: {target_bed}c" M140 S{target_bed} SET_DISPLAY_TEXT MSG="Leveling" # Display info on display STATUS_LEVELING # Set LEDs to leveling-mode QUAD_GANTRY_LEVEL # Level the printer via QGL G28 Z # Home Z again after QGL ## Uncomment for bed mesh (2 of 2 for bed mesh) #SET_DISPLAY_TEXT MSG="Bed mesh" # Display info on display #STATUS_MESHING # Set LEDs to bed mesh-mode #BED_MESH_CALIBRATE # Start the bed mesh (add ADAPTIVE=1) for adaptive bed mesh ## Uncomment for Beacon Contact (3 of 4 for beacon contact) #G28 Z METHOD=CONTACT CALIBRATE=0 # Calibrate z offset only with hot nozzle # Heat up the hotend up to target via data from slicer SET_DISPLAY_TEXT MSG="Hotend: {target_extruder}c" # Display info on display STATUS_HEATING # Set LEDs to heating-mode G1 X{x_wait} Y{y_wait} Z15 F9000 # Go to center of the bed M107 # Turn off partcooling fan M109 S{target_extruder} # Heat the hotend to set temp ## Uncomment for Beacon Contact (4 of 4 for beacon contact) #SET_GCODE_OFFSET Z=0.06 # Add a little offset for hotend thermal expansion # Get ready to print by doing a primeline and updating the LEDs SET_DISPLAY_TEXT MSG="Printer goes brr" # Display info on display STATUS_PRINTING # Set LEDs to printing-mode G0 X{x_wait - 50} Y4 F10000 # Go to starting point G0 Z0.4 # Raise Z to 0.4 G91 # Incremental positioning G1 X100 E20 F1000 # Primeline G90 # Absolute position [gcode_macro PRINT_END] # Use PRINT_END for the slicer ending script - please customise for your slicer of choice gcode: M400 ; wait for buffer to clear G92 E0 ; zero the extruder G1 E-5 F1800 ; retract filament G91 ; relative positioning G0 Z1.00 X20.0 Y20.0 F20000 ; move nozzle to remove stringing TURN_OFF_HEATERS M107 ; turn off fan G1 Z2 F3000 ; move nozzle up 2mm G90 ; absolute positioning G0 X125 Y250 F3600 ; park nozzle at rear BED_MESH_CLEAR end_tones ###################################################################### # Beeper ###################################################################### # M300 : Play tone. Beeper support, as commonly found on usual LCD # displays (i.e. RepRapDiscount 2004 Smart Controller, RepRapDiscount # 12864 Full Graphic). This defines a custom I/O pin and a custom # GCODE macro. Usage: # M300 [P] [S] # P is the tone duration, S the tone frequency. # The frequency won't be pitch perfect. [output_pin BEEPER_pin] pin: PC9 # Beeper pin. This parameter must be provided. # ar37 is the default RAMPS/MKS pin. pwm: True # A piezo beeper needs a PWM signal, a DC buzzer doesn't. value: 0 # Silent at power on, set to 1 if active low. shutdown_value: 0 # Disable at emergency shutdown (no PWM would be available anyway). cycle_time: 0.001 # Default PWM frequency : 0.001 = 1ms will give a tone of 1kHz # Although not pitch perfect. [gcode_macro M300] gcode: # Use a default 1kHz tone if S is omitted. {% set S = params.S|default(1000)|int %} # Use a 10ms duration is P is omitted. {% set P = params.P|default(100)|int %} SET_PIN PIN=BEEPER_pin VALUE=0.5 CYCLE_TIME={ 1.0/S if S > 0 else 1 } G4 P{P} SET_PIN PIN=BEEPER_pin VALUE=0 [gcode_macro start_tones] gcode: M300 S1000 P500 ; chirp to indicate starting to print [gcode_macro end_tones] gcode: M300 S440 P200 ; Make Print Completed Tones M300 S660 P250 M300 S880 P300 [gcode_macro error_tones] gcode: M300 S700 P1500 ; Make Print Completed Tones M300 S700 P500 ; Make Print Completed Tones M300 S700 P500 ; Make Print Completed Tones M300 S700 P500 ; Make Print Completed Tones M300 S700 P500 ; Make Print Completed Tones M300 S700 P500 ; Make Print Completed Tones M300 S700 P500 ; Make Print Completed Tones M300 S700 P500 ; Make Print Completed Tones [include fluidd.cfg] [include leds.cfg] [include tones.cfg] [exclude_object] [virtual_sdcard] path: /home/pi/printer_data/gcodes ## Common Temperature Sensors ## "EPCOS 100K B57560G104F" ## "ATC Semitec 104GT-2" ## "NTC 100K beta 3950" ## "Honeywell 100K 135-104LAG-J01" ## "NTC 100K MGB18-104F39050L32" (Keenovo Heater Pad) ## "AD595" ## "PT100 INA826" ## "PT1000" #*# <---------------------- SAVE_CONFIG ----------------------> #*# DO NOT EDIT THIS BLOCK OR BELOW. The contents are auto-generated. #*# #*# [extruder] #*# control = pid #*# pid_kp = 26.862 #*# pid_ki = 1.926 #*# pid_kd = 93.682 #*# #*# [stepper_z] #*# position_endstop = 1.640 #*# #*# [bed_mesh default] #*# version = 1 #*# points = #*# 0.043750, 0.087500, 0.108750, 0.118750, 0.105000, 0.092500, 0.078750, 0.063750, 0.041250 #*# 0.012500, 0.053750, 0.076250, 0.085000, 0.066250, 0.052500, 0.043750, 0.025000, 0.005000 #*# -0.015000, 0.027500, 0.046250, 0.048750, 0.035000, 0.017500, 0.003750, -0.016250, -0.037500 #*# -0.021250, 0.020000, 0.037500, 0.041250, 0.021250, 0.006250, -0.006250, -0.027500, -0.048750 #*# -0.037500, -0.003750, 0.012500, 0.016250, 0.000000, -0.020000, -0.032500, -0.042500, -0.060000 #*# -0.036250, -0.003750, 0.012500, 0.013750, -0.007500, -0.025000, -0.033750, -0.047500, -0.067500 #*# -0.031250, -0.001250, 0.013750, 0.018750, 0.003750, -0.011250, -0.023750, -0.035000, -0.051250 #*# -0.016250, 0.020000, 0.031250, 0.035000, 0.021250, 0.006250, -0.003750, -0.015000, -0.030000 #*# 0.006250, 0.035000, 0.048750, 0.051250, 0.037500, 0.027500, 0.018750, 0.008750, -0.007500 #*# tension = 0.2 #*# min_x = 40.0 #*# algo = bicubic #*# y_count = 9 #*# mesh_y_pps = 2 #*# min_y = 40.0 #*# x_count = 9 #*# max_y = 260.0 #*# mesh_x_pps = 2 #*# max_x = 260.0 #*# #*# [probe] #*# z_offset = -0.010