HyperCube 3D – X Achse

X-Achse am HyperCube

Meine Schlitten auf der X-Achse läuft recht schlecht. Deshalb werde ich die X-Achse auf Stahlwellen 8mm umbauen.

Vermutung weshalb der Schlitten schlecht läuft:
Die Druckteile, vor allem der Schlitten aus meinem Mendel sind zu ungenau.

Material

Kaufteile
8 Stk. Schraube M3x20mm
4 Stk. Mutter M3
4 Stk. Stopmutter M3
16 Stk. U-Scheibe für M3
8 Stk. Kugellager F623ZZ mit Flansch 3x10x4mm
2 Stk. Linearlager LM8UU
2 Stk. Linearwelle Linearführung 8 mm x 330 mm

Gedruckte Teile
2 x XY-Joiner für 8mm Linearwelle
1 x X-Carriage (Wagen)

Zusammenbau

3D Drucker – Extruder einstellen

Der Extruder sollte ja die exakte Menge an Material fördern. Wie wird es gemacht.

Da an meinem FranzisMender der Extruder vom Hotend getrennt ist (Long Distanz) beschreibe ich hier die Version wie ich die Fördermenge am Extruder einstelle.

Formel für die Berechnung:
SollLänge / IstLänge * eingestellte Schritte = neue Schritte

Werkzeug und Hilfsmittel

Teflonschlauch (Kann auch der vorhandene verwendet werden)

Scharfer Seitenschneider / Elektronikseitenschneider
Digitale Schieblehre

Vorbereitung

Eingestellte Schritte ermitteln:
In der Marlin-Firmware ist in der configuration.h bei
#define DEFAULT_AXIS_STEPS_PER_UNIT (40, 40, 400, 92.75);
an vierter Stelle der aktuelle Wert für den Extruder in steps/mm eingetragen (bei mir 92.75) Dieser Wert wird für die spätere Neuberechnung benötigt.

SollLänge festlegen:
Für die zu fördernde Sollmenge lege ich 100mm fest.

IstLänge ermitteln:
Düse bei PLA auf ca. 200°C aufheizen
Teflonschlauch und Filament aus dem Kühlkörper vom HotEnd ziehen,
Filament vorne am Teflonschlauch mit einem Schafen Seitenschneider bündig abschneiden,
100mm Filament fördern (G92 E0 und dann G1 E100),
gefördertes Filament messen (97mm).

Neue Schritte berechnen:
Bei 92,75 Steps/mm wurden 97mm gefördert, gewollt sind aber 100mm also

92,75 Steps/mm / 97 mm * 100 mm = 95,62 Steps / mm

Somit ergibt sich für NeueSchritte der Wert 95,62 Steps/mm. Dieser Wert wird nun in Marlin bei

#define DEFAULT_AXIS_STEPS_PER_UNIT (40, 40, 400, 95.62);

eingetragen.

Schrittmotortreiber DRM8825

Beschreibung

Spezifikationen

Pinbelegung Modul


GND = Masse
DIR = Drehrichtung
STEP = Schritt
SLEEP =
RESET =
M2 =
M1 =
M0 =
ENABLE =
FAULT =
A2 = Motorwicklung A
A1 = Motorwicklung A
B1 = Motorwicklung B
B2 = Motorwicklung B
GND = Masse
VMOT = Spannungsversorgung 8 – 45V DC für Motor

Links

https://iknowvations.in/de/arduino/drv8825-stepper-motor-driver-with-arduino-tutorial/

Auto bed leveling

Ich habe vor meinen 3D-Drucke mit einem „Auto bedleveling – Sensor“ nachzurüsten.

was wird benötigt

Ich habe im Internet folgendes bestellt:
3D-Touch von Geeetech.com
(ein bl-Touch wäre auch möglich gewesen)

Weiter habe ich die aktuelle Version von Marlin heruntergeladen:
Marlin-2.0.6

Drucker umbauen / Sensor befestigen

Die Halterung habe ich aus Holz hergestellt. Hier habe ich versucht den Sensor so auszurichten das er auf der Flucht zur Nozzle in der X-Achse ist. Der Abstand zur Düsenmitte beträgt 37mm:

Der 3D-Touch ersetzt den Endschalter für die Z-Achse-min.
Schwarze Ader = GND (-)
Weiße Ader = S (Signal an PIN 18)
Siehe auch 3D Drucker – Endschalter

