SONY DSC

Mach flott den Schrott: Toilettenpapier Drucker

Heise trägt in diesem Jahr zum zweiten mal den c’t Wettbewerb namens “Mach flott den Schrott” aus. Endlich gab es mal einen Grund ein schon länger in meinem Kopf herumschwirrendes Projekt in die Tat umzusetzen.

Herausgekommen ist dabei der Toilettenpapier Drucker. Der Drucker hat eine Netzwerkanbindung und kann somit zum Beispiel RSS Feeds, Tweets, Facebook Nachrichten drucken. Der Kreativität was druckbare Text Quellen betrifft sind keine Grenzen gesetzt. Im folgenden Text versuche ich den Bau des Druckers so gut es geht zu dokumentieren. Fragen und Anregungen können über Kommentare gestellt bzw. geschrieben werden.

Vorüberlegungen und Materialbeschaffung

Ganz klar war auf jeden Fall das ich zwei bis drei Stepper benötigte. Diese habe ich dann auch erst einmal aus mehreren Druckern, die ich auf dem Sperrmüll gefunden habe, ausgebaut. Da auch in CD-ROM Laufwerken etwas kleinere Stepper stecken habe ich auch gleich mehrere alte CD-ROM Laufwerke zerlegt. Wie sich später herausstellen sollte konnte ich sogar den größten Teil der Bauteile aus alten CD-ROM Laufwerken entnehmen. Auch Zahnräder, Zahnriemen und alles andere was einigermaßen brauchbar schien wurde in einer Kiste gesammelt. Für den Aufbau dachte ich zunächst über eine Art CNC Prinzip mit 3 Achsen nach. Die Vorwärts- und Rückwärtsbewegung der Rolle sollte dabei eine Achse sein. Die Rechts- und Linksbewegung des Druckkopfs die zweite Achse und das Heben und Senken des Stiftes eine weitere Achse. Diese erste Idee sollte sich später als (in der kurzen Zeit) nur sehr schwer bis gar nicht realisierbar herausstellen. Während der Bastelei kam mir dann die Idee zu der aktuell umgesetzten Variante, in welcher es nur einen Vortrieb gibt und die Texte Zeile für Zeile gedruckt werden. Außerdem dachte ich gleich an ein Modellbauservo zum Senken und Heben des Stifts. Da ich zufällig herausfand das ein altes Abflussrohr welches noch herumlag, genau den passenden Durchmesser hatte brauchte ich ich mir über die Rollenhalterung auch keine großen Gedanken mehr zu machen.
Was noch fehlte war ein bisschen Holz, Schrauben, Muttern, Scharniere, Winkel und anderes Kleinzeug. Das meiste davon konnte ich im Baumarkt finden. Dort lagen in der Holzverschnitt Kiste glücklicherweise auch geeignete Teile für den Rahmen. Für die Lagerung der Wellen hätte ich beinahe neue Kugellager gekauft. Auch hier fand ich mit ein paar Inline Skate Rollen, die ich noch vom Müll retten konnte, eine kostengünstige Lösung. Zu guter letzt musste das ganze auch noch gesteuert werden. Um auch hier Zeit zu sparen war meine Lösung für dieses Problem klar: ein Arduino samt Motor Treibern sollte das ganze steuern. Damit alles perfekt sein sollte, musste der Drucker natürlich über einen Netzwerkanschluss verfügen. Dazu dachte ich an ein Ethernet Shield von Adafruit.

Hier noch mal die gesamte Liste der verwendeten Teile und Materialien:

  • Schublade mit Rahmen/Aufhängung aus CD-ROM Laufwerk
  • Gummilagerungen von Mechanik aus CD-ROM Laufwerken
  • Lesekopf Mechanik aus CD-ROM Laufwerk
  • 2 x Stepper aus 2 Druckern
  • Endschalter und LED aus CD-ROM Laufwerk
  • Zahnräder aus CD-ROM Laufwerken
  • Verkabelung aus PC Gehäusen (Flachbandkabel/Mainboardstecker)
  • Gewindestange aus Baumarkt
  • Kleinteile aus Baumarkt wie Schrauben, Scharniere, Winkel aus Baumarkt
  • Holzreste aus Baumarkt
  • 5x Kugellager von Inline Skates
  • PVC Abflussrohr vom Sperrmüll
  • 2x Steckernetzteil 12V und 5V
  • 1x Drucksensor
  • 1x Modellbauservo
  • 1x Arduino mit Ethernetshield
  • 2x Twig I2C Motortreiber

