voron 2.4 - 350 - Siboor Kit
- Der Aufbau
- orangepi
- CANbus
- webcam mit mjpg-streamer
- FYSETC Spyder 2.3
- 2 Kameras mit crowsnest
- Neopixel LED Stripes
Der Aufbau
orangepi
Update auf Kernel 5.x
Für die Nutzung mit canbus musste der orangepi von seinem Auslieferugns OS mit 4.9er Kernel auf 5.16 upgedated werden.
Firmware Datei:
https://drive.google.com/drive/folders/1JxFueRhtbZx-joOI689f__3X_PxoVJvA
Upgrade Hoot:
https://github.com/Lzhikai/siboor-voron/tree/main/accessories/flashing%20OrangePi3%20LTS
User klipper - sudo ohne Password
/etc/sudoers.d/010-klipper-nopasswd
klipper ALL=(ALL) NOPASSWD: ALL
Externe USB Disk
Vorbereiten der USB Disk - ähnlich wie hier beschrieben
https://www.tecmint.com/fdisk-commands-to-manage-linux-disk-partitions/
Mountpoint anlegen:
sudo mkdir /mnt/usb500
UUID bestimmen:
lsblk /dev/sda1 -o 'UUID'
Mount konfigurieren, um die SSD beim Reboot automatisch zu mounten
/etc/fstab
# <file system> <mount point> <type> <options> <dump> <pass>
tmpfs /tmp tmpfs defaults,nosuid 0 0
UUID=<emmc> / ext4 defaults,noatime,commit=600,errors=remount-ro,x-gvfs-hide 0 1
UUID=<ext usb> /media/usb500 ext4 defaults 0 0
Mit "mount -a" einmalig verbinden
Der orangepi hatte immer Temperaturen über 75C - das finde ich inakzeptabel.
CANbus
uups, da hab ich mir was angetan. So einfach Plug'n Play wie ich mir das dachte war/ist es nicht. Es fängt schon bei meinem Know How darüber an. Nämlich, keines vorhanden :-)
Aber nach all dem Leid läuft es nun sauber :-)
Hardware:
FYSETC UCAN usb2can Adapter
BIGTREETECH EBB SB2240 CAN
Verkabelung
- Verbindung des usb2can via usb
- Das CANbus Kabel mit einem 0.8mm Federstahldraht unterstützt
- PG7 Kabelverschraubung an der Kabelführung
- CW2-Unmbilical-PG7-bttsb2209-and-2240.stl Kabelhalter
- 6mm selbstschließender Kabelschlauch in Schwarz Rotem Gewebe
Den Stahldraht habe ich mit einer gebogenen Öse im PG7 verankert. Oben an der Abluft ein kleines Loch gebohrt und durchgesteckt. Da kann sich der Draht jetzt bewegen ohne Spannung auf das Kabel zu bringen. Ich werde ihn nur noch etwas kürzen.
Ich habe das CANbus Kabel zuerst mit der "CW2 Cable Bridge" aus dem Bigtreetech Github geführt. Das bringt allerdings Unruhe in die Steckverbundung und ich hatte immer wieder EBB Can Errors und Verbindungsabbrüche. Mit dieser Lösung nun keine Fehler mehr.
printer.cfg
# This file contains common pin mappings for the BIGTREETECH EBBCan
# Canbus board. To use this config, the firmware should be compiled for the
# STM32G0B1 with "8 MHz crystal" and "USB (on PA11/PA12)" or "CAN bus (on PB0/PB1)".
# The "EBB Can" micro-controller will be used to control the components on the nozzle.
# See docs/Config_Reference.md for a description of parameters.
[mcu EBBCan]
#serial: /dev/serial/by-id/usb-Klipper_Klipper_firmware_12345-if00
#canbus_uuid: 0e0d81e4210c
canbus_uuid=15197 ab9
[temperature_sensor EBB_NTC]
sensor_type: Generic 3950
sensor_pin: EBBCan: PA2
[adxl345]
cs_pin: EBBCan: PB12
spi_software_sclk_pin: EBBCan: PB10
spi_software_mosi_pin: EBBCan: PB11
spi_software_miso_pin: EBBCan: PB2
axes_map: z,-y,x
[resonance_tester]
probe_points: 170, 175, 20
accel_chip: adxl345
[input_shaper]
shaper_freq_x: 52.4
shaper_type_x: mzv
shaper_freq_y: 37.4
shaper_type_y: mzv
[printer]
max_accel: 2800
[extruder]
step_pin: EBBCan: PD0
dir_pin: EBBCan: PD1
enable_pin: !EBBCan: PD2
gear_ratio: 50:10
microsteps: 16
rotation_distance: 22.386
full_steps_per_rotation: 200
nozzle_diameter: 0.400
filament_diameter: 1.750
heater_pin: EBBCan:PB13
sensor_type: ATC Semitec 104GT-2
sensor_pin: EBBCan: PA3
min_temp: -100
max_temp: 270
max_extrude_only_distance: 120
pressure_advance: 0.045
[tmc2240 extruder]
cs_pin: EBBCan: PA15
spi_software_sclk_pin: EBBCan: PB10
spi_software_mosi_pin: EBBCan: PB11
spi_software_miso_pin: EBBCan: PB2
driver_TPFD: 0
run_current: 0.550
stealthchop_threshold: 0
webcam mit mjpg-streamer
Hardware
Vbestlife 12 MP USB-Kameramodul, 4K HD 123 Grad Ansichten IMX258 (1/3,06 Zoll)
https://www.amazon.de/dp/B0BDLSZ2N2?psc=1&ref=ppx_yo2ov_dt_b_product_details
deb packages
sudo apt install v4l-conf v4l-utils
mjpg streamer:
https://github.com/john-clark/mjpg-streamer-setup
start.sh
#!/bin/sh
export LD_LIBRARY_PATH="$(pwd)"
./mjpg_streamer -i "input_uvc.so -n -f 30 -r 1280x720 -d /dev/video1" -o "output_http.so" &
### check the service configuration
klipper@voron:~/mjpg-streamer ‹master*›$ sudo vi /etc/systemd/system/webcamd.service
[Unit]
Description=Starts mjpg-streamer on startup
After=network.target
[Install]
WantedBy=multi-user.target
[Service]
Type=forking
User=klipper
WorkingDirectory=/home/klipper/mjpg-streamer
StandardOutput=append:/var/log/webcamd.log
StandardError=append:/var/log/webcamd.log
ExecStart=/home/klipper/mjpg-streamer/start.sh
Restart=always
### Reload the service configuration
klipper@voron:~/mjpg-streamer ‹master*›$ sudo systemctl daemon-reload
### enable autostart
klipper@voron:~/mjpg-streamer ‹master*›$ sudo systemctl enable webcamd.service
### restart or start the service
klipper@voron:~/mjpg-streamer ‹master*›$ sudo systemctl restart webcamd.service
### check the state and feel happy
klipper@voron:~/mjpg-streamer ‹master*›$ sudo systemctl status webcamd.service
● webcamd.service - Starts mjpg-streamer on startup
Loaded: loaded (/etc/systemd/system/webcamd.service; disabled; vendor preset: enabled)
Active: active (running) since Wed 2023-05-10 14:17:15 CEST; 7s ago
Process: 15063 ExecStart=/home/klipper/mjpg-streamer/start.sh (code=exited, status=0/SUCCESS)
Main PID: 15065 (mjpg_streamer)
Tasks: 3 (limit: 2212)
Memory: 916.0K
CPU: 77ms
CGroup: /system.slice/webcamd.service
└─15065 ./mjpg_streamer -i input_uvc.so -n -f 30 -r 1280x720 -d /dev/video1 -o output_http.so
Mai 10 14:17:15 voron mjpg_streamer[15065]: MJPG-streamer [15065]: Frames Per Second.: 30
Mai 10 14:17:15 voron mjpg_streamer[15065]: MJPG-streamer [15065]: Format............: JPEG
Mai 10 14:17:15 voron mjpg_streamer[15065]: MJPG-streamer [15065]: TV-Norm...........: DEFAULT
Mai 10 14:17:15 voron mjpg_streamer[15065]: MJPG-streamer [15065]: www-folder-path......: disabled
Mai 10 14:17:15 voron mjpg_streamer[15065]: MJPG-streamer [15065]: HTTP TCP port........: 8080
Mai 10 14:17:15 voron mjpg_streamer[15065]: MJPG-streamer [15065]: HTTP Listen Address..: (null)
Mai 10 14:17:15 voron mjpg_streamer[15065]: MJPG-streamer [15065]: username:password....: disabled
Mai 10 14:17:15 voron mjpg_streamer[15065]: MJPG-streamer [15065]: commands.............: enabled
Mai 10 14:17:15 voron mjpg_streamer[15065]: MJPG-streamer [15065]: starting input plugin input_uvc.so
Mai 10 14:17:15 voron mjpg_streamer[15065]: MJPG-streamer [15065]: starting output plugin: output_http.so (ID: 00)
FYSETC Spyder 2.3
https://3dwork.io/en/complete-guide-fysetc-spider/
2 Kameras mit crowsnest
Die Konfiguration ist deutlich einfacher als mit dem mjpg-streamer
Installation: https://crowsnest.mainsail.xyz/
Meine Kameras:
1) Logitech C920 an der Gantry
2) Das AngryCam Mod https://mods.vorondesign.com/detail/RYpQW53mtem8Nj1JKqiSQ
[crowsnest]
log_path: /home/klipper/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 1]
mode: mjpg # mjpg/rtsp
port: 8080 # Port
device: /dev/v4l/by-id/usb-046d_HD_Pro_Webcam_C920_95163CEF-video-index0
resolution: 1280x720 # 1920x1080 # widthxheight format
max_fps: 15 # If Hardware Supports this it will be forced, otherwise ignored/coerced.
v4l2ctl: focus_automatic_continuous=0,focus_absolute=30 # disable Autofocus
[cam 2]
mode: mjpg # mjpg/rtsp
port: 8081 # Port
device: /dev/v4l/by-id/usb-BC-FAY-220507_Depstech_webcam_MIC_01.00.00-video-index0
resolution: 1280x720 # widthxheight format
max_fps: 15 # If Hardware Supports this it will be forced, otherwise ignored/coerced.
Infos zu manuellen Kamera Settings über den v4lctl: https://www.kurokesu.com/main/2016/01/16/manual-usb-camera-settings-in-linux/
Neopixel LED Stripes
Neopixel LEDs sind LED Streifen, die 3polig angeschlossen werden. 5V, Ground und Data.
Über die Datenleitung wird jede einzelne LED in Farbe und Helligkeit gesteuert.
Das Fysetc Spider 2.3 bietet einen RGB Port an. PD3
Ich muss mir irgendwie den PD3 zerstört haben. Im siboor Discord haben wir dann 2 weitere digitale Ausgänge gefunden, die für RGB Ansteuerung herangenommen werden können.
Der RX (PD0) und der TX (PD1) Port vom CANbus Anschluss.
Der interne 5V Anschluss reicht nicht für 50 LEDs aus. Darum habe ich ein zusätzliches 5V Netzteil eingebaut.
Bei der Verwendung eines externen Netzteils muss unbedingt GND gleichgeschaltet werden.
Verdrahtung
5V Netzteil
neopixel.cfg
[neopixel chamber_leds]
pin: PD0
chain_count: 50
color_order: GRBW
initial_RED: 0.2
initial_GREEN: 0.2
initial_BLUE: 0.2
initial_WHITE: 0.2
[neopixel progress_leds]
pin: PD1
chain_count: 21
color_order: GRBW
initial_RED: 0.2
initial_GREEN: 0.2
initial_BLUE: 0.2
initial_WHITE: 0.2
LED Effects
Für die Ansteuerung der LEDs nutze ich die LED Effects von Julian Schill
https://github.com/julianschill/klipper-led_effect
Damit werden sowohl die Neopixels im Stealthburner und dann meine chambers_leds und die progress_leds gesteuert.
##########################
# LED Effects Animations #
##########################
##################
## logo effects ##
##################
[led_effect sb_logo_busy]
autostart: false
frame_rate: 24
leds:
neopixel:sb_leds (1)
layers:
breathing 3 1 top (1,0,0)
[led_effect sb_logo_cleaning]
autostart: false
frame_rate: 24
leds:
neopixel:sb_leds (1)
layers:
breathing 3 1 top (0.0, 0.02, 0.5)
[led_effect sb_logo_calibrating_z]
autostart: false
frame_rate: 24
leds:
neopixel:sb_leds (1)
layers:
breathing 3 1 top (0.0, 0.0, 0.35)
[led_effect sb_logo_heating]
leds:
neopixel:sb_leds (1)
autostart: false
frame_rate: 24
layers:
breathing 3 1 top (1, 0.18, 0)
[led_effect sb_logo_cooling]
leds:
neopixel:sb_leds (1)
autostart: false
frame_rate: 24
layers:
breathing 3 1 top (0, 0, 1)
[led_effect sb_logo_homing]
autostart: false
frame_rate: 24
leds:
neopixel:sb_leds (1)
layers:
breathing 3 1 top (0.0, 0.6, 0.2)
[led_effect sb_logo_leveling]
autostart: false
frame_rate: 24
leds:
neopixel:sb_leds (1)
layers:
breathing 3 1 top (0.5, 0.1, 0.4)
[led_effect sb_logo_meshing]
autostart: false
frame_rate: 24
leds:
neopixel:sb_leds (1)
layers:
breathing 3 1 top (0.2, 1.0, 0.0)
[led_effect sb_logo_printing]
autostart: false
frame_rate: 24
leds:
neopixel:sb_leds (1)
layers:
gradient 0.3 1 add (0.3, 0.0, 0.0),(0.3, 0.3, 0.0),(0.3, 0.1, 0.0)
[led_effect sb_logo_standby]
autostart: false
frame_rate: 24
leds:
neopixel:sb_leds (1)
layers:
breathing 3 1 top (0.01, 0.01, 0.01)
[led_effect sb_logo_part_ready]
autostart: false
frame_rate: 24
leds:
neopixel:sb_leds (1)
layers:
breathing 3 1 top (0.0, 1.0, 0.0)
####################
## nozzle effects ##
####################
[led_effect sb_nozzle_heating]
autostart: false
frame_rate: 24
leds:
neopixel:sb_leds (2,3)
layers:
breathing 3 1 top (1.0, 0.18, 0.0, 0.0)
[led_effect sb_nozzle_cooling]
autostart: false
frame_rate: 24
leds:
neopixel:sb_leds (2,3)
layers:
breathing 3 1 top (0.0, 0.0, 1.0, 0.1)
[led_effect sb_nozzle_standby]
autostart: false
frame_rate: 24
leds:
neopixel:sb_leds (2,3)
layers:
breathing 3 1 top (0.6, 0.0, 0.0, 0.0)
[led_effect sb_nozzle_part_ready]
autostart: false
frame_rate: 24
leds:
neopixel:sb_leds (2,3)
layers:
breathing 3 1 top (0.6, 1.0, 0.0, 0.1)
#####################
## all led effects ##
#####################
[led_effect sb_critical_error]
leds:
neopixel:sb_leds
neopixel:chamber_leds
layers:
strobe 1 1.5 add (1.0, 1.0, 1.0)
breathing 2 0 difference (0.95, 0.0, 0.0)
static 1 0 top (1.0, 0.0, 0.0)
autostart: false
frame_rate: 24
run_on_error: true
[led_effect rainbow]
leds:
neopixel:sb_leds
neopixel:chamber_leds
autostart: false
frame_rate: 24
layers:
gradient 1 1 top (1,0,0,0),(0,1,0,0),(0,0,1,0)
#######################
# LED Effects Statics #
#######################
[led_effect set_nozzle_leds]
leds:
neopixel:sb_leds (2,3)
#neopixel:caselight
autostart: false
frame_rate: 24
layers:
static 0 0 top (0.0, 0.0, 0.0, 1.0)
[led_effect set_logo_leds]
leds:
neopixel:sb_leds (1)
autostart: false
frame_rate: 24
layers:
static 0 0 top (1.0, 1.0, 1.0)
[led_effect set_chamber_white]
leds:
neopixel:chamber_leds
autostart: false
frame_rate: 24
layers:
static 0 0 top (0.0, 0.0, 0.0, 1.0)
[led_effect set_chamber_white_left]
leds:
neopixel:chamber_leds (1-20)
autostart: false
frame_rate: 24
layers:
static 0 0 top (0.0, 0.0, 0.0, 1.0)
[led_effect set_chamber_white_right]
leds:
neopixel:chamber_leds (31-50)
autostart: false
frame_rate: 24
layers:
static 0 0 top (0.0, 0.0, 0.0, 1.0)
[led_effect set_chamber_white_front]
leds:
neopixel:chamber_leds (21-30)
autostart: false
frame_rate: 24
layers:
static 0 0 top (0.0, 0.0, 0.0, 1.0)
[led_effect set_progress]
leds:
neopixel:progress_leds
autostart: false
frame_rate: 24
layers:
progress -1 0 add ( 0, 0, 1),( 0, 0.1, 0.6)
static 0 0 top ( 0, 0, 0.1)
##############
# The Macros #
##############
[gcode_macro set_progress]
gcode:
SET_LED_EFFECT EFFECT=set_progress REPLACE=1
[gcode_macro stop_chamber_effects]
gcode:
STOP_LED_EFFECTS LEDS="neopixel:chamber_leds"
[gcode_macro set_chamber_white]
gcode:
STOP_CHAMBER_EFFECTS
SET_LED_EFFECT EFFECT=set_chamber_white REPLACE=1
[gcode_macro set_chamber_white_left]
gcode:
STOP_CHAMBER_EFFECTS
SET_LED_EFFECT EFFECT=set_chamber_white_left REPLACE=1
[gcode_macro set_chamber_white_right]
gcode:
STOP_CHAMBER_EFFECTS
SET_LED_EFFECT EFFECT=set_chamber_white_right REPLACE=1
[gcode_macro set_chamber_white_front]
gcode:
STOP_CHAMBER_EFFECTS
SET_LED_EFFECT EFFECT=set_chamber_white_front REPLACE=1
[gcode_macro set_logo_leds_off]
gcode:
SET_LED_EFFECT EFFECT=set_logo_leds STOP=1
[gcode_macro set_logo_leds_on]
gcode:
SET_LED_EFFECT EFFECT=set_logo_leds
[gcode_macro set_nozzle_leds_on]
gcode:
SET_LED_EFFECT EFFECT=set_nozzle_leds
[gcode_macro set_nozzle_leds_off]
gcode:
SET_LED_EFFECT EFFECT=set_nozzle_leds STOP=1
[gcode_macro status_off]
gcode:
STOP_LED_EFFECTS
SET_CHAMBER_WHITE_FRONT
[gcode_macro status_ready]
gcode:
STOP_LED_EFFECTS
SET_LED_EFFECT EFFECT=rainbow
SET_CHAMBER_WHITE_FRONT
[gcode_macro status_part_ready]
gcode:
STOP_LED_EFFECTS
SET_LED_EFFECT EFFECT=sb_nozzle_part_ready
SET_LED_EFFECT EFFECT=sb_logo_part_ready
SET_CHAMBER_WHITE_FRONT
[gcode_macro status_busy]
gcode:
STOP_LED_EFFECTS
SET_LED_EFFECT EFFECT=sb_logo_busy
SET_CHAMBER_WHITE_FRONT
set_nozzle_leds_on
[gcode_macro status_heating]
gcode:
STOP_LED_EFFECTS
SET_LED_EFFECT EFFECT=sb_logo_heating
SET_LED_EFFECT EFFECT=sb_nozzle_heating
SET_CHAMBER_WHITE_FRONT
[gcode_macro status_cooling]
gcode:
STOP_LED_EFFECTS
SET_LED_EFFECT EFFECT=sb_logo_cooling
SET_LED_EFFECT EFFECT=sb_nozzle_cooling
SET_CHAMBER_WHITE_FRONT
[gcode_macro status_leveling]
gcode:
STOP_LED_EFFECTS
SET_LED_EFFECT EFFECT=sb_logo_leveling
SET_CHAMBER_WHITE_FRONT
set_nozzle_leds_on
[gcode_macro status_homing]
gcode:
STOP_LED_EFFECTS
SET_LED_EFFECT EFFECT=sb_logo_homing
SET_CHAMBER_WHITE_FRONT
set_nozzle_leds_on
[gcode_macro status_cleaning]
gcode:
STOP_LED_EFFECTS
SET_LED_EFFECT EFFECT=sb_logo_cleaning
SET_CHAMBER_WHITE_FRONT
set_nozzle_leds_on
[gcode_macro status_meshing]
gcode:
STOP_LED_EFFECTS
SET_LED_EFFECT EFFECT=sb_logo_meshing
SET_CHAMBER_WHITE_FRONT
set_nozzle_leds_on
[gcode_macro status_calibrating_z]
gcode:
STOP_LED_EFFECTS
SET_LED_EFFECT EFFECT=sb_logo_calibrating_z
SET_CHAMBER_WHITE
set_nozzle_leds_on
[gcode_macro status_printing]
gcode:
STOP_LED_EFFECTS
SET_CHAMBER_WHITE
SET_LED_EFFECT EFFECT=sb_logo_printing
set_nozzle_leds_on
set_progress