Zurück zu den Projekten
ArduinoESP32ElektronikMakerASCII Art

Ein ASCII-Art-Drucker aus einer alten Schreibmaschine

11. Februar 2025

Ein ASCII-Art-Drucker aus einer alten Schreibmaschine

Diesen Beitrag habe ich zum großteil von KI schreiben lassen. Dies ermöglicht es mir, ältere Projekte aufzuarbeiten und zu dokumentieren.

Projektbeschreibung

Im Modul Vertiefung Medieninformatik 2 habe ich eine alte digitale Schreibmaschine – eine Smith Corona XL 1875 mit einem Intel-P8052AH-Mikrocontroller – zu einem ESP32-gesteuerten ASCII-Art-Drucker umgebaut. Statt Text per Tastatur einzugeben, simuliert ein ESP32 gezielt Tastendrücke, sodass die Schreibmaschine ein Bild zeilenweise als ASCII-Art auf Papier ausgibt.

Das Ergebnis ist ein Gerät, das ein digitales Foto in ein analoges, mit neun Zeichen gedrucktes Abbild verwandelt – Zeile für Zeile, mit dem charakteristischen Klang einer mechanischen Schreibmaschine.

Ausgangsbild: ein Smiley

Das Ausgangsbild, das in ASCII-Art umgewandelt und anschließend gedruckt wurde.

Die ursprüngliche Idee: ein Chatbot auf der Schreibmaschine

Ursprünglich wollte ich etwas anderes bauen: einen KI-Chatbot, der über die Tastatur der Schreibmaschine bedient wird. Die Idee war, Tastendrücke auszulesen, sie an ein Sprachmodell zu schicken und die Antwort wieder über den Druckmechanismus auf Papier auszugeben – ein Chat komplett ohne Bildschirm.

Dafür musste ich zunächst verstehen, wie die Tastatur überhaupt funktioniert. Das Mainboard ist über ein Flachbandkabel mit der Tastatur verbunden, die intern als Matrix mit rund 56 Tasten verschaltet ist. Durch gezieltes Kurzschließen einzelner Pins und das Messen der Spannungen an den Tasten habe ich die Matrix Schritt für Schritt rekonstruiert – sieben Zeilen mit jeweils sieben Tasten, von „k l ö ä m , .“ über die Zahlenreihe bis zu Umschalt- und Rücktaste.

Das Problem zeigte sich erst, als ich anfing, die Lösung end-to-end zu denken: Um alle Tasten elektronisch zu simulieren, hätte ich die komplette Matrix – acht abgefragte Ausgänge und sieben gelesene Eingänge – nachbilden müssen. Das wären in der Praxis rund 54 Transistoren und 18 belegte ESP32-Pins gewesen, um sowohl Tastendrücke zu erkennen als auch neue auszulösen. Für ein Modul dieser Größe war das schlicht zu viel Umfang.

Vom Chatbot zum ASCII-Drucker

Statt das Projekt aufzugeben, habe ich es umgebaut: Wenn ich nicht alle Tasten ansteuern kann, reicht es vielleicht, wenige gezielt auszulösen – genug, um damit Bilder zu „malen“. Aus dem Chatbot wurde so ein ASCII-Art-Drucker, der mit einer kleinen Auswahl an Zeichen unterschiedlich „dichte“ Flächen erzeugt.

Funktionsweise

Schaltplan: ESP32 steuert über Widerstände und NPN-Transistoren Punkte der Schreibmaschinen-Tastaturmatrix an

