Worklog - Projekt exEnder 3 Pro

Awatar użytkownika
sobal
Postów w temacie: 24
Posty: 116
Rejestracja: 09 wrz 2020, 19:35
x 47

Re: Worklog - Projekt exEnder 3 Pro

Post autor: sobal »

cyfron pisze:Wyświetlacz od MKS'a? Nie było z nim problemów pod Klipper'em?
Hmm, BTT mini12864, stokowy dla Vorona, żadnych kłopotów - prosta konfiguracja. Wrzucam za chwilę całość.
Voron 2.4 350^3 | Fysetc Spider v1 | Klipper | Fluidd | Phaetus Dragon HF
Ender 3 Pro | SKR mini E3 2.0 | Klipper | Octoprint | BIQU Phaetus Dragon | BLV Mod | BLT | DirecDrive BMG
Awatar użytkownika
sobal
Postów w temacie: 24
Posty: 116
Rejestracja: 09 wrz 2020, 19:35
x 47

Re: Worklog - Projekt exEnder 3 Pro

Post autor: sobal »

Dzisiaj trochę więcej informacji i pełna konfiguracja mojego klippera, może ktoś skorzysta, poświęciłem na to ładnych kilkadziesiąt godzin :) Na potrzeby robotów googla:

SKR 1.4 uart klipper fluidd mainsail sensorless 2208 2209 mini12864 btt smart filament sensor printer.cfg

Cała konfiguracja oparta o konstrukcję Ender 3 Pro, płyta główna SKR 1.4, stepstiki 2209 na X oraz Y, dual Z z osobnymi stepami oraz ekstruder to TMC2208. Silniki .9 stopnia na osiach X,Y oraz E. Wyświetlacz to mini12864. Całość uzupełnia czujnik smart filament sensor. Pole robocze 235x235 mm. Zarządzanie przez Fluidd, firmware to oczywiście Klipper, uruchomione na Raspberry Pi 3b.
snap523.jpg
Zacznijmy od aktualizacji firmware, w związku z tym, że płyta podłączona jest przez UART w slocie płyty musi być karta pamięci sformatowana jako FAT/FAT32. Można oczywiście połączyć płytę przez USB (ale na to nie mam miejsca) lub przez włożenie karty pamięci z nowych firmware do płyty i jej restart (ale to mało eleganckie i trzeba przewracać drukarkę "na plecy").

1. Aktualizacja SKR 1.4
a. ~/klipper
b. make menuconfig
c. Zaznaczyć opcje:
Micro-controller Architecture (LPC176x (Smoothieboard))
Processor model (lpc1768 (100 MHz))
Communication interface (Serial (on UART0 P0.3/P0.2))
Wyjść zapisując
d. sudo service klipper stop
e. ./scripts/flash-sdcard.sh /dev/ttyAMA0 btt-skr-v1.4 (zakończy się błędem zapisu na karcie SD)
f. sudo service klipper start

2. Aktualizacja linux mcu
a. cd ~/klipper/
b. make menuconfig
Odznaczyć wszystko, zaznaczyć tylko "Micro-controller Architecture (Linux process)"
Wyjść zapisując
c. sudo service klipper stop
d. make flash
e. sudo service klipper start

Teraz pliki konfiguracyjne. Będzie kilka ciekawostek i z mojej strony również prośba - jeżeli zauważycie coś, co warto poprawić, lub gdzie mam błąd - dajcie proszę znać. Konfiguracja, dla wygody, została podzielona na kilka osobnych plików, które są dołączane na początku głównego pliku printer.cfg

printer.cfg

Kod: Zaznacz cały

#exEnder 3 Pro
[include adxl.cfg]
[include debug.cfg]
[include filament.cfg]
[include menu.cfg]
[include macro.cfg]

[z_tilt] ; wyrownanie lewego i prawego steppera, dosc ryzykowne, bo mam osie mocowane na sztywno na belce, wiec testowo
z_positions:
    0,112.5
    185,112.5
points:
    0,112.5
    185,112.5
speed: 50
horizontal_move_z: 5
retries: 3
retry_tolerance: 0.05

[mcu]
serial: /dev/ttyAMA0
restart_method: command

[printer]
kinematics: cartesian
max_velocity: 300
max_accel: 9000
square_corner_velocity: 5.0
max_z_velocity: 20
max_z_accel: 100

