QScanDMX
Umbau eines Walzenscanner-Effekts auf DMX
Vor einiger Zeit bekam ich von einem Kumpel einen alten Walzenscanner. Dieser hatte zuerst wohl nur eine Sound2Light Steuerung und wurde schon mal mit einer DMX Switchpackplatine etwas umgebaut. Mit ein paar Relais konnte man die Lampe schalten oder Motoren anhalten (Originalsteuerung wurde unterbrochen). Zugegebenermaßen hat mir diese Lösung nicht wirklich gut gefallen und so musste eine neue Steuerung entworfen werden.
Die Hardware besteht aus zwei Gleichstrommotoren (Rotation Walze, Rotation Spiegelrad) sowie einem Schrittmotor (Kombiniertes Farb- / Goborad). Der Schrittmotor besitzt einen mechanischen Anschlag, gegen den das Rad beim Einschalten rotiert wird um von der Nullposition ausgehen zu können. Als Lichtquelle ist eine 24V / 250W ELC Projektorbirne verbaut.
Auf geht's also an die Planung: Beide Motoren sollen stufenlos in beide Drehrichtungen rotiert werden können. Das Goborad soll seine Position möglichst schnell erreichen. Die Lampe muss weiterhin schaltbar bleiben. Alle Parameter sollen via DMX beeinflusst werden.
Dabei stoße ich auf ein mechanisches Problem: Das Farb- / Goborad kann mit dem vorhandenen Anschlag seine Sollposition nicht immer effizient erreichen. Soll von der letzten Position zur ersten gedreht werden, so muss fast um 360 Grad rückwärts rotiert werden.
Nun was macht man dagegen? Ganz einfach, man schmeißt den Bolzen für den Anschlag raus. Problem ist dann das die Steuerung beim Einschalten keine Nullposition bestimmen kann. Um diese zu finden habe ich einen Hallsensor integriert. Hallsensoren reagieren auf Magnetismus und sind in hellen oder staubigen Umgebungen eine gute Alternative zu Lichtschranken. Passend dazu gibt es bei Conrad kleine Würfelmagnete die sich mit Silikon auf das Goborad aufkleben lassen. Der Hallsensor selber ist mit Zweikomponentenkleber befestigt.
Die Software muss dann nur das Rad drehen bis der Hallsensor die Position gefunden hat sowie eventuell einige Schritte "Korrektur" fahren, denn den Magneten millimetergenau richtig zu positionieren ist sehr schwierig.
Für das Schalten der Lampe entscheide ich mich ein Solid State Relais zu benutzen. Das erspart mir entsprechende Leistungshardware auf meiner Platine und ist im Gegensatz zu einem Relais verschleißfrei.
Beide Motoren bekommen eine H-Brücke um sie in beide Drehrichtungen zu rotieren. Die Geschwindigkeit wird mittels Pulsweitenmodulation beeinflusst. Der Motortreiber L293D von SGS hat alles inclusive Freilaufdioden integriert!
Der Unipolare Schrittmotor des Goborades wird über einen ULN2003 (Darlington Array) angesteuert.
Steuerung der Lampe und der Motoren übernimmt ein Atmel Mega8515 Mikrocontroller. Die DMX Signale werte ich mit der GPL Lizensierten DMX Library von Hendrik Hölscher aus. Compiliert wurde hier mit dem AVR GNU C Compiler unter Linux.
Schaltplan der Steuerplatine
Ich habe mir zwei eigene Bibliotheken erstellt; zum einen die "lib_gobowheel", sie steuert den unipolaren Schrittmotor in Halbschritten an und wertet den Hallsensor aus. Eine im Hauptprogramm immer wieder aufgerufene Funktion überprüft, ob der Motor bereits die Sollposition erreicht hat und dreht falls nicht um einen Schritt Richtung Sollposition. So wird die Hauptschleife nicht blockiert, sprich also eine Art "Multitasking".
Die zweite Bibliothek "lib_motdriver" stellt eine einfache Interruptgesteuerte PWM Lib da. Es existieren Funktionen um die Ports des L293D entsprechend zu setzen und zwei Motoren unterschiedlich schnell in die gewünschte Richtung laufen zu lassen. Die Kanalwertverarbeitung geschieht im Hauptprogramm.
Videos
Das fertige Programm ist GPL v3 lizensiert.