Dienstag, 30. Dezember 2014

Gehäuse für ein 7" (1024x600 Pixel) Pollin Display

Vor kurzem habe ich während des Schnäppchenmarkts bei Pollin ein Display erworben. Für 43€ bekommt man ein 1024x600 Pixel Display mit VGA, HDMI, DVI und Video Eingang. Für 55€ bekommt man zusätzlich  noch eine Touchfunktion mit dazu:

Eine extra Platine hält die Bedientasten zur Auswahl der Videoquelle, zur Bedienung des Menüs etc.






Dieses Display ist im Lieferzustand nicht gut einsetzbar. Überall sind offene Kontakte und das Folienkabel hält sicher auch nicht alles an mechanischer Belastung aus. Es muß also ein Gehäuse her. Pollin liefert erfreulicherweise die nötigen Daten in Form eines Datenblatts mit Zeichnung.

Noch während ich am überlegen war, wie das Gehäuse aussehen soll, erinnerte ich mich an eine Artikelserie in c't Hacks 3/2014. Dort behandeln drei Artikel das allgemeine Bauen von Gehäusen.

Die Serie startet auf Seite 58 und behandelt Gehäuse aus Alu-Strangprofilen. Auf Seite 64 geht es weiter mit dem Umbau eines Fliesenschneiders zur Tischkreissäge. Der letzte Artikel startet auf Seite 68 behandelt den Gehäusebau mittels CAD-Software und einem 3D Drucker.

Überraschenderweise wird im letzten Artikel exakt das Pollin Display eingehaust! Auf 10 Seiten werden die Grundlagen von Tinkercad vermittelt und dabei schrittweise ein dreiteiliges Gehäuse konstruiert. Alle weiteren Informationen und die nötigen Dateien gibt es hier.

Nach dem Drucken und Einbauen sieht das so aus:





Es erfüllt seinen Zweck. Mir persönlich sind die Gehäusewände mit einem Millimeter zu dünn und die Buchsen für die Schrauben sind mit einer Wandstärke von 1,25mm ungeeignet. Beim Eindrehen der Schrauben sind sie mir im oberen Bereich gebrochen. Höchstwahrscheinlich deshalb, weil ich keine selbstschneidenden Schrauben von einem ausgeschlachteten PC benutzt habe, so wie es der Autor empfiehlt. Ich habe M3 Schrauben benutzt.

Es gibt noch eine weiteres Gehäuse - auf Thingiverse mit abgerundeten Kanten. Auch hier gibt es neben den .stl Dateien die Quelldatei für Sketchup um selbst Veränderungen vorzunehmen:











Montag, 22. Dezember 2014

Fake Drucker-Elektronik

Zugegeben, die Überschrift soll absichtlich verwirren. ;-)) Was ist eine "Fake Drucker-Elektronik"? Gleich mehr dazu ... 

Vor ein paar Wochen hatte ich das Bedürfnis, ein paar Experimente mit der Firmware meines 3D Druckers durchzuführen. Allerdings wollte ich weder auf das Drucken verzichten, noch am gut eingestellten Gerät Veränderungen vornehmen. Zum Drucken verwende ich eine von nophead angepasste Version von Marlin. Die ist inzwischen ziemlich veraltet, was ich während der Experimente mit dem Grafik-LCD spüren musste. Aber auch die im Reprap-Forum gepflegte aktuellere Version hat so ihre Tücken. 

Ein weiterer Bestandteil meines 3D-Drucker-Setups, der immer wieder aktualisiert werden sollte, ist OctoPi (ein für Raspberry Pi angepasstes Image von Octoprint). In letzter Zeit gab es auch beim Raspberry ein paar Ergänzungen, die ich gerne ausprobieren will, wie z.B. ein 7" HD-Display von Pollin, eine Bluetooth Tastatur, ein 4" Touch-Display und eine Verlängerung für das 4" Touch-Display.

