i3 CoreXZ AM8

Rebuild of my i3 clone with aluminium extrusions, CoreXZ, Klipper
Project started on October 08, 2022.
Last updated on September 03, 2023.

...back to 3D Printing overview

In February 2022 I finally decided to re-build my CTC i3 Pro B with an upgraded frame and better parts. It took me quite some time, until September of 2022, to finally get it running properly.

Front view of completed printer
View of PCBs on left side
View of power supplies on right side

The following are the new integral components:

Initially I simply wanted to re-use the mechanical parts from my old printer. But after talking to my friend Tobias about the project, he came up with the idea to convert the AM8 into a CoreXZ machine, and also immediately delivered a complete design! We selected the parts based on what I mostly still had lying around.

Other mechanical / electronical parts, like motors and the heatbed, I planned to re-use from my previous printer. In the end that plan didn't quite work out and the only parts that are still "original" are my heatbed MOSFET and the webcam, everything else was replaced.

Frame / CoreXZ

Front top view, without bed
Front bottom view, without bed

This is my first time going from simple i3-style mechanics to something more complicated, like CoreXY or CoreXZ. It has some advantages and drawbacks. I really like that leveling the Z-axis, or losing steps on only one of the two Z steppers, is a thing of the past. Instead, now the rotation of the X-axis is determined by the relative tension of the two long belts. Tensioning one of the belts, the corresponding side of the X-axis rises or lowers. By using a simple 3D printed tool the tension can be measured and dialed in relatively well. For fine tuning, you can induce an oscillation on the belt with your finger and compare the pitch of the resulting sound.

CAD screenshot of whole CoreXZ AM8
CAD screenshot of XZ gearbox

At the beginning I had some problems getting the CoreXZ mechanism to work reliably. It took me far longer than I'd like to admit to find the root issue. The GT2 belt I ordered was not, in fact, a GT2 belt with 2mm pitch, but a T2.5 belt with 2.5mm pitch, and a slightly different tooth profile (square instead of rounded). This was close enough so you don't immediately notice a problem, but still caused some slip on the axes. This resulted in the axis dropping down in Z slightly with every move of the X axis.

Hotend

BL Touch clone on hotend
CAD screenshot of extruder / hotend

I'm using a Sherpa Mini Extruder together with an NF Crazy High-Flow hotend, both ordered from Mellow on AliExpress. These are put on the x-carriage with only a 5015 fan for the filament, a 4020 fan for the hotend and a BL-Touch for auto-leveling. This makes for a very lightweight carriage that can reach high accelerations and speeds. And thanks to the v-rollers in the aluminium extrusion it moves very silently, as well.

Disassembled, clogged hotend
Disassembled, clogged heatbreak

I had some problems initially with the NF Crazy clogging with low layer heights. This required some disassembly and cleaning of molten plastic. After experimenting a bit, I found that I could easily hold the filament, with the extruder no longer able to pull it. This turned out to be caused by the melt-in nut that holds the spring for the lever arm. It was pulled out slightly from the body of the extruder, therefore causing a larger distance between both rollers. Pushing in the nut as far as possible was enough to remedy the problem. Although I suspect it may come back in the future. Guess I have to re-print the extruder body until then.

Heatbed

I initially hoped to re-use my old heatbed, but it turned out it is only compatible to 12V. So I had to order a 24V variant. I decided to go with this Mk52 clone magnetic heatbed from HTA3D. The magnets in there are apparently good up to 140 degrees C. I was able to re-use the coated spring-steel-sheet printing surface from my old printer. It already came with a nice printed housing for the cable connections, and a Thermistor pre-installed. I asked the vendor, it is an EPCOS 100K B57560G104F in Klipper, or option 1 in Marlin.

Heatbed without insulation
Heatbed wiring
Insulated Heatbed

Of course I put a piece of insulation foam on the bottom of the bed. I installed it using some flat 20mm springs on my Y carriage.

Y Carriage without Heatbed
Printer with Heatbed installed
Close view of Heatbed springs

Custom 3D-Printed Parts

To install all the modules and PCBs to the frame I decided to design some simple mounting plates for myself.