Schaltplan der Ansteuerung: Jeder ESP32-Pin schaltet über einen 1-kΩ-Widerstand einen NPN-Transistor, der einen Tastenkontakt der Schreibmaschine simuliert.

  1. Tasten elektronisch simulieren. Sieben Pins des ESP32 sind über jeweils einen 1-kΩ-Widerstand mit der Basis eines NPN-Transistors verbunden. Legt der ESP32 einen Pin auf HIGH, schaltet der Transistor durch und verbindet die zugehörigen Punkte der Tastaturmatrix – für die Schreibmaschine sieht das genauso aus wie ein echter Tastendruck.
  2. Zeichensatz festlegen. Auf diese Weise lassen sich die Tasten W, A, N, 0 sowie Leerzeichen, Zeilenumbruch und Umschalttaste auslösen. Kombiniert mit Umschalt ergeben sich daraus die Kleinbuchstaben „w“, „n“, „a“ und ein zusätzliches Zeichen „=“ – insgesamt neun Zeichen: WNA0wna= .
  3. Bild zu ASCII konvertieren. Für die Umwandlung habe ich ein bestehendes Python-Skript von vietnh1009 (Image-to-ASCII-Generator) angepasst, das ein Bild mit OpenCV in Graustufen umwandelt, es in 6×12-Pixel-Blöcke einteilt und für jeden Block die durchschnittliche Helligkeit (0–255) berechnet. Diese Helligkeit wird auf eines der neun verfügbaren Zeichen abgebildet – von „ “ (sehr hell) bis „W“ (sehr dunkel).
  4. Drucken. Die resultierende Zeichenkette wird als Konstante in den ESP32-Code übernommen. Eine Schleife geht Zeichen für Zeichen durch den String und schaltet per switch-Anweisung den passenden Transistor – inklusive Umschalttaste für Großbuchstaben und „=“. Nach 72 Zeichen löst der ESP32 einen Zeilenumbruch aus und wartet kurz, damit der Druckkopf zurücklaufen kann.

Ergebnis: ASCII-Art des Smileys, gedruckt mit neun Zeichen

Das Ergebnis: derselbe Smiley, gedruckt mit nur neun Zeichen – W, N, A, 0, w, n, a, = und Leerzeichen.

Herausforderungen

Die größte Herausforderung war nicht die Elektronik, sondern das Verständnis der Schreibmaschine selbst. Ohne Schaltplan musste ich die Tastaturmatrix durch systematisches Kurzschließen von Pins und Messen der Spannungen (zwischen 0,5 V und 4,9 V je Taste) rekonstruieren, bevor überhaupt klar war, welche Pins für welche Tasten zuständig sind.

Zwei Tage Arbeit sind in den Chatbot-Ansatz geflossen, bevor sich zeigte, dass das Auslesen und Auslösen der gesamten Matrix den Rahmen des Moduls sprengen würde. Im Rückblick war das eine wichtige Erfahrung: Ein End-to-End-Prototyp – auch ein sehr grober – hätte diesen Engpass viel früher sichtbar gemacht, statt ihn erst nach der Detailarbeit an einem Teilproblem zu entdecken.

Bei der Umsetzung des ASCII-Druckers selbst kamen weitere praktische Fragen hinzu: Welche ESP32-Pins sind beim Boot-Vorgang reserviert und dürfen nicht für die Transistoren verwendet werden? Wie lange muss ein simulierter Tastendruck dauern, damit die Mechanik zuverlässig reagiert? Und wie viel Pause braucht der Druckkopf nach einem Zeilenumbruch, bevor das nächste Zeichen kommt? Diese Werte – etwa 50 ms pro Tastendruck und 2 Sekunden Pause nach jedem Zeilenumbruch – ließen sich nur experimentell ermitteln.

Teileliste

  • 1× Smith Corona XL 1875 (digitale Schreibmaschine, Intel-P8052AH-Mainboard)
  • 1× ESP32 (ESP-WROOM-32)
  • 7× NPN-Transistoren
  • 7× 1-kΩ-Widerstände
  • Python mit OpenCV zur Bild-zu-ASCII-Konvertierung

Fazit

Aus der Idee eines Schreibmaschinen-Chatbots ist ein deutlich kleineres, aber funktionierendes Projekt geworden: ein Drucker, der mit nur neun Zeichen Bilder auf Papier bringt. Der Weg dahin – Reverse Engineering einer unbekannten Tastaturmatrix, der Umgang mit NPN-Transistoren als einfache Schalter und das bewusste Eingrenzen des Projektumfangs – war am Ende lehrreicher als das ursprünglich geplante Ergebnis.

Mehr zu diesem Moment des Umplanens und was ich daraus für andere Projekte mitgenommen habe, steht in meinen Learnings aus dem Studium.

Ein Video mit Code-Walkthrough und der Schreibmaschine in Aktion gibt es hier: youtube.com/watch?v=Alc8yV_B-lY