Ender 3 S1 Pro bed mesh working not well

Ender 3 S1 Pro
Raspberri Pi 5 running Klipper
Custom BL Touch extension: https://cults3d.com/en/3d-model/tool/ender-3-s1-pro-4020-fan-cr-touch-no-y-offset

Hi everyone.
I tried to run an auto bed mesh leveling on my ender, after adjust the screews, with the native tool, without any goals. The mesh seams to be a little warp, and if I try to print a bed leveling test for the whole bed space, it look in some parts to high and other parts too low.
Any help to reach a good bed mesh?
I was thinking about to buying a glass bed, in order to have a perfect flat bed, or to change manual the mesh.

Here my printer.cfg:

# This file contains pin mappings for the stock 2021 Creality Ender 3
# S1 & S1 Pro. To use this config, check the STM32 Chip on the
# Mainboard, during "make menuconfig" select accordingly either the
# STM32F103 with "28KiB bootloader" or the STM32F401 with
# "64KiB bootloader" and serial (on USART1 PA10/PA9) for both.

# For a direct serial connection, in "make menuconfig" select
# "Enable extra low-level configuration options" and  Serial
# (on USART2 PA3/PA2), which is on the 10 pin IDC cable used
# for the LCD module as follows: 3: Tx, 4: Rx, 9: GND, 10: VCC

# Flash this firmware by copying "out/klipper.bin" to a SD card and
# turning on the printer with the card inserted. The filename
# must be changed to "firmware.bin"

# With STM32F401, you might need to put "firmware.bin" in a
# folder on the SD card called "STM32F4_UPDATE" in order to flash.

# See docs/Config_Reference.md for a description of parameters.

[include mainsail.cfg]

[include KAMP_Settings.cfg]

[exclude_object]

[stepper_x]
step_pin: PC2
dir_pin: PB9
enable_pin: !PC3
microsteps: 16
rotation_distance: 40
endstop_pin: !PA5
position_endstop: -10
position_max: 248
position_min: -15
homing_speed: 50

[stepper_y]
step_pin: PB8
dir_pin: PB7
enable_pin: !PC3
microsteps: 16
rotation_distance: 40
endstop_pin: !PA6
position_endstop: -8
position_max: 237
position_min: -13
homing_speed: 50

[stepper_z]
step_pin: PB6
dir_pin: !PB5
enable_pin: !PC3
microsteps: 16
rotation_distance: 8
endstop_pin: probe:z_virtual_endstop
position_max: 270
position_min: -6

[extruder]
step_pin: PB4
dir_pin: PB3
enable_pin: !PC3
microsteps: 16
gear_ratio: 42:12
rotation_distance: 26.359
nozzle_diameter: 0.400
filament_diameter: 1.750
heater_pin: PA1
sensor_type: EPCOS 100K B57560G104F
sensor_pin: PC5
control: pid
pid_Kp: 23.561
pid_Ki: 1.208
pid_Kd: 114.859
min_temp: 0
max_temp: 300 # Set to 300 for S1 Pro

[heater_bed]
heater_pin: PA7
sensor_type: EPCOS 100K B57560G104F
sensor_pin: PC4
control: pid
pid_Kp: 71.867
pid_Ki: 1.536
pid_Kd: 840.843
min_temp: 0
max_temp: 110 # Set to 110 for S1 Pro

[heater_fan hotend_fan]
pin: PC0

[fan]
pin: PA0

[mcu]
serial: /dev/serial/by-id/usb-1a86_USB_Serial-if00-port0
restart_method: command

[printer]
kinematics: cartesian
max_velocity: 300
max_accel: 2000
max_z_velocity: 5
max_z_accel: 100

[bltouch]
sensor_pin: ^PC14
control_pin: PC13
x_offset: -48
y_offset: 0
#z_offset: 0
samples: 2
speed: 2
probe_with_touch_mode: true
stow_on_each_sample: false

[safe_z_home]
home_xy_position: 158, 110
speed: 75
z_hop: 10
z_hop_speed: 5

[bed_mesh]
speed: 120
horizontal_move_z: 5
mesh_min: 0, 0
mesh_max: 200, 222
probe_count: 5,5
mesh_pps: 2,2
fade_start: 1
fade_end: 2
fade_target: 0
algorithm: bicubic