Der Servo wird an Servo 1 angeschlossen (linke Steckleiste)
Orange Ader = Signal (an PIN 11)
Rote Ader = +
Braune Ader = GND (-)

5V am Servoausgang herstellen:
Jumper zwischen VCC und 5V stecken dann liegt am +-Pin Spannung an.

Spezifikationen und Infos zum 3D-Touch

Specifications:
Voltage: 5V
Current: 15mA
Max. Current: 300mA
Cable length: 150mm
Net Weight: 10g
Shipping weight: 25g

Operate condition
3DTouch can be operated in the following condition.
One I/O for control (PWM or Software PWM)
One I/O for Z min (Z Probe)
GND and +5V power

Wiring
3-pin: Brown (-, GND), Red (+5V), Orange (control signal)
2-pin: Black (-, GND), White (Z min)

Einrichten in der Firmeware

Versatz zur Düse
X = 37mm
Y = 0mm
Z = 0mm (3,..mm)

G-Code

M280 P0 S10 = Pin ausfahren
M280 P0 S90 = Pin einfahren
M280 P0 S120 = Selbsttest starten
M280 P0 S160 = Alarm zurücksetzen (wenn er blinkt)

G28 = homing
G29 = autoleveling
M851 Z… = Offset speichern
M850 = Werte im EEProm speichern

RGB LED-Modul

Vorwiderstände (102) mit 1kOhm sind auf dem Modul schon vorhanden.

Pinbelegung:
R = Rot
G = Grün
B = Blau
GND = Masse

// RGB LED-Modul
// Die vorhandenen Farben schalten

  int BLAU = 13;
  int GRUEN = 12;
  int ROT = 11;
  
void setup() {
  pinMode(BLAU, OUTPUT); // Port als Ausgang und als BLAU festlegen
  pinMode(GRUEN, OUTPUT); // Port als Ausgang und als GRUEN festlegen
  pinMode(ROT, OUTPUT); // Port als Ausgang und als ROT festlegen
}

void loop() {
  digitalWrite(BLAU, HIGH); // Blau wird high geschaltet
  delay(500); // warten
  digitalWrite(BLAU, LOW); // Blau wird high geschaltet
  digitalWrite(GRUEN, HIGH); // Gruen wird high geschaltet
  delay(500); // warten
  digitalWrite(GRUEN, LOW); // Gruen wird low geschaltet
  digitalWrite(ROT, HIGH); // ROT wird high geschaltet
  delay(500); // warten
  digitalWrite(ROT, LOW); // ROT wird low geschaltet
}

Arduino – Hallo Welt

Allgemeine Programmstruktur

Ein Programm besteht grundsätzlich aus dem setup() – und dem loop() – Block.

Der setup()-Block wird einmal beim Neustart oder beim hochladen eines Programm auf den Arduino ausgeführt.

Der loop()-Block wird, nach dem setup()-Block, so lange zyklisch wiederholt bis der Arduino ausgeschaltet wird.

// Allgemeine Programmstruktur
//
// Ausgabe von "Hallo Welt" am Seriellen Monitor über die Serielle Schnittstelle
//

void setup() {
  // initialisiere die serielle Kommunikation mit 9600bps:
  Serial.begin(9600); }

void loop() {
  Serial.println("Hallo Welt!" );   
 // warte 10ms bis zur nächsten loop()-Ausführung.
  delay(10); }

Achtung:
Wenn die Serielle Schnittstelle verwendet wird, dürfen die Ports 0 und 1 nicht verwendet werden.

http://popovic.info/html/arduino/arduinoUno_1.html

Satanlage ausrichten

Hardware

Die Hardware ist zum großen Teil aus Holz.

Die 3D-Drucke stammen von TNT3Dprint.de.
Zahnriemenscheibe Azimut:
teeth = 120; // Number of teeth
profile = 12; //12=GT2_2mm
motor_shaft = 50.1; // NEMA17 motor shaft exact diameter = 5

m3_dia = 3.2; // 3mm hole diameter
m3_nut_hex = 1; // 1 for hex
m3_nut_flats = 5.7; // normal M3 hex nut exact width = 5.5
m3_nut_depth = 2.7; // normal M3 hex nut exact depth = 2.4

