https://www.pandapi3d.com/bdwidth
bdwidth sensor is an optical width(diameter) and motion sensor for 3D filament.
Before installing you can just power it by usb, then you can measure the filament motion / diameter.
Flow rate adjust: adjust the flow rate in real time
Jam/Runout sensor: Pause the printer while jam or runout (laser optical tracking chip)
Width Accuracy: +/- 0.01mm (high resolution 0.005mm CCD sensor chip)
Connection: USB or I2C, Low power 5V*49mA = 0.245W
No calibration required
firmware update from the usb (Only needs updating when we release a new bdwidth.hex)
No mechanical contact with the filament, no wear due to the use of optical components
Plug the bdwidth sensor into the USB port or I2C port(it can be any two gpios) on the 3D printer mainboard
cd ~
git clone https://github.com/markniu/bdwidth.git
chmod 777 ~/bdwidth/klipper/install.sh
~/bdwidth/klipper/install.sh
add the following section into your klipper config file,
here we connect the bdwidth to the usb port
[bdwidth]
port:usb
# usb or i2c
#i2c_software_scl_pin:PA8
#i2c_software_sda_pin:PA14
# needed if the port is i2c
serial:/dev/serial/by-id/usb-1a86_USB_Serial-if00-port0
# needed if the port is usb
default_nominal_filament_diameter: 1.75 # (mm)
enable: all
# disable or enable the sensor after power on.
# the value should be one of width/motion/all/disable
# width(only enable the width function)
# motion(only enable the motion function)
# all(enable both the width and motion)
# disable(disable both the width and motion)
min_diameter: 1.0
# Minimal allowed diameter for flow rate adjust and runout.
max_diameter: 2.0
# Maximum allowed diameter for flow rate adjust and runout.
# The default is default_nominal_filament_diameter + max_difference.
extruder:extruder
runout_delay_length : 8.0
# (mm) increase this value if the print speed is high or with high flowrate
# else it may trigger the pause
flowrate_adjust_length : 5 # (mm)
pause_on_runout: True
sample_time:2
# in seconds
sensor_to_nozzle_length: 750
# The distance from sensor to the melting chamber/hot-end in
# millimeters (mm). The filament between the sensor and the hot-end
# will be treated as the default_nominal_filament_diameter. Host
# module works with FIFO logic. It keeps each sensor value and
# position in an array and POP them back in correct position. This
# parameter must be provided.
# how to measure:https://github.com/markniu/bdwidth/blob/main/doc/lengthToNozzle.jpg
logging: True
# Out diameter to terminal and klipper.log can be turn on|of by
# command.
after that, the klipper can work with the sensor now.
This is for people who want to understand or do more software development.
Port setting
you need to set the usb serial port baudrate to 500000 if you use the usb port, or set I2C address to 0x03 if you use the i2c port.
Get data from bdwidth
send byte 0A
to the sensor via the usb or i2c port;
then the sensor will return the measured data in 5 bytes:
1st and 2nd bytes are used for the width;
3rd and 4th bytes are used for the motion;
byte 5th is line feed 0A
for example:
50 01 78 00 0A
50 01
= 0x015078 00
= 0x0078