Aufbau des Rahmens

Für den Rahmen der die Mechanik des Druckers tragen solle, habe ich die Holzreste aus dem Baumarkt zurecht gesägt. Zunächst aus einem Brett zwei Seitenteile auf die Maße 170 mm x 170 mm. Dann die hintere Platte aus Sperrholz mit den Maßen 180 mm x 170 mm. Die Teile wurden auf der linken Seite über Scharniere verbunden und auf der rechten Seite über 2 Winkel. Die Scharniere ermöglichen später ein Aufklappen der linken Seite zum einfachen und schnellen wechseln der Toilettenpapier Rollen. Die linke Abbildung zeigt ein Seitenteil im Detail. Mit einer Lochfräse wurden in die Seitenteile Löcher für die Kugellager gebohrt. Die Löcher wurden nicht komplett durchgebohrt, sondern nur soweit, das die Kugellager im Holz versenkt werden konnten. Die mittlere Abbildung zeigt die vorbereitete Rollenhalterung. Hierzu wurde das PVC Rohr an den Enden mit Holzscheiben verschlossen. Diese habe ich ebenfalls aus einem Brett mittels einer Lochsäge ausgesägt und im Anschluss mit Bohrungen für den Gewindestab versehen. Das ganze wurde dann mit Sekundenkleber verklebt und der Gewindestab mit Muttern am Rohr befestigt. Die rechte Abbildung zeigt den fertigen Aufbau. Da der Gewindestab nur 6 mm Durchmesser hat, die Kugellager jedoch 8 mm Innendurchmesser haben, wurde hier mit Isolierband eine Passung gebastelt.

Bau der Druckkopf Führung

Zuerst wollte ich als Führung für den Druckkopf eine fertige Führung aus einem alten Drucker verwenden. Da sich dies allerdings als zu kompliziert erwies bzw. die Drucker die mir zur Verfügung standen weniger geeignet waren um passende Teile auszubauen, musste eine andere Idee her. Diese bestand darin die Lesekopf Mechanik eines CD-ROM Laufwerks zu verwenden. Dieses Bauteil wäre perfekt geeignet gewesen, wenn der Verfahrweg nicht zu kurz wäre. Mit einem Verfahrweg von gerade mal 50 mm hätte ich nicht einmal die Hälfte einer Toilettenpapier Rolle beschreiben können. Schade. Allerdings behielt ich mir die Eigenschaften dieses Bauteils im Hinterkopf, da ich es wie sich später noch herausstellen sollte noch gebrauchen konnte. Die Lösung des Problems zum Bau einer geeigneten Führung lag die Ganze Zeit vor mir, musste allerdings zuerst noch zurecht gesägt werden. Die rechte Abbildung zeigt die Schublade eines CD-ROM Laufwerks samt Rahmen, den ich auf eine breite von ca. 50 mm abgesägt habe. Die rechte Abbildung zeigt den kompletten Aufbau des Rahmens mit der eingebauten Schublade. Auf dem Bild ist auch schon das Servo zu sehen, welches später den Stift halten sollte. Da ich den Stift möglichst gerade heben und senken wollte, war die oben erwähnte CD-ROM Laufwerksmechanik wie dafür geschaffen. Nach einigen Stunden der Fummelei und Frustration habe ich es dann geschafft aus 2 CD-ROM Laufwerksmechaniken ein Teil zusammen zu kleben. Das folgende Video zeigt den ersten Test mit diesem Teil.

Druckkopf Bewegung

Um nun das ganze zu bewegen habe ich, wie die linke Abbildung zeigt, auf dem Rahmenstück des CD-ROM Laufwerks mit Sekundenkleber eine Mutter angeklebt. Anschließend ein Stück des Gewindestabs auf eine Länge von ca. 210 mm abgesägt. Am Rahmen des Druckers wurde wieder mittels Lochfräse eine Aussparung für ein weiteres Kugellager gebohrt. Das Kugellager wurde in diese Aussparung geklebt. Diesmal allerdings mit Heißkleber, damit ich es besser in der Höhe einpassen konnte. Der Gewindestab wurde an die Mutter geschraubt und durch das Kugellager geführt. Auch hier wurde wieder mit Isolierband eine Passung gebastelt. Damit der Gewindestab sich nicht herausdrehen kann wurden noch zwei Muttern, eine vor und eine hinter dem Kugellager, angeschraubt und schließlich mit Sekundenkleber fixiert. Im Anschluss wurde nur noch den Motor angeschraubt. Um den Gewindestab mit der Welle des Motors zu verbinden wurde ein passendes Stück Schlauch als Kupplung verwendet.

