LAGUTE LW-12 Wifi WLAN LED RGB Controller mit Java Steuern

Nachdem die App die zu diesem Controller ausgeliefert wurde, mehrfach „semioptimal abstürtzte“ (und dann bis zum nächsten Update nicht mehr zu gebrauchen war) musste eine alternative steuerungsmethode her.

Hierzu wurde das Protokoll mit dem die App den Controller ansteuert etwas näher betrachtet.

Folgende Daten ergaben sich daraus:

Protokoll UDP

Port 5000

DATA 9 Bytes

7e:07:05:03:82:8d:ff:00:ef

7e:07:05:03:9b:9f:ff:00:ef

7e:07:05:03:a0:9e:89:00:ef

Man kann aus den konstanten Anteilen der  gesendeten Daten folgenden ersten Schluss ziehen

Daten: 7e:07:05:03:RR:GG:BB:00:ef

RGB Anteile können von Byte 4 bis 6 übergeben werden.

Dies führte dann zu folgendem Beispielcode in Java:

public static void setLight(int r, int g,int b,String ip,boolean olderThan2016){      
             DatagramSocket clientSocket;
             
            try {
                
                clientSocket = new DatagramSocket();
            
              InetAddress IPAddress = InetAddress.getByName(ip);
              byte[] sendData = new byte[1024];
              byte[] receiveData = new byte[1024];
                    
              int rot =r;
              int gruen =g;
              int blau =b;
            
              byte bRot = (byte) ((byte)0x00+(byte)rot);
              byte bGruen =(byte) ((byte)0x00+(byte)gruen);
              byte bBlau =(byte) ((byte)0x00+(byte)blau);
              
              System.out.println(bRot+ “ “ + bGruen + “ „+ bBlau);
              DatagramPacket sendPacket = null;
              // New Verion afer 2016
              if(!olderThan2016){
              byte[] test={(byte)0x7e,(byte)0x07,(byte)0x05,(byte)0x03,(byte)bRot,(byte)bGruen,(byte)bBlau,(byte)0x00,(byte)0xef};
               sendPacket = new DatagramPacket(test, test.length, IPAddress, port);
              }else{
              byte[] test={(byte)0x7e,(byte)0x07,(byte)0x05,(byte)0x03,(byte)bRot,(byte)bGruen,(byte)bBlau,(byte)0x00,(byte)0xef};
               sendPacket = new DatagramPacket(test, test.length, IPAddress, port);
             // 7e:05:03:81:03:ff:ff:00:ef
               //7e:07:05:03:ec:ff:63:00:ef
              }
             
              clientSocket.send(sendPacket);

              clientSocket.close();
              
            } catch (SocketException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (UnknownHostException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        

    }

Im anschließenden Test stellte sich heraus dass der Code funktionierte.

Quanum Nova Transportkoffer bauen (Part 1)

Um einen (möglichst) Zerstörungsfreien Transport der Drohne zu gewährleisten muss eine Transportoption geschaffen werden.

Hier bietet sich (da viele Teile wie Steuerung, Ersatzakkus etc mit auf Reisen gehen sollen) eine Kofferlösung an.

Zutaten:

– Alukoffer (Baumarkt deines Vertrauens)
– Schaumstoff (Baumarkt deines Vertrauens)
– Cutter Messer (Sollte man einfach besitzen)
– Zeit (etwa 2h wenns sauber werden soll)

2015-07-15 13.16.13

40l Box sollte für den Anfang reichen

2015-07-15 13.16.18

Ausreichend Schaumstoff um die Drohne und das Zubehör zu Schützen

2015-07-15 13.16.24

2015-07-15 17.06.36

2015-07-15 17.06.45

Auspacken und konzeptionieren der Anordnung

Capture

Einpassen des zugeschnittenen Schaumstoffs und einbringen der Passformen (mit Filzstift anzeichnen)

Capture

Das Ergebnis 🙂

Ich bau mir ein Gehäuse…

… um unnötige Geruchsbelästigung (ABS) und Wärmeverlusten, die durch aufsteigende Zugluft entstehen kann, vorzubeugen.

Dies sollte auch das Problem des Anhebens der Ecken mancher Drucke etwas abmildern, da die Abkühlkurve nun gleichmäßiger verläuft.

Durch die Profile bietet es sich an mit zwei Muttern verankerte M5 Gewindestangen als Verbindungen für das tragende Skelett zu nutzen, die sehr günstig im örtlichen Baumarkt zu beziehen sind.

Für die Verbindung untereinander kommen gedruckte Eckstücke und Verbinder zum Einsatz.

Eckverbinder

2014-09-10 22.23.39

2014-09-10 23.21.00-1#

Querverbinder

2014-09-11 11.37.20

Boden-Halterung

2014-09-11 20.50.22

 

Zusammenbau

2014-09-11 21.10.19

2014-09-11 21.19.15

2014-09-11 22.24.20

2014-09-11 22.24.29

2014-09-12 12.24.51

 

…Das Skelett steht….

2014-09-12 18.25.31

2014-09-13 11.33.33

2014-09-13 15.12.14

2014-09-13 15.55.59

2014-09-13 17.14.46

2014-09-13 17.14.50

2014-09-13 17.59.00

 

… meine neuste Wunderwaffe im Kampf gegen die Gravitation…

2014-09-13 18.59.42

2014-09-13 20.09.11

2014-09-13 20.54.42

2014-09-14 00.35.06

2014-09-14 01.06.50

2014-09-14 10.55.26

2014-09-14 11.05.53

 

… Notwendige Kühlung der Schrittmotor Treiberstufe…

2014-09-14 11.31.59

2014-09-14 12.44.09

2014-09-14 13.45.02

2014-09-14 15.41.18

 

2014-09-15 14.14.37

2014-09-15 14.51.00

…Filament Spulen Halterung….

 

 

 

 

 

—> Do not try this @Home!

— In Bearbeitung —

 

 

Gcode für Marlin-Drucker

Da es oft vorkommt, dass man am bereits fertigen G-Code noch ein paar letzte Änderungen vornehmen möchte und keine Lust hat, das gesamte Teil noch einmal zu slicen, kann man hiermit und Notepad den Code modifizieren.

Implemented Codes
G0 Rapid Motion
G1 Coordinated Movement X Y Z E
G2 CW ARC
G3 CCW ARC
G4 Dwell S or P
G10 Retract filament according to settings of M207
G11 Retract recover filament according to settings of M208
G28 Home all Axis
G90 Use Absolute Coordinates
G91 Use Relative Coordinates
G92 Set current position to coordinates given

RepRap M Codes
M0 Unconditional stop. Wait for user to press a button on the LCD (Only if ULTRA_LCD is enabled)
M1 Same as M0
M104 Set extruder target temp
M105 Read current temp
M106 Fan on
M107 Fan off
M109 Wait for extruder current temp to reach target temp.
M114 Display current position

Custom M Codes
M17 Enable/Power all stepper motors
M18 Disable all stepper motors; same as M84
M20 List SD card
M21 Init SD card
M22 Release SD card
M23 Select SD file (M23 filename.g)
M24 Start/resume SD print
M25 Pause SD print
M26 Set SD position in bytes (M26 S12345)
M27 Report SD print status
M28 Start SD write (M28 filename.g)
M29 Stop SD write
M30 Delete file from SD (M30 filename.g)
M31 Output time since last M109 or SD card start to serial
M42 Change pin status via gcode
M80 Turn on Power Supply
M81 Turn off Power Supply
M82 Set E codes absolute (default)
M83 Set E codes relative while in Absolute Coordinates (G90) mode
M84 Disable steppers until next move, or use S to specify an inactivity timeout, after which the steppers will be disabled. S0 to disable the timeout.
M85 Set inactivity shutdown timer with parameter S. To disable set zero (default)
M92 Set axis_steps_per_unit same syntax as G92
M114 Output current position to serial port
M115 Capabilities string
M117 Display message
M119 Output endstop status to serial port
M140 Set bed target temp
M190 Wait for bed current temp to reach target temp.
M200 Set filament diameter
M201 Set max acceleration in units/s^2 for print moves (M201 X1000 Y1000)
M202 Set max acceleration in units/s^2 for travel moves (M202 X1000 Y1000) Unused in Marlin!!
M203 Set maximum feedrate that your machine can sustain (M203 X200 Y200 Z300 E10000) in mm/sec
M204 Set default acceleration: S normal moves T filament only moves (M204 S3000 T7000) in mm/sec^2 also sets minimum segment time in ms (B20000) to prevent buffer underruns and M20 minimum feedrate
M205 advanced settings: minimum travel speed S=while printing T=travel only, B=minimum segment time X= maximum xy jerk, Z=maximum Z jerk, E=maximum E jerk
M206 Set additional homeing offset
M207 Set retract length S[positive mm] F[feedrate mm/sec] Z[additional zlift/hop]
M208 Set recover=unretract length S[positive mm surplus to the M207 S*] F[feedrate mm/sec]
M209 S enable automatic retract detect if the slicer did not support G10/11: every normal extrude-only move will be classified as retract depending on the direction.
M220 S- set speed factor override percentage
M221 S- set extrude factor override percentage
M240 Trigger a camera to take a photograph
M301 Set PID parameters P I and D
M302 Allow cold extrudes
M303 PID relay autotune S sets the target temperature. (default target temperature = 150C)
M400 Finish all moves
M500 Stores paramters in EEPROM
M501 Reads parameters from EEPROM (if you need reset them after you changed them temporarily).
M502 Reverts to the default “factory settings”. You still need to store them in EEPROM afterwards if you want to.
M503 Print the current settings (from memory not from eeprom)
M999 Restart after being stopped by error

Probleme und deren Lösungen bei K8200

Der Druck startet nicht trotz erreichter Zieltemperatur?

PID Des Hotends einstellen

M301 P10.0 I1.0 D30.0

M303 E0 S245 C10 –> 245 Grad

Der Drucker wird nun das Hotend aufheizen und über die Zieltemperatur schwingen und das Hotend wieder abschalten, bis er knapp unter die Zieltemperatur sinkt. Jetzt passt die Firmware die PID-Werte an und heizt wieder nach. das ganze 10 mal, und dann bekommt ihr im Logfenster unten folgende Zeilen

13:52:52.484 : Clasic PID
13:52:52.484 : Kp: 9.78
13:52:52.484 : Ki: 0.71
13:52:52.485 : Kd: 33.81
13:52:52.485 : PID Autotune finished ! Place the Kp, Ki and Kd constants in the configuration.h

Die Werte hinter Kp, Ki und Kd werden natürlich von den hier angegebenen abweichen. Diese Werte packen wir nun in folgenden Befehl:

M301 P9.78 I0.71 D33.81

Damit werden die neuen Werte übernommen. Gleich danach schicken wir einmal den Befehl

M500

Dadurch werden die Werte im EEPROM gespeichert.

Verhindern von JAMs (Verstopfung des Extruders)

Da auch das beste Filament an manchen Stellen unterschiedliche Dicken aufweist, kann es dazu kommen dass manche Druckvorgänge misslingen, da das Material im Extruder hängen bleibt, und diesen verstopft. Der Drucker macht dann fleißig weiter aber druckt nur noch heiße Luft.
Um diese Probleme zu verhindern, kann man das Filament vorschmieren, dass problematische Stellen dennoch durch den Extruder gleiten.

Zum schmieren kann man auch wenn dies etwas unorthodox klingen mag gewöhnliches Haushalts Sonnenblumen – oder Rapsöl benutzen.

In meinem Fall benutze ich Sonnenblumenöl, das ich in einen Silikonschlauch fülle, durch den das Filament in den Extruder geführt wird.
Schlauch ölung         Siliconschlauch

Die Qualität des Drucks lässt sich so außerdem deutlich verbessern und bisher sind keine weitern JAMs aufgetreten.

 

 

Neuer Extruder

Aufgrund von Problemen mit dem Original Extruder wurde ein neues Modell aus England beschafft (E3D V5).

Hauptproblem stellte die Teflon Hülse des Extruders dar die sich seltsamerweise gerne unter Hitzeeinwirkung verzog.

2014-08-25 13.06.34

Der neu kam da schon etwas stabiler daher.

2014-08-25 12.51.46  2014-08-25 14.57.12 2014-08-25 14.57.23

Bilder zur neuen Druckqualität folgen aber es sieht vielversprechend aus.