[probe]
pin: !P0.10
x_offset: 38.84
y_offset: 12.61
speed: 6
samples: 3
samples_result: median
sample_retract_dist: 3
samples_tolerance: 0.0075
samples_tolerance_retries: 10
lift_speed: 10

[bed_mesh]
speed: 150
horizontal_move_z: 7
mesh_min: 40,20
mesh_max: 220,210
probe_count: 4,4
move_check_distance: 5
split_delta_z: .025
fade_start: 1
fade_end: 10
fade_target: 0

[screws_tilt_adjust]
screw1: 0,17
screw1_name: front left screw
screw2: 165,17
screw2_name: front right screw
screw3: 165,187
screw3_name: rear right screw
screw4: 0,187
screw4_name: rear left screw
horizontal_move_z: 10.
speed: 100.
screw_thread: CW-M3

[stepper_x] #Pozycja X-CLS
step_pin: P2.2
dir_pin: !P2.6
enable_pin: !P2.1
microsteps: 16
rotation_distance: 40
full_steps_per_rotation: 400
endstop_pin: tmc2209_stepper_x:virtual_endstop

position_endstop: 0
position_min: 0
position_max: 230
homing_speed: 60
homing_retract_dist: 0

[tmc2209 stepper_x]
uart_pin: P1.10
diag_pin: ^P1.29
driver_SGTHRS: 166
interpolate: True
run_current: 0.8
hold_current: 0.7
sense_resistor: 0.110
stealthchop_threshold: 0

[stepper_y] #Pozycja Y-CLS
step_pin: P0.19
dir_pin: !P0.20
enable_pin: !P2.8
microsteps: 16
rotation_distance: 40
full_steps_per_rotation: 400
position_endstop: 0
position_min: 0
position_max: 225
homing_speed: 50
homing_retract_dist: 0
endstop_pin: tmc2209_stepper_y:virtual_endstop

[tmc2209 stepper_y]
uart_pin: P1.9
diag_pin: ^P1.28
driver_SGTHRS: 160
interpolate: True
run_current: 0.8
hold_current: 0.7
sense_resistor: 0.110
stealthchop_threshold: 0

[stepper_z] #Pozycja Z-CLS
step_pin: P0.22
dir_pin: P2.11
enable_pin: !P0.21
microsteps: 16
#rotation_distance: 8
step_distance: .0025
endstop_pin: !P0.10
position_max: 250
position_min: -10
homing_speed: 10
second_homing_speed: 4
homing_retract_dist: 1.5
endstop_pin: probe:z_virtual_endstop

[tmc2208 stepper_z]
uart_pin: P1.8
run_current: 0.8
hold_current: 0.7
stealthchop_threshold: 0
interpolate: True

[stepper_z1] #Pozycja E1-CLS
step_pin: P1.15
dir_pin: P1.14
enable_pin: !P1.16
microsteps: 16
#rotation_distance: 8
step_distance: .0025
endstop_pin: !P0.10
endstop_pin: probe:z_virtual_endstop

[tmc2208 stepper_z1]
uart_pin: P1.1
run_current: 0.8
hold_current: 0.7
stealthchop_threshold: 0
interpolate: True

[extruder] #Pozycja E0-CLS
step_pin: P2.13
dir_pin: P0.11
enable_pin: !P2.12
rotation_distance: 22.6789511
gear_ratio: 50:17
microsteps: 16
full_steps_per_rotation: 400
nozzle_diameter: 0.400
filament_diameter: 1.75
heater_pin: P2.7
sensor_type: NTC 100K beta 3950
sensor_pin: P0.24
min_temp: 20
max_temp: 300
max_power: 1.0
min_extrude_temp: 170
max_extrude_only_distance: 150
##	pressure_advance ASA:0.025 PLA:0.06 ABS: 0.09
pressure_advance: 0.075
pressure_advance_smooth_time: 0.040

[tmc2208 extruder]
uart_pin: P1.4
run_current: 0.420
hold_current: 0.300
stealthchop_threshold: 999999
interpolate: True

[heater_bed]
heater_pin: P2.5
sensor_type: EPCOS 100K B57560G104F
sensor_pin: P0.25
#control = pid
#pid_Kp=48.004 
#pid_Ki=0.664
#pid_Kd=867.667
min_temp: 0
max_temp: 120

