USB Geräte über IP tunneln (usbip)

Das usbip Projekt ist seit kurzem als stabiler Bestandteil des Linuxkernels bestimmt worden. Das bedeutet, dass die Funktionalität standartmäßig in die Kernels der großen Distributionen kompiliert werden. Es herrscht allerdings noch einige Unklarheiten wie das Paket ausgeliefert werden soll. Der aktuelle (3.16) Kernel des Ubuntu 14.10 (Utopic Unicorn) hat die Module für usbip bereits dabei. Es draf bloß nicht der Fehler gemacht werden und das ‚usbip‘ Paket aus dem Paketmanager isntalliert werden; dieses enthält eine sehr alte Version des Projekts. Vielmehr muss nur das Paket ‚usbip-utils‘ installiert werden.

Wenn die benötigten Pakete geladen sind kann der usbip Server gestatet werden. Dieser lautet ‚usbipd‘ und kann entweder als Programm oder im Hintergrund geladen werden.

basti@localhost:~$ sudo usbip

oder

basti@localhost:~$ sudo usbipd -D 

Um  USB Geräte über diesen Server zur Verfügung zu stellen, müssen die Kernelmodule ‚usbip_core‘ und ‚usbip_host‚ sowie ‚vhci_hcd‘ geladen werden.

basti@localhost:~$ sudo modprobe usbip_core
basti@localhost:~$ sudo modprobe usbip_host
basti@localhost:~$ sudo modprobe vhci_hcd

Die Liste der verfügbaren USB Geräte kann mit ‚basti@localhost:~$ usbip list -l‚ angezeigt werden. Die Ausgabe sieht dann zum Beispiel so aus:

 – busid 1-2 (05dc:b051)
   Lexar Media, Inc. : unknown product (05dc:b051)

Um das gewünschte Gerät zu exportieren wird dem Kernelmodul das USB Gerät übergeben. 

basti@localhost:~$ usbip bind -b 1-2

Wenn ein USB Gerät an den usbip Treiber weitergegeben wurde, steht es dem System nicht mehr zur Verfügung. Es kann allerdings mit usbip auch lokal wieder eingebunden werden. Und genau das müssen wir zuerst tun, bevor wir mit Windows die Interfaces des USB Gerätes sehen können. Weshlab das so ist, ahbe cih noch nicht herausgefunden, lediglich dass es so ist.

basti@localhost:~$ usbip list -r 127.0.0.1
Exportable USB devices
======================
 – 127.0.0.1
        1-2: Lexar Media, Inc. : unknown product (05dc:b051)
           : /sys/devices/pci0000:00/0000:00:06.0/usb1/1-2
           : (Defined at Interface level) (00/00/00)

basti@localhost:~$ sudo usbip attach -r 127.0.0.1 -b 1-2
basti@localhost:~$ usbip list -r 127.0.0.1
Exportable USB devices
======================
 – 127.0.0.1
        1-2: Lexar Media, Inc. : unknown product (05dc:b051)
           : /sys/devices/pci0000:00/0000:00:06.0/usb1/1-2
           : (Defined at Interface level) (00/00/00)
           :  0 – Mass Storage / SCSI / Bulk-Only (08/06/50)

 
Wie man an der Ausgabe sieht, erscheint das Interface erst, nachdem das Gerät einmal eingebunden wurde. Um es auf einem anderen Computer einzubinden muss es aus dem lokalen Rechner gelöst werden.


basti@localhost:~$ sudo usbip detach -p 0

Damit wird das Gerät wieder frei um von der Windows Seite her eingebunden zu werden. Das ReactOS Projekt hat für Windows signierte Treiber erstellt. Diese können auf der Webseite des usbip Projektes heruntergeladen werden. Die mit den Treibern ausgelieferte Version 0.2.0.0 von usbip.exe ist allerdings zu alt um mit dem aktuellen usbip-Server zu arbeiten. Die Quellcodes sind allerdings offen und man kann sich eine Version kompilieren, oder ihr könnt euch meine kompilierte Version von hier herunterladen. Es handelt sich dabei um die aktuellste Version des SVN Repositories.