retainer = 1; // Belt retainer above teeth
retainer_ht = 1.5; // height of retainer flange over pulley
idler = 1; // Belt retainer below teeth
idler_ht = 1.5; // height of idler flange over pulley

pulley_t_ht = 8; // length of toothed part of pulley
pulley_b_ht = 8; // pulley base height
pulley_b_dia = 70; // pulley base diameter
no_of_nuts = 3; // number of captive nuts required
nut_angle = 120; // angle between nuts
nut_shaft_distance = 1.2; // distance between inner face of nut and shaft

Lagerbock

Der Lagerbockbesteht aus drei aufeinandergeleimte Multiplexplatten. In diese wurde unten und oben ein Lager, Innendurchmesser 50mm eingesetzt.

Lager: 2 x Rillenkugellager 6010 2RS 50 x 80 x 16 mm

Lagerbock mit Zahnriemenscheibe 120Zähne

Azimut, Elevations- und Deklinnationswinkel

Azimutwinkel berechnen:
A = Azimutwinkel
gLE = geographische Länge des Empfangsort
gBE = geographische Breite des Empfangsort
gLS = geographische Länge der Satelittenposition

tan(gLE – gLS)
A = 180° + arctan ————–
sin gBE

Für Astra mit 19,2 Ost würde das z.B. so aussehen:
gLE = 8,7582988 (Längengrad für Knittlingen)
gBE = 49,0240107 (Breitengrad für Knittlingen)
gLS = 19,2

tan(8,7582988 – 19,2)
A = 180° + arctan ——————-
sin 49,0240107

Elevation berechnen:

GPS-Koordinaten für Knittingen:
49° 1′ 26.439″ N
8° 45′ 29.876″ E

http://www.fen-net.de/satellitentechnik-online/texte/orbit/azimut.htm

// Azimut und Elevation berechnen

void setup() {
  double A; // Azimutwinkel
  double E; // Elevationswinkel
  
  // Daten für Stuttgart
  String Ort = "Stuttgart";
  float gLE = 9.2L; // Längengrad Stuttgart
  float gBE = 48.8L; // Breitengrad Stuttgart
  
  // Daten für Berlin
  /*String Ort = "Berlin";
  float gLE = 13.4L; // Längengrad Berlin
  float gBE = 52.5L; // Breitengrad Berlin
  */
  
  String Satellit = "Astra 19,2 Ost";
  float gLS = 19.2L; // Längengrad Astra
  //string Satellit = "Eutelsat F2 10,0 Ost";
  //float gLS = 10.0L;   // Längengrad Eutelsat F2

  // Die Grademaße in Bogenmaße umrechnen
  float L = 3.14/180 * gLE;
  float B = 3.14/180 * gBE;
  float P = 3.14/180 * gLS;

  // Azimut in Gradmaß berechnen
  A = 180 + 180/3.14 * atan (tan(L - P) / sin(B));

  // Elevation im Gradmaß berechnen
  E = 180/3.14 * atan (((cos(B) * cos(L - P)) -0.1513) / sqrt(1-sq(cos(B) * cos(L - P))));
  
  // initialisiere die serielle Kommunikation mit 9600bps:
  Serial.begin(9600); 
  
  // Ausgabe der berechneten Winkel
  Serial.println ("Ort: " + Ort);
  Serial.println ("Satellit: " + Satellit);
  Serial.print ("Azimut = ");
  Serial.print (A);
  Serial.print (" Elevation = ");
  Serial.println (E);
}

RAMPS 1.4 zur Ansteuerung

Für die Ansteuerung der Schrittmotoren wird ein RAMPS 1.4 – Shield verwendet. Folgende Anschlüsse werden verwendet

Azimut
E0 = Anschluss für den Schrittmotor „Azimut“
X_MIN = Endschalter Azimut MIN
X_MAX = Endschalter Azimut MAX

Elevation
E1 = Anschluss für den Schrittmotor „Elevation“
Y_MIN = Endschalter Elevation MIN
Y_MAX = Endschalter Elevation MAX

Kompasssensor am RAMPS 1.4

Der Kompassensor so wie eventuell weitere Sensoren werden über den I2C-Bus am RAMPS 1.4 angeschlossen

5V = rot
GND = schwarz
20 = blau
21 = grün