Arduino: 3D-Drucker Marlin

Aus Wikibooks

Marlin ist eine Firmware für den RepRap Single-Prozessor-Elektronik. Er unterstützt verschiedene Boards.

RepRap Wiki[Bearbeiten]

Hierbei handelt es sich um eine Art eigenes Wikipedia für den freien 3D-Drucker "RepRap". Marlin ist eine Firmware von RepRap und kann kostenfrei heruntergeladen werden.

Der Quellcode ist mit einer großen Anzahl an Boards kompatibel.

Standardmäßig steht "Ramp 1.4" als Board drin. (In der Datei "board.h", befindet sich die Liste aller unterstützten Boards)

Programme[Bearbeiten]

Folgende Programme werden für den 3D-Drucker benötigt.

Optional:

Firmware[Bearbeiten]

Link[Bearbeiten]

Die Firmware als ".zip" Datei angeboten. Diese einfach herunterladen und entpacken.

Öffnen[Bearbeiten]

Arduino IDE öffnen, dann links oben im Menü auf Datei -> Öffnen gehen. Dort in den entpackten Ordner navigieren und nach der Datei "Marlin.ino" suchen, auswählen und auf öffnen gehen. Jetzt wird das Marlin Programm geöffnet.

So gut wie alle Einstellungen ändern wir im Reiter "Configuration.h"

Einstellungen Ändern[Bearbeiten]

YouTube: Marlin Einstellungen anpassen


Baudrate[Bearbeiten]

Bei der Baudrate handelt es sich um die Geschwindigkeit, mit der Arduino und PC miteinander kommunizieren. Diese sollte bei beiden gleich sein, sonst kann der PC/Laptop nicht miteinander kommunizieren.

Thermal Settings/Temperatursensoren[Bearbeiten]

Hier wird den Quellcode vorgegeben, welchen Temperaturfühler an den Board angeschlossen sind.

Die folgende Liste kann je nach Marlin Version variieren. Die Liste für die jeweilige Version, befindet sich direkt im Quellcode als Kommentar.

/**
* --NORMAL IS 4.7kohm PULLUP!-- 1kohm pullup can be used on hotend sensor, using correct resistor and table
*
* Temperature sensors available:
*
*    -3 : thermocouple with MAX31855 (only for sensor 0)
*    -2 : thermocouple with MAX6675 (only for sensor 0)
*    -1 : thermocouple with AD595
*     0 : not used
*     1 : 100k thermistor - best choice for EPCOS 100k (4.7k pullup)
*     2 : 200k thermistor - ATC Semitec 204GT-2 (4.7k pullup)
*     3 : Mendel-parts thermistor (4.7k pullup)
*     4 : 10k thermistor !! do not use it for a hotend. It gives bad resolution at high temp. !!
*     5 : 100K thermistor - ATC Semitec 104GT-2 (Used in ParCan & J-Head) (4.7k pullup)
*     6 : 100k EPCOS - Not as accurate as table 1 (created using a fluke thermocouple) (4.7k pullup)
*     7 : 100k Honeywell thermistor 135-104LAG-J01 (4.7k pullup)
*    71 : 100k Honeywell thermistor 135-104LAF-J01 (4.7k pullup)
*     8 : 100k 0603 SMD Vishay NTCS0603E3104FXT (4.7k pullup)
*     9 : 100k GE Sensing AL03006-58.2K-97-G1 (4.7k pullup)
*    10 : 100k RS thermistor 198-961 (4.7k pullup)
*    11 : 100k beta 3950 1% thermistor (4.7k pullup)
*    12 : 100k 0603 SMD Vishay NTCS0603E3104FXT (4.7k pullup) (calibrated for Makibox hot bed)
*    13 : 100k Hisens 3950  1% up to 300°C for hotend "Simple ONE " & "Hotend "All In ONE"
*    20 : the PT100 circuit found in the Ultimainboard V2.x
*    60 : 100k Maker's Tool Works Kapton Bed Thermistor beta=3950
*    66 : 4.7M High Temperature thermistor from Dyze Design
*    70 : the 100K thermistor found in the bq Hephestos 2
*    75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
*
*       1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
*                              (but gives greater accuracy and more stable PID)
*    51 : 100k thermistor - EPCOS (1k pullup)
*    52 : 200k thermistor - ATC Semitec 204GT-2 (1k pullup)
*    55 : 100k thermistor - ATC Semitec 104GT-2 (Used in ParCan & J-Head) (1k pullup)
*
*  1047 : Pt1000 with 4k7 pullup
*  1010 : Pt1000 with 1k pullup (non standard)
*   147 : Pt100 with 4k7 pullup
*   110 : Pt100 with 1k pullup (non standard)
*
*         Use these for Testing or Development purposes. NEVER for production machine.
*   998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
*   999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
*
* :{ '0': "Not used", '1':"100k / 4.7k - EPCOS", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950  1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '20':"PT100 (Ultimainboard V2.x)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '66':"Dyze Design 4.7M High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595",'998':"Dummy 1", '999':"Dummy 2" }
*/