Unter Windows muss der usbip Enumerator Treiber installiert werden. Unter Windows 7 kann das über den Gerätemanager erfolgen. Im Gerätemanager klickt man auf den lokalen Computer mit der rechten Maustaste und wählt Legacyhardware hinzufügen.

Im folgenden Dialog wählt man die manuelle Metode aus und ‚Alle Geräte anzeigen‘. Der Button ‚Datenträger…‘ lässt dann zu den Ordner der usbip-Treiber auszuwählen. Installiert nun den ‚USB/IP Enumerator‘.

Der Treiber kann jetzt verwendet werden. Über die Kommandozeite (cmd.exe) führen wir die usbip.exe aus und binden das entfernte USB-Gerät ein.

C:\Release>usbip -l 192.168.0.1
– 192.168.0.1
   1-2: Lexar Media, Inc. : unknown product (05dc:b051)
        :
/sys/devices/pci0000:00/0000:00:06.0/usb1/1-2
        : (Defined at Interface level) (00/00/00)
        :  0 – Mass Storage / SCSI / Bulk (Zip) (08/06/50)

C:\Release>usbip -a 192.168.0.1 1-2
new usb device attached to usbvbus port 1

Receive sequence:    46600

Das Gerät wird von Windows wie ein lokal angestecktes Gerät gesehen und die Treiber werden lokal installiert. Um das Gerät wieder freizugeben wird mit ‚usbip.exe -d 0‘ das Gerät entbunden und kann andersweitig wieder verwendet werden.

Zu beachten ist, dass ein Gerät immer nur an einem PC eingebunden sein kann.


Das ESP-12 3$ WiFi Modul, oder wo könnte man überall Internet einbauen

Seit geraumer Zeit gibt es, vor allem aus China, ein Modul, dass einen ESP8266 Mikrocontroller, ein Flashspeicher, onboard Antenne und einige GPIOs besitzt. Verfügbar ist das Modul in so weit ich herausgefunden habe 14 verschiedenen Ausführungen, vom blankliegenden Controller bis hin zum voll geschirmten Modulpaket, dass die GPIOs als Lötpunkte auf der unterseite besitzt. Die Module sind alle über die üblichen Kanäle zu beziehen. Dabei sind auch die üblichen Lieferzeiten zu erwarten.

Aufbau des Moduls

ESP-12 Modul mit Breakout-Board
Ich habe mir das ESP-12 Modul mit einem Breakout-Board bestellt. Dadurch ist es möglich das Modul im Steckbrett unterzubringen und so schnell eine akzeptable Verkabelung zu erreichen. Das Modul besitzt eine LED, eine PCB-Antenne und ist ansonsten unter einem Metalldeckel abgeschirmt. Dieser Schirm trägt die Kennzeichnung, dass das Modul die Modellnummer ESP826WLAN. Mit diesen Parametern ist es hervorragend geeignet in einem WLAN Netzwerk eingesetzt zu werden. Das Modul hat eine Größe von 16x24mm Die seitlich angebrachten Lötpads sind mit 2mm Abstand angeordnet und befinden sich nicht im Bereich der Antenne. Die LED kann über den Controller gesteuert werden. Die beiden Lötpads für SMD Widerstände sind einam mit GPIO 15 und Chpi_Enable verbunden. Sie können dauerhaft auf GND bzw. VCC gelegt werden. Wenn anstatt der hier verwendeten Lötbrücke ein 10k 0603 SMD Widerstand eingelötet wird, können die Pins auch noch verwendet werden. Ich hatte nur gerade keine griffbereit.
6MOD besitzt und von der Firma AI-THINKER hergestellt wurde. Es besitzt eine FCC-Zulassung, arbeitet auf dem ISM 2,4GHz Band, hat eine Sendeleistung von +25dBm und verwendet das Funkprotokoll IEEE 802.11b/g/n auch bekannt als

Espressif SDK und weitere Betriebsmodi

Die Firma Espressif Systems hat für den ESP8266 eine SDK herausgebracht, das es ermöglicht die Module in zwei verschiedenen Betriebsmodi zu verwenden. Einmal als eigenständiges Modul, dass mit UART Befehlen gesteuert werden kann. Andererseits biete das GitHub von Espressif ein SDK zur Entwicklung von Software mit Hilfe von FreeRTOS in C. Aufbauend auf diesem SDK wurde NodeMcu entwickelt. NodeMcu bringt die Skriptsprache Lua auf das System und ermöglicht es den Microcontroller mit einfach zu scheibenden Skripten zu verwenden. Auch dieses Projekt ist Open-Source und auf Github verfügbar. 