[heater_fan nozzle_cooling_fan]
pin: P2.4
heater: extruder
heater_temp: 60

[fan]
pin: P2.3

[homing_override]
set_position_z:6
axes: z
gcode:
        G90
        G1 Z10 F6000
        SENSORLESS_HOME_X
        SENSORLESS_HOME_Y
        G1 X115 Y112.5 F6000
        G28 Z0
        G1 X115 Y112.5 Z10

[board_pins]
aliases:
    # EXP1 header
    EXP1_1=P1.30, EXP1_3=P1.18, EXP1_5=P1.20, EXP1_7=P1.22, EXP1_9=<GND>,
    EXP1_2=P0.28, EXP1_4=P1.19, EXP1_6=P1.21, EXP1_8=P1.23, EXP1_10=<5V>,
    # EXP2 header
    EXP2_1=P0.17, EXP2_3=P3.26, EXP2_5=P3.25, EXP2_7=P1.31, EXP2_9=<GND>,
    EXP2_2=P0.15, EXP2_4=P0.16, EXP2_6=P0.18, EXP2_8=<RST>, EXP2_10=<NC>
    # Pins EXP2_1, EXP2_6, EXP2_2 are also MISO, MOSI, SCK of bus "ssp0"

[display]
lcd_type: uc1701
cs_pin: EXP1_3
a0_pin: EXP1_4
rst_pin: EXP1_5
contrast: 63
encoder_pins: ^EXP2_5, ^EXP2_3
click_pin: ^!EXP1_2

[output_pin beeper]
pin: EXP1_1

[neopixel fysetc_mini12864]
pin: EXP1_6
chain_count: 3
color_order: RGB
initial_RED: 1.0
initial_GREEN: 0.0
initial_BLUE: 0.0

[virtual_sdcard]
path: ~/gcode_files

[display_status]

[pause_resume]

Plik menu.cfg, tutaj zmienionych kilka elementów odnoszących się do Octoprinta (używany jest Fluidd), dodane opcje związane z testem rezonansu dla osi X oraz Y, jak również zapis wartości babystepping po zakończeniu wydruku. Zmienione wartości ladowania/cofania filamentu - tak by byly idealnie dobrane dla długości ścieżki filamentu w Afterburner.

Kod: Zaznacz cały

[menu __main __octoprint]
type: list
name: Print Control

[menu __main __filament __loadf]
type: command
enable: False
name: Load Fil. fast

[menu __main __filament __loads]
type: command
enable: False
name: Load Fil. slow

[menu __main __filament __unloadf]
type: command
enable: False
name: Unload Fil.fast

[menu __main __filament __unloads]
type: command
enable: False
name: Unload Fil.slow

[menu __main __setup __calib __delta_calib_auto]
type: list
enable: False
name: Print Control

[menu __main __setup __calib __delta_calib_man]
type: command
enable: False
name: Delta cal. man

[menu __main __setup __calib __bedprobe]
type: command
enable: False
name: Bed probe

[menu __main __setup __calib __delta_calib_man __start]
type: command
enable: False
name: Start probing

[menu __main __setup __calib __delta_calib_man __move_z]
type: command
enable: False
name: Move Z: {'%03.2f' % menu.input}

[menu __main __setup __calib __delta_calib_man __test_z]
type: list
name: Test Z: {['++','+','+.01','+.05','+.1','+.5','-.5','-.1','-.05','-.01','-','--'][menu.input|int]}

[menu __main __setup __calib __delta_calib_man __accept]
type: command
enable: Accept
name: Load Fil. fast

[menu __main __setup __calib __delta_calib_man __abort]
type: command
enable: False
name: Abort

[menu __main __filament __loadfilament]
type: command
name: Load Filament
gcode:
    SAVE_GCODE_STATE NAME=__filament__load
    M83
    G1 E70 F960
    G1 E50 F240
    RESTORE_GCODE_STATE NAME=__filament__load

[menu __main __filament __unloadfilament]
type: command
name: Unload Filament
gcode:
    SAVE_GCODE_STATE NAME=__filament__load
    M83
    G1 E-85 F1200
    RESTORE_GCODE_STATE NAME=__filament__load

[menu __main __setup __calib __testresx]
type: command
name: T. Resonance X
gcode:
    TEST_RESONANCES AXIS=X