Einen zweiten Drucker anzuschaffen wäre eine Lösung gewesen, aber ziemlich teuer. Weitere Überlegungen brachten mich zum Schluss, dass man auf Einiges an der Druckerhardware verzichten kann, wenn man nur ein paar Experimente macht. Die Elemente, die weggelassen werden, können durch viel einfachere Komponenten ersetzt werden:

  • Die 4 Schrittmotoren an den Achsen werden durch 6 grüne LEDs ersetzt. Je eine pro Drehrichtung. Für den Extruder verwende ich blaue LEDs.
  • Die beiden Heizungen (Hotend / Heizbett) werden durch rote LEDs symbolisiert.
  • Die beiden Thermistoren (Hotend / Heizbett) werden durch Potis ersetzt.
  • Die drei Endstopschalter werden durch öffnende Drucktaster ersetzt.
  • Anstelle des RAMPS' kommt eine selbst gelötete Protoshield-Platine zum Einsatz
Letztlich bleibt als Original-Elektronik nur der Arduiuno-Mega übrig.

Die Schrittmotortreiber bekommen an ihren Anschlüssen STEP und DIR die nötigen Signale vom µC; über Logikgatter werden 2 LEDs die jeweilige Richtung anzeigen. Wenn DIR auf HIGH gesetzt ist läuft der Motor in die eine, bei LOW in die andere Richtung: 
  • DIR ∧ STEP = Richtung_1 
  • DIR ∧ STEP = Richtung_2
Je nachdem wie weit ein Motor laufen soll, werden entsprechend viele Impulse an STEP gegeben. Leider sind die Impulse zu kurz, als dass man die LED leuchten sieht. Ein sehr schwaches glimmen ist sichtbar. Es gibt zwar auch einen elektronischen Weg (monostabile Kippstufe, Monoflop, mglw. auch mit einem RC-Glied), diese Impulse so zu verlängern, damit man sie sehen kann - ich habe mich wegen dem geringerem Aufwand entschieden, die Firmware des µC entsprechend zu ändern. Bei der Marlin-Firmware muss man in der Datei stepper.cpp die nötigen Änderungen vornehmen. Innerhalb der ISR() wird jeweils das Löschen des Bits verhindert (//WRITE(X_STEP_PIN, LOW);) und am Ende der Funktion nach einem delayMicroseconds(100); nachgeholt:

 // "The Stepper Driver Interrupt" - This timer 
 // interrupt is the workhorse.
 // It pops blocks from the block_buffer and executes

 // them by pulsing the stepper pins appropriately.
ISR(TIMER1_COMPA_vect)
...
     counter_x += current_block->steps_x;
     if (counter_x > 0) {
       WRITE(X_STEP_PIN, HIGH);
       counter_x -= current_block->step_event_count;
       //WRITE(X_STEP_PIN, LOW);
       count_position[X_AXIS]+=count_direction[X_AXIS]; 
     }

     counter_y += current_block->steps_y;
     if (counter_y > 0) {
       WRITE(Y_STEP_PIN, HIGH);
       counter_y -= current_block->step_event_count;
       //WRITE(Y_STEP_PIN, LOW);
       count_position[Y_AXIS]+=count_direction[Y_AXIS];
     }

     counter_z += current_block->steps_z;
     if (counter_z > 0) {
       WRITE(Z_STEP_PIN, HIGH);
       counter_z -= current_block->step_event_count;
       //WRITE(Z_STEP_PIN, LOW);
       count_position[Z_AXIS]+=count_direction[Z_AXIS];
     }

     #ifndef ADVANCE
       counter_e += current_block->steps_e;
       if (counter_e > 0) {
         WRITE_E_STEP(HIGH);
         counter_e -= current_block->step_event_count;
         //WRITE_E_STEP(LOW);
         count_position[E_AXIS]+=count_direction[E_AXIS];
       }
     #endif //!ADVANCE
     step_events_completed += 1;
     if(step_events_completed >= current_block->step_event_count) break;
   }

   delayMicroseconds(100);
   WRITE(X_STEP_PIN, LOW);
   WRITE(Y_STEP_PIN, LOW);
   WRITE(Z_STEP_PIN, LOW);
   WRITE_E_STEP(LOW);

   // Calculare new timer value