Flashen der Firmware

NodeMcu Firmware Programmer
Das Flashen von Mikrocontrollern kam in der Vergangenheit immer etwas arbeitsaufwändig daher. Meistens wurden spezielle Programmieradapter verwendet, oder das Chip musste über einen JTAG Adapter angesprochen werden. Im Laufe der Zeit haben sich Bootloader etabliert, die in einem reservierten Bereich des Flashs sitzen und vor Ausführen des Hauptprogramms ein Programmieren über die serielle Schnittstelle zulassen. So auch bei diesem Modul. es ich möglich die Firmware von NodeMcu über die Serielle Schnittstelle zu flashen. Das Projekt stellt dazu sogar ein Windows Programm zur Verfügung, das völlig selbständig das Modul mit allen benötigten Speicherteilen beschriebt. 

Kommunikation mit dem Modul

ESPlorer

Nachdem die NodeMcu Firmware auf das Modul geflasht wurde, kann über die Serielle Schnittstelle die Kommunikation mit dem LUA-Interpreter aufgenommen werden. Der Interpreter lauscht mit einer Baudrate von 9600 8 Bits, 1 Stop, kein Parity. Rund um den ESP8266 hat sich bereits eine große Gemeinschaft von Leuten gebildet, die alle mit zum Entstehen von großartiger Software beitragen. Zum Beispiel das ESPlorer Projekt, das eine leicht zu bedienende Oberfläche zum Programmieren der LUA Skripte entwickelt hat. Die für die Entwicklung nötigen Informationen finden sich ebenfalls auf GitHub und können dort im Wiki und der API Dokumentation nachgeschlagen werden.

Bei den bereits verfügbaren LUA Modulen befindet sich alles was man zur Entwicklung von WLAN fähigen Geräten benötigt. Jetzt bleibt nur noch die Frage zu klären, wo kann man überall noch WLAN einbauen und wie mache ich das, damit mein Nachbar mir nicht das Licht ausschalten kann.

3D Drucker Update: Drucken von ABS

Mein 3D Drucker ist ein Bausatz von RepRapPro.com und wurde ursprünglich für das Drucken von 1,75mm breitem PLA Kunststoff entwickelt. PLA hat den Vorteil, dass es bei ~200°C flüssig ist und sich somit hervorragend extrudieren lässt. Es haftet auf warmen (65°C) Kapton Klebeband und bei schweren Fällen auf Pritt-Stift. Dabei ist zu beachten, dass die Wärmeausdehnung von PLA sehr gering ist und daher das Risiko, dass sich ein Objekt während dem Druck verzieht gering. PLA ist ein sehr spröder Werkstoff, der allerdings bei geringen Temperaturen weich wird. Für allgemeine Bauelemente, die keiner großen Belastung ausgesetzt sind, oder Dekorationen eignet PLA sich hervorragend, da es einfach und Energiesparend zu verarbeiten ist. Außerdem entstehen bei PLA keine unangenehmen Gerüche.

ABS hingegen ist ein Thermoplast, dessen Schmelzpunkt etwas weiter oben liegt als der des PLA. Ein Druck mit 240°C für das von mir verwendete ABS erzeugt gute Verbindungen der einzelnen Schichten. Allerdings ist die Wärmeausdehnung von ABS gegenüber der von PLA wesentlich höher, sodass es passieren kann, dass das zu druckende Objekt sich bereits zusammenzieht, während eine weitere Schicht aufgetragen wird. Diese zeiht sich dann auch wieder zusammen und so kommt es vor, dass Ecken des Objektes von der Druckplatte abgehoben werden. Dies erzeugt dann einen Spalt, in dem Luft zirkulieren kann und das Objekt weiter abkühlt. Eine komplette Ablösung von der Druckplatte ist dann sehr wahrscheinlich.