[menu __main __setup __calib __testresy]
type: command
name: T. Resonance Y
gcode:
    TEST_RESONANCES AXIS=Y

[menu __main __octoprint __pause]
type: command
enable: {printer.idle_timeout.state == "Printing"}
name: Pause printing
gcode:
    PAUSE

[menu __main __octoprint __resume]
type: command
enable: {not printer.idle_timeout.state == "Printing"}
name: Resume printing
gcode:
    RESUME

[menu __main __octoprint __abort]
type: command
enable: {printer.idle_timeout.state == "Printing"}
name: Abort printing
gcode:
    CANCEL_PRINT

[menu __main __tune __applyoffset]
type: command
enable: {printer.idle_timeout.state == "Printing"}
name: Apply Offset Z
gcode:
    Z_OFFSET_APPLY_PROBE
    SET_GCODE_VARIABLE MACRO=PRINT_END VARIABLE=save_needed VALUE=1
Plik macro.cfg, tutaj ustawione są wszystkie makra użyte w drukarce. Z wartych uwagi na pewno zapis wartości baby stepping po zakończeniu wydruku:

Kod: Zaznacz cały

[gcode_macro SENSORLESS_HOME_X]
gcode:
    {% set HOME_CUR = 0.700 %}
    {% set driver_config = printer.configfile.settings['tmc2209 stepper_x'] %}
    {% set RUN_CUR = driver_config.run_current %}
    {% set HOLD_CUR = driver_config.hold_current %}
    SET_TMC_CURRENT STEPPER=stepper_x CURRENT={HOME_CUR} HOLDCURRENT={HOME_CUR}
    G4 P1000
    G28 X0
    G90
    G1 X5 F1200
    SET_TMC_CURRENT STEPPER=stepper_x CURRENT={RUN_CUR} HOLDCURRENT={HOLD_CUR}

[gcode_macro SENSORLESS_HOME_Y]
gcode:
    {% set HOME_CUR = 0.700 %}
    {% set driver_config = printer.configfile.settings['tmc2209 stepper_y'] %}
    {% set RUN_CUR = driver_config.run_current %}
    {% set HOLD_CUR = driver_config.hold_current %}
    SET_TMC_CURRENT STEPPER=stepper_y CURRENT={HOME_CUR} HOLDCURRENT={HOME_CUR}
    G4 P1000
    G28 Y0
    G90
    G1 Y5 F1200
    SET_TMC_CURRENT STEPPER=stepper_y CURRENT={RUN_CUR} HOLDCURRENT={HOLD_CUR}

[gcode_macro PAUSE]
rename_existing: BASE_PAUSE
default_parameter_E: 1.7
gcode:
  {% set x_park = printer.toolhead.axis_maximum.x|float - 5.0 %}
  {% set y_park = printer.toolhead.axis_maximum.y|float - 5.0 %}
  {% set max_z = printer.toolhead.axis_maximum.z|float %}
  {% set act_z = printer.toolhead.position.z|float %}
  {% if act_z < (max_z - 2.0) %}
      {% set z_safe = 2.0 %}
  {% else %}
      {% set z_safe = max_z - act_z %}
  {% endif %}
  SAVE_GCODE_STATE NAME=PAUSE_state
  BASE_PAUSE
  G91
  G1 E-{E} F2100
  G1 Z{z_safe} F900
  G90
  G0 X{x_park} Y{y_park} F6000
  G91

[gcode_macro PRINT_START]
gcode:
    BED_MESH_PROFILE LOAD=default
    G28
    G1 Z20 F3000                    ; move nozzle away from bed
    G1 X20 Y0 Z0.2 F3000            ; get ready to prime
    G92 E0                          ; reset extrusion distance
    G1 X100 E15 F600                ; prime nozzle - bylo E15
    G1 X180 F5000                   ; quick wipe
    G1 Z1 F5000