Bau des Papiervorschubs

Als Vorschub für das Papier kam ein weiteres Stück des Gewindestabs zum Einsatz, welches etwas weiter vor der Rollenhalterung am Rahmen angebracht wurde. Auch hier habe ich wieder zwei Kugellager nach der oben beschriebenen Art eingebaut. Dahinter wurde eine Holzleiste befestig, über die das Papier dann gezogen wird. Da der Gewindestab das Papier allerdings nicht ganz so gut greifen wollte wie ich es mit vorstellte, war auch hier wieder guter Rat teuer. Zuerst versuchte ich ein Stück Schlauch über den Gewindestab zu stülpen, dieser war leider auch noch zu Glatt. Aber auch für dieses Problem fand ich die Lösung in einem der ausgeschlachteten CD-ROM Laufwerke. Die oben erwähnte Lesekopf Mechanik ist mit Gummihülsen gelagert, und schützt den Lesekopf somit vor Erschütterungen. Zufällig passten diese Gummilagerungen exakt auf den Gewindestab. Ein erster Test erwies sich als sehr vielversprechend. Nach ein bisschen Feintuning war ich mit dem Ergebnis zufrieden. Um das ganze noch etwas zu verbessern schliff ich die Holzleiste mehrfach mit Schleifpapier verschiedenster Körnung, bis sie schließlich eine ganz glatte Oberfläche hatte.

Welches Druckverfahren ?

Da in meinem Kopf immer noch die Idee mit der Vor- und Rückbewegung des Toilettenpapiers für eine Art CNC schwebte, habe ich beide Wellen mit je einem Stepper versehen. Zum testen habe ich dann das Adafruit Motor Shield für den Arduino verwendet. Nach mehreren Stunden rumspielen mit verschiedenen Motoreinstellungen und Übersetzungen gab ich dann letztendlich auf. Da die Motoren durch unterschiedliche Übersetzungen mit der Welle verbunden waren und dazu noch verschiedene Leistung hatten, wurde das ganze zu ungenau. Außerdem bereiteten mir diesbezüglich die elastischen Eigenschaften von Toilettenpapier große Probleme. Eine neue Idee musste also her. Bei Youtube habe ich vor einiger Zeit ein Video eines Lego Druckers gesehen. Was mich allerdings an diesem Video nicht sehr überzeugte war, das der Drucker Pixel für Pixel Grafiken ausdruckte. Ich wollte meinen Drucker allerdings mit ASCII kompatibelem Text füttern.Trotzdem entschied ich mich für ein ähnliches Druckverfahren. Dies brachte den Vorteil das ich nur einen, statt zwei Schrittmotoren für den Vorschub und somit auch einen Motor Treiber weniger brauchte. Die Abbildung zeigt die ersten Druck Versuche.

Steuerung

Als Steuerung kam dann wie oben bereits erwähnt ein Arduino zum Einsatz. Um das ganze Netzwerkfähig zu machen außerdem noch das oben erwähnte Ehternet Shield. Anfangs habe ich die Schrittmotoren noch mit dem Adafuit Motor Shield betrieben. Dieses Shield belegt allerdings sehr viele Pinne des Arduino’s. Das hätte den Anschluss eines Netzwerk Shields unnötig verkompliziert. Da ich sowieso schon längere Zeit mit I2C fähigen Motor Treibern geliebäugelt hatte, wurden auch gleich zwei geeignete Treiber bei Seeed bestellt. Die Lieferzeit nutzte ich schon einmal um mich mit der Programmierung der Software auseinander zu setzen. Nachdem die Motor Treiber eingetroffen waren habe ich erst einmal eine Library für den Arduino zum Betreiben der Twig I2C Motor Treiber geschrieben. Da ja nun genügend Ein- und Ausgänge am Arduino frei waren wurden kurzerhand noch ein Taster aus einem CD-ROM Laufwerk als Endschalter für die Kalibrierung eingebaut. Ebenfalls ein wurdeDrucksensor ( SEN-09673 ) zur Kalibrierung des Stiftes verbaut. Beim Einschalten des Gerätes wird der Druckkopf also zunächst in Ausgangsposition gefahren und die Andruckstärke des Stifts eingestellt. Die gesamte Steuerelektronik habe ich auf dem rechten Seitenteil verschraubt und verkabelt. Zum Verkabeln habe ich alte Flachband Kabel für Laufwerke und Mainboard Stecker aus einem alten PC- Gehäuse verwendet. Nach ein paar Stunden Abisolieren, Verkabeln und Löten war der Aufbau des Druckers dann so gut wie fertig für die ersten Tests. Was noch fehlte war die Fertigstellung der Software.