Um einem zu schnellen Abkühlen vorzubeugen kann das Objekt auf einer beheizten Oberfläche gedruckt werden. Diese ermöglicht ein langsameres Abkühlen der Schichten und verhindert somit, dass sich das Objekt verzieht. Die Platte sollte dabei etwas mehr als 100°C haben. 
Der Ormerod Drucker von RepRapPro kam mit einem PC Netzteil als Stromquelle für das Heizbett. Mit dem Netzteil war es möglich die Platte unter konstante anliegender Spannung auf 80°C zu erhitzen. Mit einem leistungsstärkeren Netzteil sind 120°C nach einer gewissen Aufwärmzeit problemlos möglich. Der Druck kann also beginnen.
Zu Beginn befindet sich der Druckkopf sehr nahe über der Oberfläche des Druckbetts. Der originale Kopf des Druckers besitzt drei Düsen, die die Luft nahe an der Austrittsstelle der Düse vorbeileitet. Das führt zu einer starken Abkühlung der Druckplatte an dieser Stelle. Nachdem ich den originalen Kühlluftadapter so modifiziert hatte, dass die Luft wahlweise auch zur Seite abgeblasen werden kann, ist auch die Temperatur stabil geblieben.
Reibung der Y-Achse beim Verfahren nach links erzeugt diese Schräge
Der Drucker besitzt keinerlei Seitenwände und so kommt es vor, dass leichte Luftzüge das Druckbild beeinflussen, bzw. zu einem vollständigen Ablösen des Objekts führen. Mit etwas Karton konnte aber schnell Abhilfe geschafft werden. Dabei zeigt sich, wie wichtig es ist, dass das Druckbett frei beweglich bleibt. Andernfalls kann es zu solchen Schönheiten kommen.
Die Kunststoffteile des Druckers sind, wie es sich für einen RepRap gehört, alle mit einem RepRap hergestellt worden. Dabei wurde PLA verwendet und das ist, wie oben angesprochen nicht sehr temperaturfest. Bereits einige Stunden mit ABS haben dem Schlitten der X-Achse stark zugesetzt.
Hohe Temperaturen haben den Kunststoff des Schlittens verformt
Zu testen bleibt jetzt nur noch das transparente ABS. Allerdings muss der Prozess des Druckens vereinfacht werden, da ich nicht immer den kompletten Drucker umbauen möchte, wenn das Material gewechselt werden soll.

Home automation done in one afternoon

So there they are. The winter holidays. And you finally I have all the time to make that stuff I wanted to do. But what to do first.

Remote-control

The challenge is to build the things as fast as possible. So we start with the home automation thing I had in my mind for a few month now. First up we need a cool name so it does stick out of the masses. Well it’s name is going to be Herbert.
Next up we need a processing base station for WiFi integration.

Remote-controlled Socket

This nice Raspberry Pi will do the job pretty well I guess. I have a collection of 6 remote controlled wall-adapters for the power sockets and a remote-control to toggle 3 of them individually on and off. the all-off button also exists. Dismantling the remote I found a circuit-board with an ASIC, 12V battery, four tactile switches, 434MHz crystal, one LED and a 8bit-dip switch bank.

Basically just an ASIC

 A quick glance at the backside of the PCB shows that 7 of the 8 switches are connected to the ASIC. Looks like some sort of channel selection. Nice. The operation voltage for the remote is 12V so we can not directly hook the Pi up.
I need some sort of isolation between the two circuits. Something like a optocoupler or a relay. I just happen to have two dual-relay-modules laying around so why not use them. A really quick solder-job later the tactile switches had a wire attached as well a a wire to short one of the channel-selectors. Now all six sockets can be operated with one remote module. the all-off switch is not connected. So I can not switch them all off at once. For now. A look inside the socket adapters show that they also consist of an ASIC. This one isn’t even labeled! A switch mode power-supply and an antenna.

The socket-module seems not to answer the command in a way to determine of the signal was received. I will have a look into this later. For now one-way communication will have to be sufficient.

Everything hooked together like this:
5V -> Relay supply
3.3V -> Relay driver
GPIO -> Relay switch signal
The relays short the tactile switches ans one of the channel-selectors. 

The next step is software. The Pi I use has Raspbian installed. This is a Linux based on the Debian distribution and comes with python and bindings to access the GPIO directly from the script. With Python you get a HTTP-server up and running in no time.