An den Board können bis zu fünf Temperatursensoren angeschlossen werden. Temperatursensor 0 ist der Sensor für das Hotend und Sensor_BED für das Heizbett. Alle nicht verwendeten steht der Wert 0.

#define TEMP_SENSOR_0 60
#define TEMP_SENSOR_1 0
#define TEMP_SENSOR_2 0
#define TEMP_SENSOR_3 0
#define TEMP_SENSOR_4 0
#define TEMP_SENSOR_BED 60

PID Settings[Bearbeiten]

PID > Bed Temperature Control[Bearbeiten]

Thermal Runaway Protection[Bearbeiten]

Mechanical Settings[Bearbeiten]

Endstop Settings[Bearbeiten]

"logic of the endstop" Falls nur die Endschalter für die untere Endlage verwendet werden ("?_MIN...), dann die ursprüngliche Einstellung von der maximalen Endlage Endschalter unverändert lassen. ("?_MAX")

#define X_MIN_ENDSTOP_INVERTING true/false
#define Y_MIN_ENDSTOP_INVERTING true/false
#define Z_MIN_ENDSTOP_INVERTING true/false
#define X_MAX_ENDSTOP_INVERTING true/false
#define Y_MAX_ENDSTOP_INVERTING true/false
#define Z_MAX_ENDSTOP_INVERTING true/false
#define Z_MIN_PROBE_ENDSTOP_INVERTING true/false

Durch ändern von "true" auf "false" oder "false" auf "true" kann der Endschalter in der Software invertiert werden. Durch die Eingabe des G-Code "M119" kann der Zustand des Endschalters später abgefragt werden, wenn das Programm auf den Arduino geladen ist. Dies ist wichtig, weil es unterschiedliche Endschalter gibt. "NO" oder "NC" NO = "normaly Open" -> "Schließer" NC = "normaly Close" -> "Öffner"

Als Schließer, wird ein Schaltkontakt bezeichnet, der beim Betätigen den Stromkreis schließt. Als Öffner, wird ein Schaltkontakt bezeichnet, der beim Betätigen den Stromkreis öffnet.

Movement Settings[Bearbeiten]

/**
* Default Axis Steps Per Unit (steps/mm)
* Override with M92
*                                      X, Y, Z, E0 [, E1[, E2[, E3[, E4]]]]
#define DEFAULT_AXIS_STEPS_PER_UNIT   {  80, 80, 4000, 500 }

In den Beispiel sind die Standardwerte, die sich im Quellcode befinden aufgeführt. Es sagt der Software, wie viele Schritte pro Einheit er immer gehen muss, damit auch 1 cm laut Programm auch wirklich ein 1 cm am Drucker ist. Es kann aber auch sein, dass diese für die jeweiligen Motoren nicht stimmen. Deswegen beim ersten Mal, die Werte so wie sie sind aufspielen und dann überprüfen.

Mit folgender Formel die Werte so lange korrigieren, bis der Motor genau so fährt, wie er soll.

Wert Neu = (Sollstrecke / gemessene Strecke) x eingetragener Wert

Es können auch Kommazahlen in den Quellcode geschrieben werden, aber statt den "," muss ein Punkt gesetzt werden. (Bis zu 4 Zahlen nach dem "Komma")

Die Drehrichtung der Motoren kann einfach geändert werden. Die Drehrichtung wird geändert indem der Wert durch "true" oder "false" geändert wird. Steht true da, dann in false ändern oder anders herum.

#define INVERT_X_DIR true/false
#define INVERT_Y_DIR true/false
#define INVERT_Z_DIR true/false

Z Probe Options[Bearbeiten]

// The size of the print bed

#define X_BED_SIZE 200
#define Y_BED_SIZE 200

// Travel limits (mm) after homing, corresponding to endstop positions.
// Bei Z_Max_POS wird der Wert für die Z-Achse vorgegeben
#define X_MIN_POS 0
#define Y_MIN_POS 0
#define Z_MIN_POS 0
#define X_MAX_POS X_BED_SIZE
#define Y_MAX_POS Y_BED_SIZE
#define Z_MAX_POS 200

Hier wird die Größe des Druckbetts angegeben in Millimeter von jeder Achse.

Bed Leveling[Bearbeiten]

Unified Bed Leveling[Bearbeiten]

Mesh[Bearbeiten]

Additional Features[Bearbeiten]

LCD and SD support[Bearbeiten]

Unter folgenden Punkt kann, wenn ein Display für den 3D-Drucker verwendet wird, die jeweilige Sprache des Display ausgewählt werden. Hierfür einfach das jeweilige Landeskürzel nach "#define LCD_LANGUAGE" eintragen.

/**
* LCD LANGUAGE
*
* Select the language to display on the LCD. These languages are available:
*
*    en, an, bg, ca, cn, cz, cz_utf8, de, el, el-gr, es, eu, fi, fr, fr_utf8, gl,
*    hr, it, kana, kana_utf8, nl, pl, pt, pt_utf8, pt-br, pt-br_utf8, ru, sk_utf8,
*    tr, uk, zh_CN, zh_TW, test
*
* :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cn':'Chinese', 'cz':'Czech', 'cz_utf8':'Czech (UTF8)', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'fr_utf8':'French (UTF8)', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'kana':'Japanese', 'kana_utf8':'Japanese (UTF8)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'pt-br_utf8':'Portuguese (Brazilian UTF8)', 'pt_utf8':'Portuguese (UTF8)', 'ru':'Russian', 'sk_utf8':'Slovak (UTF8)', 'tr':'Turkish', 'uk':'Ukrainian', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Taiwan)', test':'TEST' }
*/
#define LCD_LANGUAGE de


In nächsten Abschnitt des Quellcodes muss nur noch der Abschnitt des angeschlossenen Displays entkommentiert werden. [1]

Extra Features[Bearbeiten]

3D-Drucker kalibrieren[Bearbeiten]

Achsen kalibrieren[Bearbeiten]

YouTube: 3D-Drucker Einstellen: Achsen kalibrieren

G-Code[Bearbeiten]

Bei den G-Code handelt es sich um eine numerische Computersteuerung. Diese wird vor allem in der computergestützten Fertigung zur Steuerung automatisierter Werkzeugmaschinen verwendet. Aber auch hier beim Marlin 3D-Drucker.

G-Codes[Bearbeiten]

G-Code Bedeutung Erklärung
M119 Endstop States bzw. Endschalter Status Bei Eingabe dieses Befehls, fragt er den Zustand der Endschalter ab.
x_min: OPEN/TRIGGERED
y_min: OPEN/TRIGGERED
z_min: OPEN/TRIGGERED
"OPEN" bedeutet, dass der Schalter unbetätigt ist und "TRIGGERED"
sagt, dass der Schalter betätigt ist.

Links[Bearbeiten]


Fehlersuche[Bearbeiten]

Fehler Erklärung Behebung
Motor von einer Achse fährt nur in eine Richtung. Endschalter meldet falsches Signal. Mit dem G-Code 119 kann der Zustand der Endschalter abgefragt werden.
Entweder ist der entsprechende Endschalter defekt oder der entsprechende
Endschalter muss in der Software invertiert werden.


Fehlermeldung Erklärung Behebung
Pins for this chip not defined in Arduino.h!
If you have a working pins definition, please contribute!
Er meldet, dass ihm etwas zwischen der Programmierung
und den Arduinoboard nicht passt. Vermutlich ist in der Menüleiste
"Werkzeug" -> "Board" und "Prozessor" das falsche Board ausgewählt.
Zur Behebung einfach das entsprechende Board auswählen. ("Mega 2560").
U8glib.h: No such file or directory Die Bibliothek "U8glib.h" fehlt. Um den Fehler zu beheben muss einmal die Bibliothek "U8glib.h"
heruntergeladen werden. Dann unter der Punkt "Sketch" -> "Bibliothek einbinden" -> ".zip Bibliothek einbinden".
Dann öffnet sich ein Fenster, navigiert in den Ordner wo die heruntergeladene ".zip"-Datei befindet, wählt diese aus und bestätigt.
sketch\src\HAL\AVR\u8g_com_HAL_AVR_sw_spi.cpp:65:10: fatal error: U8glib-HAL.h: No such file or directory
#include <U8glib-HAL.h>
compilation terminated.
exit status 1
Fehler beim Kompilieren für das Board Arduino Mega or Mega 2560.
Die Bibliothek "U8glib-HAL.h" fehlt. Um den Fehler zu beheben muss einmal die Bibliothek U8glib-HAL heruntergeladen werden.
Dann unter der Punkt "Sketch" -> "Bibliothek einbinden" -> ".zip Bibliothek einbinden".
Dann öffnet sich ein Fenster, navigiert in den Ordner wo die heruntergeladene ".zip"-Datei befindet, wählt diese aus und bestätigt.

Zurück[Bearbeiten]

Quellen[Bearbeiten]

  1. https://www.youtube.com/watch?v=Yc4wqHrZtWE