Programmierung

Ich werde hier nicht auf jedes Detail des Programm Codes eingehen. Nur einige wichtige Abschnitte werde ich hier als Listing zeigen. Wer sich für die Details interessiert kann sich den Code herunterladen, sich die Arduino Bibliotheken zu Netzwerk , Schrittmotoren, Servos anschauen, oder in meinen Arduino Tutorials stöbern.

Eine der interessantesten Stellen im Code (Listing 1) ist das Schreiben einer Zeile. Dazu habe ich ein byte Array definiert, welches den Zeichensatz enthält. Da ich nach wie vor ein großer Fan des Commodore 64 bin, musste natürlich auch der Commodore Schriftsatz herhalten.

Der zu druckende Text wird über einen Socket entgegengenommen und in einem char Array gespeichert. Anschließend wird die Druck Funktion aufgerufen. Die Druck Funktion besteht im wesentlichen aus dem Code in Listing 1. Da ein Zeichen genau durch 8×8 Pixel dargestellt wird, laufen die Schleifen Variablen bis zu diesen Werten. Es müssen also genau 8 Zeilen gedruckt werden um eine Zeile Text darzustellen. Um den Entsprechenden Buchstaben im byte Array zu finden wird um 8 Stellen im Array geshiftet. Die Stiftposition wird dabei gespeichert und im nächsten Schritt verglichen. Hat die Position sich nicht verändert, so bleibt der Stift in seiner vorherigen Position, ansonsten wird die Stift Posistion verändert. Um den Druckvorgang zu beschleunigen wird durch eine weitere Schleife der ganze Durchlauf auch rückwärts ausgeführt.

Listing 1:

for(zl=0;zl<8;zl++){
for (bs=0;bs<tlen;bs++){
for (bt=0;bt<8;bt++)
if (!(zl&1)){
h_f = font[ (int) txt[bs] *8 + (int)zl];
{
pen=((h_f<<bt) & 128);
if(pen != old_pen){
if(pen){
do_pen(DOWN);
} else {
do_pen(UP);
}
old_pen = pen;
}
stepper.step(TOP_STEPPER,letter_width,FORWARD);
}
} else {
h_f=font[(int)txt[tlen-bs-1]*8+(int)zl];
for (bt=0;bt<8;bt++);
pen=((h_f>>bt) & 1);
if(pen != old_pen){
if(pen){
do_pen(DOWN);
} else {
do_pen(UP);
}
old_pen = pen;
}
stepper.step(TOP_STEPPER,letter_width,BACKWARD);
}
}
}//for bs
do_pen(UP);
pen=false;
old_pen=false;
stepper.step(FRONT_STEPPER,line_height,FORWARD);
}//for zl
stepper.step(FRONT_STEPPER,line_break, FORWARD);

Zur Übermittlung der zu druckenden Zeile habe ich ein kleines Script (Listing 2) in Python geschrieben. Dieses öffnet einen Socket zum Drucker und schiebt den zu druckenden Text an den Drucker. Im Anschluss wird darauf gewartet das der Drucker eine Bestätigung nach vollendetem Druckvorgang sendet. An dieser Stelle ist das ganze Ausbaufähig. Man könnte beispielsweise ein Script schreiben welches Tweets oder RSS Feeds usw. an den Drucker sendet. Dieses könnte dann beispielsweise über einen Cron Job jeden Morgen ausgeführt werden. Somit wäre man jeden Morgen auf dem stillen Örtchen über das Weltgeschehen informiert. Ich überlege zur Zeit an einer Facebook App die es ermöglicht Grüße, Witze oder Kommentare über den Drucker an mich zu senden.