[filament_switch_sensor e0_sensor]
switch_pin: !PC15
pause_on_runout: true
runout_gcode: PAUSE

[pause_resume]
recover_velocity: 25

[bed_screws]
screw1: 73, 30
screw2: 248, 30
screw3: 248, 201
screw4: 73, 201

[screws_tilt_adjust]
screw1: 73, 30     #screw coordinates need to be measure for YOUR specific printer
screw1_name: front left screw
screw2: 248, 30
screw2_name: front right screw
screw3: 248, 201
screw3_name: rear right screw
screw4: 73, 201
screw4_name: rear left screw
horizontal_move_z: 10
speed: 250   #speed of travel moves between screws
screw_thread: CW-M4  #measure your bed screw m3=3mm / m4=4mm / m5=5mm

[virtual_sdcard]
path: ~/printer_data/gcodes

[display_status]

[pause_resume]

[gcode_macro START_PRINT]
gcode:
  G92 E0 #reset Extruder
  G28 #home all axes
  BED_MESH_PROFILE LOAD=final #load bed mesh
  G1 Z2.0 F3000 #move Z axis up little to prevent scratching on bed
  G1 X0.1 Y20 Z0.3 F5000.0 #move to start position
  G1 X0.1 Y200.0 Z0.3 F1500.0 E15 #draw the first line
  G1 X0.1 Y200.0 Z0.3 F5000.0 #move to side a little
  G1 X0.4 Y20 Z0.3 F1500.0 E30 #draw the second line
  G92 E0 #reset Extruder
  G1 Z2.0 F3000 #move Z axis up little to prevent scratching on bed
  G1 X5 Y20 Z0.3 F5000.0 #move over to prevent blob squish
    
[gcode_macro END_PRINT]
gcode:
  M140 S0 # Turn off bed, extruder, and fan
  M104 S0
  M106 S0    
  G91 # Move nozzle away from print while retracting
  G1 X-2 Y-2 E-3 F300
  G1 Z10 F3000 # Raise nozzle by 10mm
  G90    
  M84 # Disable steppers
    
[gcode_macro PAUSE]
description: Pause the actual running print
rename_existing: PAUSE_BASE
# change this if you need more or less extrusion
variable_extrude: 1.0
gcode:
  ##### read E from pause macro #####
  {% set E = printer["gcode_macro PAUSE"].extrude|float %}
  ##### set park positon for x and y #####
  # default is your max posion from your printer.cfg
  {% set x_park = printer.toolhead.axis_maximum.x|float - 5.0 %}
  {% set y_park = printer.toolhead.axis_maximum.y|float - 5.0 %}
  ##### calculate save lift position #####
  {% set max_z = printer.toolhead.axis_maximum.z|float %}
  {% set act_z = printer.toolhead.position.z|float %}
  {% if act_z < (max_z - 2.0) %}
      {% set z_safe = 2.0 %}
  {% else %}
      {% set z_safe = max_z - act_z %}
  {% endif %}
  ##### end of definitions #####
  PAUSE_BASE
  G91
  {% if printer.extruder.can_extrude|lower == 'true' %}
    G1 E-{E} F2100
  {% else %}
    {action_respond_info("Extruder not hot enough")}
  {% endif %}
  {% if "xyz" in printer.toolhead.homed_axes %}
    G1 Z{z_safe} F900
    G90
    G1 X{x_park} Y{y_park} F6000
  {% else %}
    {action_respond_info("Printer not homed")}
  {% endif %} 

[gcode_macro RESUME]
description: Resume the actual running print
rename_existing: RESUME_BASE
gcode:
  ##### read E from pause macro #####
  {% set E = printer["gcode_macro PAUSE"].extrude|float %}
  #### get VELOCITY parameter if specified ####
  {% if 'VELOCITY' in params|upper %}
    {% set get_params = ('VELOCITY=' + params.VELOCITY)  %}
  {%else %}
    {% set get_params = "" %}
  {% endif %}
  ##### end of definitions #####
  {% if printer.extruder.can_extrude|lower == 'true' %}
    G91
    G1 E{E} F2100
  {% else %}
    {action_respond_info("Extruder not hot enough")}
  {% endif %}  
  RESUME_BASE {get_params}