from BaseHTTPServer import BaseHTTPRequestHandler,HTTPServer
import RPi.GPIO as GPIO
class myHandler(BaseHTTPRequestHandler):

#Handler for the GET requests
def do_GET(self):

self.send_response(200)
self.send_header('Content-type','text/html')
self.end_headers()
# Send the html message
self.wfile.write("Hello World")
GPIO.setmode(GPIO.BCM)
GPIO.setup(4, GPIO.OUT, initial=1)
GPIO.output(4, 1)

return

try:
#Create a web server and define the handler to manage the
#incoming request
server = HTTPServer('', 8000), myHandler)
print 'Started httpserver on ', server.server_address

#Wait forever for incoming http requests
server.serve_forever()

except KeyboardInterrupt:
print '^C received, shutting down the web server'
server.socket.close()

With little additions the first version of Herbert was built. Have look at the git if you want.

[youtube https://www.youtube.com/watch?v=uea_XdWFsqE?version=3&f=user_uploads&c=google-webdrive-0&app=youtube_gdata&w=320&h=266]

Back on track… Es druckt wieder

Nach einigen Reparaturarbeiten ist der Drucker wieder unter den Lebenden. Einige Dinge, die ich dabei gelernt habe und die für andere nützlich sein könnten:

Stotternder Schrittmotor

Nachdem ich die Treiber des Duet Controller-Boards getauscht hatte ist der Y-Motor nicht mehr korrekt verfahren. Ich habe das auf die Tatsache geschoben, dass dieser Treiber eventuell nicht richtig verlötet wurde. Also habe ich das Board noch einmal nachgelötet und mit einem ausgebauten Motor getestet. Das Ausbauen des Motors war schnell erledigt und nachdem ich die Lötstellen noch einmal erwärmt hatte hat der Motor sich auch korrekt gedreht. Also alles wieder eingebaut und diesmal die Verkabelung genau überprüft und der Motor stottert immer noch. Nach Erhöhen des Motorstroms und verringern der Beschleunigungswerte ist die Achse auch wieder verfahren. Allerdings ist der Tisch anstatt der 10mm ist der Tisch aber 80mm verfahren. Ein eindeutiges Zeichen, dass mit den Microstep Jumpern etwas nicht stimmt. Wie im Schaltplan des Duet Boards zu erkennen ist, wird jeder Motortreiber auf 1/16 Microstep konfiguriert. Ein kurzes nachmessen des betroffenen Treibers und siehe da, die Konfiguration für MS2 war auf low statt high. Da hat sich beim Tauschen der Treiber wohl eine Leiterbahn gelöst. Ein Draht von Pin 6 auf 3,3V und schon lief wieder alles wie geschmiert.

Stotternder Schrittmotor 2

Ein weiteres Stottern der Y-Achse nach dem erfolgreichen Zusammenbauen und dem ersten Druck ließ sich auf eine lose Steckverbindung des Motors zurück führen. Nicht immer ist das Controller-Board der Verursacher. 

Kabelführung

Die Verschiedenen Kabelstränge des Druckers sind jetzt in einem Bündel mit einem Spiralschlauch zusammen gefasst und somit nicht mehr so gefährdet sich zu verheddern. Der Spiralschlauch ist günstig auf Amazon zu haben.

Luftzug

Der Lüfter für die Hotend-Kühlung kann keinen nennenswerten Druck aufbringen. Da die Luftdüsen des Kühlerteils allerdings nicht dem Durchmesser des Lüfters entsprechen, wir eine große Menge der Luft zur Zuführungsseite zurückgedrückt und weht auf das Druckbett. Das soll angeblich zu schlechteren Drucken führen. Mit einer Abdeckung kann dem entgegengewirkt werden. Ob das wirklich funktioniert, wird sich zeigen.

Stromversorgung

Ich habe das ATX Netzteil durch ein 400W LED Netzteil ausgetauscht. Die Druckplatte ist wesentlich schneller auf Temperatur, die Steigung der Temperaturgerade ist fast doppelt so hoch wie vorher, und der Lüfter des Hotends bekommt beim Einschalten der Heizplatte oder des Hotends kein Drehzahleinbruch mehr. Ich hoffe dass dadurch die Druckergebnisse Konstanter werden, da teilweise der gleiche Druck einmal gelungen ist und beim nächsten Mal wieder nicht.
Die 400W sind allerdings auch viel zu hoch ausgelegt, aber was soll’s, es funktioniert.

Hotend Kühlung

Wie bereits oben beschrieben ist die Drehzahl des Lüfters am Hotend ab sofort nicht mehr davon abhängig, ob die Heizplatte oder das Hotend eingeschaltet ist. Wie und ob sich da bei den Druckergebnissen bemerkbar macht bleibt abzuwarten. Besonders interessant werden Brücken, die nun konstant gekühlt werden können. 

Wärmeleitpaste

Ich habe zwischen Heizplatte und Aluminiumabdeckung eine gehörige Portion Wärmeleitpaste verteilt. Das Ergebnis ist , dass die Glasplatte jetzt wesentlich näher am Wert der im Web-Interface eingestellt ist liegt als vorher. Der thermische Verlust zwischen PCB und Aluplatte war durchaus signifikant. Wenn ich im Web-Interface 50°C einstelle hat die Glasplatte nach einiger Zeit auch zwischen 48°C und 49°C erreicht. Erstaunlich.
Den Schalttransistoren im Netzteil habe ich ebenfalls eine Portion Wärmeleitpaste verpasst, denn die waren einfach nur auf einen Alu-Heatsink geschraubt. Der Thermistor im Hotend ist durch diverse Unfälle mittlerweile komplett mit PLA im Heizblock eingegossen. Insofern dient hier das dauernd geschmolzene PLA als ‚Wärmeleiter‘.
Alles wieder am Laufen

Zukunftspläne

In nächster Zukunft werde ich einen Halter für den Kabelschlauch des Trägerarms machen, denn der führt im Moment dazu, dass sich die Steckverbinder zum Controller-Board bewegen und das ist kein guter Zustand.
Ebenso ist das Kabel zum Heizbett zu lang. das werde ich auch noch kürzen.

BTW: What’s inside a cheap Chinese LED power supply?

I got a cheap 400W 12V switching power supply in the mail the other day. I wanted to use it as replacement for an ATX power supply for my 3D-printer.

But what is inside those things?
400W / 12V Power supply from china

First of all let’s have a look at the outside of the power brick. The Frame is made from two 1.5mm aluminium sheets. There is a fan in the top and the screw terminals are covered with a plastic lid. The frame has two screw holes on each side for mounting. It does not have a switch but there is an indicator LED next to the terminal.

The fan on the top cover is connected to a pin header so it can be removed with the lid. The housing itself is pretty sturdy so it looks good so far.

The input voltage can be selected via a switch that is accessible from the outside. You can select a supply voltage of 110V and 220V. So it can be used worldwide since the frequency of the input current does not matter for a switching power supply.

After lifting the cover up we can have a look at the PCB inside. It looks like there is a single sided through hole board inside. Four high power semi-conductors are placed near the side walls and thermally connected to them.One thing I noticed was a loose screw flying around inside the supply. This can be extremely dangerous since it can cause a short in the supply. Also there where two mounting screws missing on the board. One in the middle and one in the upper left corner. 

The underside of the PCB shows the different components of the circuit. The picture below shows the different parts of the power supply. First of all we can see the terminal at the right side and the high voltage AC input at the lower part of the screw terminals. The yellow area is protective earth and surrounds the hot part of the high voltage mains circuit. This is where one of the mounting screws where missing! The mains voltage is decoupled via a transformer and goes from the yellow part into the green area. There it is rectified and buffered in two 680µF caps. Those are rated 250V so I’m not sure what voltage this area has. It certainly can not be rectified mains voltage since this is nearly 400V! The pink area is control circuitry with a central controller KA7500B. It brings everything along to control the switching regulator found at the back side heat-sink. The blue square is the main transformer, that transforms the higher voltage on this side to the desired 12V on the other side. There you can see that the traces on the PCB get flooded with solder to decrease their resistivity. The PCB trace width calculator gives a rough estimation for about 97.9mm trace width. This is certainly not the case so the added solder leads to a reduced trace width. The output of the Terminals is monitored by the chip. So they have to be connected to the 12V output traces. Since the high current leads to a voltage drop over the distance from the transformer to the terminals the measurement of the output voltage should be done at the terminal point. Therefore there should be at least one sens line going back to the controller circuit. Yes, there it is. Marked with the orange arrow.
Oh wow they are high quality Rubycon Caps… Oh wait. no they aren’t
So after all I can say you get what you pay for. The power supply is not bad. But it certainly is no high end laboratory style power brick. Let’s see how it works out under load.

The output voltage at the terminal droped one volt after loading the power supply with 350W. This can be compensated at the trimmer next to the terminal. so now the output voltage is bang on 12V and the ripple is in an acceptable 0.2Vpp. The supply can now deliver 12V without dropping to 10V like the ATX did. Let’s fix up the printer to get going again.

Never assume… Immer einmal mehr überprüfen

Mein Umbauvorhaben, ein leistungsfähigeres Netzteil als das ATX-Netzteil an den Drucker zu bauen ist leider gescheitert. Um die benötigten 20A zum Heizen des Druckbetts an den Drucker zu liefern habe ich mich für den Einsatz einer 3-adrigen 2,5mm² Netzleitung entschieden. Also Braun, Blau und Grün-Gelb. Der Austausch hat vor einigen Tagen stattgefunden und ich habe lediglich die vorgegebene Leitung mit der neuen ersetzt. Dabei habe ich nicht auf die Polarität geachtet, sondern lediglich darauf die gleichen Anschlüsse wieder zu treffen. Tja und genau das habe ich vergessen. Als ich das neue Netzteil anschließen wollte habe ich Blau als 0V und Braun als 12V verwendet, ohne es nochmal auf dem Controllerboard zu überprüfen, denn diese Farbcodierung wird auch im 12V kapazitiven Näherungsschalter verwendet. Die Schaltung zur Generierung der 5V und 3,3V ist mit einer Diode gegen Verpolung gesichert, die Motortreiber hingegen sind in Flammen aufgegangen…

Ersatz ist bestellt und ich kann die Treiberbausteine austauschen. Das ärgerlichste an der Sache ist, dass ich es hätte besser wissen müssen.

Never assume. Double check. Every time. 

Zeitraffer Aufnahmen mit dem RaspberryPi und einer PiCam

Es hat etwas faszinierendes dem 3D-Drucker dabei zuzuschauen, wie er Schicht für Schicht ein Teil erstellt. Allerdings ist der Prozess ein zeitintensives Unterfangen. Kleine Drucke sind in einigen Stunden gedruckt, größere Drucke dauern hingegen gerne mal etwas länger. 7 Stunden sind für einen mittelgroßen Druck eine realistische Zeit. Um den Prozess in seiner ganzen Faszination abzubilden können Zeitrafferaufnahmen gemacht werden. Dabei wird die Zeit, die benötigt wird auf ein einstellbares Minimum reduziert und die Entstehung des Objektes in seiner ganzen Pracht gezeigt. Das Hilfsmittel meiner Wahl ist ein RaspberryPi mit PiCam und die Software RPi-Cam-Webinterface. Die Installation der Software ist mit wenigen Eingaben, entweder über die Konsole des Pi’s oder über SSH erledigt.

sudo apt-get update
sudo apt-get dist-upgrade
sudo rpi-update
mkdir ~/cam
cd ~/cam
git clone https://github.com/silvanmelchior/RPi_Cam_Web_Interface.git
cd RPi_Cam_Web_Interface
chmod u+x RPi_Cam_Web_Interface_Installer.sh
./RPi_Cam_Web_Interface_Installer.sh install

Jetzt sind alle benötigten Dateien und Programme installiert, sodass mit einem Webbrowser auf die Cam zugegriffen werden kann. Das sehr minimalistische Webinterface ermöglicht eine einfache Konfiguration und die Vorlage für Zeitrafferaufnahmen hat alles für einen schnellen Test bereits eingestellt. Wir wählen also unter ‚Load Presets: Stf FOV, x30 timelapse‚ aus. Ein simpler Druck auf ‚record video start‚ startet die Aufnahme.

RaspberryPi mit PiCam

Nach einiger Zeit hat sich auf Grund der hohen Auflösung der Kamera eine beachtliche Datenmenge angesammelt. Mein aktueller Druck läuft seit 4:30 Stunden und die dazugehörige Filmdatei ist bereits 3,6GB groß. Meine Speicherkarte wird also demnächst überlaufen und die Aufnahme abbrechen. Schade, denn der Druck wird noch einige Stunden laufen.

Eine weitere Möglichkeit ist, die Kamera nur Bildaufnahmen machen zu lassen. Eine Aufnahme mit voller Auflösung und 85% Bildqualität führt zu einer ungefähr 3MB großen Datei. Wenn alle 3 Sekunden ein Foto geschossen wird entsteht innerhalb einer Minute 60MB Daten. Eine Stunden sind dann 3,5GB. Auch hier ist uns nicht weitergeholfen. Um hochwertige Aufnahmen für den Zeitraffer zu bekommen werde ich wohl oder Übel den Speicher des RaspberryPi erweitern.

Druckprobleme und -lösungen

Seit meine Rolle weißes PLA von FilamentPrint zu Ende ging habe ich eine 1kg Rolle schwarzes Filament aus China am Drucker hängen. Seit dem hatte ich keine so guten Ergebnisse mehr erzielt. Nach einigen Versuchen habe ich jetzt einige Methoden ermittelt mit denen der Druck dann auch mit dem billigen China PLA zum Erfolg wurde.

PLA darf nicht auf einem zu heißen Druckbett gedruckt werden

Im Gegensatz zu ABS biegt sich PLA auf einem zu heißen Druckbett, was zum Crash mit dem Lüfter führt. Dadurch wird dann der schon gedruckte Körper vom Bett weggerissen. Ein zu kaltes Druckbett führt allerdings zu geringeren Haltekräften auf dem Kaptonband. Daher ist die Einstellung der Temperatur ein klein wenig aufwändig und man muss einige Versuche für verschiedene PLA Rollen durchführen. Aktuell habe ich das Druckbett auf 48°C eingestellt. Was nicht bedeutet, dass das Kapton 48°C heiß wird, denn der Thermistor ist in der Heizplatte lediglich eingeklemmt. Es ist davon auszugehen, dass die Heizplatte etwas wärmer ist. Die Oberfläche der Glasplatte kann allerdings kälter sein. ich habe leider kein Thermometer da um das zu bestätigen.

Langsamer drucken ist für die erste Schichte keine Allgemeinlösung

Die erste Schicht einfach langsamer zu drucken ist für nicht haftende Drucke (zumindest aus PLA) kein allgemein gültiges Heilmittel. Die Zeit, die die Düse auf dem schon aufgebrachten PLA verbringt, führt dazu, dass es zu Biegekräften kommt. Die sind dann ebenfalls für das Hochbiegen von Ecken und Kanten verantwortlich. Eine für mich erfolgreiche Geschwindigkeitsreduzierung ist 50% Druckgeschwindigkeit für die erste Schicht mit innernen Kanten zuerst, dann Äußere Kante und dann Füllung. Die so erzielten Druckergebnisse sind sehr zufrieden stellend.

Z-Achen Refernez und Druckbettausgleich

Der Abstand der Z-Ache zum Druckbett sollte im Bereich von 0,1mm sein. Der Druckkopf darf auf keinen Fall mit Kraft auf das Druckbett drücken, wenn er auf Z=0 gefahren ist. Da das Druckbett des Ormerod Druckers nicht parallel zur X-Achse verläuft ist eine Kompensation notwendig. Diese wird auf Grund des etwas klapprigen Y-Tisches nach jedem Start und beim Referenzieren der Z-Achse ausgeführt. Diese Kompensation führt zwar zu einem erhöhten Betrieb der Z-Achse, führt aber zu wesentlich besseren Druckergebnissen als ohne. 
Schiefes Druckbett des Ormerod Druckers

Die stärkere Belastung der Z-Achse ist nicht schlimm, da in meinem Drucker die M5 Gewindestange gegen eine gut geschmierte Tr10x2 Gewindestange getauscht wurde. So ist es immer wieder schön zuzuschauen, wie die Z-Achse mit verfährt um eine Ebene zu schaffen, die Schräg zur X-Achse liegt.

[youtube https://www.youtube.com/watch?v=Naq3pvf7o8A?version=3&f=user_uploads&c=google-webdrive-0&app=youtube_gdata&w=320&h=266]