DIY SCARA-Roboter zum präzisen Lasergravierer umbauen mit Arduino
In diesem Tutorial zeige ich, wie ich meinen DIY-3D-gedruckten SCARA-Roboterarm (aus einem früheren Video) in einen Lasergravierer umgebaut habe. Video ansehen oder Artikel unten lesen. Der SCARA-Roboter hat 4 Freiheitsgrade, angetrieben von 4 NEMA-17-Schrittmotoren, gesteuert per Arduino. Im Originalvideo nutzte ich Arduino UNO + CNC-Shield; jetzt kommt Arduino MEGA + RAMPS-Board zum Einsatz, da wir die Marlin-3D-Drucker-Firmware für die Steuerung verwenden. Mechanisch musste nur der Greifer gegen ein Lasermodul getauscht werden – hier ein 5,5-W-Modul, gut zum Gravieren. Ein Vorteil dieses Aufbaus: großer Z-Hub, sodass auch hohe Objekte graviert werden können. Der Arbeitsbereich ist beeindruckend für den kleinen Fußabdruck: Vorderseite und beide Seiten nutzbar, theoretisch fast 360° um den Roboter – dank Marlin-Firmware mit Laser- und SCARA-Unterstützung. Für G-Code-Erzeugung: Open-Source Inkscape mit Plugin Inkscape-Lasertools. Konturen-only oder mit Füllung, diverse Optionen: Laserstrahl, Verfahrgeschwindigkeiten, Laser-Ein/Aus-Befehle inkl. PWM-Steuerung. Nun der komplette Prozess: SCARA-Design, Marlin-Installation/Konfiguration, Zeichnungs-/G-Code-Vorbereitung. Los geht's. Kurzer Blick aufs 3D-Modell, falls Sie das Original-Tutorial nicht gesehen haben. Die meisten Teile sind 3D-druckbar. Gelenke werden von NEMA-17-Motoren über GT2-Riemen und 3D-gedruckte GT2-Riemenscheiben angetrieben. 4 DOF, aber für Lasergravur nur 3 DOF nötig: zwei Rotationen für X/Y-Position, eine Linearbewegung für Z-Höhe des Lasers. Das 4. Gelenk (Endeffektor-Rotation) wird nicht genutzt, aber der Laser wird darauf montiert. Der Halter positioniert den Laserstrahl im Drehzentrum der 4. Achse – Rotation verändert die Endposition nicht. 3D-Modell auf Thangs finden, erkunden, herunterladen: Assembly-3D-Modell von Thangs herunterladen. Danke an Thangs für die Unterstützung. STL-Dateien für 3D-Druck: Gesponsert Entworfen mit 3DEXPERIENCE SOLIDWORKS for Makers – Sponsor dieses Videos. SOLIDWORKS bringt seine Industrie-Tools für Maker zu einem extrem niedrigen Preis. Maker-Zugang zu besten SOLIDWORKS-Tools für nur 99 $/Jahr, für meine Zuschauer zeitlich begrenzt 20 % Rabatt! Paket enthält Cloud-SOLIDWORKS, browser-basierte Tools (3D Creator, 3D Sculptor). Link klicken, kostenlose 3DEXPERIENCE-ID erstellen, 20 % Rabatt sichern. Danke an SOLIDWORKS für Sponsoring von Bildungsinhalten. SOLIDWORKS for Makers ansehen 20 % Rabatt auf SOLIDWORKS for Makers Zuerst Greifermechanik entfernen (4 Schrauben). Kabel des Greifer-Servos nun für Lasermodul nutzen. Mein Lasermodul: 12 V, PWM-Steuerung mit 2 Drähten (GND, VCC). 3-Pin-Stecker des Moduls: links schwarz = GND, mittig weiß = VCC. Zwei Male-Jumper angelötet für einfachen Anschluss an Endeffektor-Kabel. Stecker einsetzen, Kabel durch Halteröffnung führen, Lasermodul mit zwei M3-Schrauben fixieren. Mit vier M4-Schrauben am Roboter befestigen. Statt Arduino UNO nun Arduino MEGA + RAMPS-Board. Schrittauflösung der Treiber wählen: für sanfte Bewegung höchste Auflösung (3 Jumper pro Treiber). Ich nutze A4988 (1/16-Schritt), DRV8825 (1/32) geht auch. Alle Kabel anschließen (beschriftet, um Verwechslungen zu vermeiden). Kompletter Schaltplan: Schrittmotoren direkt auf Treiber, Endschalter (Normally Closed, 2-Draht) an Endstop S und − Pins je Achse. Lasermodul über Pin D9 (PWM-fähig, im 3D-Drucker für Lüfter) steuern. Netzteil: 12 V, mind. 3 A. Komponenten-Links: Mechanik: siehe Originalartikel. Nach Verdrahtung Kabel gebündelt, Elektronik abgedeckt – sauberer Look. Eine Änderung am SCARA-Roboter für korrektes Homing: Der zweite Arm muss als Rechtshänder bei 0° (in Linie mit erstem Arm) referenzieren und nach links drehen können. Dazu ein kleines Stück am Armgelenk ankleben, das den Endschalter an dieser Position auslöst. Zweiter Punkt: Originaler Endschalter-Auslöser kollidierte mit einer Mutter am Armende, begrenzte Bewegung. Mutter entfernt, durch Gewindeeinsatz ersetzt – nichts steht mehr über. Mechanisch fertig. Jetzt Firmware aufspielen. Siehe auch: DIY Arduino-Roboterarm mit Smartphone-Steuerung Marlin = weit verbreitete Open-Source-3D-Drucker-Firmware mit Laser- und SCARA-Optionen. Download von marlinfw.org oder GitHub. Installation via PlatformIO IDE (nicht Arduino IDE – Marlin zu groß/komplex). PlatformIO = VS Code Extension. Also: VS Code installieren, PlatformIO in Extensions suchen, installieren. „Open Project“ → Marlin-Ordner (entpackt) → „Open Marlin“. Alle Dateien laden. Hauptkonfigurationsdateien: Vorher: Im Marlin-Config-Repo auf GitHub im Ordner Siehe auch: GRBL einrichten & CNC-Maschine mit Arduino steuern Mit SCARA-Config-Dateien Marlin-Ordner neu öffnen, Inverse Kinematik: Berechnet Gelenkwinkel für gegebene X/Y-Koordinate. Mathematik = Trigonometrie, abhängig nur von Armlängen. Armlängen eintragen: Arm 1 = 228 mm, Arm 2 = 136,5 mm. Nächstes: Nullposition des Arbeitsbetts via Weitere Parameter: Endstop-Definition: Je ein Endschalter pro Achse an Min-Position. Alle Werte = Schritte pro Einheit (hier: Grad pro Gelenkrotation). Berechnung: NEMA 17: 200 Schritte/Umdrehung. 1/16-Schritt → 3200 Schritte/Umdrehung. 1. Gelenk: 20:1 Übersetzung → 64.000 Schritte/Umdrehung. /360 = 177,777 Schritte/Grad. 2. Gelenk: 16:1 → 142,222. Z-Achse: Trapezgewindespindel 8 mm Steigung → 3200/8 = 400 Schritte/mm. 4. Wert (Extruder) irrelevant. Motordrehrichtung: bei falschem Verdrahten Kabel tauschen oder Weitere Fixes für SCARA-Modus-Bugs in Marlin (Stand Projektzeitpunkt): Homing trotzdem nicht 100 % – Workaround folgt. „Upload“-Button (unten links) → Firmware auf Arduino flashen. Meinen angepassten Marlin-Build unten herunterladen oder Original von GitHub selbst patchen. Marlin drauf → Steuerprogramm für G-Code-Versand. Wahl: Repetier-Host (beliebte 3D-Druck-Software, kostenlos). Config → Printer Settings: COM-Port, Baudrate (wie in Marlin), Druckerform: X/Y-Max und Druckbereich setzen. Connect → Manual Control: Roboter bewegen. Hinweis: X/Y-Pfeile bewegen wegen inverser Kinematik oft beide Arme gleichzeitig. Zuerst Homing: Gelenke manuell nah an Endschalter bringen. Home-Button: 2. Arm fährt zu seinem Endschalter, 1. Arm entgegengesetzt. Nach Y-Endschalter fährt X zum seinen, dann Z. Wichtiger Workaround: Nach Homing trennen und neu verbinden (Disconnect/Reconnect in Repetier-Host). Sonst seltsame Bewegungen – Marlin-Bug, SCARA-Modus wenig gepflegt. Nach Reconnect: Manuell verfahren oder gravieren funktioniert. Laser aktivieren: Fokus: Linsenring drehen, Abstand ca. 5 cm, kleinsten Punkt einstellen. Kalibrierung: Einfaches Quadrat gravieren. Erster Versuch: Quadrat falsch positioniert/orientiert – falscher Logo gravieren: ACHTUNG: Laserschutzbrille Pflicht! UV-Licht gefährdet Augen. Auch Atemschutzmaske & gut belüfteter Raum – Dämpfe gesundheitsschädlich. Logo gut, aber nicht ganz quadratisch. Ursache: Armlängen. Roboter nicht steif genug – ausgefahrene Arme beugen sich unter Eigengewicht vorwärts, tatsächliche Position abweichend. Nach zig Tests: Arm 1 von 228 auf 228,15 mm, Arm 2 von 136,5 auf 136,2 mm korrigiert → bestes Ergebnis. Genauigkeit variiert aber je nach Armposition (ausgefahren vs. eingezogen). Zuletzt: Zeichnungen vorbereiten, G-Code erzeugen. Inkscape (Open-Source Vektorgrafik). Seitengröße = Arbeitsbereich. Beispiel: Arduino-Logo. Bild importieren, Trace Bitmap → Vektorisierung. G-Code nur aus Vektoren möglich. Plugin: Inkscape-Lasertools (GitHub, Installation: Dateien aus ZIP in Inkscape-Extensions-Ordner kopieren). Erweiterungen → Lasertools: Konturen only oder mit Füllung. Laser-Verfahrgeschwindigkeit, Füllgeschwindigkeit, Konturgeschwindigkeit. PWM für Laserintensität bei Füllung z. B. Preferences: „Remove tiny infill paths“. Bounding Box: „Generate G-Code for bounding box preview“ – sehr nützlich für Werkstückpositionierung. G-Code generieren → in Repetier-Host laden. Da kein 3D-Druck: „Show Travel Moves“ anhaken für Vorschau. „Print“ → SCARA-Roboter graviert. Zufriedenstellend, viele Anwendungen möglich. Vorteil: Verstellbare Z-Achse → hohe Objekte gravierbar, z. B. Holzbox für Forstner-Bohrer (Logo vorne, Text hinten). Beispiel: Batman-Silhouette – nur Konturen vs. mit Füllung. Füllung dauert länger, sieht aber besser aus. Großes Gravurbeispiel: 600 × 450 mm Zeichnung. Roboter auf Werkstück platziert (erreicht Front & beide Seiten). Manuell mittig/parallel ausgerichtet. Marlin: Nullpunkt = untere linke Ecke Werkstück (300 mm X, 150 mm Y vom Roboter). Vorzeichen beachten. Firmware neu flashen, homing, Laser auf Nullposition, Laser an ( Mit G-Code-Vorbereitung: Inkscape-Template mit Roboter/ Werkstück-Konfiguration → erreichbarer Bereich sichtbar → Zeichnung daran anpassen. Bild herunterladen, Trace Bitmap → Vektor. Skalieren, positionieren, Radierer: Bereiche löschen, wo Roboter steht / außerhalb Reichweite. G-Code generieren → Maschine arbeiten lassen. Dauer: 4 Stunden. Leerstelle (Roboterstandort) nachfüllen: Roboter & Werkstück umpositionieren, Marlin-Parameter für neuen Arbeitsbereich (die Lücke) anpassen. Aufwendig, aber funktioniert gut. Ergebnis gefällt mir. Trotz Firmware-Probleme: Workarounds gefunden, SCARA-Roboter graviert. Nahansicht zeigt: nicht perfekt. Roboter nicht steif genug, Spiel/Backlash → keine präzisen, glatten Bewegungen. Aber gelernte Prinzipien auf jeden SCARA anwendbar – bessere Hardware = bessere Ergebnisse. Hoffe, Tutorial hat gefallen & was Neues vermittelt. Fragen in Kommentaren, Arduino-Projekte-Sammlung anschauen.Projektüberblick