View of PCB mounts
View of PSU mounts

You can find these files on my Printables profile or in my Git repo.

Power Supply Wiring

I added two power supplies to the printer. One is +5V, solely for powering the Raspberry Pi, and it is always on. The other is +24V, for running the printer itself. This is switched by a relais module, connected to the Pi.

I'm not entirely comfortable with the 220V wiring, so I added plan to add an enclosure that should prevent any shock hazards from touching.

Power supply cabling

As a small quality-of-life improvement I put a piece of shrink wrap tubing over the indicator LED of the +24V supply. I don't understand why the manufacturer decided to put an unbelievably bright blue LED on there... 🤦

In an attempt to avoid any ground loops and power supplies driving each other, I decided not to connect the Pi and the Mainboard using USB. Instead I ran a cable between them, only connecting GND and the UART Rx and Tx lines. This is the only place where the grounds of the +5V and +24V supply are connected. The mainboard is not fed any external +5V.

As I've re-used 12V fans from my old printer, I had to add a small PCB with a 24V -> 12V converter to power them. I simply used a small LM2596 module soldered onto a perf-board with some connectors. The mainboard switches GND for all accessories, so using 12V fans is as simple as connecting the negative lead to the mainboard connector, and the positive lead to +12V instead of the mainboard connector.

LCD Connection

On a whim, I decided to get a Fysetc 12864 clone. Only later I realized that it is not really compatible with my chosen mainboard, as it does not have the standard EXP1/EXP2 connectors. Fortunately this can be fixed easily, you just need to connect the required pins to free IO pins of the mainboard. I decided to ignore the SD card interface, as I won't be using it and the mainboard has one as well. So only the LCD and rotary encoder pins are required. My LCD board also has some RGB LEDs, so I decided to wire them up as well. The other question concerns the cabling. The standard 2x 10pin ribbon cables are hard to route and prone to interference. Counting the required pins, and looking at my cable stash, I decided to simply use some Cat5 ethernet cabling. With 8 cores per cable I only had to use two pieces in parallel.

Configuring it correctly turned out to be a bit tricky. Initially I thought I had hardware revision 1.2, based on the reviews on Amazon, with plain RGB LEDs on board. But I couldn't get anything to light up, neither around the encoder nor the LCD backlight. That's when I took a closer look and saw the WS2811 chips on the LCD PCB (and later also the revision printed on it 😅). Turns out I actually have revision 2.1.

One thing you should check before using a display like this: the RST and KILL pins and their respective resistors. The push button on the front of the LCD panel can be connected to either the RST or KILL pin. If you do a custom cabling, like I did, it doesn't really matter which one of these you choose. But my display only came with R3 installed, which I didn't notice at first. Because I wired up the KILL pin instead of using RST, I would have needed R4 instead of R3. I decided to simply switch out the 0Ω-link. The other resistor, R1, is also important. It should not be populated, otherwise the display will feed +5V back to the GPIOs of the MCU, which are only 3.3V tolerant.

Schematic of LCD reset / kill pins
Back of LCD, before reset fix
Back of LCD, after reset fix

To mount the LCD to my frame I used "Mini 12864 LCD Display Housing for 2020 V-Slot" by derebbe. You need to replace the kill button on the panel with a shorter one for this model to work.

Front of LCD, with new button

This was the first time I tried to solder to ethernet cable. It seems to have some kind of coating that makes it not only hard to wet with tin, it also corroded one of my soldering tips pretty strongly. Not all connections were good, and I had some issues with the LCD not displaying anything after a short time.

LCD mounted on printer
LCD cabling

For all other cables I tried to route them nicely as well.

Mainboard with cabling
Cables on right side
Cables on back side
Cables on left side

Klipper Firmware

After hearing many good things about Klipper from Tobias and others, I really had to try it out myself. And I have to admit, even though I didn't believe it at first, it's much better than Marlin in many areas, even for non-fancy printers like mine.

I'm using MainsailOS on a Raspberry Pi 3B. Installation and Configuration was really straight-forward with the configuration guides of Klipper and Mainsail. I also installed the Moonraker Telegram Bot according to their installation instructions.

