Miller Mode mit Fräser und Abtastplatte
Verfasst: Sa 25. Apr 2026, 07:16
SainSmart Z-Achsen-Messtaster mit Klipper: Anschluss, Offset & Makro
Der SainSmart CNC Z-Achsen-Messtaster (Touch Probe) ist eine leitfähige Messplatte mit zwei Drähten: Der schwarze Draht geht auf GND, der rote Draht auf den Signal-GPIO des Raspberry Pi. Berührt der Fräser die Platte, schließt sich der Stromkreis – Klipper erkennt dies als Endstop-Auslösung.
Schritt 1: Raspberry Pi als sekundäre MCU einrichten
Damit Klipper die GPIO-Pins des Pi nutzen kann, muss der klipper-mcu-Dienst installiert und gestartet werden.
Anschließend den Pi-Benutzer der GPIO-Gruppe hinzufügen:
Hinweis: Danach einmal neu einloggen (oder neu starten), damit die Gruppe aktiv wird.
Schritt 2: Verdrahtung am Raspberry Pi
Wichtig: Die Probe hat keine Polung – rot/schwarz bezieht sich nur auf Signal/GND, nicht auf Plus/Minus. Kein externer Widerstand nötig, der interne Pull-up des Pi übernimmt das.
Physische Pinbelegung Raspberry Pi (BCM):
Vollständige Pinbelegung im Terminal anzeigen:
(Paket: python3-gpiozero)
Klipper verwendet BCM-Nummern, nicht die physischen Pinnummern am Board!
Schritt 3: printer.cfg – MCU und Probe definieren
Erklärung der Symbole:
Schritt 4: Plattendicke messen
Die genaue Dicke der Messplatte ist der kritische Wert für den Offset. Mit einem Messschieber messen – der SainSmart-Taster hat ab Werk typisch 14,19 mm, aber jedes Exemplar kann leicht abweichen.
→ Immer selbst nachmessen und den eigenen Wert notieren!
Schritt 5: Z-Homing über Probe
Damit Klipper beim Homen die Probe als Z-Referenz nutzt:
Schritt 6: Makro – Automatisches Z-Nullpunkt setzen mit Bestätigung
Das Makro fährt zunächst Z hoch, zeigt dann in Mainsail/Fluidd ein Popup-Fenster und wartet auf Bestätigung bevor es abtastet. So kann die Messplatte sicher unter den Fräser gelegt werden.
Voraussetzung: Mainsail ≥ 2.1 oder Fluidd ≥ 1.19 (beide unterstützen das Prompt-System nativ).
Aufruf im Terminal oder als Button in Mainsail/Fluidd:
Ablauf:
Schritt 7: Offset einmalig kalibrieren (empfohlen)
Nach dem ersten Aufbau den z_offset fein kalibrieren:
Klipper führt einen automatischen Abtastvorgang durch und leitet dann einen manuellen Papiertest an. Am Ende:
Der ermittelte Wert wird automatisch in die printer.cfg unter #*# <---------------------- SAVE_CONFIG ----------------------> geschrieben und überschreibt den manuellen z_offset-Wert.
Probe testen
Zustand des Endstops abfragen:
Häufige Fehler & Lösungen
Fehler: Unable to open port: /tmp/klipper_host_mcu
Getestet mit: Klipper v0.11 · Raspberry Pi 4 · SainSmart Z-Touch Probe (101-60-386) · Mainsail 2.4 · Fluidd 1.21
Fragen und Ergänzungen gerne in die Kommentare! Wer seinen eigenen gemessenen Dickenwert hat – einfach posten.
Der SainSmart CNC Z-Achsen-Messtaster (Touch Probe) ist eine leitfähige Messplatte mit zwei Drähten: Der schwarze Draht geht auf GND, der rote Draht auf den Signal-GPIO des Raspberry Pi. Berührt der Fräser die Platte, schließt sich der Stromkreis – Klipper erkennt dies als Endstop-Auslösung.
Schritt 1: Raspberry Pi als sekundäre MCU einrichten
Damit Klipper die GPIO-Pins des Pi nutzen kann, muss der klipper-mcu-Dienst installiert und gestartet werden.
Code: Alles auswählen
cd ~/klipper
sudo cp ./scripts/klipper-mcu.service /etc/systemd/system/
sudo systemctl enable klipper-mcu.service
sudo systemctl start klipper-mcu.service
Code: Alles auswählen
sudo usermod -a -G gpio $USER
Schritt 2: Verdrahtung am Raspberry Pi
Code: Alles auswählen
Roter Draht (Signal) → GPIO5 (Pin 29) mit internem Pull-up
Schwarzer Draht (GND) → GND (Pin 30 oder beliebiger GND-Pin)
Physische Pinbelegung Raspberry Pi (BCM):
Code: Alles auswählen
BCM (Klipper) Physischer Pin
gpio2 Pin 3
gpio3 Pin 5
gpio5 Pin 29 → Roter Draht (Signal)
gpio17 Pin 11
gpio27 Pin 13
gpio22 Pin 15
gpio10 Pin 19
GND Pin 30 → Schwarzer Draht
Code: Alles auswählen
pinout
Klipper verwendet BCM-Nummern, nicht die physischen Pinnummern am Board!
Schritt 3: printer.cfg – MCU und Probe definieren
Code: Alles auswählen
# Raspberry Pi als zweite MCU einbinden
[mcu host]
serial: /tmp/klipper_host_mcu
# Z-Probe (SainSmart Messtaster)
[probe]
pin: ^!host:gpio5 # ^ = Pull-up aktiv, ! = aktiv LOW (Kontakt = GND)
x_offset: 0 # Probe sitzt direkt unter dem Fräser
y_offset: 0
z_offset: 14.19 # Plattendicke in mm – eigenen gemessenen Wert eintragen!
speed: 5 # Anfahrgeschwindigkeit in mm/s
lift_speed: 10 # Rückzugsgeschwindigkeit
samples: 3 # Anzahl Messwiederholungen
samples_result: median # Mittelwert aus den Messungen
sample_retract_dist: 2.0 # Z-Rückzug zwischen Messungen
samples_tolerance: 0.05 # Max. erlaubte Abweichung zwischen Messungen
samples_tolerance_retries: 3
- ^ – aktiviert den internen Pull-up am GPIO-Pin
- ! – invertiert die Logik: Pin wird auf LOW gezogen wenn Kontakt = ausgelöst
Schritt 4: Plattendicke messen
Die genaue Dicke der Messplatte ist der kritische Wert für den Offset. Mit einem Messschieber messen – der SainSmart-Taster hat ab Werk typisch 14,19 mm, aber jedes Exemplar kann leicht abweichen.
→ Immer selbst nachmessen und den eigenen Wert notieren!
Schritt 5: Z-Homing über Probe
Damit Klipper beim Homen die Probe als Z-Referenz nutzt:
Code: Alles auswählen
[stepper_z]
endstop_pin: probe:z_virtual_endstop # Probe als virtueller Z-Endstop
position_min: -5 # Negativwert erlauben (für Kalibrierung)
position_max: 100
homing_speed: 10
[safe_z_home]
home_xy_position: 150, 150 # Mitte des Arbeitsbereichs anpassen!
speed: 50
z_hop: 15 # Z vor dem Homen anheben
z_hop_speed: 10
Schritt 6: Makro – Automatisches Z-Nullpunkt setzen mit Bestätigung
Das Makro fährt zunächst Z hoch, zeigt dann in Mainsail/Fluidd ein Popup-Fenster und wartet auf Bestätigung bevor es abtastet. So kann die Messplatte sicher unter den Fräser gelegt werden.
Voraussetzung: Mainsail ≥ 2.1 oder Fluidd ≥ 1.19 (beide unterstützen das Prompt-System nativ).
Code: Alles auswählen
# -------------------------------------------------------
# Hauptmakro: Z hochfahren + Popup anzeigen
# -------------------------------------------------------
[gcode_macro Z_PROBE_WERKZEUG]
description: Z-Nullpunkt mit SainSmart Messtaster – wartet auf Bestätigung
variable_probe_dicke: 14.19
variable_abfahrhoehe: 10
gcode:
{% set PROBE_DICKE = params.DICKE|default(14.19)|float %}
{% set ABFAHRHOEHE = params.HOEHE|default(10)|float %}
# Parameter in Variablen speichern (für zweites Makro)
SET_GCODE_VARIABLE MACRO=Z_PROBE_WERKZEUG VARIABLE=probe_dicke VALUE={PROBE_DICKE}
SET_GCODE_VARIABLE MACRO=Z_PROBE_WERKZEUG VARIABLE=abfahrhoehe VALUE={ABFAHRHOEHE}
# Z hochfahren damit Platte bequem untergelegt werden kann
G91
G1 Z{ABFAHRHOEHE} F600
G90
# Popup-Dialog in Mainsail/Fluidd anzeigen
RESPOND TYPE=command MSG="action:prompt_begin Messtaster vorbereiten"
RESPOND TYPE=command MSG="action:prompt_text Messplatte unter den Fraeser legen, dann bestaetigen!"
RESPOND TYPE=command MSG="action:prompt_button_group_start"
RESPOND TYPE=command MSG="action:prompt_button Ja, Platte liegt - Abtasten starten|PROBE_JETZT_AUSFUEHREN|primary"
RESPOND TYPE=command MSG="action:prompt_button Abbrechen|RESPOND MSG=Abtasten abgebrochen.|warning"
RESPOND TYPE=command MSG="action:prompt_button_group_end"
RESPOND TYPE=command MSG="action:prompt_show"
# -------------------------------------------------------
# Wird automatisch durch den Ja-Button aufgerufen
# -------------------------------------------------------
[gcode_macro PROBE_JETZT_AUSFUEHREN]
description: Interner Aufruf nach Bestätigung – startet den Abtastvorgang
gcode:
{% set PROBE_DICKE = printer["gcode_macro Z_PROBE_WERKZEUG"].probe_dicke %}
{% set ABFAHRHOEHE = printer["gcode_macro Z_PROBE_WERKZEUG"].abfahrhoehe %}
RESPOND MSG="Bestaetigt – starte Abtastvorgang mit {PROBE_DICKE} mm Plattendicke..."
# Dreifach antasten
PROBE SAMPLES=3 SAMPLE_RETRACT_DIST=2 SAMPLES_TOLERANCE=0.02
# Z-Koordinate auf Werkstückoberfläche setzen
G92 Z{PROBE_DICKE}
# Fräser auf sichere Höhe fahren
G1 Z{ABFAHRHOEHE} F600
# Popup schließen
RESPOND TYPE=command MSG="action:prompt_end"
RESPOND MSG="Fertig! Z=0 liegt jetzt auf der Werkstuckoberflaeche."
Code: Alles auswählen
Z_PROBE_WERKZEUG # Standard: 14.19 mm Plattendicke
Z_PROBE_WERKZEUG DICKE=14.35 # Eigene gemessene Dicke übergeben
Z_PROBE_WERKZEUG DICKE=14.35 HOEHE=15 # Mit angepasster Sicherheitshöhe
- Makro startet → Fräser fährt Z hoch
- Popup erscheint: „Messplatte unter den Fräser legen"
- Platte unterlegen, dann „Ja, Platte liegt – Abtasten starten" klicken
- Klipper tastet 3x ab, setzt Z=0 auf Werkstückoberfläche, fährt hoch
- Meldung: „Fertig! Z=0 liegt jetzt auf der Werkstückoberfläche."
Schritt 7: Offset einmalig kalibrieren (empfohlen)
Nach dem ersten Aufbau den z_offset fein kalibrieren:
Code: Alles auswählen
G28 # Alle Achsen homen
PROBE_CALIBRATE # Klipper-Kalibrierungsassistent starten
Code: Alles auswählen
SAVE_CONFIG # Offset dauerhaft speichern
Probe testen
Zustand des Endstops abfragen:
Code: Alles auswählen
QUERY_ENDSTOPS
- Ohne Berührung → open
- Fräser liegt auf Platte → TRIGGERED
Code: Alles auswählen
PROBE
GET_POSITION
Häufige Fehler & Lösungen
Fehler: Unable to open port: /tmp/klipper_host_mcu
- Dienst läuft nicht → prüfen mit: [icode]sudo systemctl status klipper-mcu.service[/icode]
- Benutzer nicht in der gpio-Gruppe → [icode]sudo usermod -a -G gpio $USER[/icode] + neu einloggen
- Polung prüfen – roten und schwarzen Draht tauschen
- ! aus dem Pin-Namen entfernen und testen
- ^ (Pull-up) nicht vergessen
- GND-Verbindung prüfen – Multimeter im Durchgangsprüfer-Modus zwischen Fräser und schwarzem Draht
- Mainsail/Fluidd Version prüfen – mindestens Mainsail 2.1 oder Fluidd 1.19 erforderlich
- Als Workaround: [icode]PROBE_JETZT_AUSFUEHREN[/icode] direkt in die Konsole tippen nach manuellem Unterlegen der Platte
- Fräser schlecht leitend (Oxidation, Schmutz) → Kontaktfläche reinigen
- [icode]speed[/icode] in der printer.cfg auf 2–3 mm/s reduzieren
- [icode]samples_tolerance[/icode] auf 0.05 erhöhen
- Plattendicke nachmessen und [icode]DICKE=[/icode] Wert anpassen
- Kalibrierung mit [icode]PROBE_CALIBRATE[/icode] + [icode]SAVE_CONFIG[/icode] wiederholen
Getestet mit: Klipper v0.11 · Raspberry Pi 4 · SainSmart Z-Touch Probe (101-60-386) · Mainsail 2.4 · Fluidd 1.21
Fragen und Ergänzungen gerne in die Kommentare! Wer seinen eigenen gemessenen Dickenwert hat – einfach posten.