[gcode_macro PRINT_END]
variable_save_needed: 0                     ; wyzerowanie wartosci zmiennej save_needed
gcode:
    M400
    SET_FILAMENT_SENSOR SENSOR=sfs ENABLE=0 ; wylaczenie czujnika filamentu, moze sprawic problem przy koncu wydruku
    G92 E0
    G1 E-10.0 F3600                         ; wycofanie filamentu
    G91                                     ; pozycjonowane wzgledne
    G0 Z2.00 X20.0 Y20.0 F20000             ; move nozzle to remove stringing
    TURN_OFF_HEATERS
    M107                                    ; wylaczenie wentylatorow
    G1 Z10 F3000                            ; uniesienie o 2mm
    G90                                     ; pozycjonowanie bezwzglende
    G0  Y225 F3600                          ; parkowanie glowicy z tylu
    BED_MESH_CLEAR
    M18
    SET_FILAMENT_SENSOR SENSOR=sfs ENABLE=1                 ; wlaczenie czujnika filamentu
    {% if printer["gcode_macro PRINT_END"].save_needed %}   ; sprawdzenie, czy zmieniony byl baby-stepping
    TEMPERATURE_WAIT SENSOR=extruder MAXIMUM=50             ; jezeli babystepping byl wlaczony i potrzebny jest restart - oczekiwanie na spadek temperatury ekstrudera ponizej 50C
    SAVE_CONFIG                                             ; zapisanie nowej wartosci z-offset i restart drukarki
    {% endif %}

[gcode_macro RESUME]
rename_existing: BASE_RESUME
default_parameter_E: 1      # edit to your preferred retract length
gcode:
    G91
    G1 E{E} F2100
    G90
    RESTORE_GCODE_STATE NAME=PAUSE_state MOVE=1
    BASE_RESUME

[gcode_macro FILAMENT_RUNOUT]
gcode:
    M300 S1 P10
    M600
    M300 S1 P10

[gcode_macro M300]
gcode:
    {% set S = params.S|default(1000)|int %}
    {% set P = params.P|default(100)|int %}
    SET_PIN PIN=BEEPER VALUE=0.5 CYCLE_TIME={ 1.0/S if S > 0 else 1 }
    G4 P{P}
    SET_PIN PIN=BEEPER VALUE=0
    
[gcode_macro M600]
gcode:
    {% set X = params.X|default(25)|float %}
    {% set Y = params.Y|default(25)|float %}
    {% set Z = params.Z|default(10)|float %}
    SAVE_GCODE_STATE NAME=M600_state
    PAUSE
    G91
    G1 E-.8 F2700
    G1 Z{Z}
    G90
    G1 X{X} Y{Y} F3000
    G91
    G1 E-15 F1000
    RESTORE_GCODE_STATE NAME=M600_state

[gcode_macro CANCEL_PRINT]
rename_existing: BASE_CANCEL_PRINT
gcode:
    TURN_OFF_HEATERS
    CLEAR_PAUSE
    SDCARD_RESET_FILE
    BASE_CANCEL_PRINT
Plik adxl.cfg, tutaj konfigurujemy układ ADXL345 podłączony do RPi:

Kod: Zaznacz cały

[mcu rpi]
serial: /tmp/klipper_host_mcu

[adxl345]
cs_pin: rpi:None

[resonance_tester]
accel_chip: adxl345
probe_points:
    115,115,40

[input_shaper]
shaper_freq_x: 57.8
shaper_type_x: mzv
shaper_freq_y: 50.6
shaper_type_y: mzv
Plik filament.cfg, konfigurujemy czujnik filamentu:

Kod: Zaznacz cały

[filament_motion_sensor sfs] #Btt Smart Filament Sensor
detection_length: 7.0
extruder: extruder
switch_pin: P1.26
#pause_on_runout:
runout_gcode: FILAMENT_RUNOUT
To by było na razie na tyle. Muszę rozwiązać jeszcze jeden problem - nie mogę zlecić wydruków z poziomu LCD. Pliki z wirtualnej karty SD są wyświetlane prawidłowo, ale po kliknięciu na wybranym - nic się nie dzieje. Na pewno znowu coś z Octoprintem (którego tu nie ma). Dzisiaj postaram się to ogarnąć.
Voron 2.4 350^3 | Fysetc Spider v1 | Klipper | Fluidd | Phaetus Dragon HF
Ender 3 Pro | SKR mini E3 2.0 | Klipper | Octoprint | BIQU Phaetus Dragon | BLV Mod | BLT | DirecDrive BMG
Awatar użytkownika
cyfron
Postów w temacie: 5
Posty: 1421
Rejestracja: 30 sty 2019, 09:28
Drukarka: U30, SP Pro, UM2+
x 365