With one of my first print attempts I ran into the "Rescheduled timer in the past" error message. Turns out there was a bug in the microcontroller firmware, so I had to upgrade that, even though thats apparently not needed normally for all updates.

Here is my current printer.cfg file.

[include mainsail.cfg]

##########################################
################# System #################
##########################################

[printer]
kinematics: corexz
max_velocity: 200
max_accel: 2000
max_accel_to_decel: 2000
max_z_velocity: 200
max_z_accel: 500

[board_pins]
aliases:
    # EXP1 header
    EXP1_1=PB5,   EXP1_3=PA9,   EXP1_5=PA10, EXP1_7=PB8, EXP1_9=,
    EXP1_2=PA15,  EXP1_4=, EXP1_6=PB9,  EXP1_8=PD6, EXP1_10=<5V>,
    # I/O header
    IO_1=PD0, IO_2=PD2, IO_3=PD3, IO_4=PD4, IO_5=PD5,
    # PWR-DET header
    PWR_DET=PC12,
    # Unused pin
    UNUSED=PA6

[mcu]
#serial: /dev/ttyAMA0
serial: /dev/serial/by-id/usb-FTDI_FT232R_USB_UART_A100OZQ1-if00-port0
restart_method: command

[temperature_sensor microcontroller]
sensor_type: temperature_mcu
min_temp: 0
max_temp: 90
gcode_id: mcu

[temperature_sensor raspberry_pi]
sensor_type: temperature_host
min_temp: 0
max_temp: 90
gcode_id: pi

##########################################
################# Motors #################
##########################################

# The stepper_x section is used to describe the X axis as well as the
# stepper controlling the X+Z movement.
[stepper_x]
step_pin: PB13
dir_pin: !PB12
enable_pin: !PB14
microsteps: 16 # set by driver
full_steps_per_rotation: 200 # motor specific
gear_ratio: 36:20 # CoreXZ gearbox
rotation_distance: 40 # 20 teeth * 2mm belt
endstop_pin: ^!PC0
position_endstop: -7.0
position_min: -7.0
position_max: 228.0
homing_speed: 40
second_homing_speed: 10

# The stepper_y section is used to describe the stepper controlling
# the Y axis.
[stepper_y]
step_pin: PB10
dir_pin: PB2
enable_pin: !PB11
microsteps: 16 # set by driver
full_steps_per_rotation: 200 # motor specific
gear_ratio: 1:1 # driven directly
rotation_distance: 40 # 20 teeth * 2mm belt
endstop_pin: ^!PC1
position_endstop: 0.0
position_min: 0.0
position_max: 210.0
homing_speed: 40
second_homing_speed: 10

# The stepper_z section is used to describe the Z axis as well as the
# stepper controlling the X-Z movement.
[stepper_z]
step_pin: PB0
dir_pin: !PC5
enable_pin: !PB1
microsteps: 16 # set by driver
full_steps_per_rotation: 200 # motor specific
gear_ratio: 36:20 # CoreXZ gearbox
rotation_distance: 40 # 20 teeth * 2mm belt
endstop_pin: ^!PC2
position_endstop: 0.200
position_min: 0.0
position_max: 275.0
homing_speed: 40
second_homing_speed: 10

[extruder]
step_pin: PB3
dir_pin: !PB4
enable_pin: !PD1
rotation_distance: 22.67895
gear_ratio: 50:8
microsteps: 16
full_steps_per_rotation: 200
nozzle_diameter: 0.400
filament_diameter: 1.750
heater_pin: PC8
sensor_type: ATC Semitec 104GT-2
sensor_pin: PA0
control: pid
pid_Kp: 23.441
pid_Ki: 0.919
pid_Kd: 149.435
min_temp: 0
max_temp: 250
max_extrude_only_distance: 1400.0
max_extrude_only_velocity: 75.0
max_extrude_only_accel: 1500

[heater_bed]
heater_pin: PC9
sensor_type: EPCOS 100K B57560G104F
sensor_pin: PC4
control: pid
pid_Kp: 43.878
pid_Ki: 0.255
pid_Kd: 1888.933
min_temp: 0
max_temp: 130