Listing 2:

import socket
import sys
input_text = sys.argv[1]
input_text += '\n'
HOST = '192.168.0.30'
PORT = 80
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
s.send(input_text)
data = s.recv(1024)
if data == 'OK':
print 'DONE'
s.close()

Einige Details am Ende

Auf den folgenden Bildern ist das Gerät noch einmal komplett zu sehen ohne das Toilettenpapier eingespannt ist.
Der blaue Steifen an der Papierführung ist übrigens Moosgummi. Durch das Moosgummi wird eine leichte Federung erzielt. Somit reißt das Papier nicht so schnell und es schont zusätzlich den Stift. Damit das Papier leichter über die Führung gleitet habe ich dort noch zwei Aluminium Rundstäbe aus dem Baumarkt angebracht.

Zur Stromversorgung des Druckers kommen zwei Steckernetzteile vom Sperrmüll zum Einsatz. Eins zur Spannungsversorgung der Motortreiber (12 V) und eins zur Versorgung des Arduinos (5 V). Aber auch hier ist eine andere Lösung bereits in Planung. Schöner wäre es den Drucker über nur ein Netzteil mit Strom zu versorgen.

Durch die Flügelmuttern die ich am linken Seitenteil aufgeschraubt habe lässt sich die Seite sehr schnell öffnen und wegklappen, was ein schnelles Einspannen einer neuen Toilettenpapier Rolle ermöglicht.

Mit einem angeschlossenem WLAN Access Point könnte das ganze dann auch noch Autonom betrieben werden. Durch die kompakte Bauweise kann der Drucker leicht im Bad an der Wand angebracht werden. Alles in einem ist es also mit Schrott möglich auf einfachste Weise Toilettenpapier zu bedrucken…

Einige witzige Links die ich bei meiner Recherche zu Toilettenpapier gefunden habe:

 

48 Gedanken zu „Mach flott den Schrott: Toilettenpapier Drucker“

  1. moin!

    ich habe großes interesse daran den drucker nachzubauen.
    ich habe überlegt, ob es möglich ist – und das ist es garantiert – einen aufroller für die bedruckten rollen zu bauen. dann könnte man ebooks auf klopapier drucken, oder bash.org zitate bereits fertig bedruckt herstellen.

    geniale idee auf jeden fall – mal sehen wie weit ich komme mit nachbauen xD

    1. Hi,
      es ist sicher einfach den Drucker so zu bauen, dass man das bedruckte Papier wieder aufrollen kann. Du müsstest dazu einfach den Vorschub den ich gebaut habe weglassen und etwas weiter vorne eine weiteres PVC Rohr verbauen. Dieses dann via Schrittmotor antreiben. Einen Vorschub hast du ja somit quasi automatisch. Allerdings müsstest du den Code noch anpassen, da es ja bei deiner Idee besser wäre wenn die Texte von hinten (ende der Rolle) nach vorne gedruckt würden. Falls du es (nach)baust, kannst du ja mal ein kurzes Feedback geben. Würde mich sehr interessieren. Auch zum beantworten von weiteren Fragen stehe ich natürlich gerne zur Verfügung.
      gruss Mario

  2. Servus Mario

    Toller Soundtrack bei der Demo des Druckens! Wie heisst diese Musikanten-Gruppe?

    Der Drucker ist natürlich ebenfalls ganz schön schön.

  3. Hi Mario, I’m sure this is the least of your magical creativity and you’re capable to do so much more that you can even begin to imagine:) I’m from Armenia,and I’ve a question, If I succeed in rebuilding your equipment can I use it for business? Thanks in advance!

  4. Wie wahnsinnig geil ist das den?
    Das wird definitiv demnächst in die tat umgesetzt.
    Cool wäre noch die Software so zu schreiben, dass das Gerät 3 kleine Motoren ansteuert die jeweils einen Stift heben/senken um so 3 Farbig drucken zu können.

    Sehr, sehr hice das Ganze =)

    1. Danke. An dem Drucker so wie er hier beschrieben wird werde ich wohl nicht mehr viel verändern. Ich experimentiere aber bereits mit Tintenpatronen und werde demnächst ein neues Gerät bauen welches mit echten Tintenpatronen statt mit dem Stift druckt.

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Kommentare werden moderiert. Es kann etwas dauern, bis dein Kommentar angezeigt wird.