From f6d104b88231b060f48874c65ae4a964e6191ba0 Mon Sep 17 00:00:00 2001 From: mikhail Date: Sun, 16 Mar 2025 03:22:40 +0300 Subject: [PATCH] Init --- .gitignore | 2 + .moonraker.conf.bkp | 116 +++++++ KAMP_Settings.cfg | 36 ++ KlipperScreen.conf | 12 + crowsnest.conf | 60 ++++ firmware/.CAN | 55 +++ firmware/boot_sht36_v2.config | 78 +++++ firmware/boot_sht36_v2.config.old | 43 +++ firmware/octopus-pro.config | 121 +++++++ firmware/rp_sb2209.CAN | 70 ++++ firmware/sht36_v2.CAN | 105 ++++++ firmware/sht36_v2.CAN.old | 55 +++ firmware/update_fw.sh | 51 +++ firmware/update_fw.sh.old | 40 +++ hbb.cfg | 124 +++++++ macros/bed_mesh_calibrate.cfg | 164 +++++++++ macros/calibrate_flow.cfg | 262 ++++++++++++++ macros/homing.cfg | 174 ++++++++++ macros/homing.cfg.old | 174 ++++++++++ macros/main.cfg | 552 ++++++++++++++++++++++++++++++ macros/nozzle_scrub.cfg | 158 +++++++++ macros/stealthburner_leds.cfg | 254 ++++++++++++++ macros/tools.cfg | 91 +++++ mainsail.cfg | 1 + moonraker-obico-update.cfg | 9 + moonraker-obico.cfg | 34 ++ moonraker.conf | 120 +++++++ moonraker_obico_macros.cfg | 1 + nevermore.cfg | 46 +++ octopus_pro_1.1.cfg | 203 +++++++++++ printer.cfg | 229 +++++++++++++ rapido_ace.cfg | 17 + rapido_v2.cfg | 5 + sonar.conf | 17 + telegram.conf | 22 ++ timelapse.cfg | 1 + toolhead_sb.cfg | 161 +++++++++ toolhead_sht36v2.cfg | 104 ++++++ 38 files changed, 3767 insertions(+) create mode 100644 .gitignore create mode 100644 .moonraker.conf.bkp create mode 100644 KAMP_Settings.cfg create mode 100644 KlipperScreen.conf create mode 100644 crowsnest.conf create mode 100644 firmware/.CAN create mode 100644 firmware/boot_sht36_v2.config create mode 100644 firmware/boot_sht36_v2.config.old create mode 100644 firmware/octopus-pro.config create mode 100644 firmware/rp_sb2209.CAN create mode 100644 firmware/sht36_v2.CAN create mode 100644 firmware/sht36_v2.CAN.old create mode 100755 firmware/update_fw.sh create mode 100755 firmware/update_fw.sh.old create mode 100644 hbb.cfg create mode 100644 macros/bed_mesh_calibrate.cfg create mode 100644 macros/calibrate_flow.cfg create mode 100644 macros/homing.cfg create mode 100644 macros/homing.cfg.old create mode 100644 macros/main.cfg create mode 100644 macros/nozzle_scrub.cfg create mode 100644 macros/stealthburner_leds.cfg create mode 100644 macros/tools.cfg create mode 120000 mainsail.cfg create mode 100644 moonraker-obico-update.cfg create mode 100644 moonraker-obico.cfg create mode 100644 moonraker.conf create mode 120000 moonraker_obico_macros.cfg create mode 100644 nevermore.cfg create mode 100644 octopus_pro_1.1.cfg create mode 100644 printer.cfg create mode 100644 rapido_ace.cfg create mode 100644 rapido_v2.cfg create mode 100644 sonar.conf create mode 100644 telegram.conf create mode 120000 timelapse.cfg create mode 100644 toolhead_sb.cfg create mode 100644 toolhead_sht36v2.cfg diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..dc8c85f --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +printer-*.cfg +KAMP diff --git a/.moonraker.conf.bkp b/.moonraker.conf.bkp new file mode 100644 index 0000000..6389b87 --- /dev/null +++ b/.moonraker.conf.bkp @@ -0,0 +1,116 @@ +[server] +host = 0.0.0.0 +port = 7125 +klippy_uds_address = /home/biqu/printer_data/comms/klippy.sock + +[authorization] +trusted_clients = + 10.0.0.0/8 + 127.0.0.0/8 + 169.254.0.0/16 + 172.16.0.0/12 + 192.168.0.0/16 + FE80::/10 + ::1/128 +cors_domains = + *.lan + *.local + *://localhost + *://localhost:* + *://my.mainsail.xyz + *://app.fluidd.xyz + +[octoprint_compat] + +[history] + +[file_manager] +enable_object_processing = True + +[timelapse] +ffmpeg_binary_path = /usr/bin/ffmpeg + +[update_manager] +channel = stable +refresh_interval = 168 + +[power MainPower] +type = klipper_device +object_name = output_pin ps_on +initial_state = on + +[update_manager klipper_tmc_autotune] +type = git_repo +channel = dev +path = ~/klipper_tmc_autotune +origin = https://github.com/andrewmcgr/klipper_tmc_autotune.git +managed_services = klipper +primary_branch = main +install_script = install.sh + +[update_manager timelapse] +type = git_repo +primary_branch = main +path = ~/moonraker-timelapse +origin = https://github.com/mainsail-crew/moonraker-timelapse.git +managed_services = klipper moonraker + +[update_manager mainsail-config] +type = git_repo +primary_branch = master +path = ~/mainsail-config +origin = https://github.com/mainsail-crew/mainsail-config.git +managed_services = klipper + +[update_manager mainsail] +type = web +channel = stable +repo = mainsail-crew/mainsail +path = ~/mainsail + +[update_manager crowsnest] +type = git_repo +path = ~/crowsnest +origin = https://github.com/mainsail-crew/crowsnest.git +managed_services = crowsnest +install_script = tools/pkglist.sh + +[update_manager sonar] +type = git_repo +path = ~/sonar +origin = https://github.com/mainsail-crew/sonar.git +primary_branch = main +managed_services = sonar +install_script = tools/install.sh + +[update_manager katapult] +type = git_repo +origin = https://github.com/Arksine/katapult.git +path = ~/katapult +is_system_service = False + +[update_manager KlipperScreen] +type = git_repo +path = ~/KlipperScreen +origin = https://github.com/KlipperScreen/KlipperScreen.git +virtualenv = ~/.KlipperScreen-env +requirements = scripts/KlipperScreen-requirements.txt +system_dependencies = scripts/system-dependencies.json +managed_services = KlipperScreen + +[update_manager Klipper-Adaptive-Meshing-Purging] +type = git_repo +channel = dev +path = ~/Klipper-Adaptive-Meshing-Purging +origin = https://github.com/kyleisah/Klipper-Adaptive-Meshing-Purging.git +managed_services = klipper +primary_branch = main + +[update_manager moonraker-telegram-bot] +install_script = scripts/install.sh +requirements = scripts/requirements.txt +env = /home/biqu/moonraker-telegram-bot-env/bin/python +origin = https://github.com/nlef/moonraker-telegram-bot.git +path = /home/biqu/moonraker-telegram-bot +type = git_repo + diff --git a/KAMP_Settings.cfg b/KAMP_Settings.cfg new file mode 100644 index 0000000..ca81400 --- /dev/null +++ b/KAMP_Settings.cfg @@ -0,0 +1,36 @@ +# Below you can include specific configuration files depending on what you want KAMP to do: + +[include ./KAMP/Adaptive_Meshing.cfg] # Include to enable adaptive meshing configuration. +# [include ./KAMP/Line_Purge.cfg] # Include to enable adaptive line purging configuration. +[include ./KAMP/Voron_Purge.cfg] # Include to enable adaptive Voron logo purging configuration. +[include ./KAMP/Smart_Park.cfg] # Include to enable the Smart Park function, which parks the printhead near the print area for final heating. + +[gcode_macro _KAMP_Settings] +description: This macro contains all adjustable settings for KAMP + +# The following variables are settings for KAMP as a whole. +variable_verbose_enable: True # Set to True to enable KAMP information output when running. This is useful for debugging. + +# The following variables are for adjusting adaptive mesh settings for KAMP. +variable_mesh_margin: 0 # Expands the mesh size in millimeters if desired. Leave at 0 to disable. +variable_fuzz_amount: 1 # Slightly randomizes mesh points to spread out wear from nozzle-based probes. Leave at 0 to disable. + +# The following variables are for those with a dockable probe like Klicky, Euclid, etc. # ---------------- Attach Macro | Detach Macro +variable_probe_dock_enable: False # Set to True to enable the usage of a dockable probe. # --------------------------------------------- +variable_attach_macro: 'Attach_Probe' # The macro that is used to attach the probe. # Klicky Probe: 'Attach_Probe' | 'Dock_Probe' +variable_detach_macro: 'Dock_Probe' # The macro that is used to store the probe. # Euclid Probe: 'Deploy_Probe' | 'Stow_Probe' + # Legacy Gcode: 'M401' | 'M402' + +# The following variables are for adjusting adaptive purge settings for KAMP. +variable_purge_height: 0.8 # Z position of nozzle during purge, default is 0.8. +variable_tip_distance: 10 # Distance between tip of filament and nozzle before purge. Should be similar to PRINT_END final retract amount. +variable_purge_margin: 12 # Distance the purge will be in front of the print area, default is 10. +variable_purge_amount: 30 # Amount of filament to be purged prior to printing. +variable_flow_rate: 12 # Flow rate of purge in mm3/s. Default is 12. + +# The following variables are for adjusting the Smart Park feature for KAMP, which will park the printhead near the print area at a specified height. +variable_smart_park_height: 10 # Z position for Smart Park, default is 10. + +gcode: # Gcode section left intentionally blank. Do not disturb. + + {action_respond_info(" Running the KAMP_Settings macro does nothing, it is only used for storing KAMP settings. ")} diff --git a/KlipperScreen.conf b/KlipperScreen.conf new file mode 100644 index 0000000..6118a08 --- /dev/null +++ b/KlipperScreen.conf @@ -0,0 +1,12 @@ +# To use this KlipperScreen panel, create a symlink: +# $MOONRAKER_OBICO_HOME/scripts/klipper_screen_obico_panel.py -> $KLIPPER_SCREEN_HOME/panels/obico.py +[menu __main more obico] +name: Obico +icon: network +panel: obico +#~# --- Do not edit below this line. This section is auto generated --- #~# +#~# +#~# [main] +#~# print_sort_dir = date_desc +#~# language = ru +#~# diff --git a/crowsnest.conf b/crowsnest.conf new file mode 100644 index 0000000..1226025 --- /dev/null +++ b/crowsnest.conf @@ -0,0 +1,60 @@ +#### crowsnest.conf +#### This is a typical default config. +#### Also used as default in mainsail / MainsailOS +#### See: +#### https://github.com/mainsail-crew/crowsnest/blob/master/README.md +#### for details to configure to your needs. + + +##################################################################### +#### ##### +#### Information about ports and according URL's ##### +#### ##### +##################################################################### +#### ##### +#### Port 8080 equals /webcam/?action=[stream/snapshot] ##### +#### Port 8081 equals /webcam2/?action=[stream/snapshot] ##### +#### Port 8082 equals /webcam3/?action=[stream/snapshot] ##### +#### Port 8083 equals /webcam4/?action=[stream/snapshot] ##### +#### ##### +##################################################################### +#### RTSP Stream URL: ( if enabled and supported ) ##### +#### rtsp://:/stream.h264 ##### +##################################################################### + + +[crowsnest] +log_path: /home/biqu/printer_data/logs/crowsnest.log +log_level: verbose # Valid Options are quiet/verbose/debug +delete_log: false # Deletes log on every restart, if set to true +no_proxy: false + +#[cam xy] +#mode: ustreamer # ustreamer - Provides mjpg and snapshots. (All devices), camera-streamer - Provides webrtc, mjpg and snapshots. (rpi + Raspi OS based only) +#enable_rtsp: false # If camera-streamer is used, this enables also usage of an rtsp server +#rtsp_port: 8554 # Set different ports for each device! +#port: 8080 # HTTP/MJPG Stream/Snapshot Port +#device: /dev/v4l/by-path/platform-5101000.usb-usb-0:1.3:1.0-video-index0 # See Log for available ... +#resolution: 1280x720 #640x480 # widthxheight format 2048x1536 +#max_fps: 15 # If Hardware Supports this it will be forced, otherwise ignored/coerced. +#custom_flags: # You can run the Stream Services with custom flags. +#v4l2ctl: # Add v4l2-ctl parameters to setup your camera, see Log what your cam is capable of. + +[cam head] +#mode: ustreamer +mode: MJPG +port: 8081 +#device: /dev/v4l/by-path/platform-5101000.usb-usb-0:1.1:1.0-video-index0 +device: /dev/v4l/by-id/usb-DSJ_UC60_Video_200901010001-video-index0 +resolution: 1600x1200 #176x144, 320x240, 352x288, 640x480, 640x360, 640x400, 800x600, 1024x768, 1280x720, 1280x960, 1600x1200, 1920x1080, 2048x1536, 2560x1440, 2592x1944 +max_fps: 15 +v4l2ctl: focus_auto=0 #brightness=-10, backlight_compensation=0 + +#[cam bed_cam] +#mode: ustreamer +#port: 8080 +#device: /dev/video0 # The CSI +#resolution: 1600x1200 #176x144, 320x240, 352x288, 640x480, 640x360, 640x400, 800x600, 1024x768, 1280x720, 1280x960, 1600x1200, 1920x1080, 2048x1536, 2560x1440, 2592x1944 +#max_fps: 15 +#custom_flags: --format=UYVY + diff --git a/firmware/.CAN b/firmware/.CAN new file mode 100644 index 0000000..377a943 --- /dev/null +++ b/firmware/.CAN @@ -0,0 +1,55 @@ +# CONFIG_LOW_LEVEL_OPTIONS is not set +CONFIG_MACH_AVR=y +# CONFIG_MACH_ATSAM is not set +# CONFIG_MACH_ATSAMD is not set +# CONFIG_MACH_LPC176X is not set +# CONFIG_MACH_STM32 is not set +# CONFIG_MACH_HC32F460 is not set +# CONFIG_MACH_RPXXXX is not set +# CONFIG_MACH_PRU is not set +# CONFIG_MACH_AR100 is not set +# CONFIG_MACH_LINUX is not set +# CONFIG_MACH_SIMU is not set +CONFIG_AVR_SELECT=y +CONFIG_BOARD_DIRECTORY="avr" +CONFIG_MACH_atmega2560=y +# CONFIG_MACH_atmega1280 is not set +# CONFIG_MACH_at90usb1286 is not set +# CONFIG_MACH_at90usb646 is not set +# CONFIG_MACH_atmega32u4 is not set +# CONFIG_MACH_atmega1284p is not set +# CONFIG_MACH_atmega644p is not set +# CONFIG_MACH_atmega328p is not set +# CONFIG_MACH_atmega328 is not set +# CONFIG_MACH_atmega168 is not set +CONFIG_MCU="atmega2560" +CONFIG_AVRDUDE_PROTOCOL="wiring" +CONFIG_CLOCK_FREQ=16000000 +CONFIG_AVR_CLKPR=-1 +CONFIG_AVR_STACK_SIZE=256 +CONFIG_AVR_WATCHDOG=y +CONFIG_SERIAL=y +CONFIG_SERIAL_BAUD_U2X=y +CONFIG_SERIAL_PORT=0 +CONFIG_SERIAL_BAUD=250000 +CONFIG_USB_VENDOR_ID=0x1d50 +CONFIG_USB_DEVICE_ID=0x614e +CONFIG_USB_SERIAL_NUMBER="12345" +CONFIG_WANT_GPIO_BITBANGING=y +CONFIG_WANT_DISPLAYS=y +CONFIG_WANT_SENSORS=y +CONFIG_WANT_LIS2DW=y +CONFIG_WANT_LDC1612=y +CONFIG_WANT_HX71X=y +CONFIG_WANT_ADS1220=y +CONFIG_WANT_SOFTWARE_I2C=y +CONFIG_WANT_SOFTWARE_SPI=y +CONFIG_NEED_SENSOR_BULK=y +CONFIG_CANBUS_FREQUENCY=1000000 +CONFIG_HAVE_GPIO=y +CONFIG_HAVE_GPIO_ADC=y +CONFIG_HAVE_GPIO_SPI=y +CONFIG_HAVE_GPIO_I2C=y +CONFIG_HAVE_GPIO_HARD_PWM=y +CONFIG_HAVE_STRICT_TIMING=y +CONFIG_INLINE_STEPPER_HACK=y diff --git a/firmware/boot_sht36_v2.config b/firmware/boot_sht36_v2.config new file mode 100644 index 0000000..1b15281 --- /dev/null +++ b/firmware/boot_sht36_v2.config @@ -0,0 +1,78 @@ +CONFIG_LOW_LEVEL_OPTIONS=y +# CONFIG_MACH_LPC176X is not set +CONFIG_MACH_STM32=y +# CONFIG_MACH_RPXXXX is not set +CONFIG_BOARD_DIRECTORY="stm32" +CONFIG_MCU="stm32f072xb" +CONFIG_CLOCK_FREQ=48000000 +CONFIG_FLASH_SIZE=0x20000 +CONFIG_FLASH_BOOT_ADDRESS=0x8000000 +CONFIG_RAM_START=0x20000000 +CONFIG_RAM_SIZE=0x4000 +CONFIG_STACK_SIZE=512 +CONFIG_FLASH_APPLICATION_ADDRESS=0x8002000 +CONFIG_FLASH_START=0x8000000 +CONFIG_LAUNCH_APP_ADDRESS=0x8002000 +CONFIG_BLOCK_SIZE=64 +CONFIG_STM32_SELECT=y +# CONFIG_MACH_STM32F103 is not set +# CONFIG_MACH_STM32F207 is not set +# CONFIG_MACH_STM32F401 is not set +# CONFIG_MACH_STM32F405 is not set +# CONFIG_MACH_STM32F407 is not set +# CONFIG_MACH_STM32F429 is not set +# CONFIG_MACH_STM32F446 is not set +# CONFIG_MACH_STM32F031 is not set +# CONFIG_MACH_STM32F042 is not set +# CONFIG_MACH_STM32F070 is not set +CONFIG_MACH_STM32F072=y +# CONFIG_MACH_STM32G0B0 is not set +# CONFIG_MACH_STM32G0B1 is not set +# CONFIG_MACH_STM32H723 is not set +# CONFIG_MACH_STM32H743 is not set +CONFIG_MACH_STM32F0=y +CONFIG_MACH_STM32F0x2=y +CONFIG_HAVE_STM32_USBFS=y +CONFIG_HAVE_STM32_CANBUS=y +CONFIG_STM32_DFU_ROM_ADDRESS=0 +# CONFIG_STM32_FLASH_START_0000 is not set +CONFIG_STM32_FLASH_START_2000=y +# CONFIG_STM32_FLASH_START_1000 is not set +# CONFIG_STM32_FLASH_START_4000 is not set +CONFIG_ARMCM_RAM_VECTORTABLE=y +CONFIG_STM32_CLOCK_REF_8M=y +# CONFIG_STM32_CLOCK_REF_12M is not set +# CONFIG_STM32_CLOCK_REF_16M is not set +# CONFIG_STM32_CLOCK_REF_20M is not set +# CONFIG_STM32_CLOCK_REF_25M is not set +# CONFIG_STM32_CLOCK_REF_32M is not set +# CONFIG_STM32_CLOCK_REF_INTERNAL is not set +CONFIG_CLOCK_REF_FREQ=8000000 +CONFIG_STM32F0_TRIM=16 +# CONFIG_STM32_USB_PA11_PA12 is not set +# CONFIG_STM32_SERIAL_USART1 is not set +# CONFIG_STM32_SERIAL_USART1_ALT_PB7_PB6 is not set +# CONFIG_STM32_SERIAL_USART2 is not set +# CONFIG_STM32_SERIAL_USART2_ALT_PA15_PA14 is not set +# CONFIG_STM32_CANBUS_PA11_PA12 is not set +# CONFIG_STM32_CANBUS_PA11_PB9 is not set +CONFIG_STM32_MMENU_CANBUS_PB8_PB9=y +# CONFIG_STM32_MMENU_CANBUS_PD0_PD1 is not set +CONFIG_STM32_CANBUS_PB8_PB9=y +CONFIG_STM32_APP_START_2000=y +# CONFIG_STM32_APP_START_1000 is not set +CONFIG_USB_VENDOR_ID=0x1d50 +CONFIG_USB_DEVICE_ID=0x6177 +CONFIG_USB_SERIAL_NUMBER="12345" +CONFIG_CANSERIAL=y +CONFIG_CANBUS=y +CONFIG_CANBUS_FREQUENCY=1000000 +CONFIG_CANBUS_FILTER=y +CONFIG_INITIAL_PINS="" +CONFIG_ENABLE_DOUBLE_RESET=y +# CONFIG_ENABLE_BUTTON is not set +CONFIG_ENABLE_LED=y +CONFIG_STATUS_LED_PIN="PC13" +CONFIG_BUILD_DEPLOYER=y +CONFIG_HAVE_CHIPID=y +CONFIG_KATAPULT_VERSION="v0.0.1-91-g604b7e5" diff --git a/firmware/boot_sht36_v2.config.old b/firmware/boot_sht36_v2.config.old new file mode 100644 index 0000000..58ae680 --- /dev/null +++ b/firmware/boot_sht36_v2.config.old @@ -0,0 +1,43 @@ +CONFIG_LOW_LEVEL_OPTIONS=y +CONFIG_MACH_LPC176X=y +# CONFIG_MACH_STM32 is not set +# CONFIG_MACH_RPXXXX is not set +CONFIG_LPC_SELECT=y +CONFIG_BOARD_DIRECTORY="lpc176x" +CONFIG_MACH_LPC1768=y +# CONFIG_MACH_LPC1769 is not set +CONFIG_MCU="lpc1768" +CONFIG_CLOCK_FREQ=100000000 +CONFIG_FLASH_SIZE=0x80000 +CONFIG_FLASH_BOOT_ADDRESS=0x0 +CONFIG_RAM_START=0x10000000 +CONFIG_RAM_SIZE=0x7ee0 +CONFIG_STACK_SIZE=512 +CONFIG_LPC_FLASH_START_0000=y +# CONFIG_LPC_FLASH_START_4000 is not set +CONFIG_FLASH_APPLICATION_ADDRESS=0x0000 +CONFIG_LPC_USB=y +# CONFIG_LPC_SERIAL_UART0_P03_P02 is not set +# CONFIG_LPC_SERIAL_UART3_P429_P428 is not set +CONFIG_FLASH_START=0x0000 +CONFIG_LAUNCH_APP_ADDRESS=0x4000 +CONFIG_BLOCK_SIZE=64 +CONFIG_USBSERIAL=y +CONFIG_USB=y +CONFIG_USB_VENDOR_ID=0x1d50 +CONFIG_USB_DEVICE_ID=0x6177 +CONFIG_USB_SERIAL_NUMBER_CHIPID=y +CONFIG_USB_SERIAL_NUMBER="12345" + +# +# USB ids +# +# end of USB ids + +CONFIG_CANBUS_FREQUENCY=1000000 +CONFIG_INITIAL_PINS="" +CONFIG_ENABLE_DOUBLE_RESET=y +# CONFIG_ENABLE_BUTTON is not set +# CONFIG_ENABLE_LED is not set +CONFIG_HAVE_CHIPID=y +CONFIG_KATAPULT_VERSION="v0.0.1-91-g604b7e5" diff --git a/firmware/octopus-pro.config b/firmware/octopus-pro.config new file mode 100644 index 0000000..8a5a8be --- /dev/null +++ b/firmware/octopus-pro.config @@ -0,0 +1,121 @@ +CONFIG_LOW_LEVEL_OPTIONS=y +# CONFIG_MACH_AVR is not set +# CONFIG_MACH_ATSAM is not set +# CONFIG_MACH_ATSAMD is not set +# CONFIG_MACH_LPC176X is not set +CONFIG_MACH_STM32=y +# CONFIG_MACH_HC32F460 is not set +# CONFIG_MACH_RPXXXX is not set +# CONFIG_MACH_PRU is not set +# CONFIG_MACH_AR100 is not set +# CONFIG_MACH_LINUX is not set +# CONFIG_MACH_SIMU is not set +CONFIG_BOARD_DIRECTORY="stm32" +CONFIG_MCU="stm32h723xx" +CONFIG_CLOCK_FREQ=400000000 +CONFIG_FLASH_SIZE=0x40000 +CONFIG_FLASH_BOOT_ADDRESS=0x8000000 +CONFIG_RAM_START=0x20000000 +CONFIG_RAM_SIZE=0x20000 +CONFIG_STACK_SIZE=512 +CONFIG_FLASH_APPLICATION_ADDRESS=0x8020000 +CONFIG_STM32_SELECT=y +# CONFIG_MACH_STM32F103 is not set +# CONFIG_MACH_STM32F207 is not set +# CONFIG_MACH_STM32F401 is not set +# CONFIG_MACH_STM32F405 is not set +# CONFIG_MACH_STM32F407 is not set +# CONFIG_MACH_STM32F429 is not set +# CONFIG_MACH_STM32F446 is not set +# CONFIG_MACH_STM32F765 is not set +# CONFIG_MACH_STM32F031 is not set +# CONFIG_MACH_STM32F042 is not set +# CONFIG_MACH_STM32F070 is not set +# CONFIG_MACH_STM32F072 is not set +# CONFIG_MACH_STM32G070 is not set +# CONFIG_MACH_STM32G071 is not set +# CONFIG_MACH_STM32G0B0 is not set +# CONFIG_MACH_STM32G0B1 is not set +# CONFIG_MACH_STM32G431 is not set +# CONFIG_MACH_STM32G474 is not set +CONFIG_MACH_STM32H723=y +# CONFIG_MACH_STM32H743 is not set +# CONFIG_MACH_STM32H750 is not set +# CONFIG_MACH_STM32L412 is not set +# CONFIG_MACH_N32G452 is not set +# CONFIG_MACH_N32G455 is not set +CONFIG_MACH_STM32H7=y +CONFIG_HAVE_STM32_USBOTG=y +CONFIG_HAVE_STM32_FDCANBUS=y +CONFIG_HAVE_STM32_USBCANBUS=y +CONFIG_STM32_DFU_ROM_ADDRESS=0x1ff09800 +CONFIG_STM32_FLASH_START_20000=y +# CONFIG_STM32_FLASH_START_0000 is not set +# CONFIG_STM32_CLOCK_REF_8M is not set +# CONFIG_STM32_CLOCK_REF_12M is not set +# CONFIG_STM32_CLOCK_REF_16M is not set +# CONFIG_STM32_CLOCK_REF_20M is not set +# CONFIG_STM32_CLOCK_REF_24M is not set +CONFIG_STM32_CLOCK_REF_25M=y +# CONFIG_STM32_CLOCK_REF_INTERNAL is not set +CONFIG_CLOCK_REF_FREQ=25000000 +CONFIG_STM32F0_TRIM=16 +# CONFIG_STM32_USB_PA11_PA12 is not set +# CONFIG_STM32_SERIAL_USART1 is not set +# CONFIG_STM32_SERIAL_USART1_ALT_PB7_PB6 is not set +# CONFIG_STM32_SERIAL_USART2 is not set +# CONFIG_STM32_SERIAL_USART2_ALT_PD6_PD5 is not set +# CONFIG_STM32_SERIAL_USART3 is not set +# CONFIG_STM32_SERIAL_USART3_ALT_PD9_PD8 is not set +# CONFIG_STM32_SERIAL_UART4 is not set +# CONFIG_STM32_CANBUS_PA11_PA12 is not set +# CONFIG_STM32_CANBUS_PA11_PB9 is not set +# CONFIG_STM32_MMENU_CANBUS_PB8_PB9 is not set +# CONFIG_STM32_MMENU_CANBUS_PB12_PB13 is not set +# CONFIG_STM32_MMENU_CANBUS_PD0_PD1 is not set +# CONFIG_STM32_MMENU_CANBUS_PB0_PB1 is not set +# CONFIG_STM32_MMENU_CANBUS_PD12_PD13 is not set +# CONFIG_STM32_MMENU_CANBUS_PC2_PC3 is not set +CONFIG_STM32_USBCANBUS_PA11_PA12=y +# CONFIG_STM32_CMENU_CANBUS_PB8_PB9 is not set +# CONFIG_STM32_CMENU_CANBUS_PB12_PB13 is not set +CONFIG_STM32_CMENU_CANBUS_PD0_PD1=y +# CONFIG_STM32_CMENU_CANBUS_PB0_PB1 is not set +# CONFIG_STM32_CMENU_CANBUS_PD12_PD13 is not set +# CONFIG_STM32_CMENU_CANBUS_PC2_PC3 is not set +CONFIG_STM32_CANBUS_PD0_PD1=y +CONFIG_USBCANBUS=y +CONFIG_USB=y +CONFIG_USB_VENDOR_ID=0x1d50 +CONFIG_USB_DEVICE_ID=0x614e +CONFIG_USB_SERIAL_NUMBER_CHIPID=y +CONFIG_USB_SERIAL_NUMBER="12345" + +# +# USB ids +# +# end of USB ids + +CONFIG_WANT_GPIO_BITBANGING=y +CONFIG_WANT_DISPLAYS=y +CONFIG_WANT_SENSORS=y +CONFIG_WANT_LIS2DW=y +CONFIG_WANT_LDC1612=y +CONFIG_WANT_HX71X=y +CONFIG_WANT_ADS1220=y +CONFIG_WANT_SOFTWARE_I2C=y +CONFIG_WANT_SOFTWARE_SPI=y +CONFIG_NEED_SENSOR_BULK=y +CONFIG_CANBUS=y +CONFIG_CANBUS_FREQUENCY=1000000 +CONFIG_INITIAL_PINS="PE11" +CONFIG_HAVE_GPIO=y +CONFIG_HAVE_GPIO_ADC=y +CONFIG_HAVE_GPIO_SPI=y +CONFIG_HAVE_GPIO_I2C=y +CONFIG_HAVE_GPIO_HARD_PWM=y +CONFIG_HAVE_STRICT_TIMING=y +CONFIG_HAVE_CHIPID=y +CONFIG_HAVE_STEPPER_BOTH_EDGE=y +CONFIG_HAVE_BOOTLOADER_REQUEST=y +CONFIG_INLINE_STEPPER_HACK=y diff --git a/firmware/rp_sb2209.CAN b/firmware/rp_sb2209.CAN new file mode 100644 index 0000000..ed8166c --- /dev/null +++ b/firmware/rp_sb2209.CAN @@ -0,0 +1,70 @@ +CONFIG_LOW_LEVEL_OPTIONS=y +# CONFIG_MACH_AVR is not set +# CONFIG_MACH_ATSAM is not set +# CONFIG_MACH_ATSAMD is not set +# CONFIG_MACH_LPC176X is not set +# CONFIG_MACH_STM32 is not set +# CONFIG_MACH_HC32F460 is not set +CONFIG_MACH_RPXXXX=y +# CONFIG_MACH_PRU is not set +# CONFIG_MACH_AR100 is not set +# CONFIG_MACH_LINUX is not set +# CONFIG_MACH_SIMU is not set +CONFIG_BOARD_DIRECTORY="rp2040" +CONFIG_MCU="rp2040" +CONFIG_CLOCK_FREQ=12000000 +CONFIG_FLASH_SIZE=0x200000 +CONFIG_FLASH_BOOT_ADDRESS=0x10000100 +CONFIG_RAM_START=0x20000000 +CONFIG_RAM_SIZE=0x42000 +CONFIG_STACK_SIZE=512 +CONFIG_FLASH_APPLICATION_ADDRESS=0x10004000 +CONFIG_RPXXXX_SELECT=y +CONFIG_MACH_RP2040=y +# CONFIG_MACH_RP2350 is not set +CONFIG_RPXXXX_HAVE_BOOTLOADER=y +# CONFIG_RPXXXX_FLASH_START_0100 is not set +CONFIG_RPXXXX_FLASH_START_4000=y +CONFIG_RP2040_STAGE2_FILE="boot2_w25q080.S" +CONFIG_RP2040_STAGE2_CLKDIV=2 +# CONFIG_RPXXXX_USB is not set +# CONFIG_RPXXXX_SERIAL_UART0_PINS_0_1 is not set +# CONFIG_RPXXXX_SERIAL_UART0_PINS_12_13 is not set +# CONFIG_RPXXXX_SERIAL_UART0_PINS_16_17 is not set +# CONFIG_RPXXXX_SERIAL_UART0_PINS_28_29 is not set +# CONFIG_RPXXXX_SERIAL_UART1_PINS_4_5 is not set +# CONFIG_RPXXXX_SERIAL_UART1_PINS_8_9 is not set +# CONFIG_RPXXXX_SERIAL_UART1_PINS_20_21 is not set +# CONFIG_RPXXXX_SERIAL_UART1_PINS_24_25 is not set +CONFIG_RPXXXX_CANBUS=y +# CONFIG_RPXXXX_USBCANBUS is not set +CONFIG_RPXXXX_CANBUS_GPIO_RX=4 +CONFIG_RPXXXX_CANBUS_GPIO_TX=5 +CONFIG_USB_VENDOR_ID=0x1d50 +CONFIG_USB_DEVICE_ID=0x614e +CONFIG_USB_SERIAL_NUMBER="12345" +CONFIG_WANT_GPIO_BITBANGING=y +CONFIG_WANT_DISPLAYS=y +CONFIG_WANT_SENSORS=y +CONFIG_WANT_LIS2DW=y +CONFIG_WANT_LDC1612=y +CONFIG_WANT_HX71X=y +CONFIG_WANT_ADS1220=y +CONFIG_WANT_SOFTWARE_I2C=y +CONFIG_WANT_SOFTWARE_SPI=y +CONFIG_NEED_SENSOR_BULK=y +CONFIG_CANSERIAL=y +CONFIG_CANBUS=y +CONFIG_CANBUS_FREQUENCY=1000000 +CONFIG_CANBUS_FILTER=y +CONFIG_INITIAL_PINS="!gpio6" +CONFIG_HAVE_GPIO=y +CONFIG_HAVE_GPIO_ADC=y +CONFIG_HAVE_GPIO_SPI=y +CONFIG_HAVE_GPIO_I2C=y +CONFIG_HAVE_GPIO_HARD_PWM=y +CONFIG_HAVE_STRICT_TIMING=y +CONFIG_HAVE_CHIPID=y +CONFIG_HAVE_STEPPER_BOTH_EDGE=y +CONFIG_HAVE_BOOTLOADER_REQUEST=y +CONFIG_INLINE_STEPPER_HACK=y diff --git a/firmware/sht36_v2.CAN b/firmware/sht36_v2.CAN new file mode 100644 index 0000000..d007b66 --- /dev/null +++ b/firmware/sht36_v2.CAN @@ -0,0 +1,105 @@ +CONFIG_LOW_LEVEL_OPTIONS=y +# CONFIG_MACH_AVR is not set +# CONFIG_MACH_ATSAM is not set +# CONFIG_MACH_ATSAMD is not set +# CONFIG_MACH_LPC176X is not set +CONFIG_MACH_STM32=y +# CONFIG_MACH_HC32F460 is not set +# CONFIG_MACH_RPXXXX is not set +# CONFIG_MACH_PRU is not set +# CONFIG_MACH_AR100 is not set +# CONFIG_MACH_LINUX is not set +# CONFIG_MACH_SIMU is not set +CONFIG_BOARD_DIRECTORY="stm32" +CONFIG_MCU="stm32f072xb" +CONFIG_CLOCK_FREQ=48000000 +CONFIG_FLASH_SIZE=0x20000 +CONFIG_FLASH_BOOT_ADDRESS=0x8000000 +CONFIG_RAM_START=0x20000000 +CONFIG_RAM_SIZE=0x4000 +CONFIG_STACK_SIZE=512 +CONFIG_FLASH_APPLICATION_ADDRESS=0x8002000 +CONFIG_STM32_SELECT=y +# CONFIG_MACH_STM32F103 is not set +# CONFIG_MACH_STM32F207 is not set +# CONFIG_MACH_STM32F401 is not set +# CONFIG_MACH_STM32F405 is not set +# CONFIG_MACH_STM32F407 is not set +# CONFIG_MACH_STM32F429 is not set +# CONFIG_MACH_STM32F446 is not set +# CONFIG_MACH_STM32F765 is not set +# CONFIG_MACH_STM32F031 is not set +# CONFIG_MACH_STM32F042 is not set +# CONFIG_MACH_STM32F070 is not set +CONFIG_MACH_STM32F072=y +# CONFIG_MACH_STM32G070 is not set +# CONFIG_MACH_STM32G071 is not set +# CONFIG_MACH_STM32G0B0 is not set +# CONFIG_MACH_STM32G0B1 is not set +# CONFIG_MACH_STM32G431 is not set +# CONFIG_MACH_STM32G474 is not set +# CONFIG_MACH_STM32H723 is not set +# CONFIG_MACH_STM32H743 is not set +# CONFIG_MACH_STM32H750 is not set +# CONFIG_MACH_STM32L412 is not set +# CONFIG_MACH_N32G452 is not set +# CONFIG_MACH_N32G455 is not set +CONFIG_MACH_STM32F0=y +CONFIG_MACH_STM32F0x2=y +CONFIG_HAVE_STM32_USBFS=y +CONFIG_HAVE_STM32_CANBUS=y +CONFIG_HAVE_STM32_USBCANBUS=y +CONFIG_STM32_DFU_ROM_ADDRESS=0 +CONFIG_STM32_FLASH_START_2000=y +# CONFIG_STM32_FLASH_START_1000 is not set +# CONFIG_STM32_FLASH_START_4000 is not set +# CONFIG_STM32_FLASH_START_0000 is not set +CONFIG_ARMCM_RAM_VECTORTABLE=y +CONFIG_STM32_CLOCK_REF_8M=y +# CONFIG_STM32_CLOCK_REF_12M is not set +# CONFIG_STM32_CLOCK_REF_16M is not set +# CONFIG_STM32_CLOCK_REF_20M is not set +# CONFIG_STM32_CLOCK_REF_24M is not set +# CONFIG_STM32_CLOCK_REF_25M is not set +# CONFIG_STM32_CLOCK_REF_INTERNAL is not set +CONFIG_CLOCK_REF_FREQ=8000000 +CONFIG_STM32F0_TRIM=16 +# CONFIG_STM32_USB_PA11_PA12 is not set +# CONFIG_STM32_SERIAL_USART1 is not set +# CONFIG_STM32_SERIAL_USART1_ALT_PB7_PB6 is not set +# CONFIG_STM32_SERIAL_USART2 is not set +# CONFIG_STM32_SERIAL_USART2_ALT_PA15_PA14 is not set +# CONFIG_STM32_CANBUS_PA11_PA12 is not set +# CONFIG_STM32_CANBUS_PA11_PB9 is not set +CONFIG_STM32_MMENU_CANBUS_PB8_PB9=y +# CONFIG_STM32_MMENU_CANBUS_PD0_PD1 is not set +# CONFIG_STM32_USBCANBUS_PA11_PA12 is not set +CONFIG_STM32_CANBUS_PB8_PB9=y +CONFIG_USB_VENDOR_ID=0x1d50 +CONFIG_USB_DEVICE_ID=0x614e +CONFIG_USB_SERIAL_NUMBER="12345" +CONFIG_WANT_GPIO_BITBANGING=y +CONFIG_WANT_DISPLAYS=y +CONFIG_WANT_SENSORS=y +CONFIG_WANT_LIS2DW=y +CONFIG_WANT_LDC1612=y +CONFIG_WANT_HX71X=y +CONFIG_WANT_ADS1220=y +CONFIG_WANT_SOFTWARE_I2C=y +CONFIG_WANT_SOFTWARE_SPI=y +CONFIG_NEED_SENSOR_BULK=y +CONFIG_CANSERIAL=y +CONFIG_CANBUS=y +CONFIG_CANBUS_FREQUENCY=1000000 +CONFIG_CANBUS_FILTER=y +CONFIG_INITIAL_PINS="!PC13" +CONFIG_HAVE_GPIO=y +CONFIG_HAVE_GPIO_ADC=y +CONFIG_HAVE_GPIO_SPI=y +CONFIG_HAVE_GPIO_I2C=y +CONFIG_HAVE_GPIO_HARD_PWM=y +CONFIG_HAVE_STRICT_TIMING=y +CONFIG_HAVE_CHIPID=y +CONFIG_HAVE_STEPPER_BOTH_EDGE=y +CONFIG_HAVE_BOOTLOADER_REQUEST=y +CONFIG_INLINE_STEPPER_HACK=y diff --git a/firmware/sht36_v2.CAN.old b/firmware/sht36_v2.CAN.old new file mode 100644 index 0000000..377a943 --- /dev/null +++ b/firmware/sht36_v2.CAN.old @@ -0,0 +1,55 @@ +# CONFIG_LOW_LEVEL_OPTIONS is not set +CONFIG_MACH_AVR=y +# CONFIG_MACH_ATSAM is not set +# CONFIG_MACH_ATSAMD is not set +# CONFIG_MACH_LPC176X is not set +# CONFIG_MACH_STM32 is not set +# CONFIG_MACH_HC32F460 is not set +# CONFIG_MACH_RPXXXX is not set +# CONFIG_MACH_PRU is not set +# CONFIG_MACH_AR100 is not set +# CONFIG_MACH_LINUX is not set +# CONFIG_MACH_SIMU is not set +CONFIG_AVR_SELECT=y +CONFIG_BOARD_DIRECTORY="avr" +CONFIG_MACH_atmega2560=y +# CONFIG_MACH_atmega1280 is not set +# CONFIG_MACH_at90usb1286 is not set +# CONFIG_MACH_at90usb646 is not set +# CONFIG_MACH_atmega32u4 is not set +# CONFIG_MACH_atmega1284p is not set +# CONFIG_MACH_atmega644p is not set +# CONFIG_MACH_atmega328p is not set +# CONFIG_MACH_atmega328 is not set +# CONFIG_MACH_atmega168 is not set +CONFIG_MCU="atmega2560" +CONFIG_AVRDUDE_PROTOCOL="wiring" +CONFIG_CLOCK_FREQ=16000000 +CONFIG_AVR_CLKPR=-1 +CONFIG_AVR_STACK_SIZE=256 +CONFIG_AVR_WATCHDOG=y +CONFIG_SERIAL=y +CONFIG_SERIAL_BAUD_U2X=y +CONFIG_SERIAL_PORT=0 +CONFIG_SERIAL_BAUD=250000 +CONFIG_USB_VENDOR_ID=0x1d50 +CONFIG_USB_DEVICE_ID=0x614e +CONFIG_USB_SERIAL_NUMBER="12345" +CONFIG_WANT_GPIO_BITBANGING=y +CONFIG_WANT_DISPLAYS=y +CONFIG_WANT_SENSORS=y +CONFIG_WANT_LIS2DW=y +CONFIG_WANT_LDC1612=y +CONFIG_WANT_HX71X=y +CONFIG_WANT_ADS1220=y +CONFIG_WANT_SOFTWARE_I2C=y +CONFIG_WANT_SOFTWARE_SPI=y +CONFIG_NEED_SENSOR_BULK=y +CONFIG_CANBUS_FREQUENCY=1000000 +CONFIG_HAVE_GPIO=y +CONFIG_HAVE_GPIO_ADC=y +CONFIG_HAVE_GPIO_SPI=y +CONFIG_HAVE_GPIO_I2C=y +CONFIG_HAVE_GPIO_HARD_PWM=y +CONFIG_HAVE_STRICT_TIMING=y +CONFIG_INLINE_STEPPER_HACK=y diff --git a/firmware/update_fw.sh b/firmware/update_fw.sh new file mode 100755 index 0000000..2dd92be --- /dev/null +++ b/firmware/update_fw.sh @@ -0,0 +1,51 @@ +#!/bin/bash + +#Полезные комманды +#make menuconfig KCONFIG_CONFIG=/home/biqu/printer_data/config/firmware/config.manta723.CAN +#make flash FLASH_DEVICE=0483:df11 +#python3 flash_can.py -i can0 -u 6c3c86ee0b29 -f ~/firmware/octopus_klipper.bin +#python3 ~/katapult/scripts/flashtool.py -i can0 -q + +#Toolheads +#rp_sb2209=350f10596216 +#sht36_v2=8ce295109ef0 + +toolhed_name=rp_sb2209 +toolhed_uuid=350f10596216 +mcu_uuid=afcf80281237 +mcu_path=/dev/serial/by-id/usb-katapult_stm32h723xx_320006001751313431393536-if00 +config_path=/home/biqu/printer_data/config/firmware/ + +mkdir -p ~/firmware + +sudo service klipper stop + +cd ~/klipper +make clean +make -j4 KCONFIG_CONFIG="${config_path}octopus-pro.config" +mv ~/klipper/out/klipper.bin ~/firmware/octopus_klipper.bin + +make clean +toolhead_config="${config_path}/${used_toolhed}.CAN" +make -j4 KCONFIG_CONFIG=$toolhead_config +mv ~/klipper/out/klipper.bin ~/firmware/toolhead_klipper.bin + +cd ~/katapult/scripts +# Update MCU Octopus Pro +echo "Start update MCU Octopus Pro" +python3 ~/katapult/scripts/flashtool.py -i can0 -u $mcu_uuid -r +python3 flash_can.py -f ~/firmware/octopus_klipper.bin -d $mcu_path +sleep 2 +#read -p "MCU Manta M5P firmware flashed, please check above for any errors. Press [Enter] to continue, or [Ctrl+C] to abort" +#echo "Finish update MCU octopus" + +# Update Toolhead MCU +echo "Start update Toolhead MCU" +python3 flash_can.py -i can0 -u $toolhed_uuid -f ~/firmware/toolhead_klipper.bin +sleep 2 +#read -p "MCU EBB36 firmware flashed, please check above for any errors. Press [Enter] to continue, or [Ctrl+C] to abort" +#echo "Finish update MCU EBB36" + +python3 ~/katapult/scripts/flashtool.py -i can0 -q + +sudo service klipper start diff --git a/firmware/update_fw.sh.old b/firmware/update_fw.sh.old new file mode 100755 index 0000000..f595d14 --- /dev/null +++ b/firmware/update_fw.sh.old @@ -0,0 +1,40 @@ +#!/bin/bash + +mkdir -p ~/firmware + +sudo service klipper stop + +cd ~/klipper +make clean +#make menuconfig KCONFIG_CONFIG=/home/biqu/printer_data/config/firmware/config.manta723.CAN +make -j4 KCONFIG_CONFIG=/home/biqu/printer_data/config/firmware/octopus-pro.config +#make flash FLASH_DEVICE=0483:df11 +mv ~/klipper/out/klipper.bin ~/firmware/octopus_klipper.bin + +make clean +#make menuconfig KCONFIG_CONFIG=/home/biqu/printer_data/config/firmware/rp_sb2209.CAN +make -j4 KCONFIG_CONFIG=/home/biqu/printer_data/config/firmware/rp_sb2209.CAN +mv ~/klipper/out/klipper.bin ~/firmware/toolhead_klipper.bin + +cd ~/katapult/scripts +# Update MCU Octopus Pro +echo "Start update MCU Octopus Pro" +#echo "" +#python3 flash_can.py -i can0 -u 6c3c86ee0b29 -f ~/firmware/octopus_klipper.bin +python3 ~/katapult/scripts/flashtool.py -i can0 -u afcf80281237 -r +python3 flash_can.py -f ~/firmware/octopus_klipper.bin -d /dev/serial/by-id/usb-katapult_stm32h723xx_320006001751313431393536-if00 +sleep 2 +#read -p "MCU Manta M5P firmware flashed, please check above for any errors. Press [Enter] to continue, or [Ctrl+C] to abort" +#echo "Finish update MCU octopus" + +# Update Toolhead MCU +echo "Start update Toolhead MCU" +#echo "" +python3 flash_can.py -i can0 -u 350f10596216 -f ~/firmware/toolhead_klipper.bin +sleep 2 +#read -p "MCU EBB36 firmware flashed, please check above for any errors. Press [Enter] to continue, or [Ctrl+C] to abort" +#echo "Finish update MCU EBB36" + +#echo "" + +sudo service klipper start diff --git a/hbb.cfg b/hbb.cfg new file mode 100644 index 0000000..e103084 --- /dev/null +++ b/hbb.cfg @@ -0,0 +1,124 @@ +[mcu HBB] +serial: /dev/serial/by-id/usb-Klipper_rp2040_45474E621A87A43A-if00 + +[neopixel HBB_LED] +pin: HBB: gpio20 +chain_count: 7 +color_order: GRB +initial_RED: 0.4 +initial_GREEN: 0.4 +initial_BLUE: 0.4 + +[gcode_macro _hbb_varible] +variable_in_progress_key_1: False +variable_in_progress_key_2: False +variable_in_progress_key_3: False +variable_in_progress_key_4: False +variable_in_progress_key_5: False +variable_in_progress_key_6: False +variable_in_progress_key_7: False +variable_status: { + 'ready': {'r': 0.4, 'g': 0.4, 'b': 0.4, 'w': 0.0}, + 'in_progress': {'r': 0.0, 'g': 0.04, 'b': 0.0, 'w': 0.0}, + 'busy': {'r': 0.4, 'g': 0.0, 'b': 0.0, 'w': 0.0}, + 'prepare': {'r': 0.4, 'g': 0.4, 'b': 0.0, 'w': 0.0}, + 'disabled': {'r': 0.0, 'g': 0.0, 'b': 0.0, 'w': 0.0} + } +variable_num_count: 7 +gcode: + +[gcode_macro _set_status] +gcode: + {% set key_num = params.KEY_NUM|int %} + {% set status = params.STATUS|string %} + {% set led = printer["gcode_macro _hbb_varible"]['status'][status] %} + SET_LED LED=HBB_LED RED={led.r} GREEN={led.g} BLUE={led.b} INDEX={key_num} + + +[gcode_macro _default_release] +gcode: + {% set key_num = params.KEY_NUM|int %} + {% set macro = params.MACRO|string %} + {% set in_progress = printer["gcode_macro _hbb_varible"]['in_progress_key_{}'.format(key_num)] %} + {% if in_progress == False %} + SET_GCODE_VARIABLE MACRO=_hbb_varible VARIABLE=in_progress_key_{key_num} VALUE=True + _set_status KEY_NUM={key_num} STATUS=in_progress + {macro} + _set_status KEY_NUM={key_num} STATUS=ready + SET_GCODE_VARIABLE MACRO=_hbb_varible VARIABLE=in_progress_key_{key_num} VALUE=False + {% endif %} + + +#[delayed_gcode init_hbb] +#initial_duration: 1 +#gcode: + #{% set hbb_varible = printer["gcode_macro _hbb_varible"] %} + #{% set num_count = printer["gcode_macro _hbb_varible"].num_count | int %} + #{% for key_index in range(1, num_count+1) %} + #_set_status KEY_NUM=key_index STATUS=ready + #{% endfor %} + + + + +[gcode_button hbb_key_1] +pin: HBB: gpio25 +press_gcode: +release_gcode: + {% set key_num = 1 %} + {% set in_progress = printer["gcode_macro _hbb_varible"].in_progress_key_1 %} + _default_release KEY_NUM={key_num} MACRO="LOAD_FILAMENT" + + +[gcode_button hbb_key_2] +pin: HBB: gpio26 +press_gcode: +release_gcode: + {% set key_num = 2 %} + {% set in_progress = printer["gcode_macro _hbb_varible"].in_progress_key_2 %} + _default_release KEY_NUM={key_num} MACRO="UNLOAD_FILAMENT" + + +[gcode_button hbb_key_3] +pin: HBB: gpio27 +press_gcode: +release_gcode: + {% set key_num = 3 %} + {% set in_progress = printer["gcode_macro _hbb_varible"].in_progress_key_3 %} + _set_status KEY_NUM={key_num} STATUS=disabled + + +[gcode_button hbb_key_4] +pin: HBB: gpio19 +press_gcode: +release_gcode: + {% set key_num = 4 %} + {% set in_progress = printer["gcode_macro _hbb_varible"].in_progress_key_4 %} + _default_release KEY_NUM={key_num} MACRO="G32" + + +[gcode_button hbb_key_5] +pin: HBB: gpio18 +press_gcode: +release_gcode: + {% set key_num = 5 %} + {% set in_progress = printer["gcode_macro _hbb_varible"].in_progress_key_5 %} + _set_status KEY_NUM={key_num} STATUS=disabled + +[gcode_button hbb_key_6] +pin: HBB: gpio13 +press_gcode: +release_gcode: + {% set key_num = 6 %} + {% set in_progress = printer["gcode_macro _hbb_varible"].in_progress_key_6 %} + _default_release KEY_NUM={key_num} MACRO="PARKFRONT" + +[gcode_button hbb_key_7] +pin: HBB: gpio12 +press_gcode: +release_gcode: + {% set key_num = 7 %} + {% set in_progress = printer["gcode_macro _hbb_varible"].in_progress_key_7 %} + _default_release KEY_NUM={key_num} MACRO="PARKCENTER" + + diff --git a/macros/bed_mesh_calibrate.cfg b/macros/bed_mesh_calibrate.cfg new file mode 100644 index 0000000..dd20554 --- /dev/null +++ b/macros/bed_mesh_calibrate.cfg @@ -0,0 +1,164 @@ +[gcode_macro BED_MESH_CALIBRATE] +variable_buffer: 20 +rename_existing: _BED_MESH_CALIBRATE +; Do not change any of the existing values below. +variable_last_area_start_x: -1 ; Do not change +variable_last_area_start_y: -1 ; Do not change +variable_last_area_end_x: -1 ; Do not change +variable_last_area_end_y: -1 ; Do not change +variable_probing:False + +gcode: + STATUS_MESHING + SET_GCODE_VARIABLE MACRO=_KNOMI_STATUS VARIABLE=probing VALUE=True + + {% if params.FORCE_NEW_MESH != null %} + { action_respond_info("Force New Mesh: %s" % (params.FORCE_NEW_MESH)) } + {% endif %} + {% if printer["bed_mesh"].profile_name == '' %} + { action_respond_info("No existing bed mesh found.") } + {% set last_area_end_x=-1 %} + {% endif %} + + {% if printer.toolhead.homed_axes != "xyz" %} + G28 + {% endif %} + + {% set klicky_available = printer['gcode_macro _Probe_Variables'] != null %} + {% set euclid_available = printer['gcode_macro EuclidProbe'] != null %}; Requires v5 macros https://github.com/nionio6915/Euclid_Probe/blob/main/Firmware_Examples/Klipper/00-euclid_exampleV5.cfg + {% if params.PRINT_MIN %} + { action_respond_info("print_min: %s" % params.PRINT_MIN) } + { action_respond_info("print_max: %s" % params.PRINT_MAX) } + + {% set blTouchConfig = printer['configfile'].config["bltouch"] %} + {% if blTouchConfig %} + {% set OffsetX = blTouchConfig.x_offset|default(0)|float %} + {% set OffsetY = blTouchConfig.y_offset|default(0)|float %} + {% endif %} + + {% set probeConfig = printer['configfile'].config["probe"] %} + {% if probeConfig %} + {% set OffsetX = probeConfig.x_offset|default(0)|float %} + {% set OffsetY = probeConfig.y_offset|default(0)|float %} + {% endif %} + + {% set print_min_x = params.PRINT_MIN.split(",")[0]|float %} + {% set print_min_y = params.PRINT_MIN.split(",")[1]|float %} + {% set print_max_x = params.PRINT_MAX.split(",")[0]|float %} + {% set print_max_y = params.PRINT_MAX.split(",")[1]|float %} + + {% if last_area_start_x > 0 %} + { action_respond_info("last_bed_mesh: %s,%s %s,%s" % (last_area_start_x, last_area_start_y, last_area_end_x, last_area_end_y)) } + {% endif %} + + {% if (params.FORCE_NEW_MESH != null) or (print_min_x < last_area_start_x) or (print_max_x > last_area_end_x) or (print_min_y < last_area_start_y) or (print_max_y > last_area_end_y) %} + {% if klicky_available %} + _CheckProbe action=query + Attach_Probe + {% elif euclid_available %} + DEPLOY_PROBE + {% endif %} + {% if (print_min_x < print_max_x) and (print_min_y < print_max_y) %} + + # Get bed_mesh config (probe count, mesh_min and mesh_max for x and y + {% set bedMeshConfig = printer['configfile'].config["bed_mesh"] %} + {% set minimum_probe_count = 3 %} + {% if bedMeshConfig.algorithm == "bicubic" %} + {% set minimum_probe_count = 5 %} + {% endif %} + {% set probe_count = bedMeshConfig.probe_count.split(",") %} + {% set probe_count_x = probe_count[0]|int %} + {% if probe_count.__len__() > 1 %} + {% set probe_count_y = probe_count[1]|int %} + {% else %} + {% set probe_count_y = probe_count_x|int %} + {% endif %} + {% set relative_reference_index = bedMeshConfig.relative_reference_index %} + {% set mesh_min_x = bedMeshConfig.mesh_min.split(",")[0]|float %} + {% set mesh_min_y = bedMeshConfig.mesh_min.split(",")[1]|float %} + {% set mesh_max_x = bedMeshConfig.mesh_max.split(",")[0]|float %} + {% set mesh_max_y = bedMeshConfig.mesh_max.split(",")[1]|float %} + + # If print area X is smaller than 50% of the bed size, change to to 3 probe counts for X instead of the default + {% if print_max_x - print_min_x < (mesh_max_x - mesh_min_x) * 0.50 %} + {% set probe_count_x = minimum_probe_count %} + {% endif %} + + # If print area Y is smaller than 50% of the bed size, change to to 3 probe counts for Y instead of the default + {% if print_max_y - print_min_y < (mesh_max_y - mesh_min_y) * 0.50 %} + {% set probe_count_y = minimum_probe_count %} + {% endif %} + + {% if print_min_x - buffer >= mesh_min_x %} + {% set mesh_min_x = print_min_x - buffer %} + {% endif %} + + {% if print_min_y - buffer >= mesh_min_y %} + {% set mesh_min_y = print_min_y - buffer %} + {% endif %} + + {% if print_max_x + buffer <= mesh_max_x %} + {% set mesh_max_x = print_max_x + buffer %} + {% endif %} + + {% if print_max_y + buffer <= mesh_max_y %} + {% set mesh_max_y = print_max_y + buffer %} + {% endif %} + + { action_respond_info("mesh_min: %s,%s" % (mesh_min_x, mesh_min_y)) } + { action_respond_info("mesh_max: %s,%s" % (mesh_max_x, mesh_max_y)) } + { action_respond_info("probe_count: %s,%s" % (probe_count_x,probe_count_y)) } + + ; Set variables so they're available outside of macro + SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=last_area_start_x VALUE={print_min_x} + SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=last_area_start_y VALUE={print_min_y} + SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=last_area_end_x VALUE={print_max_x} + SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=last_area_end_y VALUE={print_max_y} + + {% if printer["gcode_macro status_meshing"] != null %} + status_meshing + {% endif %} + + {% if relative_reference_index == 0 or relative_reference_index == null %} + _BED_MESH_CALIBRATE mesh_min={mesh_min_x},{mesh_min_y} mesh_max={mesh_max_x},{mesh_max_y} probe_count={probe_count_x},{probe_count_y} + {% else %} + {% set relative_reference_index = ((probe_count_x * probe_count_y - 1) / 2)|int %} + { action_respond_info("relative_reference_index: %s" % relative_reference_index) } + _BED_MESH_CALIBRATE mesh_min={mesh_min_x},{mesh_min_y} mesh_max={mesh_max_x},{mesh_max_y} probe_count={probe_count_x},{probe_count_y} relative_reference_index={relative_reference_index} + {% endif %} + {% else %} + {% if printer["gcode_macro status_meshing"] != null %} + status_meshing + {% endif %} + _BED_MESH_CALIBRATE + {% endif %} + {% if klicky_available %} + Dock_Probe + {% elif euclid_available %} + STOW_PROBE + {% endif %} + {% else %} + { action_respond_info("No need to recreate Bed Mesh since it's same as current mesh or smaller") } + {% endif %} + {% else %} + {% if klicky_available %} + _CheckProbe action=query + Attach_Probe + {% elif euclid_available %} + STOW_PROBE + {% endif %} + {% if printer["gcode_macro status_meshing"] != null %} + STATUS_MESHING + {% endif %} + _BED_MESH_CALIBRATE + {% if klicky_available %} + Dock_Probe + {% endif %} + {% if euclid_available %} + STOW_PROBE + {% endif %} + {% endif %} + {% if printer["gcode_macro status_ready"] != null %} + STATUS_READY + {% endif %} + SET_GCODE_VARIABLE MACRO=_KNOMI_STATUS VARIABLE=probing VALUE=False \ No newline at end of file diff --git a/macros/calibrate_flow.cfg b/macros/calibrate_flow.cfg new file mode 100644 index 0000000..fd1f705 --- /dev/null +++ b/macros/calibrate_flow.cfg @@ -0,0 +1,262 @@ +######################################### +###### FLOW MULTIPLIER CALIBRATION ###### +######################################### +# Written by Frix_x#0161 # +# @version: 1.5 + +# CHANGELOG: +# v1.5: moved the install notes into a proper markdown file in: doc > features > flow_calibration.md +# v1.4: fix issue when extrude_factor is != 1 +# v1.3: fix the logging +# v1.2: fix for those using absolute extrusion that leads to an error +# v1.1: added part cooling fan control and some speed optimizations +# v1.0: first flow calibration macro + +# ------------------------------------------------------------------------------------------------------------------------- +# If you want to use it into your own config, please install it as a standalone macro as described in the +# installation section of this file: doc > features > flow_calibration.md +# ------------------------------------------------------------------------------------------------------------------------- + +### What is it ? ### +# The main reason for this set of macros is to get a filament and slicer agnostic way to calibrate the flow extrusion multiplier. +# The goal is to make it easy to set, share and use it. + +# This macro is parametric and most of the values can be adjusted with their respective input parameters. +# It can be called without any parameters - in which case the default values would be used - or with any combination of parameters as desired. + +# Feel free to ping me on Discord (Frix_x#0161) if you need help or have any comments to improve it :) + +# https://github.com/yomgui1/klipper-voron-config/blob/main/doc/features/flow_calibration.md?ysclid=lzuo22xrfl138875688 + +# =========================================================================================================== +# DO NOT MODIFY THOSE VARIABLES (they are used internaly by the flow calibration macro) +[gcode_macro _FLOW_CALIB_VARIABLES] +variable_last_shell_thickness: 0.0 +variable_last_evalue: 0.0 +gcode: + +[gcode_macro FLOW_MULTIPLIER_CALIBRATION] +description: Print a small tower to calibrate the extrusion flow multiplier by measuring the shell +gcode: + # + # PARAMETERS + # + {% set do_raft = params.DO_RAFT|default(1)|int %} # whether to print a raft or not + {% set do_retract = params.DO_RECTRACT|default(0)|int %} # whether to enable retract/unrectract on travel moves + {% set print_size = params.PRINT_SIZE|default(40)|int %} # size of the printed object on the build plate + {% set print_height = params.HEIGHT|default(15)|int %} # height of the printed object + {% set corner_radius = params.CORNER_RADIUS|default(8)|int %} # radius of the corners to smooth the shell and toolpath + {% set number_of_perimeters = params.PERIMETERS|default(2)|int %} # number of perimeters to print the shell + {% set fan_speed = params.FAN_SPEED|default(20)|int %} # part cooling fan speed in percent (0-100) + + {% set e_multiplier = params.EXTRUSION_MULTIPLIER|default(1.00)|float %} # extrusion multiplier for the shell + {% set filament_diameter = params.FILAMENT_DIAMETER|default(1.75)|float %} # filament diameter + {% set extrusion_width = params.EXTRUSION_WIDTH|default(0.4)|float %} # extrusion width goal for one line + {% set layer_height = params.LAYER_HEIGHT|default(0.2)|float %} # layer height for the print + + {% set retract_length = params.RETRACT_LENGTH|default(0.5)|float %} # how much to retract when traveling between print moves + {% set initial_purge = params.PURGE_MM|default(1)|int %} # mm of filament to purge before printing. set to 0 to disable + {% set z_hop_height = 2 * layer_height %} + + {% set feedrate_print = params.CONTROL_SPEED|default(100)|int * 60 %} # print feedrate + {% set feedrate_travel = params.TRAVEL_SPEED|default(200)|int * 60 %} # travel feedrate between print moves + {% set feedrate_raft = params.RAFT_SPEED|default(60)|int * 60 %} # print feedrate for printing raft + {% set feedrate_z = params.Z_LIFT_SPEED|default(20)|int * 60 %} # z axis travel feedrate + {% set feedrate_retract = params.RETRACT_SPEED|default(50)|int * 60 %} # retract and deretract feedrate + + # + # COMPUTED VALUES + # + {% set e_per_mm = ((extrusion_width - layer_height) * layer_height + 3.14159 * (layer_height / 2)**2) / (3.14159 * (filament_diameter / 2)**2) %} # computed E factor (similar to Slic3r/PrusaSlicer/SuperSlicer) + {% set spacing = extrusion_width - layer_height * (1 - 3.14159 / 4) %} # line spacing during the print + {% set shell_thickness = extrusion_width + (number_of_perimeters|float - 1) * spacing %} # theoric shell thickness + + {% set max_x = printer.toolhead.axis_maximum.x|float %} + {% set max_y = printer.toolhead.axis_maximum.y|float %} + {% set x_start = max_x / 2 - print_size / 2 %} + {% set y_start = max_y / 2 - print_size / 2 %} + {% set x_end = x_start + print_size %} + {% set y_end = y_start + print_size %} + + {% set num_raft_lines = ([print_size, max_x]|min / spacing)|round(0, 'floor')|int %} + {% set raft_size = num_raft_lines * spacing %} + + # + # STARTING... + # + {action_respond_info("")} + {action_respond_info("Starting extrusion flow calibration print")} + {action_respond_info("This operation can not be interrupted by normal means. Hit the \"emergency stop\" button to stop it if needed")} + {action_respond_info("")} + {action_respond_info("Exrusion multiplier used: %.4f" % e_multiplier)} + {action_respond_info("Number of perimeters to print: %d" % number_of_perimeters)} + {action_respond_info("THEORIC SHELL THICKNESS: %.4f" % shell_thickness)} + {action_respond_info("")} + {action_respond_info("Measure the shell thickness using a caliper or micrometer. Then call the computation macro with the measured value:")} + {action_respond_info("COMPUTE_FLOW_MULTIPLIER MEASURED_THICKNESS=xxx.xxx")} + {action_respond_info("")} + + SAVE_GCODE_STATE NAME=STATE_FLOW_MULTIPLIER_CALIBRATION + + # + # set variables for later computation + # + SET_GCODE_VARIABLE MACRO=_FLOW_CALIB_VARIABLES VARIABLE=last_shell_thickness VALUE={shell_thickness} + SET_GCODE_VARIABLE MACRO=_FLOW_CALIB_VARIABLES VARIABLE=last_evalue VALUE={e_multiplier} + + # + # purging before raft + # + G90 + M83 + G92 E0.0 + G0 X{x_start} Y{y_start - 5} Z{layer_height} F{feedrate_travel} # move at the start position to do a purge line + + G91 # use relative coordinates for the prime line + G1 E{initial_purge} F{5 * 60} + G1 X{raft_size} E{raft_size * e_per_mm * 1.5} F{feedrate_raft / 2} # print prime line + G1 Y-{extrusion_width} E{extrusion_width * e_per_mm} F{feedrate_raft / 2} # move to next line + G1 X-{raft_size} E{raft_size * e_per_mm} F{feedrate_raft / 2} # print second prime line + + G1 E-{retract_length} F{feedrate_retract} # retract + G0 Z{z_hop_height} F{feedrate_z} # z-hop + + G90 # back to absolute coordinates + G0 X{x_start} Y{y_start} F{feedrate_travel} # move to start position + G1 Z{layer_height} F{feedrate_z} # move to print height + G1 E{retract_length} F{feedrate_retract} # unretract + + # set extrude_factor + M221 S{e_multiplier * 100} + + # + # print the raft + # + {% if do_raft == 1 %} + G91 # use relative coordinates for the raft + {% for curr_raft_line in range(1, num_raft_lines + 2) %} + # print a raft line with alternating direction + G1 Y{loop.cycle(1.0, -1.0) * raft_size} E{raft_size * e_per_mm} F{feedrate_raft} + + # spacing move + {% if not loop.last %} + G1 X{spacing} E{spacing * e_per_mm} F{feedrate_raft} + {% endif %} + {% endfor %} + + G1 E-{retract_length} F{feedrate_retract} # retract + G0 Z{z_hop_height} F{feedrate_z} # z-hop + G90 # back to absolute coordinates + {% endif %} + + # + # print the shell + # + G90 + M106 S{fan_speed * 255 / 100} + + # for each layer + {% for curr_layer in range(1, (print_height / layer_height)|round|int) %} + G0 X{x_start + corner_radius} Y{y_start} F{feedrate_travel} # move to XY start position + G1 Z{(curr_layer * layer_height) + (layer_height if do_raft == 1 else 0)} F{feedrate_z} # move to Z start position + + # print one layer of the shell (in a for loop to do all the perimeters of one layer) + {% for perim_num in range(number_of_perimeters) %} + # compute values for the current perimeter (offset and radius) + {% set perim_offset = perim_num * spacing %} + {% set perim_radius = corner_radius - (perim_num * spacing) %} + + # start position of the current perimeter + G1 X{x_start + corner_radius} Y{y_start + perim_offset} F{feedrate_travel} + {% if do_retract == 1 %} + G1 E{retract_length} F{feedrate_retract} # unretract + {% endif %} + + # print the perimeter using the offset and radius computed + G1 X{x_end - corner_radius} Y{y_start + perim_offset} E{(print_size - (2 * corner_radius)) * e_per_mm} F{feedrate_print} + G3 X{x_end - perim_offset} Y{y_start + corner_radius} J{perim_radius} E{(3.14159 / 2) * perim_radius * e_per_mm} F{feedrate_print} + G1 X{x_end - perim_offset} Y{y_end - corner_radius} E{(print_size - (2 * corner_radius)) * e_per_mm} F{feedrate_print} + G3 X{x_end - corner_radius} Y{y_end - perim_offset} I-{perim_radius} E{(3.14159 / 2) * perim_radius * e_per_mm} F{feedrate_print} + G1 X{x_start + corner_radius} Y{y_end - perim_offset} E{(print_size - (2 * corner_radius)) * e_per_mm} F{feedrate_print} + G3 X{x_start + perim_offset} Y{y_end - corner_radius} J-{perim_radius} E{(3.14159 / 2) * perim_radius * e_per_mm} F{feedrate_print} + G1 X{x_start + perim_offset} Y{y_start + corner_radius} E{(print_size - (2 * corner_radius)) * e_per_mm} F{feedrate_print} + G3 X{x_start + corner_radius} Y{y_start + perim_offset} I{perim_radius} E{(3.14159 / 2) * perim_radius * e_per_mm} F{feedrate_print} + + {% if do_retract == 1 %} + G1 E-{retract_length} F{feedrate_retract} # retract + {% endif %} + {% endfor %} + + {% if do_retract == 1 %} + G91 + G0 Z{z_hop_height} F{feedrate_z} + G90 + {% endif %} + {% endfor %} + + # + # retract and move away + # + G1 E-{retract_length} F{feedrate_retract} + G91 + G0 Z20 F{feedrate_travel} + + RESTORE_GCODE_STATE NAME=STATE_FLOW_MULTIPLIER_CALIBRATION + + +[gcode_macro COMPUTE_FLOW_MULTIPLIER] +description: Compute a new flow multiplier by using the measured shell thickness on the calibration print +gcode: + {% set evalue = params.OLD_EXTRUSION_MULTIPLIER|default(0.0)|float %} # extrusion multiplier used for the calibration print + {% set theorical_thickness = params.THEORICAL_THICKNESS|default(0.0)|float %} # theorical shell thickness + {% set measured_thickness = params.MEASURED_THICKNESS|default(0.0)|float %} # measured shell thickness on the calibration print + + # if there is no OLD_EXTRUSION_MULTIPLIER passed as param, get the one from the last print calib run + {% if evalue == 0.0 %} + {% set last_evalue = printer["gcode_macro _FLOW_CALIB_VARIABLES"].last_evalue %} + + # then, if there is also no evalue saved from the last run, alert user + {% if last_evalue == 0.0 %} + {action_respond_info("It seems that no calibration print was run prior to this (or a restart of Klipper occured).")} + {action_respond_info("You can still manually use it by calling again this macro like that:")} + {action_respond_info("COMPUTE_FLOW_MULTIPLIER OLD_EXTRUSION_MULTIPLIER=xxx.xxx THEORICAL_THICKNESS=xxx.xxx MEASURED_THICKNESS=xxx.xxx")} + {action_raise_error("not enough data to perform the computation of the new flow !")} + {% else %} + {% set final_evalue = last_evalue %} + {action_respond_info("Using OLD_EXTRUSION_MULTIPLIER: %.3f" % final_evalue)} + {% endif %} + {% else %} + {% set final_evalue = evalue %} + {action_respond_info("Using OLD_EXTRUSION_MULTIPLIER: %.3f" % final_evalue)} + {% endif %} + + # similarly, if there is no THEORICAL_THICKNESS passed as param, get the one from the last print calib run + {% if theorical_thickness == 0.0 %} + {% set last_shell_thickness = printer["gcode_macro _FLOW_CALIB_VARIABLES"].last_shell_thickness %} + + # then, if there is also no evalue saved from the last run, alert user + {% if last_shell_thickness == 0.0 %} + {action_respond_info("It seems that no calibration print was run prior to this (or a restart of Klipper occured).")} + {action_respond_info("You can still manually use it by calling again this macro like that:")} + {action_respond_info("COMPUTE_FLOW_MULTIPLIER OLD_EXTRUSION_MULTIPLIER=xxx.xxx THEORICAL_THICKNESS=xxx.xxx MEASURED_THICKNESS=xxx.xxx")} + {action_raise_error("not enough data to perform the computation of the new flow !")} + {% else %} + {% set final_theorical_thickness = last_shell_thickness %} + {action_respond_info("Using THEORICAL_THICKNESS: %.3f" % final_theorical_thickness)} + {% endif %} + {% else %} + {% set final_theorical_thickness = theorical_thickness %} + {action_respond_info("Using THEORICAL_THICKNESS: %.3f" % final_theorical_thickness)} + {% endif %} + + # use the measured thickness from the user to compute a new flow value + {% if measured_thickness == 0.0 %} + {action_respond_info("You must use a caliper or micrometer to measure the calibration print shell thickness and call this macro with the measured value !!!")} + {action_respond_info("COMPUTE_FLOW_MULTIPLIER MEASURED_THICKNESS=xxx.xxx")} + {action_raise_error("not enough data to perform the computation of the new flow !")} + {% else %} + {% set new_evalue = final_theorical_thickness * final_evalue / measured_thickness %} + {action_respond_info("NEW COMPUTED FLOW VALUE: %.3f" % new_evalue)} + {action_respond_info("Use this new value as extrusion multiplier in your slicer of choice")} + {action_respond_info("")} + {% endif %} diff --git a/macros/homing.cfg b/macros/homing.cfg new file mode 100644 index 0000000..42bae7b --- /dev/null +++ b/macros/homing.cfg @@ -0,0 +1,174 @@ +[gcode_macro MOVE_UP] +variable_set_kinematic_z: 20 +variable_up_z: 10 +gcode: + SAVE_GCODE_STATE NAME=my_move_up_state + {% if not 'z' in printer.toolhead.homed_axes %} + SET_KINEMATIC_POSITION Z={set_kinematic_z} + {% endif %} + G91 + G0 Z{up_z} F1200 + RESTORE_GCODE_STATE NAME=my_move_up_state + +[gcode_macro _HOME_X] +variable_homing_current: 0.49 +variable_start_retract: 15 +gcode: + # Always use consistent run_current on A/B steppers during sensorless homing + {% set RUN_CURRENT_X = printer.configfile.settings['tmc2240 stepper_x'].run_current|float %} + {% set RUN_CURRENT_Y = printer.configfile.settings['tmc2240 stepper_y'].run_current|float %} + SET_TMC_CURRENT STEPPER=stepper_x CURRENT={homing_current} + SET_TMC_CURRENT STEPPER=stepper_y CURRENT={homing_current} + + M117 Homing X... + + SET_KINEMATIC_POSITION X={start_retract} + G91 + G1 X-{start_retract} F1200 + + M400 + G28 X + + G91 + G1 X-40 F1200 + #G4 P500 + + M117 + + SET_TMC_CURRENT STEPPER=stepper_x CURRENT={RUN_CURRENT_X} + SET_TMC_CURRENT STEPPER=stepper_y CURRENT={RUN_CURRENT_Y} + + +[gcode_macro _HOME_Y] +variable_homing_current: 0.49 +variable_start_retract: 15 +gcode: + # Set current for sensorless homing + {% set RUN_CURRENT_X = printer.configfile.settings['tmc2240 stepper_x'].run_current|float %} + {% set RUN_CURRENT_Y = printer.configfile.settings['tmc2240 stepper_y'].run_current|float %} + SET_TMC_CURRENT STEPPER=stepper_x CURRENT={homing_current} + SET_TMC_CURRENT STEPPER=stepper_y CURRENT={homing_current} + #SET_TMC_FIELD FIELD=SGT STEPPER=stepper_x VALUE=1 + #G4 P1000 + + M117 Homing Y... + + SET_KINEMATIC_POSITION Y={start_retract} + G91 + G1 Y-{start_retract} F1200 + + M400 + G28 Y + + G91 + G1 Y-10 F1200 + #G4 P500 + + M117 + # Set current during print + SET_TMC_CURRENT STEPPER=stepper_x CURRENT={RUN_CURRENT_X} + SET_TMC_CURRENT STEPPER=stepper_y CURRENT={RUN_CURRENT_Y} + + +[homing_override] +axes: xyz +gcode: + {% set home_all = 'X' not in params and 'Y' not in params and 'Z' not in params %} + {% set move_x = params.X|default(printer.toolhead.axis_maximum.y/2)|int %} + {% set move_y = params.Y|default(printer.toolhead.axis_maximum.y/2)|int %} + {% if params.Z == '' %} + {% set move_z = 10 %} + {% else %} + {% set move_z = params.Z|default(10)|int %} + {% endif %} + + SET_GCODE_VARIABLE MACRO=_KNOMI_STATUS VARIABLE=homing VALUE=True + STATUS_HOMING + + {% if home_all or 'X' or 'Y' in params %} + INIT_TMC STEPPER=stepper_y + INIT_TMC STEPPER=stepper_x + {% endif %} + + {% if home_all or 'Z' in params %} + BED_MESH_CLEAR + MOVE_UP + {% endif %} + + {% if home_all or 'X' in params %} + _HOME_X + {% endif %} + + {% if home_all or 'Y' in params %} + _HOME_Y + {% endif %} + + + G90 + + {% if home_all or 'Z' in params %} + G1 X{printer.toolhead.axis_maximum.x/2} Y{printer.toolhead.axis_maximum.y/2} F12000 #probe point + G28 Z + G1 Z{move_z} F1200 + {% endif %} + + #{ action_respond_info("Move X,Y => {},{}".format(params.X,params.Y)) } + + {% if params.X %} + + G1 X{move_x} F12000 + {% endif %} + + {% if params.Y %} + G1 Y{move_y} F12000 + {% endif %} + + STATUS_OFF + SET_GCODE_VARIABLE MACRO=_KNOMI_STATUS VARIABLE=homing VALUE=False + +[gcode_macro CG28] +gcode: + {% if "xyz" not in printer.toolhead.homed_axes %} + G28 + {% endif %} + +[gcode_macro PARKFRONT] +gcode: + CG28 ; home if not already homed + SAVE_GCODE_STATE NAME=PARKFRONT + G90 ; absolute positioning + G0 X{printer.toolhead.axis_maximum.x/2} Y{printer.toolhead.axis_minimum.y+5} Z{printer.toolhead.axis_maximum.z/2} F6000 + RESTORE_GCODE_STATE NAME=PARKFRONT + +[gcode_macro PARKFRONTLOW] +gcode: + CG28 ; home if not already homed + SAVE_GCODE_STATE NAME=PARKFRONT + G90 ; absolute positioning + G0 X{printer.toolhead.axis_maximum.x/2} Y{printer.toolhead.axis_minimum.y+5} Z20 F6000 + RESTORE_GCODE_STATE NAME=PARKFRONT + +[gcode_macro PARKREAR] +gcode: + CG28 ; home if not already homed + SAVE_GCODE_STATE NAME=PARKREAR + G90 ; absolute positioning + G0 X{printer.toolhead.axis_minimum.x+10} Y{printer.toolhead.axis_maximum.y-10} Z{printer.toolhead.axis_maximum.z-50} F6000 + RESTORE_GCODE_STATE NAME=PARKREAR + +[gcode_macro PARKCENTER] +gcode: + CG28 ; home if not already homed + SAVE_GCODE_STATE NAME=PARKCENTER + G90 ; absolute positioning + G0 X{printer.toolhead.axis_maximum.x/2} Y{printer.toolhead.axis_maximum.y/2} Z{printer.toolhead.axis_maximum.z/2} F6000 + RESTORE_GCODE_STATE NAME=PARKCENTER + +[gcode_macro PARKBED] +gcode: + CG28 ; home if not already homed + SAVE_GCODE_STATE NAME=PARKBED + G90 ; absolute positioning + G0 X{printer.toolhead.axis_maximum.x/2} Y{printer.toolhead.axis_maximum.y/2} Z15 F6000 + RESTORE_GCODE_STATE NAME=PARKBED + diff --git a/macros/homing.cfg.old b/macros/homing.cfg.old new file mode 100644 index 0000000..a42e7a0 --- /dev/null +++ b/macros/homing.cfg.old @@ -0,0 +1,174 @@ +[gcode_macro MOVE_UP] +variable_set_kinematic_z: 20 +variable_up_z: 10 +gcode: + SAVE_GCODE_STATE NAME=my_move_up_state + {% if not 'z' in printer.toolhead.homed_axes %} + SET_KINEMATIC_POSITION Z={set_kinematic_z} + {% endif %} + G91 + G0 Z{up_z} F1200 + RESTORE_GCODE_STATE NAME=my_move_up_state + +[gcode_macro _HOME_X] +variable_homing_current: 0.65 +variable_start_retract: 15 +gcode: + # Always use consistent run_current on A/B steppers during sensorless homing + {% set RUN_CURRENT_X = printer.configfile.settings['tmc2240 stepper_x'].run_current|float %} + {% set RUN_CURRENT_Y = printer.configfile.settings['tmc2240 stepper_y'].run_current|float %} + SET_TMC_CURRENT STEPPER=stepper_x CURRENT={homing_current} + SET_TMC_CURRENT STEPPER=stepper_y CURRENT={homing_current} + + M117 Homing X... + + SET_KINEMATIC_POSITION X={start_retract} + G91 + G1 X-{start_retract} F1200 + + M400 + G28 X + + G91 + G1 X-60 F1200 + #G4 P500 + + M117 + + SET_TMC_CURRENT STEPPER=stepper_x CURRENT={RUN_CURRENT_X} + SET_TMC_CURRENT STEPPER=stepper_y CURRENT={RUN_CURRENT_Y} + + +[gcode_macro _HOME_Y] +variable_homing_current: 0.65 +variable_start_retract: 15 +gcode: + # Set current for sensorless homing + {% set RUN_CURRENT_X = printer.configfile.settings['tmc2240 stepper_x'].run_current|float %} + {% set RUN_CURRENT_Y = printer.configfile.settings['tmc2240 stepper_y'].run_current|float %} + SET_TMC_CURRENT STEPPER=stepper_x CURRENT={homing_current} + SET_TMC_CURRENT STEPPER=stepper_y CURRENT={homing_current} + #SET_TMC_FIELD FIELD=SGT STEPPER=stepper_x VALUE=1 + #G4 P1000 + + M117 Homing Y... + + SET_KINEMATIC_POSITION Y={start_retract} + G91 + G1 Y-{start_retract} F1200 + + M400 + G28 Y + + G91 + G1 Y-10 F1200 + #G4 P500 + + M117 + # Set current during print + SET_TMC_CURRENT STEPPER=stepper_x CURRENT={RUN_CURRENT_X} + SET_TMC_CURRENT STEPPER=stepper_y CURRENT={RUN_CURRENT_Y} + + +[homing_override] +axes: xyz +gcode: + {% set home_all = 'X' not in params and 'Y' not in params and 'Z' not in params %} + {% set move_x = params.X|default(printer.toolhead.axis_maximum.y/2)|int %} + {% set move_y = params.Y|default(printer.toolhead.axis_maximum.y/2)|int %} + {% if params.Z == '' %} + {% set move_z = 10 %} + {% else %} + {% set move_z = params.Z|default(10)|int %} + {% endif %} + + SET_GCODE_VARIABLE MACRO=_KNOMI_STATUS VARIABLE=homing VALUE=True + STATUS_HOMING + + {% if home_all or 'X' or 'Y' in params %} + INIT_TMC STEPPER=stepper_y + INIT_TMC STEPPER=stepper_x + {% endif %} + + {% if home_all or 'Z' in params %} + BED_MESH_CLEAR + MOVE_UP + {% endif %} + + {% if home_all or 'X' in params %} + _HOME_X + {% endif %} + + {% if home_all or 'Y' in params %} + _HOME_Y + {% endif %} + + + G90 + + {% if home_all or 'Z' in params %} + G1 X{printer.toolhead.axis_maximum.x/2} Y{printer.toolhead.axis_maximum.y/2} F12000 #probe point + G28 Z + G1 Z{move_z} F1200 + {% endif %} + + #{ action_respond_info("Move X,Y => {},{}".format(params.X,params.Y)) } + + {% if params.X %} + + G1 X{move_x} F12000 + {% endif %} + + {% if params.Y %} + G1 Y{move_y} F12000 + {% endif %} + + STATUS_OFF + SET_GCODE_VARIABLE MACRO=_KNOMI_STATUS VARIABLE=homing VALUE=False + +[gcode_macro CG28] +gcode: + {% if "xyz" not in printer.toolhead.homed_axes %} + G28 + {% endif %} + +[gcode_macro PARKFRONT] +gcode: + CG28 ; home if not already homed + SAVE_GCODE_STATE NAME=PARKFRONT + G90 ; absolute positioning + G0 X{printer.toolhead.axis_maximum.x/2} Y{printer.toolhead.axis_minimum.y+5} Z{printer.toolhead.axis_maximum.z/2} F6000 + RESTORE_GCODE_STATE NAME=PARKFRONT + +[gcode_macro PARKFRONTLOW] +gcode: + CG28 ; home if not already homed + SAVE_GCODE_STATE NAME=PARKFRONT + G90 ; absolute positioning + G0 X{printer.toolhead.axis_maximum.x/2} Y{printer.toolhead.axis_minimum.y+5} Z20 F6000 + RESTORE_GCODE_STATE NAME=PARKFRONT + +[gcode_macro PARKREAR] +gcode: + CG28 ; home if not already homed + SAVE_GCODE_STATE NAME=PARKREAR + G90 ; absolute positioning + G0 X{printer.toolhead.axis_minimum.x+10} Y{printer.toolhead.axis_maximum.y-10} Z{printer.toolhead.axis_maximum.z-50} F6000 + RESTORE_GCODE_STATE NAME=PARKREAR + +[gcode_macro PARKCENTER] +gcode: + CG28 ; home if not already homed + SAVE_GCODE_STATE NAME=PARKCENTER + G90 ; absolute positioning + G0 X{printer.toolhead.axis_maximum.x/2} Y{printer.toolhead.axis_maximum.y/2} Z{printer.toolhead.axis_maximum.z/2} F6000 + RESTORE_GCODE_STATE NAME=PARKCENTER + +[gcode_macro PARKBED] +gcode: + CG28 ; home if not already homed + SAVE_GCODE_STATE NAME=PARKBED + G90 ; absolute positioning + G0 X{printer.toolhead.axis_maximum.x/2} Y{printer.toolhead.axis_maximum.y/2} Z15 F6000 + RESTORE_GCODE_STATE NAME=PARKBED + diff --git a/macros/main.cfg b/macros/main.cfg new file mode 100644 index 0000000..fa7462b --- /dev/null +++ b/macros/main.cfg @@ -0,0 +1,552 @@ +[include stealthburner_leds.cfg] + + +[gcode_macro _KNOMI_STATUS] +variable_homing: False +variable_probing: False +variable_qgling: False +variable_heating_nozzle: False +variable_heating_bed: False +gcode: + + +[include homing.cfg] +#[include private.cfg] +#[include nozzle_scrub.cfg] +[include ../KAMP_Settings.cfg] +#[include ../KAMP/KAMP_Settings.cfg] +[include tools.cfg] + + + + +[delayed_gcode init_printer] +initial_duration: 1 +gcode: + STATUS_READY + SET_FAN_SPEED FAN=SoC SPEED=0.3 + #SET_FILAMENT_SENSOR SENSOR=SFS_T0 ENABLE=0 + +[delayed_gcode _INIT_TIMELAPSE_CHECK_TIME] +initial_duration: 1 +gcode: SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=check_time VALUE=0.5 + +[gcode_button ps_lose] +pin: PC2 +press_gcode: + { action_respond_info("Power lose!") } + SHUTDOWN + +[gcode_macro SHUTDOWN] +gcode: + SET_PIN PIN=ps_on VALUE=0 + {action_respond_info('action:poweroff')} + {action_call_remote_method("shutdown_machine")} + + +[gcode_macro _CHAMBER_LED_OFF] +gcode: + SET_LED LED="chamber_leds" RED=0 GREEN=0 BLUE=0 SYNC=0 TRANSMIT=1 + +[gcode_macro _CHAMBER_LED_ON] +gcode: + SET_LED LED="chamber_leds" RED=1 GREEN=1 BLUE=1 SYNC=0 TRANSMIT=1 + +[gcode_macro _LED_SWITCH] +gcode: + {% set color_data = printer["neopixel chamber_leds"].color_data %} + {% if color_data[0][0] or color_data[0][1] or color_data[0][2] %} + SET_LED LED="chamber_leds" RED=0 GREEN=0 BLUE=0 SYNC=0 TRANSMIT=1 + {% else %} + SET_LED LED="chamber_leds" RED=1 GREEN=1 BLUE=1 SYNC=0 TRANSMIT=1 + {% endif %} + + +[gcode_button ps_double_click] +pin: !PG13 +press_gcode: + { action_respond_info("Double click!") } + _LED_SWITCH + +[gcode_button ps_triple_click] +pin: !PG12 +press_gcode: + { action_respond_info("Triple click!") } + { action_emergency_stop() } + + +[gcode_macro START_BED_MESH_CALIBRATE] +#rename_existing: _BED_MESH_CALIBRATE +gcode: + STATUS_MESHING + SET_GCODE_VARIABLE MACRO=_KNOMI_STATUS VARIABLE=probing VALUE=True + BED_MESH_CALIBRATE + SET_GCODE_VARIABLE MACRO=_KNOMI_STATUS VARIABLE=probing VALUE=False + STATUS_READY + + +[gcode_macro QUAD_GANTRY_LEVEL] +rename_existing: QUAD_GANTRY_LEVEL_BASE +gcode: + SET_GCODE_VARIABLE MACRO=_KNOMI_STATUS VARIABLE=qgling VALUE=True + STATUS_LEVELING + QUAD_GANTRY_LEVEL_BASE + STATUS_READY + SET_GCODE_VARIABLE MACRO=_KNOMI_STATUS VARIABLE=qgling VALUE=False + +[gcode_macro G32] +gcode: + M117 Homing + BED_MESH_CLEAR + G28 + QUAD_GANTRY_LEVEL + STATUS_CALIBRATING_Z + #G0 X350 Y350 Z30 F3600 + G28 Z + G0 Z10 F3600 + STATUS_READY + M117 + +[gcode_macro SFS_ENABLE] +description: Enable smart filament sensor +gcode: + M117 ENABLING the Smart Filament Sensor + G92 E0 + #SET_FILAMENT_SENSOR SENSOR=SFS_T0 ENABLE=1 + +[gcode_macro SFS_DISABLE] +description: Disable smart filament sensor +gcode: + M117 DISABLING the Smart Filament Sensor + G92 E0 + #SET_FILAMENT_SENSOR SENSOR=SFS_T0 ENABLE=0 + +[gcode_macro PRINT_START] +gcode: + _CHAMBER_LED_ON + #PRINT_MIN={first_layer_print_min[0]},{first_layer_print_min[1]} PRINT_MAX={first_layer_print_max[0]},{first_layer_print_max[1]} + {% set BED_TEMP = params.BED|default(60)|float %} + {% set EXTRUDER_TEMP = params.EXTRUDER|default(210)|float %} + {% set CHAMBER = params.CHAMBER|default(35)|float %} + {% if params.BED_TYPE %} + INIT_BED_TYPE BED_TYPE="{params.BED_TYPE}" + {% endif %} + SAVE_GCODE_STATE NAME=start + M117 Starting... + M140 S{BED_TEMP} + M141 S{CHAMBER} + M109 S150 + M190 S{BED_TEMP} + BED_MESH_CLEAR + G90 # Use absolute coordinates + #SET_GCODE_OFFSET Z=0.0 + G32 + #{% if not 'xyz' in printer.toolhead.homed_axes %} + #G32 ; home all axes + #{% elif not printer.quad_gantry_level.applied %} + #QUAD_GANTRY_LEVEL + #{% else %} + #G28 Z10 + #{% endif %} + START_BED_MESH_CALIBRATE #PRINT_MIN={params.PRINT_MIN} PRINT_MAX={params.PRINT_MAX} FORCE_NEW_MESH=True + #M191 S{CHAMBER} + Smart_Park + M117 Heating... + #M190 S{BED_TEMP} + M109 S{EXTRUDER_TEMP} ; M109 heat and wait for it to reach temp + SFS_ENABLE + M117 + STATUS_CLEANING + VORON_PURGE + STATUS_PRINTING + RESTORE_GCODE_STATE NAME=start + SKEW_PROFILE LOAD=default + #SET_SKEW XY=140.56,141.21,99.82 + + + +[gcode_macro PRINT_END] +# Use PRINT_END for the slicer ending script - please customise for your slicer of choice +variable_retract_amount: 16 # +variable_park_speed: 6000 #3600 +variable_park_xy: [350,350] +variable_up_z: 4 #12 +gcode: + {% set max_velocity = printer.configfile.settings['extruder'].max_extrude_only_velocity * 60 %} + STATUS_BUSY + SET_SKEW CLEAR=1 + M400 ; wait for buffer to clear + G92 E0 ; zero the extruder + G1 E-{retract_amount} F3600 ; retract filament {max_velocity} + G91 ; relative positioning + G0 Z1.00 X20.0 Y20.0 F20000 ; move nozzle to remove stringing + TURN_OFF_HEATERS + M107 ; turn off fan + G1 Z{up_z} F3000 ; move nozzle up 2mm + G90 ; absolute positioning + G0 X{park_xy[0]} Y{park_xy[1]} F{park_speed} ; park nozzle at rear + #BED_MESH_CLEAR + SFS_DISABLE + #M141 S35 + SET_STEPPER_ENABLE STEPPER=extruder ENABLE=0 #disable stepper + STATUS_OFF + SET_VELOCITY_DEFAULT + INIT_BED_TYPE BED_TYPE="None" + M400 + TIMELAPSE_TAKE_FRAME + + + +[gcode_macro SET_VELOCITY_DEFAULT] +gcode: + SET_VELOCITY_LIMIT ACCEL={printer.configfile.settings.printer.max_accel} + SET_VELOCITY_LIMIT ACCEL_TO_DECEL={printer.configfile.settings.printer.max_accel / 2} + SET_VELOCITY_LIMIT SQUARE_CORNER_VELOCITY={printer.configfile.settings.printer.square_corner_velocity} + + +[gcode_macro M141] +gcode: + {% set s = params.S|default(0)|float %} + SET_TEMPERATURE_FAN_TARGET temperature_fan=chamber target={s} + +[gcode_macro M191] +gcode: + {% set s = params.S|default(0)|float %} + M141 S{s} + TEMPERATURE_WAIT SENSOR="temperature_fan chamber" MINIMUM={s} + + + +[gcode_macro M600] +gcode: + #LCDRGB R=0 G=1 B=0 ; Turn LCD green + PAUSE ; Pause + +[gcode_macro PAUSE] +rename_existing: BASE_PAUSE +gcode: + # Parameters + {% set z = params.Z|default(10)|int %} ; z hop amount + + {% if printer['pause_resume'].is_paused|int == 0 %} + SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=zhop VALUE={z} ; set z hop variable for reference in resume macro + SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=etemp VALUE={printer['extruder'].target} ; set hotend temp variable for reference in resume macro + + SFS_DISABLE ; disable filament sensor + SAVE_GCODE_STATE NAME=PAUSE ; save current print position for resume + BASE_PAUSE ; pause print + {% if (printer.gcode_move.position.z + z) < printer.toolhead.axis_maximum.z %} ; check that zhop doesn't exceed z max + G91 ; relative positioning + G1 Z{z} F900 ; raise Z up by z hop amount + {% else %} + { action_respond_info("Pause zhop exceeds maximum Z height.") } ; if z max is exceeded, show message and set zhop value for resume to 0 + SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=zhop VALUE=0 + {% endif %} + G90 ; absolute positioning + G1 X{printer.toolhead.axis_maximum.x/2} Y{printer.toolhead.axis_minimum.y+5} F6000 ; park toolhead at front center + SAVE_GCODE_STATE NAME=PAUSEPARK ; save parked position in case toolhead is moved during the pause (otherwise the return zhop can error) + M104 S0 ; turn off hotend + SET_IDLE_TIMEOUT TIMEOUT=43200 ; set timeout to 12 hours + {% endif %} + +[gcode_macro RESUME] +rename_existing: BASE_RESUME +variable_zhop: 0 +variable_etemp: 0 +gcode: + # Parameters + {% set e = params.E|default(2.5)|int %} + + {% if printer['pause_resume'].is_paused|int == 1 %} + SFS_ENABLE ; enable filament sensor + #RESETRGB ; reset LCD color + SET_IDLE_TIMEOUT TIMEOUT={printer.configfile.settings.idle_timeout.timeout} ; set timeout back to configured value + {% if etemp > 0 %} + M109 S{etemp|int} ; wait for hotend to heat back up + {% endif %} + RESTORE_GCODE_STATE NAME=PAUSEPARK MOVE=1 MOVE_SPEED=100 ; go back to parked position in case toolhead was moved during pause (otherwise the return zhop can error) + G91 ; relative positioning + M83 ; relative extruder positioning + {% if printer[printer.toolhead.extruder].temperature >= printer.configfile.settings.extruder.min_extrude_temp %} + G1 Z{zhop * -1} E{e} F900 ; prime nozzle by E, lower Z back down + {% else %} + G1 Z{zhop * -1} F900 ; lower Z back down without priming (just in case we are testing the macro with cold hotend) + {% endif %} + RESTORE_GCODE_STATE NAME=PAUSE MOVE=1 MOVE_SPEED=60 ; restore position + BASE_RESUME ; resume print + {% endif %} + +[gcode_macro CANCEL_PRINT] +description: Cancel the actual running print +rename_existing: CANCEL_PRINT_BASE +gcode: + SET_IDLE_TIMEOUT TIMEOUT={printer.configfile.settings.idle_timeout.timeout} ; + CLEAR_PAUSE + SDCARD_RESET_FILE + PRINT_END + CANCEL_PRINT_BASE + + + +[gcode_macro DUMP_PARAMETERS] +gcode: + {% for name1 in printer %} + {% for name2 in printer[name1] %} + { action_respond_info("printer['%s'].%s = %s" % (name1, name2, printer[name1][name2])) } + {% else %} + { action_respond_info("printer['%s'] = %s" % (name1, printer[name1])) } + {% endfor %} + {% endfor %} + +[gcode_macro M109] +rename_existing: M99109 +gcode: + SET_GCODE_VARIABLE MACRO=_KNOMI_STATUS VARIABLE=heating_nozzle VALUE=True + STATUS_HEATING + {% set s = params.S|float %} + + {% if s != 0 %} + M104 {% for p in params %}{'%s%s' % (p, params[p])}{% endfor %} ; Set hotend temp + TEMPERATURE_WAIT SENSOR=extruder MINIMUM={s} MAXIMUM={s+1} ; Wait for hotend temp (within 1 degree) + {% endif %} + SET_GCODE_VARIABLE MACRO=_KNOMI_STATUS VARIABLE=heating_nozzle VALUE=False + STATUS_OFF + +[gcode_macro M190] +rename_existing: M99190 +gcode: + SET_GCODE_VARIABLE MACRO=_KNOMI_STATUS VARIABLE=heating_bed VALUE=True + STATUS_HEATING + {% set s = params.S|float %} + + {% if s != 0 %} + M140 {% for p in params %}{'%s%s' % (p, params[p])}{% endfor %} ; Set bed temp + TEMPERATURE_WAIT SENSOR=heater_bed MINIMUM={s} MAXIMUM={s+1} ; Wait for bed temp (within 1 degree) + {% endif %} + SET_GCODE_VARIABLE MACRO=_KNOMI_STATUS VARIABLE=heating_bed VALUE=False + STATUS_OFF + +[gcode_macro DISABLE_XY] +gcode: + SET_STEPPER_ENABLE STEPPER=stepper_x ENABLE=0 + SET_STEPPER_ENABLE STEPPER=stepper_y ENABLE=0 + +[gcode_macro INIT_BED_TYPE] +variable_bed_z_offset: 0 +variable_bed_types: { 'Textured PEI Plate': 0.00, 'None': 0 } +gcode: + {% set bed_type = params.BED_TYPE|default("None") %} + {% set new_bed_z_offset = bed_types[bed_type] %} + {% if bed_z_offset != 0 %} + SET_GCODE_OFFSET Z_ADJUST={0-bed_z_offset|float} + SET_GCODE_VARIABLE MACRO=INIT_BED_TYPE VARIABLE=bed_z_offset VALUE=0 + {% endif %} + { action_respond_info("Selected bed type: {}".format(bed_type)) } + { action_respond_info("Used bed z offset: {}".format(bed_z_offset)) } + {% if new_bed_z_offset %} + { action_respond_info("Use bed type {} with z offset {}".format(bed_type, new_bed_z_offset)) } + SET_GCODE_VARIABLE MACRO=INIT_BED_TYPE VARIABLE=bed_z_offset VALUE={new_bed_z_offset} + SET_GCODE_OFFSET Z_ADJUST={new_bed_z_offset} + {% endif %} + + +[gcode_macro LOAD_FILAMENT] +variable_load_distance: 72 +variable_purge_distance: 0 +gcode: + {% set speed = params.SPEED|default(300) %} + {% set max_velocity = printer.configfile.settings['extruder'].max_extrude_only_velocity * 60 %} + SAVE_GCODE_STATE NAME=load_state + G91 + G92 E0 + G1 E{load_distance} F{max_velocity} # fast-load + G1 E{purge_distance} F{speed} # purge + RESTORE_GCODE_STATE NAME=load_state + +[gcode_macro UNLOAD_FILAMENT] +variable_unload_distance: 76 +variable_purge_distance: 0 +gcode: + {% set speed = params.SPEED|default(300) %} + {% set max_velocity = printer.configfile.settings['extruder'].max_extrude_only_velocity * 60 %} + SAVE_GCODE_STATE NAME=unload_state + G91 + G92 E0 + G1 E{purge_distance} F{speed} # purge + G1 E-{unload_distance} F{max_velocity} # fast-unload + RESTORE_GCODE_STATE NAME=unload_state + + +[gcode_macro test_speed_fast] +gcode: + G28 X0 Y0 + GET_POSITION + G1 X0 Y0 F27000 + G1 X350 Y350 F27000 + G1 X0 Y0 F27000 + G1 X350 Y350 F27000 + + G1 X0 Y350 F36000 + + G1 X350 Y0 F27000 + G1 X0 Y350 F27000 + G1 X350 Y0 F27000 + G1 X0 Y350 F27000 + + G1 X0 Y0 F36000 + G1 X350 Y0 F36000 + G1 X350 Y350 F36000 + G1 X0 Y350 F36000 + G1 X0 Y0 F36000 + #DISABLE_XY + G28 X0 Y0 + GET_POSITION + +[gcode_macro TEST_SPEED] +# Home, get position, throw around toolhead, home again. +# If MCU stepper positions (first line in GET_POSITION) are greater than a full step different (your number of microsteps), then skipping occured. +# We only measure to a full step to accomodate for endstop variance. +# Example: TEST_SPEED SPEED=300 ACCEL=5000 ITERATIONS=10 +# https://github.com/AndrewEllis93/Print-Tuning-Guide/blob/main/articles/determining_max_speeds_accels.md + +description: Test for max speed and acceleration parameters for the printer. Procedure: Home -> ReadPositionFromMCU -> MovesToolhead@Vel&Accel -> Home -> ReadPositionfromMCU + +gcode: + # Speed + {% set speed = params.SPEED|default(printer.configfile.settings.printer.max_velocity)|int %} + # Iterations + {% set iterations = params.ITERATIONS|default(5)|int %} + # Acceleration + {% set accel = params.ACCEL|default(printer.configfile.settings.printer.max_accel)|int %} + # Minimum Cruise Ratio + {% set min_cruise_ratio = params.MIN_CRUISE_RATIO|default(0.5)|float %} + # Bounding inset for large pattern (helps prevent slamming the toolhead into the sides after small skips, and helps to account for machines with imperfectly set dimensions) + {% set bound = params.BOUND|default(20)|int %} + # Size for small pattern box + {% set smallpatternsize = SMALLPATTERNSIZE|default(20)|int %} + + # Large pattern + # Max positions, inset by BOUND + {% set x_min = printer.toolhead.axis_minimum.x + bound %} + {% set x_max = printer.toolhead.axis_maximum.x - bound %} + {% set y_min = printer.toolhead.axis_minimum.y + bound %} + {% set y_max = printer.toolhead.axis_maximum.y - bound %} + + # Small pattern at center + # Find X/Y center point + {% set x_center = (printer.toolhead.axis_minimum.x|float + printer.toolhead.axis_maximum.x|float ) / 2 %} + {% set y_center = (printer.toolhead.axis_minimum.y|float + printer.toolhead.axis_maximum.y|float ) / 2 %} + + # Set small pattern box around center point + {% set x_center_min = x_center - (smallpatternsize/2) %} + {% set x_center_max = x_center + (smallpatternsize/2) %} + {% set y_center_min = y_center - (smallpatternsize/2) %} + {% set y_center_max = y_center + (smallpatternsize/2) %} + + # Save current gcode state (absolute/relative, etc) + SAVE_GCODE_STATE NAME=TEST_SPEED + + # Output parameters to g-code terminal + { action_respond_info("TEST_SPEED: starting %d iterations at speed %d, accel %d" % (iterations, speed, accel)) } + + # Home and get position for comparison later: + M400 # Finish moves - https://github.com/AndrewEllis93/Print-Tuning-Guide/issues/66 + G28 + # QGL if not already QGLd (only if QGL section exists in config) + {% if printer.configfile.settings.quad_gantry_level %} + {% if printer.quad_gantry_level.applied == False %} + QUAD_GANTRY_LEVEL + G28 Z + {% endif %} + {% endif %} + # Move 50mm away from max position and home again (to help with hall effect endstop accuracy - https://github.com/AndrewEllis93/Print-Tuning-Guide/issues/24) + G90 + G1 X{printer.toolhead.axis_maximum.x-50} Y{printer.toolhead.axis_maximum.y-50} F{30*60} + M400 # Finish moves - https://github.com/AndrewEllis93/Print-Tuning-Guide/issues/66 + G28 X Y + G0 X{printer.toolhead.axis_maximum.x-1} Y{printer.toolhead.axis_maximum.y-1} F{30*60} + G4 P1000 + GET_POSITION + + # Go to starting position + G0 X{x_min} Y{y_min} Z{bound + 10} F{speed*60} + + # Set new limits + {% if printer.configfile.settings.printer.minimum_cruise_ratio is defined %} + SET_VELOCITY_LIMIT VELOCITY={speed} ACCEL={accel} MINIMUM_CRUISE_RATIO={min_cruise_ratio} + {% else %} + SET_VELOCITY_LIMIT VELOCITY={speed} ACCEL={accel} ACCEL_TO_DECEL={accel / 2} + {% endif %} + + {% for i in range(iterations) %} + # Large pattern diagonals + G0 X{x_min} Y{y_min} F{speed*60} + G0 X{x_max} Y{y_max} F{speed*60} + G0 X{x_min} Y{y_min} F{speed*60} + G0 X{x_max} Y{y_min} F{speed*60} + G0 X{x_min} Y{y_max} F{speed*60} + G0 X{x_max} Y{y_min} F{speed*60} + + # Large pattern box + G0 X{x_min} Y{y_min} F{speed*60} + G0 X{x_min} Y{y_max} F{speed*60} + G0 X{x_max} Y{y_max} F{speed*60} + G0 X{x_max} Y{y_min} F{speed*60} + + # Small pattern diagonals + G0 X{x_center_min} Y{y_center_min} F{speed*60} + G0 X{x_center_max} Y{y_center_max} F{speed*60} + G0 X{x_center_min} Y{y_center_min} F{speed*60} + G0 X{x_center_max} Y{y_center_min} F{speed*60} + G0 X{x_center_min} Y{y_center_max} F{speed*60} + G0 X{x_center_max} Y{y_center_min} F{speed*60} + + # Small pattern box + G0 X{x_center_min} Y{y_center_min} F{speed*60} + G0 X{x_center_min} Y{y_center_max} F{speed*60} + G0 X{x_center_max} Y{y_center_max} F{speed*60} + G0 X{x_center_max} Y{y_center_min} F{speed*60} + {% endfor %} + + # Restore max speed/accel/accel_to_decel to their configured values + {% if printer.configfile.settings.printer.minimum_cruise_ratio is defined %} + SET_VELOCITY_LIMIT VELOCITY={printer.configfile.settings.printer.max_velocity} ACCEL={printer.configfile.settings.printer.max_accel} MINIMUM_CRUISE_RATIO={printer.configfile.settings.printer.minimum_cruise_ratio} + {% else %} + SET_VELOCITY_LIMIT VELOCITY={printer.configfile.settings.printer.max_velocity} ACCEL={printer.configfile.settings.printer.max_accel} ACCEL_TO_DECEL={printer.configfile.settings.printer.max_accel_to_decel} + {% endif %} + + # Re-home and get position again for comparison: + M400 # Finish moves - https://github.com/AndrewEllis93/Print-Tuning-Guide/issues/66 + G28 # This is a full G28 to fix an issue with CoreXZ - https://github.com/AndrewEllis93/Print-Tuning-Guide/issues/12 + # Go to XY home positions (in case your homing override leaves it elsewhere) + G90 + G0 X{printer.toolhead.axis_maximum.x-1} Y{printer.toolhead.axis_maximum.y-1} F{30*60} + G4 P1000 + GET_POSITION + + # Restore previous gcode state (absolute/relative, etc) + RESTORE_GCODE_STATE NAME=TEST_SPEED + +[gcode_macro test] +gcode: + {% set iterations = params.ITERATIONS|default(5)|int %} + ;G32 + SAVE_GCODE_STATE NAME=TEST + G1 Z10 + ;SET_VELOCITY_LIMIT ACCEL=8000 + SET_VELOCITY_LIMIT ACCEL=10000 SQUARE_CORNER_VELOCITY=12 + {% for i in range(iterations) %} + G1 F18000 + G1 X300 Y300 + G1 X150 Y50 + {% endfor %} + SET_VELOCITY_DEFAULT + RESTORE_GCODE_STATE NAME=TEST + + +[gcode_macro _bot_data] +variable_lapse_video_size: 0 +variable_lapse_filename: 'None' +variable_lapse_path: 'None' +gcode: + M118 Setting bot lapse variables diff --git a/macros/nozzle_scrub.cfg b/macros/nozzle_scrub.cfg new file mode 100644 index 0000000..6b6ec96 --- /dev/null +++ b/macros/nozzle_scrub.cfg @@ -0,0 +1,158 @@ +[gcode_macro clean_nozzle] +variable_location_bucket_rear: True +variable_enable_purge: True + +# These parameters define your filament purging. The retract variable is used to retract right after purging to prevent unnecessary +# oozing. Some filament are particularly oozy and may continue to ooze out of the nozzle for a second or two after retracting. The +# ooze dwell variable makes allowance for this. Update as necessary. If you decided to not enable purge, you can ignore this section. +variable_purge_len: 20 ; Amount of filament, in mm, to purge. +variable_purge_spd: 150 ; Speed, in mm/min, of the purge. +variable_purge_temp_min: 200 ; Minimum nozzle temperature to permit a purge. Otherwise, purge will not occur. +variable_purge_ret: 2 ; Retract length, in mm, after purging to prevent slight oozing. Adjust as necessary. +variable_ooze_dwell: 4 ; Dwell/wait time, in seconds, after purging and retracting. + +# Adjust this so that your nozzle scrubs within the brush. Currently defaulted to be a lot higher for safety. Be careful not to go too low! +variable_brush_top: 0 + +# These parameters define your scrubbing, travel speeds, safe z clearance and how many times you want to wipe. Update as necessary. Wipe +# direction is randomized based off whether the left or right bucket is randomly selected in the purge & scrubbing routine. +variable_clearance_z: 5 ; When traveling, but not cleaning, the clearance along the z-axis between nozzle and brush. +variable_wipe_qty: 3 ; Number of complete (A complete wipe: left, right, left OR right, left, right) wipes. +variable_prep_spd_xy: 3000 ; Travel (not cleaning) speed along x and y-axis in mm/min. +variable_prep_spd_z: 1500 ; Travel (not cleaning) speed along z axis in mm/min. +variable_wipe_spd_xy: 5000 ; Nozzle wipe speed in mm/min. + + +# These parameters define the size of the brush. Update as necessary. A visual reference is provided below. Note that orientation of +# parameters remain the same whether bucket is at rear or front. +# +# ← brush_width → +# _________________ ↑ +# | | ↑ If you chose location_bucket_rear = True, Y position is acquired +# brush_start (x) | | brush_depth from your stepper_y position_max. Adjust your brush physically in +# |_________________| ↓ Y so that the nozzle scrubs within the brush. +# (y) ↓ +# brush_front +# __________________________________________________________ +# PRINTER FRONT +# +# +variable_brush_start: 75 +# This value is defaulted from brush location in CAD (rear left). Change if your brush width is different. +variable_brush_width: 52 + +## These are only used if location_bucket_rear is False. You specify a custom location in y axis for your brush - see diagram above. ## +variable_brush_front: 0 +variable_brush_depth: 2 + + +# These parameters define the size of your purge bucket. Update as necessary. If you decided to not enable purge, you can ignore +# this section. A visual reference is provided below. Note that orientation of parameters remain the same whether bucket is at rear +# or front. +# +# bucket_gap +# ← ---- → +# __________________________________________ +# | | | | +# | | | | +# bucket_start (x) | |______| | +# | | | | +# | | | | +# |_________________|. . . |_________________| +# ← ------------- → ← ------------- → +# bucket_left_width bucket_right_width +# _______________________________________________________________________________________ +# PRINTER FRONT +# +## For V2.4 350mm build, uncomment below +variable_bucket_left_width: 92 + +# These values are defaulted from bucket geometry in CAD (rear left location). Change only if you're using a custom bucket. +variable_bucket_right_width: 40 +variable_bucket_gap: 22 + +# For V1.8, you may need to measure where your bucket start is and input into bucket_start. Otherwise, a value of 0 is for a default +# installation of purge bucket at rear left. +variable_bucket_start: 0 +variable_bucket_pos: 1 +gcode: + STATUS_CLEANING + # First, check if the axes are homed. + {% if "xyz" in printer.toolhead.homed_axes %} + + ## Save the gcode state in this macro instance. + SAVE_GCODE_STATE NAME=clean_nozzle + + ## Set to absolute positioning. + G90 + + ## Grab max position of Y-axis from config to use in setting a fixed y position for location_bucket_rear = True. + {% set Ry = printer.configfile.config["stepper_y"]["position_max"]|float %} + + ## Check if user enabled purge option or not. + {% if enable_purge %} + + ### Randomly select left or right bin for purge. 0 = left, 1 = right + SET_GCODE_VARIABLE MACRO=clean_nozzle VARIABLE=bucket_pos VALUE={(range(2) | random)} + + ### Raise Z for travel. + G1 Z{brush_top + clearance_z} F{prep_spd_z} + + ### Check if user chose to use rear location. + {% if location_bucket_rear %} + G1 Y{Ry} F{prep_spd_xy} + {% else %} + G1 Y{brush_front + (brush_depth / 2)} F{prep_spd_xy} + {% endif %} + + ### Position for purge. Randomly selects middle of left or right bucket. It references from the middle of the left bucket. + G1 X{bucket_start + (bucket_left_width / (2 - bucket_pos)) + (bucket_pos * bucket_gap) + (bucket_pos * (bucket_right_width / 2))} + + ### Perform purge if the temp is up to min temp. If not, it will skip and continue executing rest of macro. Small retract after + ### purging to minimize any persistent oozing at 5x purge_spd. G4 dwell is in milliseconds, hence * 1000 in formula. + {% if printer.extruder.temperature >= purge_temp_min %} + M83 ; relative mode + G1 E{purge_len} F{purge_spd} + G1 E-{purge_ret} F{purge_spd * 5} + G4 P{ooze_dwell * 1000} + G92 E0 ; reset extruder + {% endif %} + + {% endif %} + + ## Position for wipe. Either left or right of brush based off bucket_pos to avoid unnecessary travel. + G1 Z{brush_top + clearance_z} F{prep_spd_z} + G1 X{brush_start + (brush_width * bucket_pos)} F{prep_spd_xy} + + ## Check if user chose to use rear location. + {% if location_bucket_rear %} + G1 Y{Ry} + {% else %} + G1 Y{brush_front + (brush_depth / 2)} + {% endif %} + + ## Move nozzle down into brush. + G1 Z{brush_top} F{prep_spd_z} + + ## Perform wipe. Wipe direction based off bucket_pos for cool random scrubby routine. + {% for wipes in range(1, (wipe_qty + 1)) %} + G1 X{brush_start + (brush_width * (1 - bucket_pos))} F{wipe_spd_xy} + G1 X{brush_start + (brush_width * bucket_pos)} F{wipe_spd_xy} + {% endfor %} + + ## Clear from area. + M117 Cleaned! + G1 Z{brush_top + clearance_z} F{prep_spd_z} + G1 X{bucket_start + (bucket_left_width / 4)} F{prep_spd_xy} #bugfix for right side mounted buckets + + ## Restore the gcode state to how it was before the macro. + RESTORE_GCODE_STATE NAME=clean_nozzle + + {% else %} + + ## raise error will stop any macros that clean_nozzle is referenced in from proceeding for safety. + { action_raise_error("Please home your axes!") } + M117 Please home first! + + {% endif %} + STATUS_READY diff --git a/macros/stealthburner_leds.cfg b/macros/stealthburner_leds.cfg new file mode 100644 index 0000000..2dba09d --- /dev/null +++ b/macros/stealthburner_leds.cfg @@ -0,0 +1,254 @@ +# Macros for setting the status leds on the Voron StealthBurner toolhead (or for any neopixel-type leds). +# +# You will need to configure a neopixel (or other addressable led, such as dotstar). See +# https://www.klipper3d.org/Config_Reference.html#neopixel for configuration details. + + +##################################### +# INSTRUCTIONS # +##################################### +# How to use all this stuff: +# +# 1. Copy this .cfg file into your Klipper config directory and then add [include stealthburner_leds.cfg] +# to the top of your printer.cfg in order to register the LEDs and macros with Klipper. +# 2. Define your LEDs by editing [neopixel sb_leds] below and entering the data pin from your control board +# as well as the color order. +# +# Note: RGB and RGBW are different and must be defined explicitly. RGB and RGBW are also not able to +# be mix-and-matched in the same chain. A separate data line would be needed for proper functioning. +# +# RGBW LEDs will have a visible yellow-ish phosphor section to the chip. If your LEDs do not have +# this yellow portion, you have RGB LEDs. +# +# 3. Save your config and restart Klipper. +# +# Note: We set RED and BLUE to 1.0 to make it easier for users and supporters to detect +# misconfigurations or miswiring. The default color format is for Neopixels with a dedicated +# white LED. On startup, all three SB LEDs should light up. +# +# If you get random colors across your LEDs, change the color_order to GRB and restart. Then +# omit the W for each suggested color_order in the next paragraph. +# +# If you get MAGENTA, your color order is correct. If you get CYAN, you need to use RGBW. If +# you get YELLOW, you need to use BRGW (note that BRG is only supported in the latest Klipper +# version). +# +# 4. Once you have confirmed that the LEDs are set up correctly, you must now decide where you want +# these macros called up...which means adding them to your existing gcode macros. NOTHING will happen +# unless you add the STATUS_????? macros to your existing gcode macros. +# +# Example: add STATUS_LEVELING to the beginning of your QGL gcode macro, and then add STATUS_READY +# to the end of it to set the logo LED and nozzle LEDs back to the `ready` state. +# +# Example: add STATUS_CLEANING to the beginning of your nozzle-cleaning macro, and then STATUS_READY +# to the end of it to return the LEDs back to `ready` state. +# +# 5. Feel free to change colors of each macro, create new ones if you have a need to. The macros provided below +# are just an example of what is possible. If you want to try some more complex animations, you will most +# likely have to use WLED with Moonraker and a small micro-controller +# +##################################### +# END INSTRUCTRUCTIONS # +##################################### + +[neopixel sb_leds] +#pin: EBBCan:gpio16 #sht:RGBLED +#pin: EXP1_6 +# The pin connected to the neopixel. This parameter must be provided. +chain_count: 3 +# The number of Neopixel chips that are "daisy chained" to the +# provided pin. The default is 1 (which indicates only a single +# Neopixel is connected to the pin). +color_order: GRBW +# Set the pixel order required by the LED hardware. Options are GRB, +# RGB, GRBW, or RGBW. The default is GRB. +initial_RED: 1.0 +initial_GREEN: 0.0 +initial_BLUE: 1.0 +initial_WHITE: 0.0 +# Sets the initial LED color of the Neopixel. Each value should be +# between 0.0 and 1.0. The WHITE option is only available on RGBW +# LEDs. The default for each color is 0.# + +# Most configuration for the macros can be done by modifying the variables in the _sb_vars macro +# at the start of this file. + +########## +# MACROS # +########## + +# The following status macros are available (these go inside of your macros): +# +# STATUS_READY +# STATUS_OFF +# STATUS_BUSY +# STATUS_HEATING +# STATUS_LEVELING +# STATUS_HOMING +# STATUS_CLEANING +# STATUS_MESHING +# STATUS_CALIBRATING_Z +# +# With additional macros for basic control: +# +# SET_NOZZLE_LEDS_ON +# SET_LOGO_LEDS_OFF +# SET_NOZZLE_LEDS_OFF +# +# Contributed by Voron discord users wile.e, Tetsunosuke, and etherwalker + + +[gcode_macro _sb_vars] +# User settings for the StealthBurner status leds. You can change the status colors and led +# configurations for the logo and nozzle here. +variable_colors: { + 'logo': { # Colors for logo states + 'busy': {'r': 0.4, 'g': 0.0, 'b': 0.0, 'w': 0.0}, + 'cleaning': {'r': 0.0, 'g': 0.02, 'b': 0.5, 'w': 0.0}, + 'calibrating_z': {'r': 0.8, 'g': 0., 'b': 0.35, 'w': 0.0}, + 'heating': {'r': 0.3, 'g': 0.18, 'b': 0.0, 'w': 0.0}, + 'homing': {'r': 0.0, 'g': 0.6, 'b': 0.2, 'w': 0.0}, + 'leveling': {'r': 0.5, 'g': 0.1, 'b': 0.4, 'w': 0.0}, + 'meshing': {'r': 0.2, 'g': 1.0, 'b': 0.0, 'w': 0.0}, + 'off': {'r': 0.0, 'g': 0.0, 'b': 0.0, 'w': 0.0}, + 'printing': {'r': 1.0, 'g': 0.0, 'b': 0.0, 'w': 0.0}, + 'standby': {'r': 0.01, 'g': 0.01, 'b': 0.01, 'w': 0.1}, + }, + 'nozzle': { # Colors for nozzle states + 'heating': {'r': 0.8, 'g': 0.35, 'b': 0.0, 'w':0.0}, + 'off': {'r': 0.0, 'g': 0.0, 'b': 0.0, 'w': 0.0}, + 'on': {'r': 0.8, 'g': 0.8, 'b': 0.8, 'w':1.0}, + 'standby': {'r': 0.6, 'g': 0.0, 'b': 0.0, 'w':0.0}, + }, + 'thermal': { + 'hot': {'r': 1.0, 'g': 0.0, 'b': 0.0, 'w': 0.0}, + 'cold': {'r': 0.3, 'g': 0.0, 'b': 0.3, 'w': 0.0} + } + } +variable_logo_led_name: "sb_leds" +# The name of the addressable LED chain that contains the logo LED(s) +variable_logo_idx: "1" +# A comma-separated list of indexes LEDs in the logo +variable_nozzle_led_name: "sb_leds" +# The name of the addressable LED chain that contains the nozzle LED(s). This will +# typically be the same LED chain as the logo. +variable_nozzle_idx: "2,3" +# A comma-separated list of indexes of LEDs in the nozzle +gcode: + # This section is required. Do Not Delete. + + +[gcode_macro _set_sb_leds] +gcode: + {% set red = params.RED|default(0)|float %} + {% set green = params.GREEN|default(0)|float %} + {% set blue = params.BLUE|default(0)|float %} + {% set white = params.WHITE|default(0)|float %} + {% set led = params.LED|string %} + {% set idx = (params.IDX|string).split(',') %} + {% set transmit_last = params.TRANSMIT|default(1) %} + + {% for led_index in idx %} + {% set transmit=transmit_last if loop.last else 0 %} + set_led led={led} red={red} green={green} blue={blue} white={white} index={led_index} transmit={transmit} + {% endfor %} + +[gcode_macro _set_sb_leds_by_name] +gcode: + {% set leds_name = params.LEDS %} + {% set color_name = params.COLOR %} + {% set color = printer["gcode_macro _sb_vars"].colors[leds_name][color_name] %} + {% set led = printer["gcode_macro _sb_vars"][leds_name + "_led_name"] %} + {% set idx = printer["gcode_macro _sb_vars"][leds_name + "_idx"] %} + {% set transmit = params.TRANSMIT|default(1) %} + + _set_sb_leds led={led} red={color.r} green={color.g} blue={color.b} white={color.w} idx="{idx}" transmit={transmit} + +[gcode_macro _set_logo_leds] +gcode: + {% set red = params.RED|default(0)|float %} + {% set green = params.GREEN|default(0)|float %} + {% set blue = params.BLUE|default(0)|float %} + {% set white = params.WHITE|default(0)|float %} + {% set led = printer["gcode_macro _sb_vars"].logo_led_name %} + {% set idx = printer["gcode_macro _sb_vars"].logo_idx %} + {% set transmit=params.TRANSMIT|default(1) %} + + _set_sb_leds led={led} red={red} green={green} blue={blue} white={white} idx="{idx}" transmit={transmit} + +[gcode_macro _set_nozzle_leds] +gcode: + {% set red = params.RED|default(0)|float %} + {% set green = params.GREEN|default(0)|float %} + {% set blue = params.BLUE|default(0)|float %} + {% set white = params.WHITE|default(0)|float %} + {% set led = printer["gcode_macro _sb_vars"].nozzle_led_name %} + {% set idx = printer["gcode_macro _sb_vars"].nozzle_idx %} + {% set transmit=params.TRANSMIT|default(1) %} + + _set_sb_leds led={led} red={red} green={green} blue={blue} white={white} idx="{idx}" transmit={transmit} + +[gcode_macro set_logo_leds_off] +gcode: + {% set transmit=params.TRANSMIT|default(1) %} + _set_logo_leds red=0 blue=0 green=0 white=0 transmit={transmit} + +[gcode_macro set_nozzle_leds_on] +gcode: + {% set transmit=params.TRANSMIT|default(1) %} + _set_sb_leds_by_name leds="nozzle" color="on" transmit={transmit} + +[gcode_macro set_nozzle_leds_off] +gcode: + {% set transmit=params.TRANSMIT|default(1) %} + _set_sb_leds_by_name leds="nozzle" color="off" transmit={transmit} + +[gcode_macro status_off] +gcode: + set_logo_leds_off transmit=0 + set_nozzle_leds_off + +[gcode_macro status_ready] +gcode: + _set_sb_leds_by_name leds="logo" color="standby" transmit=0 + _set_sb_leds_by_name leds="nozzle" color="standby" transmit=1 + +[gcode_macro status_busy] +gcode: + _set_sb_leds_by_name leds="logo" color="busy" transmit=0 + set_nozzle_leds_on + +[gcode_macro status_heating] +gcode: + _set_sb_leds_by_name leds="logo" color="heating" transmit=0 + _set_sb_leds_by_name leds="nozzle" color="heating" transmit=1 + +[gcode_macro status_leveling] +gcode: + _set_sb_leds_by_name leds="logo" color="leveling" transmit=0 + set_nozzle_leds_on + +[gcode_macro status_homing] +gcode: + _set_sb_leds_by_name leds="logo" color="homing" transmit=0 + set_nozzle_leds_on + +[gcode_macro status_cleaning] +gcode: + _set_sb_leds_by_name leds="logo" color="cleaning" transmit=0 + set_nozzle_leds_on + +[gcode_macro status_meshing] +gcode: + _set_sb_leds_by_name leds="logo" color="meshing" transmit=0 + set_nozzle_leds_on + +[gcode_macro status_calibrating_z] +gcode: + _set_sb_leds_by_name leds="logo" color="calibrating_z" transmit=0 + set_nozzle_leds_on + +[gcode_macro status_printing] +gcode: + _set_sb_leds_by_name leds="logo" color="printing" transmit=0 + set_nozzle_leds_on diff --git a/macros/tools.cfg b/macros/tools.cfg new file mode 100644 index 0000000..f8b758e --- /dev/null +++ b/macros/tools.cfg @@ -0,0 +1,91 @@ +#Аргументы +#NAME (строка) — отфильтруйте результаты по названию (отображайте только переменные с названиями, содержащими эту строку) +#VALUE (строка) — отфильтруйте результаты по значению (отображайте только значения, содержащие это значение) +#SHOW_CFG (целое число, 0-1) — установите значение 1, чтобы включить в вывод всю конфигурацию. По умолчанию 0 (конфигурация отфильтровывается) +#Примеры +#DUMP_VARIABLES: Возвращает все переменные (за исключением printer['configfile'].config и printer['configfile'].settings, так как они содержат всю конфигурацию). +#DUMP_VARIABLES NAME=stepper: Возвращает все переменные, в имени которых есть строка stepper. +#DUMP_VARIABLES VALUE=extruder : Возвращает все переменные, в значении которых есть строка extruder. +#DUMP_VARIABLES NAME=stepper VALUE=extruder : Возвращает все переменные, в названии которых есть строка stepper и в значении которых есть строка extruder. +#DUMP_VARIABLES SHOW_CFG=1 : Возвращает все переменные, включая конфигурацию. + +[gcode_macro DUMP_VARIABLES] +gcode: + {% set filter_name = params.NAME|default('')|string|lower %} + {% set filter_value = params.VALUE|default('')|string|lower %} + {% set show_cfg = params.SHOW_CFG|default(0)|int %} + + {% set out = [] %} + + {% for key1 in printer %} + {% for key2 in printer[key1] %} + {% if (show_cfg or not (key1|lower == 'configfile' and key2|lower in ['config', 'settings'])) and (filter_name in key1|lower or filter_name in key2|lower) and filter_value in printer[key1][key2]|string|lower %} + {% set dummy = out.append("printer['%s'].%s = %s" % (key1, key2, printer[key1][key2])) %} + {% endif %} + {% else %} + {% if filter_name in key1|lower and filter_value in printer[key1]|string|lower %} + {% set dummy = out.append("printer['%s'] = %s" % (key1, printer[key1])) %} + {% endif %} + {% endfor %} + {% endfor %} + + {action_respond_info(out|join("\n"))} + + +#Аргументы +#NAME (строка) (обязательно) — укажите имя переменной, которую вы хотите получить. +#Примеры +#GET_VARIABLE NAME=toolhead: Возвращает значение и тип переменной printer.toolhead. +#GET_VARIABLE NAME=bed_mesh.profiles.default.points.1.0: Возвращает значение и тип переменной printer.bed_mesh.profiles.default.points[1][0]. +[gcode_macro GET_VARIABLE] +gcode: + {% set names = (params.NAME).split('.')|list %} + {% set join = (params.JOIN)|default(1)|int %} + + {% set _dummy0 = namespace( break = 0 ) %} + {% set _dummy1 = namespace( out = printer[names|first] ) %} + + {% for name in names if _dummy0.break == 0 %} + {% if loop.index > 1 %} + {% if name in _dummy1.out %} + {% set _dummy1.out = _dummy1.out[name] %} + {% elif name[0] in '0123456789' and _dummy1.out is iterable and _dummy1.out is not string and _dummy1.out is not mapping and _dummy1.out|length > name[0]|int %} + {% set _dummy1.out = _dummy1.out[name|int] %} + {% else %} + {% set _dummy0.break = loop.index0 %} + {% endif %} + {% endif %} + {% endfor %} + + {% if _dummy1.out is boolean %} + { action_respond_info('Type: boolean') } + {% elif _dummy1.out is float %} + { action_respond_info('Type: float') } + {% elif _dummy1.out is integer %} + { action_respond_info('Type: integer') } + {% elif _dummy1.out is mapping %} + { action_respond_info('Type: mapping') } + {% elif _dummy1.out is string %} + { action_respond_info('Type: string') } + {% elif _dummy1.out is iterable %} + { action_respond_info('Type: iterable') } + {% elif _dummy1.out is none %} + { action_respond_info('Type: none') } + {% elif _dummy1.out is undefined %} + { action_respond_info('Type: undefined') } + {% elif _dummy1.out is callable %} + { action_respond_info('Type: callable') } + {% else %} + { action_respond_info('Type: unknown') } + {% endif %} + + {% if join and _dummy1.out is iterable and _dummy1.out is not string and _dummy1.out is not mapping %} + { action_respond_info('%s' % _dummy1.out|join("\n")) } + {% else %} + { action_respond_info('%s' % _dummy1.out) } + {% endif %} + + {% if _dummy0.break != 0 %} + { action_respond_info('"printer.%s" does not contain "%s"!' % (names[0:_dummy0.break]|join('.'), names[_dummy0.break])) } + {% endif %} + diff --git a/mainsail.cfg b/mainsail.cfg new file mode 120000 index 0000000..6cfd023 --- /dev/null +++ b/mainsail.cfg @@ -0,0 +1 @@ +/home/biqu/mainsail-config/client.cfg \ No newline at end of file diff --git a/moonraker-obico-update.cfg b/moonraker-obico-update.cfg new file mode 100644 index 0000000..c751931 --- /dev/null +++ b/moonraker-obico-update.cfg @@ -0,0 +1,9 @@ +[update_manager moonraker-obico] +type: git_repo +path: /home/biqu/moonraker-obico +origin: https://github.com/TheSpaghettiDetective/moonraker-obico.git +env: /home/biqu/moonraker-obico/../moonraker-obico-env/bin/python +requirements: requirements.txt +install_script: install.sh +managed_services: + moonraker-obico diff --git a/moonraker-obico.cfg b/moonraker-obico.cfg new file mode 100644 index 0000000..1cd58c0 --- /dev/null +++ b/moonraker-obico.cfg @@ -0,0 +1,34 @@ +[server] +url = https://app.obico.io + +[moonraker] +host = 127.0.0.1 +port = 7125 +# api_key = + +[webcam] +disable_video_streaming = False + +# CAUTION: Don't modify the settings below unless you know what you are doing +# In most cases webcam configuration will be automatically retrived from moonraker +# +# Lower target_fps if ffmpeg is using too much CPU. Capped at 25 for Pro users (including self-hosted) and 5 for Free users +# target_fps = 25 +# +snapshot_url = http://127.0.0.1:8080/?action=snapshot +stream_url = http://127.0.0.1:8080/?action=stream +# flip_h = False +# flip_v = False +# rotation = 0 +# aspect_ratio_169 = False + +[logging] +path = /home/biqu/printer_data/logs/moonraker-obico.log +# level = INFO + +[tunnel] +# CAUTION: Don't modify the settings below unless you know what you are doing +# dest_host = 127.0.0.1 +dest_port = 80 +# dest_is_ssl = False + diff --git a/moonraker.conf b/moonraker.conf new file mode 100644 index 0000000..faff747 --- /dev/null +++ b/moonraker.conf @@ -0,0 +1,120 @@ +[server] +host: 0.0.0.0 +port: 7125 +klippy_uds_address: /home/biqu/printer_data/comms/klippy.sock + +[authorization] +trusted_clients: + 10.0.0.0/8 + 127.0.0.0/8 + 169.254.0.0/16 + 172.16.0.0/12 + 192.168.0.0/16 + FE80::/10 + ::1/128 +cors_domains: + *.lan + *.local + *://localhost + *://localhost:* + *://my.mainsail.xyz + *://app.fluidd.xyz + +[octoprint_compat] + +[history] + +[file_manager] +enable_object_processing: True + +[timelapse] +#snapshoturl: http://192.168.1.31/capture +#output_path: /mnt/microsd/video +#frame_path: /mnt/microsd/video/tmp/ +ffmpeg_binary_path: /usr/bin/ffmpeg + +[update_manager] +channel: stable +refresh_interval: 168 + +[power MainPower] +type: klipper_device +object_name: output_pin ps_on +initial_state: on + +[update_manager klipper_tmc_autotune] +type: git_repo +channel: dev +path: ~/klipper_tmc_autotune +origin: https://github.com/andrewmcgr/klipper_tmc_autotune.git +managed_services: klipper +primary_branch: main +install_script: install.sh + +[update_manager timelapse] +type: git_repo +primary_branch: main +path: ~/moonraker-timelapse +origin: https://github.com/mainsail-crew/moonraker-timelapse.git +managed_services: klipper moonraker + +[update_manager mainsail-config] +type: git_repo +primary_branch: master +path: ~/mainsail-config +origin: https://github.com/mainsail-crew/mainsail-config.git +managed_services: klipper + +[update_manager mainsail] +type: web +channel: stable +repo: mainsail-crew/mainsail +path: ~/mainsail + +# Crowsnest update_manager entry +[update_manager crowsnest] +type: git_repo +path: ~/crowsnest +origin: https://github.com/mainsail-crew/crowsnest.git +managed_services: crowsnest +install_script: tools/pkglist.sh + +# Sonar update_manager entry +[update_manager sonar] +type: git_repo +path: ~/sonar +origin: https://github.com/mainsail-crew/sonar.git +primary_branch: main +managed_services: sonar +install_script: tools/install.sh + +[update_manager katapult] +type: git_repo +origin: https://github.com/Arksine/katapult.git +path: ~/katapult +is_system_service: False + +[update_manager KlipperScreen] +type: git_repo +path: ~/KlipperScreen +origin: https://github.com/KlipperScreen/KlipperScreen.git +virtualenv: ~/.KlipperScreen-env +requirements: scripts/KlipperScreen-requirements.txt +system_dependencies: scripts/system-dependencies.json +managed_services: KlipperScreen + +[update_manager Klipper-Adaptive-Meshing-Purging] +type: git_repo +channel: dev +path: ~/Klipper-Adaptive-Meshing-Purging +origin: https://github.com/kyleisah/Klipper-Adaptive-Meshing-Purging.git +managed_services: klipper +primary_branch: main + +[update_manager moonraker-telegram-bot] +install_script: scripts/install.sh +requirements: scripts/requirements.txt +env: /home/biqu/moonraker-telegram-bot-env/bin/python +origin: https://github.com/nlef/moonraker-telegram-bot.git +path: /home/biqu/moonraker-telegram-bot +type: git_repo diff --git a/moonraker_obico_macros.cfg b/moonraker_obico_macros.cfg new file mode 120000 index 0000000..2c08ef7 --- /dev/null +++ b/moonraker_obico_macros.cfg @@ -0,0 +1 @@ +/home/biqu/moonraker-obico/scripts/../include_cfgs/moonraker_obico_macros.cfg \ No newline at end of file diff --git a/nevermore.cfg b/nevermore.cfg new file mode 100644 index 0000000..6411c4d --- /dev/null +++ b/nevermore.cfg @@ -0,0 +1,46 @@ +## This is a simple include for the Nevermore. To use it with your printer, edit +## the pin definition in line 16 so it matches your printer. +## What you get: +## - a generic fan "Nevermore" which is adjustable in GCODE and in Mainsail/Fluidd +## - Commands in your 12864-controller to turn the fan on/off or adjust in 10%-steps +## - a Macro to turn the fan off some time after the print. +## +## Slicer integration: Add "SET_FAN_SPEED FAN=Nevermore SPEED=1" in your start-macro +## (or less fan depending on your needs, like SPEED=0.8) +## in your end print code, add "UPDATE_DELAYED_GCODE ID=filter_off DURATION=180" +## this keeps your Nevermore running for 180s after the print finishes to clean the chamber a bit more. + +[fan_generic Nevermore] +## Nevermore - FAN5 on Octopus +## Adjust if you use a different board or a different terminal. +pin: PD15 + +[menu __main __control __nevermoreonoff] +type: command +name: Nevermore {'ON' if printer['fan_generic Nevermore'].speed > 0 else 'OFF'} +enable: {'fan_generic Nevermore' in printer} +gcode: + TOGGLE_NEVERMORE + +[menu __main __control __filterspeed] +type: input +enable: {'fan_generic Nevermore' in printer} +name: Filter %: {'%3d' % (menu.input*100)}% +input: {printer["fan_generic Nevermore"].speed} +input_min: 0 +input_max: 1 +input_step: 0.1 +gcode: + SET_FAN_SPEED FAN=Nevermore SPEED={menu.input} + +[delayed_gcode filter_off] +gcode: + SET_FAN_SPEED FAN=Nevermore SPEED=0 + +[gcode_macro TOGGLE_NEVERMORE] +gcode: + {% if printer['fan_generic Nevermore'].speed > 0 %} + SET_FAN_SPEED FAN=Nevermore SPEED=0 + {% else %} + SET_FAN_SPEED FAN=Nevermore SPEED=1 + {% endif %} diff --git a/octopus_pro_1.1.cfg b/octopus_pro_1.1.cfg new file mode 100644 index 0000000..5cced47 --- /dev/null +++ b/octopus_pro_1.1.cfg @@ -0,0 +1,203 @@ +[mcu] +canbus_uuid: afcf80281237 + +[temperature_sensor OctopusPro] +sensor_type: temperature_mcu + +[output_pin ps_on] +pin: PE11 +value: 1 +shutdown_value: 1 + +##################################################################### +# X/Y Stepper Settings +##################################################################### + +## ldo-42sth48-2004mah + +## X Stepper on Motor0 (B Motor) +[stepper_x] +enable_pin: !PF14 +step_pin: PF13 +dir_pin: PF12 +microsteps: 128 +endstop_pin: tmc2240_stepper_x:virtual_endstop + +[tmc2240 stepper_x] +interpolate: True +cs_pin: PC4 +spi_software_sclk_pin: PA5 +spi_software_mosi_pin: PA7 +spi_software_miso_pin: PA6 +diag0_pin: ^!PG6 +driver_SGT: 2 #1-3 # -64 is most sensitive value, 63 is least sensitive +run_current: 1.25 #1.25 +stealthchop_threshold: 0 +#stealthchop_threshold: 999999 + +## Y Stepper on Motor2 (A Motor) +[stepper_y] +enable_pin: !PG5 +step_pin: PF11 +dir_pin: PG3 +microsteps: 128 +endstop_pin: tmc2240_stepper_y:virtual_endstop + +[tmc2240 stepper_y] +interpolate: True +cs_pin: PC6 +spi_software_sclk_pin: PA5 +spi_software_mosi_pin: PA7 +spi_software_miso_pin: PA6 +diag0_pin: ^!PG10 +driver_SGT: 2 #2-3 #range is -64 to +63 +run_current: 1.25 #1.25 +stealthchop_threshold: 0 +#stealthchop_threshold: 999999 + + +[autotune_tmc stepper_x] +motor: ldo-42sth48-2004mah +extra_hysteresis: 4 +sgt: 2 +[autotune_tmc stepper_y] +motor: ldo-42sth48-2004mah +extra_hysteresis: 4 +sgt: 2 + +##################################################################### +# Z Stepper Settings +##################################################################### + +## Z0 Stepper - Front Left on MOTOR4 +[stepper_z] +enable_pin: !PG2 +step_pin: PF9 +dir_pin: PF10 +microsteps: 128 #128 +endstop_pin: probe:z_virtual_endstop + +[tmc2209 stepper_z] +uart_pin: PF2 +interpolate: True +run_current: 0.8 +#sense_resistor: 0.110 +#stealthchop_threshold: 999999 + +## Z1 Stepper - Rear Left on Motor5 +[stepper_z1] +enable_pin: !PF1 +step_pin: PC13 +dir_pin: !PF0 +microsteps: 128 + +[tmc2209 stepper_z1] +uart_pin: PE4 +interpolate: True +run_current: 0.8 +#sense_resistor: 0.110 +#stealthchop_threshold: 999999 + +## Z2 Stepper - Rear Right on Motor6 +[stepper_z2] +enable_pin: !PD4 +step_pin: PE2 +dir_pin: PE3 +microsteps: 128 + +[tmc2209 stepper_z2] +uart_pin: PE1 +interpolate: True +run_current: 0.8 +#sense_resistor: 0.110 +#stealthchop_threshold: 999999 + +## Z3 Stepper - Fron Right on Motor7 +[stepper_z3] +enable_pin: !PE0 +step_pin: PE6 +dir_pin: !PA14 +microsteps: 128 + +[tmc2209 stepper_z3] +uart_pin: PD3 +interpolate: True +run_current: 0.8 +#sense_resistor: 0.110 +#stealthchop_threshold: 999999 + +[autotune_tmc stepper_z] +motor: ldo-42sth48-2004ac +[autotune_tmc stepper_z1] +motor: ldo-42sth48-2004ac +[autotune_tmc stepper_z2] +motor: ldo-42sth48-2004ac +[autotune_tmc stepper_z3] +motor: ldo-42sth48-2004ac + +##################################################################### +# Bed Heater +##################################################################### + +[heater_bed] +heater_pin: PA0 +sensor_type: Generic 3950 +sensor_pin: PF3 +#max_power: 0.6 + +##################################################################### +# Fans +##################################################################### + +[controller_fan stepper_drivers_fan] +pin: PA8 +stepper: stepper_x, stepper_y +idle_speed: 0 +fan_speed: 0.6 + +[heater_fan Nevermore] +pin: PE5 +heater_temp: 90 +max_power: 1.0 +kick_start_time: 0.5 +heater: heater_bed +fan_speed: 1 + +[temperature_fan chamber] +pin: PD14 +max_power: 1.0 +shutdown_speed: 0.0 +kick_start_time: 5.0 +cycle_time:0.01 +off_below:0.1 +hardware_pwm: True +sensor_type: ATC Semitec 104NT-4-R025H42G +sensor_pin: PF4 +min_temp: 0 +max_temp: 70 +target_temp: 40 +control: watermark +gcode_id: C + + +[multi_pin soc_pin] +pins: PD12, PD13 + + +[fan_generic SoC] +pin: multi_pin: soc_pin +max_power: 1 + + +##################################################################### +# LED Control +##################################################################### + +[neopixel chamber_leds] +pin: PB10 +chain_count: 50 #50 +color_order: GRB +initial_RED: 1.0 +initial_GREEN: 1.0 +initial_BLUE: 1.0 +initial_WHITE: 0.0 diff --git a/printer.cfg b/printer.cfg new file mode 100644 index 0000000..e84379c --- /dev/null +++ b/printer.cfg @@ -0,0 +1,229 @@ + +[include mainsail.cfg] +[include timelapse.cfg] +#[include hbb.cfg] + +[mcu host] +serial: /tmp/klipper_host_mcu + +[temperature_sensor BttPi2] +sensor_type: temperature_host + +[include octopus_pro_1.1.cfg] +[include toolhead_sb.cfg] +#[include toolhead_sht36v2.cfg] + +[printer] +kinematics: corexy +max_velocity: 500 +max_accel: 8000 #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 + +[force_move] +enable_force_move: true + +[respond] +default_type: echo +default_prefix: echo: + +[exclude_object] + +[gcode_arcs] +resolution: 0.1 + +[skew_correction] + + +##################################################################### +# X/Y Stepper Settings +##################################################################### + +## X Stepper on Motor1(B Motor) +[stepper_x] +rotation_distance: 40 #39.8 +full_steps_per_rotation:400 +position_min: 0 +position_endstop: 355 #355 +position_max: 355 #355 +homing_speed: 80 #25 #Max 100 +#homing_retract_dist: 10 +homing_retract_dist: 0 +homing_positive_dir: true + +## Y Stepper on Motor2 (A Motor) +[stepper_y] +full_steps_per_rotation:400 +rotation_distance: 40 #39.8 +position_min: 0 +position_endstop: 355 +position_max: 355 +homing_speed: 100 #25 #Max 100 +#homing_retract_dist: 5 +homing_retract_dist: 0 +homing_positive_dir: true + + +##################################################################### +# Z Stepper Settings +##################################################################### + +## Z0 Stepper - Front Left on MOTOR3_A +[stepper_z] +rotation_distance: 40 +gear_ratio: 80:16 +position_max: 300 +position_min: -20 +homing_speed: 15 +second_homing_speed: 3 +homing_retract_dist: 3 + +[stepper_z1] +rotation_distance: 40 +gear_ratio: 80:16 + +[stepper_z2] +rotation_distance: 40 +gear_ratio: 80:16 + +[stepper_z3] +rotation_distance: 40 +gear_ratio: 80:16 + + +##################################################################### +# Heater +##################################################################### + +[verify_heater heater_bed] +max_error: 120 +check_gain_time: 60 +hysteresis: 5 +heating_gain: 2 + +[verify_heater extruder] +#max_error: 120 +check_gain_time: 30 +#hysteresis: 5 +#heating_gain: 2 + + +##################################################################### +# Bed Heater +##################################################################### + +[heater_bed] +min_temp: 0 +max_temp: 120 +control: pid +pid_kp: 55.796 +pid_ki: 2.797 +pid_kd: 278.281 + + +##################################################################### +# Probe +##################################################################### + +[probe] +x_offset: 0 +y_offset: 0 +#z_offset: -0.825 +lift_speed: 15 #10 +speed: 3.0 #5 +samples: 3 +samples_result: median +sample_retract_dist: 3 +samples_tolerance: 0.005 +samples_tolerance_retries: 6 +activate_gcode: + {% set PROBE_TEMP = 150 %} + {% set MAX_TEMP = PROBE_TEMP + 5 %} + {% set ACTUAL_TEMP = printer.extruder.temperature %} + {% set TARGET_TEMP = printer.extruder.target %} + + {% if TARGET_TEMP > PROBE_TEMP %} + { action_respond_info('Extruder temperature target of %.1fC is too high, lowering to %.1fC' % (TARGET_TEMP, PROBE_TEMP)) } + M109 S{ PROBE_TEMP } + {% else %} + # Temperature target is already low enough, but nozzle may still be too hot. + {% if ACTUAL_TEMP > MAX_TEMP %} + { action_respond_info('Extruder temperature %.1fC is still too high, waiting until below %.1fC' % (ACTUAL_TEMP, MAX_TEMP)) } + TEMPERATURE_WAIT SENSOR=extruder MAXIMUM={ MAX_TEMP } + {% endif %} + {% endif %} + +##################################################################### +# Homing and Gantry Adjustment Routines +##################################################################### + +[idle_timeout] +timeout: 1800 +gcode: + #_CHAMBER_LED_OFF + +[quad_gantry_level] +gantry_corners: + -60,10 + 410,420 +points: + #50,50 + #50,300 + #300,300 + #300,50 + 50,50 + 50,300 + 300,300 + 300,50 +speed: 500 +horizontal_move_z: 6 +retries: 10 +retry_tolerance: 0.0075 +max_adjust: 15 + +[bed_mesh] +speed: 450 +horizontal_move_z: 5 +#mesh_min: 40, 40 +#mesh_max: 310,310 +mesh_min: 35, 30 +mesh_max: 316,308 +fade_start: 0.6 +fade_end: 10.0 +probe_count: 5,5 # Values should be odd, so one point is directly at bed center +algorithm: bicubic +#relative_reference_index: 12 #40 #12 # Update when changing probe_count, to ((x points * y points) - 1) / 2. (the center point) + + +[include macros/main.cfg] + +[include moonraker_obico_macros.cfg] + +#*# <---------------------- SAVE_CONFIG ----------------------> +#*# DO NOT EDIT THIS BLOCK OR BELOW. The contents are auto-generated. +#*# +#*# [skew_correction default] +#*# xy_skew = -0.002120454472795053 +#*# xz_skew = 0.0 +#*# yz_skew = 0.0 +#*# +#*# [probe] +#*# z_offset = -0.890 +#*# +#*# [bed_mesh default] +#*# version = 1 +#*# points = +#*# 0.010937, -0.010313, 0.022500 +#*# 0.036562, 0.007812, 0.023750 +#*# 0.033437, 0.001562, 0.022500 +#*# x_count = 3 +#*# y_count = 3 +#*# mesh_x_pps = 2 +#*# mesh_y_pps = 2 +#*# algo = lagrange +#*# tension = 0.2 +#*# min_x = 133.45799999999997 +#*# max_x = 217.19799999999998 +#*# min_y = 146.587 +#*# max_y = 202.78699999999998 diff --git a/rapido_ace.cfg b/rapido_ace.cfg new file mode 100644 index 0000000..602ae37 --- /dev/null +++ b/rapido_ace.cfg @@ -0,0 +1,17 @@ +[extruder] +#Classic Ziegler-Nichols PID parameters: +#pid_kp: 41.785 +#pid_ki: 25.323 +#pid_kd: 17.237 +##Pessen Integral Rule PID parameters: +#pid_kp: 48.749 +#pid_ki: 36.930 +#pid_kd: 24.131 +#Some Overshoot PID parameters: +#pid_kp: 22.982 +#№pid_ki: 13.928 +#pid_kd: 25.027 +#No Overshoot PID parameters: +pid_kp: 13.928 +pid_ki: 8.441 +pid_kd: 15.168 diff --git a/rapido_v2.cfg b/rapido_v2.cfg new file mode 100644 index 0000000..59ecabc --- /dev/null +++ b/rapido_v2.cfg @@ -0,0 +1,5 @@ +[extruder] +control: pid +pid_Kp: 26.171 +pid_Ki: 2.684 +pid_Kd: 63.793 \ No newline at end of file diff --git a/sonar.conf b/sonar.conf new file mode 100644 index 0000000..0c71ab1 --- /dev/null +++ b/sonar.conf @@ -0,0 +1,17 @@ +#### Sonar - A WiFi Keepalive daemon +#### +#### Written by Stephan Wendel aka KwadFan +#### Copyright 2022 +#### https://github.com/mainsail-crew/sonar +#### +#### This File is distributed under GPLv3 +#### + +[sonar] +enable: false # false to disable till next reboot (will stop again if not set to true) +debug_log: false # if set to true, sonar will log ever ping with triptime and date/time +persistant_log: false # If true logs in /var/log/sonar.log, false logs to systemd +target: auto # IP Address, URL or auto as ping target +count: 3 # How often should be pinged? +interval: 60 # Ping again after X seconds +restart_treshold: 10 # If failed, restart WiFi after X seconds diff --git a/telegram.conf b/telegram.conf new file mode 100644 index 0000000..131e036 --- /dev/null +++ b/telegram.conf @@ -0,0 +1,22 @@ +# Please refer to the wiki(https://github.com/nlef/moonraker-telegram-bot/wiki) for detailed information on how to configure the bot + +[bot] +server: localhost +bot_token: 6179338772:AAGjgcT186TxlyuUM6lYfeymKLBaSYy-TZw +chat_id: 438453744 + +[camera] +host: http://localhost/webcam2/?action=stream #http://192.168.1.33:81/stream +flip_vertically: true +flip_horizontally: true + +[progress_notification] +percent: 5 +height: 5 +time: 30 + +#[timelapse] +#cleanup: true +#height: 0.2 +#time: 5 +#target_fps: 30 diff --git a/timelapse.cfg b/timelapse.cfg new file mode 120000 index 0000000..cc2d232 --- /dev/null +++ b/timelapse.cfg @@ -0,0 +1 @@ +/home/biqu/moonraker-timelapse/klipper_macro/timelapse.cfg \ No newline at end of file diff --git a/toolhead_sb.cfg b/toolhead_sb.cfg new file mode 100644 index 0000000..ec5f06c --- /dev/null +++ b/toolhead_sb.cfg @@ -0,0 +1,161 @@ +# SB RapidoV2 G2E + +[include rapido_v2.cfg] + +[mcu EBBCan] +canbus_uuid: 350f10596216 + +[firmware_retraction] +retract_length: 0.4 +# The length of filament (in mm) to retract when G10 is activated, +# and to unretract when G11 is activated (but see +# unretract_extra_length below). The default is 0 mm. +retract_speed: 30 +# The speed of retraction, in mm/s. The default is 20 mm/s. +#unretract_extra_length: 0 +# The length (in mm) of *additional* filament to add when +# unretracting. +unretract_speed: 30 +# The speed of unretraction, in mm/s. The default is 10 mm/s. + +[adxl345] +cs_pin: EBBCan:gpio1 +spi_software_sclk_pin: EBBCan:gpio2 +spi_software_mosi_pin: EBBCan:gpio0 +spi_software_miso_pin: EBBCan:gpio3 +axes_map: z,-y,x + +[resonance_tester] +probe_points: 177.5, 177.5, 50 +accel_chip: adxl345 +min_freq: 15 +max_freq: 120 +accel_per_hz: 125 +hz_per_sec: 1 + +[input_shaper] +shaper_type_x: mzv +shaper_freq_x: 51 +shaper_type_y: mzv +shaper_freq_y: 41.6 + +[temperature_sensor SB2209] +sensor_type: temperature_mcu +sensor_mcu: EBBCan + + +##################################################################### +# Extruder +##################################################################### + +[extruder] +step_pin: EBBCan:gpio18 +dir_pin: EBBCan:gpio19 +enable_pin: !EBBCan:gpio17 +microsteps: 16 +rotation_distance: 46.64 #G2E +gear_ratio: 9:1 #G2E +full_steps_per_rotation: 200 #200 for 1.8 degree, 400 for 0.9 degree +nozzle_diameter: 0.400 +filament_diameter: 1.750 +heater_pin: EBBCan:gpio7 + +#sensor_type: ATC Semitec 104NT-4-R025H42G +#sensor_pin: EBBCan:gpio27 + +#sensor_type: PT1000 +#sensor_pin: EBBCan:gpio27 + +#pullup_resistor: 1000 + +sensor_type: MAX31865 +sensor_pin: EBBCan:gpio9 +spi_software_sclk_pin: EBBCan:gpio10 +spi_software_mosi_pin: EBBCan:gpio8 +spi_software_miso_pin: EBBCan:gpio11 +rtd_nominal_r: 1000 +rtd_reference_r: 4300 +rtd_num_of_wires: 2 + +min_temp: 20 +max_temp: 350 +max_power: 1.0 +max_extrude_only_distance: 300 +max_extrude_cross_section: 5 +min_extrude_temp: 20 + +control: pid +pid_Kp: 26.171 +pid_Ki: 2.684 +pid_Kd: 63.793 + + + +[tmc2209 extruder] +uart_pin: EBBCan:gpio20 +interpolate: false +run_current: 0.65 #0.6 +#sense_resistor: 0.110 +#stealthchop_threshold: 0 # 999999 + +[autotune_tmc extruder] +motor: ldo-36sth20-1004ahg-9T + +##################################################################### +# Probe +##################################################################### + +[probe] +pin: ^!EBBCan:gpio24 + +##################################################################### +# Fan Control +##################################################################### + +[fan] +hardware_pwm: True +off_below: 0.05 +# Время (в секундах), необходимое для запуска вентилятора на полной скорости при первом включении +# или увеличении ее более чем на 50% (помогает запустить вентилятор). Значение по умолчанию равно 0,100 секунды. +#kick_start_time: 0.200 +#kick_start_time: 0.5 +# Время (в секундах), затрачиваемое на каждый цикл подачи питания на вентилятор с помощью ШИМ. +# Рекомендуется, чтобы это значение составляло 10 миллисекунд или более при использовании программного управления ШИМ. +# Значение по умолчанию равно 0,010 секунды. +#cycle_time: 0.01 +pin: EBBCan:gpio15 +tachometer_pin: EBBCan:gpio12 +tachometer_poll_interval: 0.0005 #0.0005 +#tachometer_ppr: 1 + +[heater_fan hotend_fan] +## Hotend Fan - CNC_FAN1 +pin: EBBCan:gpio14 +#max_power: 1.0 +#kick_start_time: 0.5 +heater: extruder +## If you are experiencing back flow, you can reduce fan_speed +#fan_speed: 1.0 + +[temperature_fan EbbFan] +pin: EBBCan:gpio6 +max_power: 1.0 +shutdown_speed: 0.0 +#kick_start_time: 5.0 +#cycle_time:0.01 +#off_below:0.1 +sensor_type: Generic 3950 +sensor_pin: EBBCan:gpio28 +min_temp: 0 +max_temp: 100 +target_temp: 60.0 +control: watermark +#gcode_id: C + + +##################################################################### +# LED Control +##################################################################### + +[neopixel sb_leds] +pin: EBBCan:gpio16 \ No newline at end of file diff --git a/toolhead_sht36v2.cfg b/toolhead_sht36v2.cfg new file mode 100644 index 0000000..f617bc0 --- /dev/null +++ b/toolhead_sht36v2.cfg @@ -0,0 +1,104 @@ +[mcu sht] +canbus_uuid: 8ce295109ef0 + +[firmware_retraction] +retract_length: 0.4 +retract_speed: 30 +unretract_speed: 30 + +[adxl345] +cs_pin: sht:PA9 +spi_bus: spi2 +#axes_map: z,-y,x + +[resonance_tester] +probe_points: 177.5, 177.5, 50 +accel_chip: adxl345 +min_freq: 15 +max_freq: 120 +accel_per_hz: 125 +hz_per_sec: 1 + +[input_shaper] +shaper_type_x: mzv +shaper_freq_x: 51 +shaper_type_y: mzv +shaper_freq_y: 41.6 + +[temperature_sensor sht36_v2] +sensor_type: temperature_mcu +sensor_mcu: sht + + + +##################################################################### +# Extruder +##################################################################### + +[extruder] +step_pin: sht:PB4 +dir_pin: sht:PB3 +enable_pin: !sht:PA15 +microsteps: 16 +rotation_distance: 53.494165 +gear_ratio: 44:10, 37:17 +full_steps_per_rotation: 200 #200 for 1.8 degree, 400 for 0.9 degree +nozzle_diameter: 0.400 +filament_diameter: 1.750 +heater_pin: sht:PA8 +sensor_type: PT1000 +sensor_pin: sht:PA3 +pullup_resistor: 1100 +min_temp: 20 +max_temp: 350 +max_power: 1.0 +max_extrude_only_distance: 300 +max_extrude_cross_section: 5 +min_extrude_temp: 20 +control: pid +pid_Kp: 26.171 +pid_Ki: 2.684 +pid_Kd: 63.793 + + +[tmc2209 extruder] +uart_pin: sht:PB5 +#diag_pin: sht:PB6 +interpolate: false +run_current: 0.65 #0.6 +#sense_resistor: 0.110 +#stealthchop_threshold: 0 # 999999 + +[autotune_tmc extruder] +motor: ldo-36sth20-1004ahg + +##################################################################### +# Probe +##################################################################### + +[probe] +pin: ^!sht:PA2 + +##################################################################### +# Fan Control +##################################################################### + +[fan] +#hardware_pwm: True +#kick_start_time: 0.25 +#cycle_time: 0.15 +off_below: 0.05 +pin: sht:PB11 + +[heater_fan hotend_fan] +pin: sht:PB10 +heater: extruder + + + +##################################################################### +# LED Control +##################################################################### + +[neopixel sb_leds] +pin: sht:PB0 \ No newline at end of file