###########################################
################# TMC2209 #################
###########################################

[tmc2209 stepper_x]
uart_pin: PC11
tx_pin: PC10
uart_address: 0
stealthchop_threshold: 999999
run_current: 0.6

[tmc2209 stepper_y]
uart_pin: PC11
tx_pin: PC10
uart_address: 2
stealthchop_threshold: 999999
run_current: 0.6

[tmc2209 stepper_z]
uart_pin: PC11
tx_pin: PC10
uart_address: 1
stealthchop_threshold: 999999
run_current: 0.6

[tmc2209 extruder]
uart_pin: PC11
tx_pin: PC10
uart_address: 3
stealthchop_threshold: 999999
run_current: 0.5

###########################################
############### Accessories ###############
###########################################

[heater_fan nozzle_cooling_fan]
pin: PC6 # fan 0

[fan]
pin: PC7 # fan 1

[controller_fan controller_fan]
pin: PB15 # fan 2

############################################
############### Bed Leveling ###############
############################################

[bltouch]
sensor_pin: ^PC14
control_pin: PA1
x_offset: -37
y_offset: -2
z_offset: 3.151
speed: 10

[bed_mesh]
speed: 200
mesh_min: 5, 5
mesh_max: 190, 195
horizontal_move_z: 10
probe_count: 5, 5
mesh_pps: 4, 4

[gcode_macro G29]
gcode:
    BED_MESH_CALIBRATE

###########################################
########### LCD / Encoder / LED ###########
###########################################

[display]
lcd_type: uc1701
cs_pin: EXP1_2
a0_pin: EXP1_3
rst_pin: EXP1_5
contrast: 63
encoder_pins: ^IO_2, ^IO_3
click_pin: ^!EXP1_1
#kill_pin: ^IO_1
spi_software_miso_pin: UNUSED
spi_software_mosi_pin: IO_5
spi_software_sclk_pin: IO_4

# index 1 is lcd backlight
# index 2 is left encoder led
# index 3 is right encoder led
[neopixel lcd]
pin: EXP1_6
chain_count: 3
color_order: RGB
initial_RED: 0.3
initial_GREEN: 0.3
initial_BLUE: 0.3

##########################################
################# Beeper #################
##########################################

# M300 : Play tone. Usage:
#   M300 [P] [S]
#   P is the tone duration, S the tone frequency.

[output_pin beeper]
pin: PWR_DET
pwm: True
value: 0 # Silent at power on, set to 1 if active low.
shutdown_value: 0 # Disable at emergency shutdown (no PWM would be available anyway).
cycle_time: 0.001