[gcode_macro CANCEL_PRINT]
description: Cancel the actual running print
rename_existing: CANCEL_PRINT_BASE
gcode:
  TURN_OFF_HEATERS
  CANCEL_PRINT_BASE

#*# <---------------------- SAVE_CONFIG ---------------------->
#*# DO NOT EDIT THIS BLOCK OR BELOW. The contents are auto-generated.
#*#
#*# [bed_mesh Test 1]
#*# version = 1
#*# points =
#*# 	0.247500, 0.095000, 0.055000, 0.147500
#*# 	0.055000, -0.075000, -0.132500, -0.027500
#*# 	0.082500, -0.040000, -0.080000, -0.002500
#*# 	0.230000, 0.055000, 0.070000, 0.140000
#*# x_count = 4
#*# y_count = 4
#*# mesh_x_pps = 2
#*# mesh_y_pps = 2
#*# algo = bicubic
#*# tension = 0.2
#*# min_x = 9.999999999999996
#*# max_x = 199.98999999999998
#*# min_y = 10.0
#*# max_y = 193.99
#*#
#*# [bltouch]
#*# z_offset = 3.794
#*#
#*# [bed_mesh final]
#*# version = 1
#*# points =
#*# 	0.202500, 0.181250, 0.113750, 0.068750, -0.016250, 0.051250, 0.003750, 0.033750, 0.076250, 0.137500
#*# 	0.285000, 0.257500, 0.195000, 0.165000, 0.121250, 0.146250, 0.115000, 0.097500, 0.141250, 0.196250
#*# 	0.103750, 0.031250, -0.048750, -0.077500, -0.122500, -0.112500, -0.142500, -0.142500, -0.100000, 0.002500
#*# 	0.122500, 0.075000, 0.037500, -0.070000, -0.110000, -0.113750, -0.141250, -0.150000, -0.123750, -0.060000
#*# 	0.198750, 0.158750, 0.127500, 0.007500, -0.052500, -0.027500, -0.067500, -0.056250, 0.022500, 0.066250
#*# 	0.148750, 0.150000, 0.095000, 0.001250, -0.063750, -0.066250, -0.081250, -0.083750, -0.061250, 0.021250
#*# 	0.148750, 0.100000, 0.026250, -0.041250, -0.076250, -0.065000, -0.078750, -0.081250, -0.053750, 0.022500
#*# 	0.157500, 0.148750, 0.058750, 0.032500, 0.021250, 0.108750, 0.086250, 0.042500, 0.117500, 0.127500
#*# 	0.208750, 0.151250, 0.107500, 0.060000, 0.051250, 0.108750, 0.093750, 0.112500, 0.153750, 0.183750
#*# 	0.262500, 0.218750, 0.190000, 0.118750, 0.101250, 0.162500, 0.153750, 0.170000, 0.196250, 0.232500
#*# x_count = 10
#*# y_count = 10
#*# mesh_x_pps = 2
#*# mesh_y_pps = 2
#*# algo = bicubic
#*# tension = 0.2
#*# min_x = 0.0
#*# max_x = 171.99
#*# min_y = 0.0
#*# max_y = 219.96
#*#
#*# [bed_mesh default]
#*# version = 1
#*# points =
#*# 	  -0.046250, -0.053750, -0.030000
#*# 	  0.025000, 0.005000, 0.032500
#*# 	  0.056250, 0.032500, 0.068750
#*# x_count = 3
#*# y_count = 3
#*# mesh_x_pps = 2
#*# mesh_y_pps = 2
#*# algo = lagrange
#*# tension = 0.2
#*# min_x = 79.9
#*# max_x = 140.07
#*# min_y = 65.4
#*# max_y = 155.57

P.S. Sorry for my english

Waiting for my printer to finish, so I’ll upload the mesh visualizer.

Hello @Ghost !

And don’t forget to add the klippy.log to your next post.

Bed Mesh

Klippy.log
klippy.log (7.4 MB)

I just remove some part, because the file was 10MB so too large. Hope it doesn’t make bad

Another point, with this config, I create a bed mesh every time I print, so klipper calculate the size of the object and create a tempory mesh.

If a file is too big, then zip it as it was advised in the template. But never delete something.from the log.

klippy.zip (803.8 KB)