Jeweils eine rote LED mit passendem Vorwiderstand simulieren die Heizungen. Man sieht sehr schön am blinken der LEDs, wenn die Regelung einsetzt. Am Oszilloskop ist die Veränderung des Puls- / Pausenverhältnisses noch besser zu sehen. Hier wird keine weitere Elektronik benötigt.

Jeweils ein 10kΩ Poti sorgt für die Rückmeldung einer "Temperatur". Dabei ist das Poti mit VCC und GND verbunden, der Schleifkontakt geht zurück zum µC. Damit man einen Temperaturbereich von 0°C bis 300°C simulieren kann, ist es nötig, die verwendete Thermistorentabelle in thermistortables.h zu verändern. Ich habe mit diesen Werten gute Ergebnisse erzielt:

 #if (THERMISTORHEATER_0 == 4) || (THERMISTORHEATER_1 == 4) || (THERMISTORHEATER_2 == 4) || (THERMISTORBED == 4) //10k thermistor
const short temptable_4[][2] PROGMEM = {
  {1*OVERSAMPLENR, 300},
  {100*OVERSAMPLENR, 270},
  {200*OVERSAMPLENR, 240},
  {300*OVERSAMPLENR, 210},
  {400*OVERSAMPLENR, 180},
  {500*OVERSAMPLENR, 150},
  {600*OVERSAMPLENR, 120},
  {700*OVERSAMPLENR, 90},
  {800*OVERSAMPLENR, 60},
  {900*OVERSAMPLENR, 30},
  {1000*OVERSAMPLENR, 0}
};
#endif


Am Ende sieht das dann so aus:

Was jetzt noch fehlt, ist ein Gehäuse:

 Und so sieht es aus, wenn man etwas auf dem Fake-Drucker ausdruckt:








Zu Weihnachten muss ein Baum her!


Weihnachten ohne Baum ist kein Weihnachten. Leider gibt's im Wohnzimmer fast keinen Platz um einen Baum aufzustellen. Und so ein mickriger wie zuletzt kommt mir nicht mehr in die Bude. Die Wohnung ist auch ziemlich warm, dank unserer Nachbarn. Da halten die Nadeln eh nicht lange am Baum.

Deshalb habe ich mich schon letztes Jahr entschieden, mal was ganz anderes auszuprobieren: Einen gedruckten Baum. Der sah so aus:



Jede Ebene besteht aus einem Druckteil. Man kann auch weniger Ebenen drucken, dann wird der Baum kleiner. Die Druckdateien zu diesem Baum gibt's bei Thingiverse. Ich habe diesen Baum mit Faberdasherys Village Green gedruckt. Ich habe 3,25m Filament (3mm) benötigt. Leider passen die Teile nicht gut ineinander. Zwischen den Ebenen ist soviel Spiel, dass der Baum ziemlich wackelt. Ich habe die Teile schließlich zusammengeklebt. Das hat zumindest bis Dreikönig funktioniert.

Dieses Jahr musste natürlich ein anderer Baum her. Ich bin wieder auf Thingiverse fündig geworden. Auch dieser Baum besteht aus mehreren Einzelteilen:


Der Stamm ist wieder mit Village Green gedruckt, der Stern auf der Spitze mit Bling Bling Gold und die restlichen Teile mit Arctic White. Leider ist mir beim obersten Stück die Farbe ausgegangen. Deshalb musste Architect's Stone aushelfen.



Für dem Stamm benötigt man 2,6m, für den Stern 40cm und für die weißen Teile 14,2m Filament (3mm). Die weißen Teile habe ich auf dem Kopf stehend gedruckt. Mit den leichten Überhängen wurde mein Drucker spielkend fertig. Durch das ineinanderstecken ist der Baum von selbst stabil. Da wackelt nichts und es muss auch nichts geklebt werden. 

Fröhliche Weihnachten!