Real-Time and Embedded Systems

Scanner

Scanner 1

Ressourcen

 

Warnung: Ich habe mittlerweile eine Menge Mails von Kindern bekommen, die den Scanner nachgebaut haben und ihn unter Windows mit der Lego Software zum Laufen bringen wollen. Deswegen eine Warnung an alle, die das selbe vorhaben: Um das gescannte Bild auf einen Computer übertragen zu können, braucht man brickOS als Programmiersprache. Ohne geht es nicht, insbesondere reicht die Programmiersprache von Lego dafür nicht aus! Auch das Programm für den PC ist schwierig zum Laufen zu bringen.

Der Scanner ist ein schwieriges Projekt und es ist bisher noch keinem Nachbauer gelungen, ihn unter Windows zum Laufen zu bringen.

Beschreibung

Scanner 2Der Scanner kann eine Vorlage im Format A4 mit einer Auflösung von etwa 20 DPI (hängt u.a. von der Steuersoftware ab) abtasten. Er besteht im Wesentlichen aus einem Papiereinzug und einem Schlitten, der den Lichtsensor quer über das Papier bewegen kann, so daß dieser die Vorlage von unten abtastet.

Der Papiereinzug wird vom Motor C angebtrieben. Über die Schnecke und das große Zahnrad kann ein Blatt langsam eingezogen und in kleinen Schritten zeilenweise vorgeschoben werden. Die Gummiringe auf den Rädchen stellen die nötige Reibung. Wenn man den Einzug manuell bedienen möchte, kann man einfach die Achse mit der Schnecke herausziehen und am großen Zahnrad drehen.

Den wichtigsten Teil bildet aber der Schlitten mit dem Lichtsensor. Über Motor A kann dieser vom linken zum rechten Papierrand bewegt werden (was etwa 2 Sekunden dauert). Taster an beiden Enden erkennen, wann der Schlitten am Rand angekommen ist.

Der Scanvorgang

 Der Scanvorgang beginnt damit, daß der Papiereinzug einige Sekunden läuft, um das Blatt Papier so weit einzuziehen, bis es über dem Lichtsensor liegt. Dann wird der Schlitten nach links gefahren und anschließend nach rechts bewegt, wobei ständig Werte vom Lichtsensor gesampled werden. Am rechten Rand angekommen, streckt oder staucht die Software die gemessenen Werte so, daß es insgesamt 128 Samples werden. Der Block wird an den PC gesendet, das Papier ein kleines Stück weiter eingezogen und der Schlitten nach links bewegt, so daß die nächste Zeile eingescannt werden kann.

Es ist zwar auch möglich, während der Zurückbewegung zu scannen, dann ist die Beschleunigungsphase des Schlittens aber abwechselnd am Zeilenanfang und am Zeilenende, und die einzelnen Bildzeilen passen nicht mehr harmonisch zusammen. Schneller wäre es aber auf jeden Fall, unidirektional dauert der Scan einer A4-Seite rund 20 Minuten.

Sind alle Daten an den PC übertragen worden, sendet der Scanner ein Endesignal zum PC, wirft das Blatt aus und das Programm beendet sich. Die weitere Verarbeitung des Bildes findet auf dem PC statt, um Speicher im RCX zu sparen (das Bild einer kompletten A4-Seite paßt zusammen mit legOS und der Steuersoftware nicht mehr in den Speicher).

Aufbereitung des Bildes

Der PC bekommt vom Scanner die Bilddaten in einem Rohformat. Jede Zeile besteht aus 128 Sensorwerten, die zwischen 0 und 100, diesen sind aber noch keine Graustufen zugeordnet. Darum geht es in diesem Schritt.

Scanner 3

Rohdaten

Im ersten Schritt wird dem Sensorwert 0 die Farbe schwarz und dem höchsten verwendeten Wert die Farbe weiß zugeordnet. Alle Werte dazwischen werden linear interpoliert. Das Ergebnis ist ein dunkles und kontrastarmes Bild.
Scanner 4

Schwarzabgleich

Zunächst werden die dunkelsten Graustufen, die zusammen maximal 5% der Pixel ausmachen, ermittelt. Diese werden in schwarz umgefärbt und die Farbpalette unten abgeschnitten. Das Bild gewinnt etwas an Kontrast, und viele Ausreißerwerte vom Lichtsensor sind entfernt.
Scanner 5

Weißabgleich

Danach werden die hellsten Graustufen ermittelt, die zusammen maximal 5% der Pixel ausmachen, in weiß umgefärbt, und die Palette oben abgeschnitten. Jetzt ist der Kontrast wesentlich besser und die Meßfehler sind weitgehend beseitigt.
Scanner 6

Gammakorrektur

Das Bild enthält noch den Fehler, daß die Linien zu dick wirken. Ursache dafür daß die Meßwerte vom Lichtsensor nicht dem menschlichen Helligkeitsempfinden entsprechen. Beide Skalen sind nicht linear zueinander, eine Gammakorrektur beseitigt diesen Effekt.

 

Beispielbilder

Die folgenden Bilder wurden vom Scanner in genau dieser Auflösung und Qualität erzeugt.

Scanner 7     Scanner 8     Scanner 9     Scanner 10

Programmcode

Die Software besteht aus zwei Programmen, eines für den RCX und eines für den PC.

 

Die Programme werden normal compiliert und auf dem RCX bzw. PC gestartet. Sobald das Programm auf dem RCX startet, fragt es im Display die Anzahl der zu scannenden Bildzeilen ab. Sie kann mit der PRGM-Taste in 10er-Schritten erhöht werden. Vier Sekunden nach der letzten Eingabe beginnt der Scanner mit dem Abtasten und Senden der Bilddaten.