Installing BDsensor
Connect the sensor cable to the mainboard or CAN bus toolhead board.
- Note: SB2040 cannot use BDsensor.
- Note: For SHT36, connect the BD sensor's CLK/SCL (Input) to the high-voltage input port and attach the jumper.
- The BDsensor's CKL and SDA wires can be connected to any GPIO pins on the board. You can also directly connect the BD sensor cable to the Bltouch port, for example:
BLtouch | BDsensor
5V --> 5V
GND --> GND
S --> CLK/SCL (Input)
GND --> GND
Zmin --> SDA (Input/Output)
-
Some pins in the mainboard connectors may not be directly connected to the MCU's GPIOs (e.g., they might have filtering capacitors or be isolated via MOSFETs, diodes, or optocouplers, but they can be used if isolated via resistors or pull-up/down resistors). Therefore, they cannot be used with BDsensor, and the firmware will report a connection error. For example:
-
Fan and heater connectors are isolated via MOSFETs.
-
Connectors for temperature thermistors and endstops/probes on some boards are typically connected to GND through filtering capacitors.
-
Install the BD sensor near the hotend as shown in the image below. STL of mount, STL_mount_VzBot_Goliath short
Loading...
Apply the patch to the Marlin firmware
The BD sensor is integrated into Marlin 2.1.x (since 2022.8.27).
You can download the release version. However, it is now recommended to download the latest bug-fix version: https://github.com/MarlinFirmware/Marlin
You need to modify the configuration files and pin files.
Edit Configuration.h
-
Enable BD_SENSOR
Uncomment:
#define BD_SENSOR
#define Z_SAFE_HOMING
#define BD_SENSOR_PROBE_NO_STOP // Add this new line for fast bed leveling without nozzle stop.Only
BD_SENSOR_PROBE_NO_STOPis new.Latest Marlin bug-fix: https://github.com/MarlinFirmware/Marlin
Description: https://github.com/MarlinFirmware/Marlin/pull/25847
-
Use the probe for homing
Ensure
Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PINis disabled, andUSE_PROBE_FOR_Z_HOMINGshould be enabled as follows://#define Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN
// Force the use of the probe for Z-axis homing
#define USE_PROBE_FOR_Z_HOMING -
Slow down the second homing Z speed
#define Z_PROBE_FEEDRATE_SLOW (Z_PROBE_FEEDRATE_FAST / 16)Here, we must slow down the bump homing speed and Z homing speed because the endstop reading from the BDsensor process is not as real-time as a normal endstop.
Edit Configuration_adv.h
Enable #define BABYSTEPPING for real-time leveling functionality.
#define HOMING_BUMP_DIVISOR { 2, 2, 8 } // Re-Bump Speed Divisor (Divides the Homing Feedrate)
Edit pins_boardname.h
Configure the pins for BDsensor's SDA and SCL in the pin file pins_boardname.h (e.g., pins_PANDA_PI_V29.h) by adding the following 3 lines:
#define I2C_BD_SDA_PIN PC6 // Please change to the actual number which the SDA wire is connected to your mainboard
#define I2C_BD_SCL_PIN PB2 // Please change to the actual number which the SLK wire is connected to your mainboard
#define I2C_BD_DELAY 20 // default value is 20, should be in the range [20,50].
If you want to perform automatic bed leveling probing (G29) like a normal BLtouch before printing, uncomment:
#define AUTO_BED_LEVELING_BILINEAR
And edit the values as shown below:
#define Z_CLEARANCE_DEPLOY_PROBE 0 // Z Clearance for Deploy/Stow
#define Z_CLEARANCE_BETWEEN_PROBES 1 // Z Clearance between probe points
#define Z_CLEARANCE_MULTI_PROBE 1 // Z Clearance between multiple probes
Display BD sensor values on the LCD screen
- For printers with a status display (supporting G-code M117), such as LCD12864 or some UART screens like Ender3V2...
Calibration
-
Clean the nozzle, then move the Z-axis via the console until the nozzle just touches the bed (the BDsensor will use this position as the zero point, so no Z-offset is needed; set the value to 0).
-
Send the G-code command
M102 S-6. The printer will slowly move the Z-axis up by 0.1mm each time until it reaches 4mm. Do not run M102 S-6 before installing the sensor, and do not power off the printer during calibration, or the old calibration data will be deleted. If this happens, simply calibrate again. -
You can send
M102 S-5to check if the BD sensor has been successfully calibrated. This will return the raw calibration data stored in the BD sensor.
There is also a calibration tool for this: https://github.com/markniu/Bed_Distance_sensor/raw/new/marlin/BD_Config_Tool_Marlin.zip 
Note: A data value of 1015 or >1010 indicates the sensor is out of range. If the first 5 points (0~0.5mm) or more values are within the range of 0 to 1000, and the increasing delta is >=10, it indicates successful calibration, as shown in the chart above.
If the first raw calibration data returned by M102 S-5 is greater than 400, it means the sensor is installed too high and needs to be repositioned closer to the bed. Also, ensure the second data value is at least 10 greater than the first.
Testing and Printing
Menu Bed Level
Auto Bed Level
There are two methods for automatic bed leveling:
1. Use M102 for real-time leveling on the first few layers
We can easily enable or disable this auto-leveling by sending G-code commands or adding G-code to the G-code file.
To enable bed leveling in Klipper, add the M28 G-code right below the G102 (home all axes) G-code in the "Start G-code" section of the printer machine settings. For example, M102 S2 below G28 means it will only perform bed leveling when the Z-axis height is below 0.2mm.
Sending M102 S0 or G28 will disable bed leveling using the BD sensor. By the way, it is disabled by default. M18
M102 S-1 // Read sensor information, and we can use this for connection checking.
M102 S-2 // Read current distance value
M102 S-5 // Read raw Calibration data
M102 S-6 // Start Calibration; before that, make sure the nozzle is just touching the bed, and then the printer restarted. Do not home the Z-axis before this.
M102 S4 // Set the adjustable Z height value, e.g., M102 S4 means it will adjust while the Z height <=0.4mm. Disable it with M102 S0.
2. G29 automatic bed leveling
Another method for automatic bed leveling is like BLtouch's G29; just add a line G28 below G29.
Chris's Basement installation video
Check Z endstop with M119
Do not home Z before checking this step, or the nozzle may crash into the print bed.
This is the return message after sending the M119 command (report endstop status).
Send: M119
Recv: x:open y:open z:open
If Z min is not open, check your configuration. #define Z_MAX_ENDSTOP_HIT_STATE HIGH
- Ensure the Z motor is off/unlocked.
- Manually move the Z-axis down until the nozzle touches the bed.
- Send
M102 S-2; the return value should be 0.00mm. Then send M119 again, and you will see the Z endstop is now triggered.
Send: M119
Recv: x:open y:open z:TRIGGERED
Check connection
Check the connection via M102 S-1. Here is an example of the return message. Please check if the connection and wire order return blank or other strings.
Send: M102 S-1
Recv: V1.0 pandapi3d.com