Design und 3D-Modell





Lasermodul einbauen





Schaltplan: SCARA-Roboter Lasergravierer


Montage abschließen



Marlin-Firmware für Lasergravur mit SCARA-Roboter


Configuration.h und Configuration_adv.h.

Examples/SCARA vorkonfigurierte Dateien herunterladen und in eigenen Marlin-Ordner kopieren.Marlin-Firmware konfigurieren
Configuration.h bearbeiten. Erst SCARA-Typ wählen:/** * MORGAN_SCARA was developed by QHARLEY in South Africa in 2012-2013. * Implemented and slightly reworked by JCERNY in June, 2014. */ //#define MORGAN_SCARA /** * Mostly Printed SCARA is an open source design by Tyler Williams. See: * https://www.thingiverse.com/thing:2487048 * https://www.thingiverse.com/thing:1241491 */ #define MP_SCARA #if EITHER(MORGAN_SCARA, MP_SCARA) // If movement is choppy try lowering this value #define SCARA_SEGMENTS_PER_SECOND 100 // Length of inner and outer support arms. Measure arm lengths precisely. #define SCARA_LINKAGE_1 228.15 // Arm 1 lenght - 228(mm) #define SCARA_LINKAGE_2 136.2 // Arm 2 lenght - 136.5(mm) // SCARA tower offset (position of Tower relative to bed zero position) // This needs to be reasonably accurate as it defines the printbed position in the SCARA space. #define SCARA_OFFSET_X 300 // (mm) #define SCARA_OFFSET_Y 150 // (mm)MORGAN_SCARA = paralleler SCARA, MP_SCARA = serieller SCARA (unser Fall). Basiert auf Open-Source-Design von Tyler Williams mit inverser Kinematik für kartesische G-Codes.
SCARA_OFFSET_X/Y (Abstand Turm/1. Gelenk zum Bett-Nullpunkt).MANUAL_X_HOME_POS für X und Y – Abstand vom Endeffektor (Laser) in Home-Position relativ zum Bett-Nullpunkt. Ermittlung via SOLIDWORKS-Skizze mit zwei Linien für die Arme.
#define USE_XMIN_PLUG #define USE_YMIN_PLUG #define USE_ZMIN_PLUGX_HOME_DIR = -1 (Richtung Min).// Direction of endstops when homing; 1=MAX, -1=MIN // :[-1,1] #define X_HOME_DIR -1 #define Y_HOME_DIR -1 #define Z_HOME_DIR -1_MIN_ENDSTOP_INVERTING auf FALSE prüfen.DEFAULT_AXIS_STEPS_PER_UNIT anpassen:#define DEFAULT_AXIS_STEPS_PER_UNIT { 177.7777777, 142.2222222, 400, 93 }
INVERT_X_DIR etc. auf TRUE.// Invert the stepper direction. Change (or reverse the motor connector) if an axis goes the wrong way. #define INVERT_X_DIR false #define INVERT_Y_DIR false #define INVERT_Z_DIR false
scara.cpp Zeile 75: MORGAN_SCARA → MP_SCARAmotion.cpp Zeilen 1716, 1717 auskommentierenconfiguration.h: VALIDATE_HOMING_ENDSTOPS auskommentierenconfiguration_adv.h: QUICK_HOME einkommentierenSteuerungssoftware – Repetier-Host