[gcode_macro M300]
gcode:
    # Use a default 1kHz tone if S is omitted.
    {% set S = params.S|default(1000)|int %}
    # Use a 10ms duration is P is omitted.
    {% 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

##########################################
############## Idle Timeout ##############
##########################################

# https://moonraker.readthedocs.io/en/latest/configuration/#toggling-device-state-from-klipper

[gcode_macro POWER_OFF_PRINTER]
gcode:
    {action_call_remote_method("set_device_power",
                               device="printer",
                               state="off")}

[delayed_gcode delayed_printer_off]
initial_duration: 0.
gcode:
    {% if printer.idle_timeout.state == "Idle" %}
        POWER_OFF_PRINTER
    {% endif %}

[idle_timeout]
gcode:
    M84
    TURN_OFF_HEATERS
    UPDATE_DELAYED_GCODE ID=delayed_printer_off DURATION=60

##########################################
######### Telegram Bot Timelapse #########
##########################################

# https://github.com/nlef/moonraker-telegram-bot/wiki/installation#step-5-optional-include-the-macro-to-store-lapse-variables

[gcode_macro _bot_data]
variable_lapse_video_size: 0
variable_lapse_filename: 'None'
variable_lapse_path: 'None'
gcode:
    M118 Setting bot lapse variables

Here is my current moonraker.conf file.

[server]
host: 0.0.0.0
port: 7125
# Verbose logging used for debugging . Default False.
enable_debug_logging: False
# The maximum size allowed for a file upload (in MiB).  Default 1024 MiB
max_upload_size: 1024

[file_manager]
config_path: ~/klipper_config
log_path: ~/klipper_logs
enable_object_processing: True
queue_gcode_uploads: True

# https://moonraker.readthedocs.io/en/latest/configuration/#power-on-g-code-uploads

[job_queue]
load_on_startup: True

[power printer]
type: gpio
pin: gpiochip0/gpio4
off_when_shutdown: True
off_when_shutdown_delay: 2
on_when_job_queued: True
locked_while_printing: True
restart_klipper_when_powered: True
restart_delay: 1
initial_state: off

# enables partial support of Octoprint API
[octoprint_compat]

# enables moonraker to track and store print history.
[history]

# this enables moonraker's update manager
[update_manager]
refresh_interval: 168

[update_manager mainsail]
type: web
repo: mainsail-crew/mainsail
path: ~/mainsail

[update_manager client moonraker-telegram-bot]
type: git_repo
path: ~/moonraker-telegram-bot
origin: https://github.com/nlef/moonraker-telegram-bot.git
env: ~/moonraker-telegram-bot-env/bin/python
requirements: scripts/requirements.txt
install_script: scripts/install.sh

And here is my PrusaSlicer config bundle.

# generated by PrusaSlicer 2.6.0 on 2023-08-31 at 15:11:37 UTC

[print:i3 AM8]
avoid_crossing_curled_overhangs = 0
avoid_crossing_perimeters = 1
avoid_crossing_perimeters_max_detour = 0
bottom_fill_pattern = monotonic
bottom_solid_layers = 4
bottom_solid_min_thickness = 0
bridge_acceleration = 0
bridge_angle = 0
bridge_flow_ratio = 1
bridge_speed = 120
brim_separation = 0
brim_type = outer_only
brim_width = 0
compatible_printers = 
compatible_printers_condition = 
complete_objects = 0
default_acceleration = 0
dont_support_bridges = 1
draft_shield = disabled
elefant_foot_compensation = 0
enable_dynamic_overhang_speeds = 0
external_perimeter_acceleration = 0
external_perimeter_extrusion_width = 0.45
external_perimeter_speed = 60%
external_perimeters_first = 0
extra_perimeters = 1
extra_perimeters_on_overhangs = 0
extruder_clearance_height = 20
extruder_clearance_radius = 20
extrusion_width = 0.45
fill_angle = 45
fill_density = 20%
fill_pattern = honeycomb
first_layer_acceleration = 0
first_layer_acceleration_over_raft = 0
first_layer_extrusion_width = 0.42
first_layer_height = 0.2
first_layer_speed = 50%
first_layer_speed_over_raft = 30
fuzzy_skin = none
fuzzy_skin_point_dist = 0.8
fuzzy_skin_thickness = 0.3
gap_fill_enabled = 1
gap_fill_speed = 30
gcode_comments = 0
gcode_label_objects = 1
gcode_resolution = 0.0125
gcode_substitutions = 
infill_acceleration = 0
infill_anchor = 600%
infill_anchor_max = 50
infill_every_layers = 1
infill_extruder = 1
infill_extrusion_width = 0.45
infill_first = 0
infill_overlap = 25%
infill_speed = 100
inherits = 
interface_shells = 0
ironing = 0
ironing_flowrate = 15%
ironing_spacing = 0.1
ironing_speed = 15
ironing_type = top
layer_height = 0.3
max_print_speed = 130
max_volumetric_extrusion_rate_slope_negative = 0
max_volumetric_extrusion_rate_slope_positive = 0
max_volumetric_speed = 0
min_bead_width = 85%
min_feature_size = 25%
min_skirt_length = 20
mmu_segmented_region_max_width = 0
notes = 
only_retract_when_crossing_perimeters = 0
ooze_prevention = 0
output_filename_format = [input_filename_base].gcode
overhang_speed_0 = 15
overhang_speed_1 = 15
overhang_speed_2 = 20
overhang_speed_3 = 25
overhangs = 1
perimeter_acceleration = 0
perimeter_extruder = 1
perimeter_extrusion_width = 0.45
perimeter_generator = arachne
perimeter_speed = 100
perimeters = 4
post_process = 
print_settings_id = 
raft_contact_distance = 0.1
raft_expansion = 1.5
raft_first_layer_density = 90%
raft_first_layer_expansion = 3
raft_layers = 0
resolution = 0
seam_position = aligned
single_extruder_multi_material_priming = 1
skirt_distance = 6
skirt_height = 1
skirts = 3
slice_closing_radius = 0.049
slicing_mode = regular
small_perimeter_speed = 80%
solid_infill_acceleration = 0
solid_infill_below_area = 70
solid_infill_every_layers = 0
solid_infill_extruder = 1
solid_infill_extrusion_width = 0.45
solid_infill_speed = 75%
spiral_vase = 0
staggered_inner_seams = 0
standby_temperature_delta = -5
support_material = 0
support_material_angle = 0
support_material_auto = 1
support_material_bottom_contact_distance = 0
support_material_bottom_interface_layers = -1
support_material_buildplate_only = 1
support_material_closing_radius = 2
support_material_contact_distance = 0.2
support_material_enforce_layers = 0
support_material_extruder = 1
support_material_extrusion_width = 0.35
support_material_interface_contact_loops = 0
support_material_interface_extruder = 1
support_material_interface_layers = 3
support_material_interface_pattern = rectilinear
support_material_interface_spacing = 0
support_material_interface_speed = 100%
support_material_pattern = rectilinear
support_material_spacing = 2.5
support_material_speed = 80
support_material_style = organic
support_material_synchronize_layers = 0
support_material_threshold = 0
support_material_with_sheath = 1
support_material_xy_spacing = 50%
support_tree_angle = 40
support_tree_angle_slow = 25
support_tree_branch_diameter = 2
support_tree_branch_diameter_angle = 5
support_tree_branch_diameter_double_wall = 3
support_tree_branch_distance = 1
support_tree_tip_diameter = 0.8
support_tree_top_rate = 15%
thick_bridges = 1
thin_walls = 1
threads = 8
top_fill_pattern = monotonic
top_infill_extrusion_width = 0.4
top_solid_infill_acceleration = 0
top_solid_infill_speed = 75%
top_solid_layers = 4
top_solid_min_thickness = 0
travel_acceleration = 0
travel_speed = 130
travel_speed_z = 0
wall_distribution_count = 1
wall_transition_angle = 10
wall_transition_filter_deviation = 25%
wall_transition_length = 100%
wipe_tower = 0
wipe_tower_bridging = 10
wipe_tower_brim_width = 2
wipe_tower_cone_angle = 0
wipe_tower_extra_spacing = 100%
wipe_tower_extruder = 0
wipe_tower_no_sparse_layers = 0
wipe_tower_rotation_angle = 0
wipe_tower_width = 60
wipe_tower_x = 180
wipe_tower_y = 140
xy_size_compensation = 0

[filament:i3 AM8 PETG]
bed_temperature = 60
bridge_fan_speed = 100
compatible_printers = 
compatible_printers_condition = 
compatible_prints = 
compatible_prints_condition = 
cooling = 1
disable_fan_first_layers = 3
enable_dynamic_fan_speeds = 0
end_filament_gcode = "; Filament-specific end gcode \n;END gcode for filament\n"
extrusion_multiplier = 1
fan_always_on = 0
fan_below_layer_time = 60
filament_colour = #29B2B2
filament_cooling_final_speed = 3.4
filament_cooling_initial_speed = 2.2
filament_cooling_moves = 4
filament_cost = 20
filament_density = 1.27
filament_deretract_speed = nil
filament_diameter = 1.75
filament_load_time = 0
filament_loading_speed = 28
filament_loading_speed_start = 3
filament_max_volumetric_speed = 0
filament_minimal_purge_on_wipe_tower = 15
filament_notes = ""
filament_ramming_parameters = "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6"
filament_retract_before_travel = nil
filament_retract_before_wipe = nil
filament_retract_layer_change = nil
filament_retract_length = nil
filament_retract_lift = nil
filament_retract_lift_above = nil
filament_retract_lift_below = nil
filament_retract_restart_extra = nil
filament_retract_speed = nil
filament_settings_id = ""
filament_soluble = 0
filament_spool_weight = 0
filament_toolchange_delay = 0
filament_type = PET
filament_unload_time = 0
filament_unloading_speed = 90
filament_unloading_speed_start = 100
filament_vendor = (Unknown)
filament_wipe = nil
first_layer_bed_temperature = 60
first_layer_temperature = 230
full_fan_speed_layer = 0
idle_temperature = nil
inherits = 
max_fan_speed = 100
min_fan_speed = 35
min_print_speed = 10
overhang_fan_speed_0 = 0
overhang_fan_speed_1 = 0
overhang_fan_speed_2 = 0
overhang_fan_speed_3 = 0
slowdown_below_layer_time = 5
start_filament_gcode = "; Filament gcode\n"
temperature = 230

[filament:i3 AM8 PLA]
bed_temperature = 60
bridge_fan_speed = 100
compatible_printers = 
compatible_printers_condition = 
compatible_prints = 
compatible_prints_condition = 
cooling = 1
disable_fan_first_layers = 3
enable_dynamic_fan_speeds = 0
end_filament_gcode = "; Filament-specific end gcode \n;END gcode for filament\n"
extrusion_multiplier = 1
fan_always_on = 0
fan_below_layer_time = 60
filament_colour = #29B2B2
filament_cooling_final_speed = 3.4
filament_cooling_initial_speed = 2.2
filament_cooling_moves = 4
filament_cost = 20
filament_density = 1.24
filament_deretract_speed = nil
filament_diameter = 1.75
filament_load_time = 0
filament_loading_speed = 28
filament_loading_speed_start = 3
filament_max_volumetric_speed = 0
filament_minimal_purge_on_wipe_tower = 15
filament_notes = ""
filament_ramming_parameters = "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6"
filament_retract_before_travel = nil
filament_retract_before_wipe = nil
filament_retract_layer_change = nil
filament_retract_length = nil
filament_retract_lift = nil
filament_retract_lift_above = nil
filament_retract_lift_below = nil
filament_retract_restart_extra = nil
filament_retract_speed = nil
filament_settings_id = ""
filament_soluble = 0
filament_spool_weight = 0
filament_toolchange_delay = 0
filament_type = PLA
filament_unload_time = 0
filament_unloading_speed = 90
filament_unloading_speed_start = 100
filament_vendor = (Unknown)
filament_wipe = nil
first_layer_bed_temperature = 60
first_layer_temperature = 210
full_fan_speed_layer = 0
idle_temperature = nil
inherits = 
max_fan_speed = 100
min_fan_speed = 35
min_print_speed = 10
overhang_fan_speed_0 = 0
overhang_fan_speed_1 = 0
overhang_fan_speed_2 = 0
overhang_fan_speed_3 = 0
slowdown_below_layer_time = 5
start_filament_gcode = "; Filament gcode\n"
temperature = 210

[printer:i3 AM8]
autoemit_temperature_commands = 1
bed_custom_model = 
bed_custom_texture = 
bed_shape = 0x0,220x0,220x210,0x210
before_layer_gcode = 
between_objects_gcode = 
color_change_gcode = M600
cooling_tube_length = 5
cooling_tube_retraction = 91.5
default_filament_profile = 
default_print_profile = 
deretract_speed = 0
end_gcode = M104 S0 ; turn off temperature\nM140 S0 ; turn off bed\n\nG91 ; relative positioning\nG1 E-4.0 F40 ; retract some filament\nG1 Z+2.0 E-6.0 F{travel_speed * 60} ; move z up and retract more\n\nG90 ; absolute positioning\nG0 X-5 Y200 ; move out of the way\nM84 ; disable motors\nM117 Finished!\n\n; total layers count = [total_layer_count]
extra_loading_move = -2
extruder_colour = ""
extruder_offset = 0x0
gcode_flavor = reprap
high_current_on_filament_swap = 0
host_type = octoprint
inherits = 
layer_gcode = SET_PRINT_STATS_INFO CURRENT_LAYER={layer_num + 1}
machine_limits_usage = time_estimate_only
machine_max_acceleration_e = 10000,5000
machine_max_acceleration_extruding = 1500,1250
machine_max_acceleration_retracting = 1500,1250
machine_max_acceleration_travel = 1500,1250
machine_max_acceleration_x = 2000,1000
machine_max_acceleration_y = 2000,1000
machine_max_acceleration_z = 500,200
machine_max_feedrate_e = 120,120
machine_max_feedrate_x = 175,100
machine_max_feedrate_y = 175,100
machine_max_feedrate_z = 175,100
machine_max_jerk_e = 2.5,2.5
machine_max_jerk_x = 10,10
machine_max_jerk_y = 10,10
machine_max_jerk_z = 0.2,0.4
machine_min_extruding_rate = 0,0
machine_min_travel_rate = 0,0
max_layer_height = 0
max_print_height = 275
min_layer_height = 0.07
nozzle_diameter = 0.4
parking_pos_retraction = 92
pause_print_gcode = M601
print_host = 
printer_model = 
printer_notes = 
printer_settings_id = 
printer_technology = FFF
printer_variant = 
printer_vendor = 
printhost_apikey = 
printhost_cafile = 
remaining_times = 0
retract_before_travel = 2
retract_before_wipe = 0%
retract_layer_change = 0
retract_length = 2
retract_length_toolchange = 10
retract_lift = 0
retract_lift_above = 0
retract_lift_below = 0
retract_restart_extra = 0
retract_restart_extra_toolchange = 0
retract_speed = 40
silent_mode = 1
single_extruder_multi_material = 0
start_gcode = SET_PRINT_STATS_INFO TOTAL_LAYER=[total_layer_count]\n\n; Pre-Heat Bed\n;M140 S35 ; start heating bed\n;M140 S[first_layer_bed_temperature] ; start heating bed\n\n; Initial Settings\nG21 ; metric\nG90 ; absolute positioning\nM82 ; extruder absolute\nM107 ; fan off\n\n; Homing\n;G28 ; home all axes\n;G0 Z25 F{travel_speed * 60} ; lift nozzle\n;G0 X-5 Y0 F{travel_speed * 60} ; move to xy origin\n\n; Bed Leveling\nG29 ; perform auto bed leveling\nG0 Z25 F{travel_speed * 60} ; lift nozzle\nG0 X-5 Y0 F{travel_speed * 60} ; move to xy origin\n\n; Heating Extruder and Bed\n;M190 S35 ; wait for heating bed\nM140 S[first_layer_bed_temperature] ; start heating bed\nM104 S[first_layer_temperature] ; start heating extruder\nM190 S[first_layer_bed_temperature] ; wait for heating bed\nM109 S[first_layer_temperature] ; wait for heating extruder\n\n; Priming Line\n;G0 Z0.5 F{travel_speed * 60} ; move down nozzle\n;G0 X5 Y3 F{travel_speed * 60} ; move to start of line\n;G0 Z0.1 F{travel_speed * 60} ; move z down\n;G92 E0 ; zero extruder\n;G1 X60 E12.5 F600 ; start purge line\n;G1 X100 E15.0 F600 ; finish purge line\n;G1 X120 E12.5 F600 ; retract\nG92 E0 ; zero extruder\n;G0 Z5 F{travel_speed * 60} ; lift nozzle\n;G0 X100 Y100 ; move to center\nM117 Printing...\n
template_custom_gcode = 
thumbnails = 32x32,400x300
thumbnails_format = PNG
toolchange_gcode = 
use_firmware_retraction = 0
use_relative_e_distances = 0
use_volumetric_e = 0
variable_layer_height = 1
wipe = 0
z_offset = 0

[presets]
print = i3 AM8
printer = i3 AM8
filament = i3 AM8 PLA

Printing at CCCamp23

I brought the printer with me for CCCamp23 and offered printing services on-site at Frubar island. Surprisingly it worked without any issues. Transporting to and from the camp in the trunk of a car was no problem and I didn't have to fix or adjust anything.

Printer in Frubar (1)
Printer and LED Matrix in FruBar
Printer in Frubar (2)
Printer printing

I'd say that was a good stress test for the hardware and I'm very happy with the result!