Der Wolverine Scanner (auch als Reflecta, Somikon, Winait o.ä. vertrieben) für Super 8 und Normal 8 Film füllt eine Marktlücke, denn er ist bezahlbar. Leider lässt seine Qualität aber auch zu wünschen übrig – vor allem ist zu kritisieren, dass er Filme beim Scannen geradezu misshandelt.
Nachdem ich ein solches Gerät erworben habe (die Pro Version, die auch 120m Spulen fasst), ließen mir die Unzulänglichkeiten keine Ruhe, und ich habe mich an ein paar Verbesserungen gemacht, die ich hier vorstellen möchte. Nachahmung ist erwünscht und empfohlen 🙂
Hauptproblem der mechanischen Unzulänglichkeiten ist, dass der Film an vielen Stellen potenziell stark verkratzt wird: So hat das Gerät von Haus aus fünf „Umlenkrollen“, die gar keine Rollen, sondern starre Bolzen sind. Auch wird der Film auf der Filmbühne viel zu stark von Kufen angedrückt. Vermuteter Grund für diese Konstruktion ist vermutlich, dass die Aufwickelspule des Scanners viel zu viel Zug ausübt, dazu unten mehr.
1. Modifikation: Filmführung
Die starren Umlenkbolzen zerkratzen den Film zuverlässig und beidseitig, zumal der Film unter extrem starkem Zug geführt wird. ich habe alle diese Bolzen entfernt und durch drei gelagerte Umlenkrollen ersetzt, die den Film nur an den Kanten berühren und zudem exakt waagerecht durch die Filmbahn führen, somit sind auch die Kanten der Filmbahn nun keine Quelle von Laufstreifen mehr.
Die Zahnrolle ist ebenfalls nachgerüstet (und kugelgelagert) – sie dient dazu zu erkennen, ob der Film transportiert wird. Dazu unten mehr.
2. Modifikation: Andruck
Eine weitere Modifikation ist weniger sichtbar: Der Anpressdruck der unsäglichen Filmkufen wurde massiv reduziert. Der Film wird nämlich nicht nicht mit einer Metallplatte oder Kunststoffplatte angedrückt, nein, es sind vier scharfkantige Metallkufen und zwei Kunststoffkufen:
Diese Kufen drücken auf die Trägerseite, und zwar nicht am Filmrand, sondern mitten im sichtbaren Bildbereich. Auf Höhe der Kamera sind es zusätzlich zwei Kunststoffkufen. Tja, und der Andruck scheint doch etwas hoch — mein Kontakter misst 250g, die benötigt sind, um den Film durch die geschlossene Filmbahn zu ziehen! Allerdings wird der FIlm gar nicht gezogen, sondern geschoben — vom einzahnigen, scharfkantigen Greifer, der irgendwo bei +5 oder so ansetzt. Es liegen also mindestens 250g auf der Innenkante des kleinen Perfoloches, bevor der Film in Bewegung kommt.
Die Kufenkanten wurden von mir poliert und der Anpressdruck massiv reduziert. jetzt werden nur 30g Kraft am Perforationsloch benötigt, um den Film zu transportieren.
3. Modifikation: Aufwickelzug
Ich habe mich natürlich gefragt, warum der Druck so dermaßen hoch eingestellt ist. Grund ist wohl, dass der Aufwickelmotor so kräftig zieht, dass anders kein guter Bildstand gegeben war. Er hat zwar eine primitive Rutschkupplung, nur ist die eben viel zu fest und natürlich nicht einstellbar. Als der enorme Anpressdruck noch immer nicht reichte, haben die Winait-Konstrukteure wohl noch die fünf Umlenkbolzen angeschraubt. Und da die Friktion dieser vier Bolzen offenbar immer noch nicht genug gebremst hat, wurden die unteren noch mit Schrumpfschlauch überzogen. (Leider reicht auch diese Friktion noch nicht: Ein gängiger Tipp unter Wolverine-Nutzern ist es, die Aufwickelspule beim Scannen zu blockieren oder den Film gleich einfach in einen Karton laufen zu lassen, damit der Bildstand akzeptabel ist…)
Das Problem mit dem zu starken Filmzug ließ sich sehr einfach und elegant lösen: Mit einem Widerstand und einem Spindelpoti in Reihe lässt sich der Motorstrom nun stufenlos regelbar sauber begrenzen.
4. Modifikation: Automatische Abschaltung
Ein weiteres Problem des Wolverine-Scanners ist, dass er kaum unbeaufsichtigt zu betreiben ist. Nicht nur bleibt er beim kleinsten Perfoschaden gerne hängen und scannt Stundenlang das gleiche Einzelbild, auch bemerkt er das Filmende nicht und tackert ggf. stundenlang weiter vor sich hin.
Um dieses Defizit zu überbrücken, habe ich ich die Zahnrolle eingebaut, auf deren Rückseite eine Sektorenscheibe montiert ist:
Wird der Film transportiert, erzeugt diese Scheibe laufend Impulse, die optisch abgenommen und an einen Arduino geschickt werden:
Der Arduino ist in der Ecke montiert und behält den Flmtransport „im Auge“. Wird ein beendeter Filmtransport detektiert, schaltet der Arduino den Scanner über simulierte Tastendrücke sauber ab sodass die Filmdatei noch sauber geschlossen wird.
Zu guterletzt steuert der Arduino noch eine dreifarbige LED an, sodass man den Gerätezustand jederzeit erkennen kann (Rot: Scanner abgeschaltet, Blau: Scanner eingeschaltet aber noch nicht am Scannen, Grün: Scanner ist am Scannen.
Den Code für den Arduino gibt es ganz unten.
Ergebnisse
So sehen die Scan-Ergebnisse ohne jegliche Bearbeitung aus — zumindest die Kratzer sind weg, und der Bildstand ist wesentlich besser als zuvor, wenn auch immer noch nicht so richtig gut:
Der schlechte Bildstand lässt sich aber mit einem Klick in Davinci Resolve (free) zuverlässig beheben, das ganze sieht danach so aus:
Und zuguterletzt noch einmal das modifizierte Gerät in Aktion…
Der Code für den Arduino:
/*
Turn off the crappy Wolverine Scanner when it stops moving
*/
#define impDetectorPin 3
#define buzzerPin 5
#define relaisPin 12
#define blueLedPin 10
#define greenLedPin 11
#define redLedPin 13
#define SCANNER_RUNNING 1
#define SCANNER_GETTING_LOADED 2
#define SCAN_FINISHED 3
uint8_t myState;
uint8_t prevState;
unsigned long millisNow = 0;
unsigned long lastMillis = 0;
volatile unsigned long impCounter = 0;
unsigned long lastFrameCount = 0;
bool scannerEverRan = false; // Don't beep right away
float lastFreq;
void setup() {
pinMode(impDetectorPin, INPUT);
pinMode(buzzerPin, OUTPUT);
pinMode(relaisPin, OUTPUT);
pinMode(redLedPin, OUTPUT);
pinMode(blueLedPin, OUTPUT);
pinMode(greenLedPin, OUTPUT);
Serial.begin(115200);
tone(buzzerPin, 6000, 200); // Hello!
delay(250);
digitalWrite(relaisPin, LOW);
redLight();
attachInterrupt(digitalPinToInterrupt(impDetectorPin), countISR, CHANGE);
}
void loop() {
measureScannerFreq(10); // measure speed over 10 seconds
if ((lastFreq <= 1.7) || (lastFreq >= 2.3)) {
if (lastFreq == 0.0) {
if (scannerEverRan) {
myState = SCAN_FINISHED;
}
} else {
myState = SCANNER_GETTING_LOADED;
}
} else {
myState = SCANNER_RUNNING;
scannerEverRan = true;
}
if (prevState != myState) {
switch (myState) {
case SCANNER_RUNNING:
greenLight();
Serial.println("Scan läuft.");
break;
case SCANNER_GETTING_LOADED:
blueLight();
Serial.println("Scanner wird geladen.");
break;
case SCAN_FINISHED:
Serial.println("Scan ist fertig.");
redLight();
powerOff();
scannerEverRan = false;
myState = 0;
break;
default:
break;
}
prevState = myState;
}
}
void measureScannerFreq(int checkIntervalSec) {
millisNow = millis();
if (((millisNow % (checkIntervalSec * 1000)) == 0) && (lastMillis != millisNow)) {
lastFreq = float((impCounter - lastFrameCount)) / checkIntervalSec;
lastFrameCount = impCounter;
lastMillis = millisNow;
Serial.print(lastFreq);
Serial.println(" B/s");
Serial.println("");
}
}
void redLight() {
digitalWrite(redLedPin, HIGH);
digitalWrite(greenLedPin, LOW);
digitalWrite(blueLedPin, LOW);
}
void greenLight() {
digitalWrite(redLedPin, LOW);
digitalWrite(greenLedPin, HIGH);
digitalWrite(blueLedPin, LOW);
}
void blueLight() {
digitalWrite(redLedPin, LOW);
digitalWrite(greenLedPin, LOW);
digitalWrite(blueLedPin, HIGH);
}
void yellowLight() {
digitalWrite(redLedPin, HIGH);
digitalWrite(greenLedPin, HIGH);
digitalWrite(blueLedPin, LOW);
}
void countISR() {
impCounter++;
}
void powerOff() {
digitalWrite(relaisPin, HIGH);
delay(3000);
digitalWrite(relaisPin, LOW);
tone(buzzerPin, 6000, 1000); // Hello!
delay(2000);
tone(buzzerPin, 6000, 1000); // Hello!
delay(2000);
tone(buzzerPin, 6000, 1000); // Hello!
delay(2000);
tone(buzzerPin, 6000, 1000); // Hello!
delay(2000);
tone(buzzerPin, 6000, 1000); // Hello!
delay(2000);
tone(buzzerPin, 6000, 1000); // Hello!
delay(2000);
tone(buzzerPin, 6000, 1000); // Hello!
delay(2000);
tone(buzzerPin, 6000, 1000); // Hello!
delay(2000);
tone(buzzerPin, 6000, 1000); // Hello!
delay(2000);
tone(buzzerPin, 6000, 1000); // Hello!
delay(2000);
}
Related Posts