### Notice ##### First of all:make sure you are using klipper based on python3.6 or above Using this module requires a certain level of knowledge and experience with Klipper. Ensure that you have the ability to configure and modify it before installation. To maintain accuracy, install the sensor coil board with its top surface as low as possible below the bottom surface of the heater block. ## Important Instructions - Follow the tutorial strictly, especially regarding commands like G28. Only perform the mentioned steps. - Execute the following git command in the user directory to download the accompanying script: ```bash git clone https://gitee.com/NBTP/IDM.git ``` - Run `chmod +x IDM/install.sh` after downloading. - If unsure about your pip source or unaware of what pip is, set pip to Tsinghua source using: ```bash ~/klippy-env/bin/pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple ``` Then install with: ```bash IDM/install.sh ``` ### Configuration Example for printer.cfg ```ini [idm] serial: #canbus_uuid: # Path to the serial port for the idm device. Typically has the form # /dev/serial/by-id/usb-idm_idm_... speed: 40. # Z probing dive speed. lift_speed: 5. # Z probing lift speed. backlash_comp: 0.5 # Backlash compensation distance for removing Z backlash before measuring # the sensor response. x_offset: 0. # X offset of idm from the nozzle. y_offset: 21.1 # Y offset of idm from the nozzle. trigger_distance: 2. # idm trigger distance for homing. trigger_dive_threshold: 1.5 # Threshold for range vs dive mode probing. Beyond `trigger_distance + # trigger_dive_threshold` a dive will be used. trigger_hysteresis: 0.006 # Hysteresis on trigger threshold for untriggering, as a percentage of the # trigger threshold. cal_nozzle_z: 0.1 # Expected nozzle offset after completing manual Z offset calibration. cal_floor: 0.1 # Minimum z bound on sensor response measurement. cal_ceil:5. # Maximum z bound on sensor response measurement. cal_speed: 1.0 # Speed while measuring response curve. cal_move_speed: 10. # Speed while moving to position for response curve measurement. default_model_name: default # Name of the default idm model to load. mesh_main_direction: x # Primary travel direction during mesh measurement. #mesh_overscan: -1 # Distance to use for direction changes at mesh line ends. Omit this setting # and a default will be calculated from line spacing and available travel. mesh_cluster_size: 1 # Radius of mesh grid point clusters. mesh_runs: 1 # Number of passes to make during mesh scan. ``` Adjust the x and y direction offsets in the configuration. Ensure that during calibration, the nozzle moves the coils to the original xy position of the nozzle. Add this configuration to printer.cfg and modify serial to your IDM's serial number. To find the IDM serial, use the command: ```bash ls /dev/serial/by-id/* ``` ### For CAN Version Replace serial with canbus_uuid. Use the following command to search for the CAN UUID and fill it in: ```bash ~/klippy-env/bin/python ~/klipper/lib/canboot/flash_can.py -q ``` Note: After adding the UUID, remove serial. ------------------------------------------------- Include the following in the configuration (optional but recommended): ```ini [force_move] enable_force_move: true ``` ### Remove the [probe] Module Remove the [probe] module from your configuration. If you've used Klicky, remove references to its scripts. Modify z limit (after stepper_z's endstop_pin:) to probe:z_virtual_endstop. Also, set: ```ini [safe_z_home] home_xy_position: , z_hop: 10 ``` If you've configured safe_z_home or homing_override, you can skip this step. #### Don't forget to set up [bed_mesh] to avoid errors. Omit the zero_reference_position in bed_mesh. After restarting, home x and y (g28 x y, don't home z), and move the nozzle to the center of the bed. Then enter SET_KINEMATIC_POSITION z=80. Now, you can control the z-axis movement and bring the nozzle close to the bed (or place an A4 paper for the right gap). Enter SET_KINEMATIC_POSITION z=0 (note that it's different from the previous command). Execute idm_calibrate. In the offset control box, click -0.1 for offset and confirm. It will automatically calibrate. If, after calibration, you encounter issues like not zeroing after a restart or reporting "no model," there might be a format error in your configuration file's auto-generated configuration. Correct the format. For 4Z machines like VORON2.4, add the following configuration to the file: ```ini [gcode_macro QUAD_GANTRY_LEVEL] rename_existing: _QUAD_GANTRY_LEVEL gcode:     SAVE_GCODE_STATE NAME=STATE_QGL     BED_MESH_CLEAR     {% if not printer.quad_gantry_level.applied %}       _QUAD_GANTRY_LEVEL horizontal_move_z=10 retry_tolerance=1     {% endif %}     _QUAD_GANTRY_LEVEL horizontal_move_z=2     G28 Z     RESTORE_GCODE_STATE NAME=STATE_QGL ``` For 3Z machines like VORON Trident, add the following configuration: ```ini [gcode_macro Z_TILT_ADJUST] rename_existing: _Z_TILT_ADJUST gcode:     SAVE_GCODE_STATE NAME=STATE_Z_TILT     BED_MESH_CLEAR     {% if not printer.z_tilt.applied %}       _Z_TILT_ADJUST horizontal_move_z=10 retry_tolerance=1     {% endif %}     _Z_TILT_ADJUST horizontal_move_z=2     G28 Z     RESTORE_GCODE_STATE NAME=STATE_Z_TILT ``` It's recommended to add the following configuration to the moonraker.conf file for easy script updates: ```ini [update_manager idm] type: git_repo channel: dev path: ~/IDM origin: https://gitee.com/NBTP/IDM.git env: ~/klippy-env/bin/python requirements: requirements.txt install_script: install.sh is_system_service: False managed_services: klipper info_tags:   desc=idm ``` For versions with an accelerometer (lis2dw), add the following to enable it: ```ini [lis2dw] cs_pin: idm:PA3 spi_bus: spi1 [resonance_tester] accel_chip: lis2dw probe_points:     125, 125, 20  #set your prefered calibrating position ``` Configure and use shaper_calibrate for resonance testing. Adjust the z offset before printing. The z offset is saved in the model_offset variable. ### Note Before adjusting the z offset, ensure to disable the bed mesh, complete mechanical leveling, and zero once again. #### We also recommend using [[axis_twist_compesation]](https://www.klipper3d.org/Config_Reference.html?h=axis#axis_twist_compensation) to ensure the effectiveness of the mesh bed compensation