Re: Worklog - Projekt exEnder 3 Pro

Post autor: cyfron »

sensor_type: NTC 100K beta 3950
Jesteś pewien, że to poprawna wartość?
W swoich drukarkach mam NTC od trójkątnych "NTC 100K B3950" i na w/w ustawieniu pokazywało mi o 15stC za mało - zmierzone termoparą. Na forach Klippera jest poruszany ten temat. Zgodnie z sugestiami ustawiłem "EPCOS 100K B57560G104F" i różnica w porównaniu do termopary to 1stC, czyli w granicach błędu.
Awatar użytkownika
sobal
Postów w temacie: 24
Posty: 116
Rejestracja: 09 wrz 2020, 19:35
x 47

Re: Worklog - Projekt exEnder 3 Pro

Post autor: sobal »

Pewien niestety nie jestem. Dokładnie te od trójkątnych kupowałem, przy temperaturze pokojowej zarówno łóżko jak i hotend mają identyczne temperatury. Niestety, nie mam jak sprawdzić termoparą, ale zastosuję się do Twojej rady, zrobię PID i coś druknę.
Voron 2.4 350^3 | Fysetc Spider v1 | Klipper | Fluidd | Phaetus Dragon HF
Ender 3 Pro | SKR mini E3 2.0 | Klipper | Octoprint | BIQU Phaetus Dragon | BLV Mod | BLT | DirecDrive BMG
Awatar użytkownika
cyfron
Postów w temacie: 5
Posty: 1421
Rejestracja: 30 sty 2019, 09:28
Drukarka: U30, SP Pro, UM2+
x 365

Re: Worklog - Projekt exEnder 3 Pro

Post autor: cyfron »

Temp. pokojową też mi w miarę dobrze pokazywało. Błąd pomiaru w wyższych temp. wynika z innej charakterystyki termistorów - im dalej od 25stC tym większy błąd. W 25stC jeden i drugi ma 100k.
Awatar użytkownika
sobal
Postów w temacie: 24
Posty: 116
Rejestracja: 09 wrz 2020, 19:35
x 47

Re: Worklog - Projekt exEnder 3 Pro

Post autor: sobal »

cyfron pisze:Temp. pokojową też mi w miarę dobrze pokazywało. Błąd pomiaru w wyższych temp. wynika z innej charakterystyki termistorów - im dalej od 25stC tym większy błąd. W 25stC jeden i drugi ma 100k.
A widzi szanowny Pan, takie buty. Zmieniłem zgodnie z sugestią, zrobiłem PID i działa. Może jak się dorobię FLIRa, to zweryfikuję :) Dzieki za radę.
Voron 2.4 350^3 | Fysetc Spider v1 | Klipper | Fluidd | Phaetus Dragon HF
Ender 3 Pro | SKR mini E3 2.0 | Klipper | Octoprint | BIQU Phaetus Dragon | BLV Mod | BLT | DirecDrive BMG
Awatar użytkownika
sobal
Postów w temacie: 24
Posty: 116
Rejestracja: 09 wrz 2020, 19:35
x 47

Re: Worklog - Projekt exEnder 3 Pro

Post autor: sobal »

Dzisiaj jedna modyfikacja wizualna:

Musiałem przenieść drukarkę, tak bez rączki? Według mojego ulubionego projektu z Vorona (Sturdy Handle: https://github.com/VoronDesign/VoronUse ... dy_Handles)
IMG_20210929_150659.jpg
Druga modyfikacja dotyczy kodu, zmodyfikowałem trochę Home, teraz wykonywany jest tylko wtedy, jeżeli osie nie zostały wcześniej ustawione za pomocą home, ogranicza to trochę ruchy karetki, w macro.cfg

Kod: Zaznacz cały

[gcode_macro HOME]
gcode:
    {% if printer.toolhead.homed_axes != "xyz" %}
        G28
    {% endif %}
Do PRINT_START:
po załadowaniu BED_MESH_PROFILE dodajemy linijkę: HOME
cyfron
Voron 2.4 350^3 | Fysetc Spider v1 | Klipper | Fluidd | Phaetus Dragon HF
Ender 3 Pro | SKR mini E3 2.0 | Klipper | Octoprint | BIQU Phaetus Dragon | BLV Mod | BLT | DirecDrive BMG
ODPOWIEDZ

Wróć do „Ender”