# Creality Ender 3

1. [Octoprint backup archive](#octoprint-backup-archive)
2. [Ultimaker Cura configuration](#ultimaker-cura-configuration)
3. [Print profiles](#print-profiles)
4. [Filament set up](#filament-set-up)
5. [Marlin custom firmware](#marlin-custom-firmware)
6. [3D printed custom parts](#3d-printed-custom-parts)

# Octoprint backup archive

[2025-01-01] [Ender3-backup-20250101.zip](octoprint-cfg-bkp/Ender3-backup-20250101.zip)

# Ultimaker Cura configuration

## Cura Printer configuration

| Printer | Extruder |
|---------|----------|
| ![Printer](images/ender3-cura-profile-printer.png) | ![Extruder](images/ender3-cura-profile-extruder.png) |

## Start G-code

```
; Octoprint's Octolapse plugin required G-code
; Script based on an original created by tjjfvi (https://github.com/tjjfvi)
; An up-to-date version of the tjjfvi's original script can be found
; here:  https://csi.t6.fyi/
; Note - This script will only work in Cura V4.2 and above!
; --- Global Settings
; layer_height = {layer_height}
; smooth_spiralized_contours = {smooth_spiralized_contours}
; magic_mesh_surface_mode = {magic_mesh_surface_mode}
; machine_extruder_count = {machine_extruder_count}
; --- Single Extruder Settings
; speed_z_hop = {speed_z_hop}
; retraction_amount = {retraction_amount}
; retraction_hop = {retraction_hop}
; retraction_hop_enabled = {retraction_hop_enabled}
; retraction_enable = {retraction_enable}
; retraction_speed = {retraction_speed}
; retraction_retract_speed = {retraction_retract_speed}
; retraction_prime_speed = {retraction_prime_speed}
; speed_travel = {speed_travel}

; Ender 3 Custom Start G-code
G92 E0 ; Reset Extruder
G28 ; Home all axes
G1 Z2.0 F3000 ; Move Z Axis up little to prevent scratching of Heat Bed
G1 X0.1 Y20 Z0.3 F5000.0 ; Move to start position
G1 X0.1 Y200.0 Z0.3 F1500.0 E15 ; Draw the first line
G1 X0.4 Y200.0 Z0.3 F5000.0 ; Move to side a little
G1 X0.4 Y20 Z0.3 F1500.0 E30 ; Draw the second line
G92 E0 ; Reset Extruder
G1 Z2.0 F3000 ; Move Z Axis up little to prevent scratching of Heat Bed
G1 X5 Y20 Z0.3 F5000.0 ; Move over to prevent blob squish
```

## End G-code

```
G91 ;Relative positioning
G1 E-2 F2700 ;Retract a bit
G1 E-2 Z0.2 F2400 ;Retract and raise Z
G1 X5 Y5 F3000 ;Wipe out
G1 Z10 ;Raise Z more
G90 ;Absolute positioning

G1 X0 Y{machine_depth} ;Present print
M106 S0 ;Turn-off fan
M104 S0 ;Turn-off hotend
M140 S0 ;Turn-off bed

M84 X Y E ;Disable all steppers but Z
```

# Print profiles

* [Standard Quality - Arc Welder](cura-profile/Ender3%20-%20Standard%20Quality%20-%20Arc%20Welder.curaprofile)
* [Low Quality - Arc Welder](cura-profile/Ender3%20-%20Low%20Quality%20-%20Arc%20Welder.curaprofile)
* [Super Quality - Arc Welder](cura-profile/Ender3%20-%20Super%20Quality%20-%20Arc%20Welder.curaprofile)

# Filament set up
## PLA

| Brand     | Filament desc | Printing temp | Build Plate temp | Retractation Distance |
|-----------|---------------|---------------|------------------|-----------------------|
| Geeetech  | Black         | 210°C         | 60°C             | 0.75mm                |
| Geeetech  | Silk Silver   | 210°C         | 60°C             | 0.75mm                |

## PETG

| Brand     | Filament desc | Printing temp | Build Plate temp | Retractation Distance |
|-----------|---------------|---------------|------------------|-----------------------|
| Geeetech  | --            | --            | --               | --                    |


## Activate button and led support

### Full tutorial

[Raspberry Pi Power-Up and Shutdown with a Physical Button](https://embeddedcomputing.com/technology/open-source/development-kits/raspberry-pi-power-up-and-shutdown-with-a-physical-button)


### TL;DR

#### Add button support

1. Edit `/boot/config.txt` file.
2. Add line ` dtoverlay=gpio-shutdown`.

Final result:
```
[...]

[all]
# enable raspicam
start_x=1
gpu_mem=128

# Simple button on/off
dtoverlay=gpio-shutdown
```

#### Add LED support 

1. Edit crontab
```
#> crontab -e
```


2. Add the line
```
@reboot raspi-gpio set 4 op dh
```

Final result:
```
# Edit this file to introduce tasks to be run by cron.
#
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
#
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').
#
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
#
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
#
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h  dom mon dow   command
@reboot raspi-gpio set 4 op dh
```

# Marlin custom firmware

## Installed firmware

- Currently used tag: [`2.1.2.4`](https://github.com/MarlinFirmware/Marlin/tree/2.1.2.4)
- Details: [Firmware sources and custom configuration](./Marlin-2.1.2.4/) (local repo)
- Last compilation date: `2024-10-10 @ 09:53`

## Useful resources

### Firmware configuration:
- [Marlin 2.0.x Firmware Guide for BTT SKR Mini E3 v2.0 Ender 3](https://wallabag.igox.org/view/202)
- [Marlin 2.0.8 guide - PID autotune](https://wallabag.igox.org/view/203)
- [Marlin 2.0.8 guide - Bed Leveling - BLTouch, Inductive Sensor](https://wallabag.igox.org/view/204)

### Theorical documentation:
- [[MARLIN] Déterminer les dimensions / positions de la zone d'impression de son imprimante (cartésienne / CoreXY)](https://web.archive.org/web/20241010080558/https://www.lesimprimantes3d.fr/forum/topic/47020-marlin-déterminer-les-dimensions-positions-de-la-zone-dimpression-de-son-imprimante-cartésienne-corexy/)
- [comprendre la zone de palpage avec un ABL afin de paramétrer son Marlin](https://www.lesimprimantes3d.fr/forum/topic/43747-quelques-éléments-pour-mieux-comprendre-la-zone-de-palpage-avec-un-abl-afin-de-paramétrer-son-marlin/)

### Printer calibration:

Proceed with the different calibrations in the above order:

- [Z-Offset Wizard – A Complete Guide](https://3dprintscape.com/z-offset-wizard-complete-guide/)
- [Marlin PID Auto-Tune - A Complete Guide](https://3dprintinggeek.com/marlin-pid-tuning/) 
    - :warning: First do the PID Auto-Tune for the **bed**. Else you may have false positive thermal runout.
- Linear Advance:
    - [Explanation](https://marlinfw.org/docs/features/lin_advance.html)
    - [Pattern generation tool](https://marlinfw.org/tools/lin_advance/k-factor.html)


# 3D printed custom parts

| Item  | 3D files  | Final result |
|-------|-----------|--------------|
| _Raspberry Pi 4 / Octoprint case_ ([tutorial to enable power switch/LED](https://web.archive.org/web/20250101204129/https://embeddedcomputing.com/technology/open-source/development-kits/raspberry-pi-power-up-and-shutdown-with-a-physical-button))   | [Printable](https://www.printables.com/model/1008828-creality-ender-3-station-lcd-raspberry-pi-4)  | ![show off](images/mods/octoprint-case.jpg) |
| _Ender 3 PSU Support Bracket_       | [Thingiverse](https://www.thingiverse.com/thing:3444134) | ![show off](images/mods/psu-support-bracket.jpg)|
| Aukey LM1 WebCam holder | N/A | ![show off](images/mods/aukey-LM1-webcam-holder.jpg) |
| PSU exhaust fan silencer | [Printable](https://www.printables.com/model/84197-60mm-exhaust-fan-silencer-flowmaster-psu-ender3nep/comments#preview.file.GpvjC) | ![show off](images/mods/psu-exhaust-fan-silencer.jpg) |
| Tool holder | [Local](local-stl/Tools_Holder_v3.stl) | ![show off](images/mods/tool-holder.jpg) |
| SATSANA Ender 3 - BLTouch (Z-Offset: X-51 ; Y-12) | [Printable](https://www.printables.com/model/58601-satsana-ender3-bltouch-fixed) | ![show off](images/mods/satsana-bltouch-for-hotend.webp) |