G00 X0 Y0 → Roboter fährt in Nullposition (aus Marlin Config).
M106 S10 (PWM 0–255 = 0–100 %). S10 = schwach, nur für Fokus/Nullposition sichtbar.
Lasergravur mit dem SCARA-Roboter

MANUAL_X_HOME_POS. Nach Korrektur passte es.


G-Code für Lasergravur erzeugen


M106 S128 (50 %). Ähnlicher Effekt durch höhere Verfahrgeschwindigkeit in Füllbereichen. Einstellungen experimentell optimieren.





MANUAL_X/Y_HOME_POS entsprechend anpassen.M106 S10) → Werkstück weiter ausrichten.
G01 (Geraden) Position prüfen/korrigieren.




Fazit

Herstellungsprozess
- Retro-Numitron-Uhr mit Arduino bauen: Einfach, zuverlässig & energieeffizient
- Servogesteuerter Hindernisvermeidungs-Roboter: Bauen mit Arduino & HC-SR04
- Roomba Create 2 per Arduino & Android steuern – Schritt-für-Schritt
- DIY-Voltmeter mit Arduino und Nokia 5110 Display – Schritt-für-Schritt-Anleitung
- MobBob: Eigenen Arduino-Roboter bauen, per Android-Smartphone steuern
- Präzises DIY-Messrad mit Arduino Nano und Drehgeber
- Präzisen Luftqualitäts-Monitor mit Sharp GP2Y1010AU0F Sensor bauen
- 1D-Pong-Spiel mit Arduino Nano und WS2812-LED-Strip – Schritt-für-Schritt-Anleitung
- DIY Roboterarm mit Gestensteuerung (Hand-Tracking) – Arduino & 3D-Druck
- Arduino Roboterarm per Android-App & Bluetooth steuern