Laserharfe für den Mittelstand
Posted: Sat 17 Mar, 2012 11:16 am
Hallo!
Obwohl dieses Thema hier schon mehrmals präsentiert wurde, stelle ich dennoch meine Ergebnisse kurz vor. Seit rund 1 Woche im Besitz eines Arduino Uno ging ich gleich an die praktische Umsetzung einer Laserharfe. Eine simple Ausführung mittels Lichtschranken und Orgel-Platine habe ich bereits vor rund 2 Jahren umgesetzt; preislich gesehen sozusagen die Laserharfe für die "Unterschicht".
Einen Aufbau mit einem richtigen Galvo wollte ich mir auch nicht antun, da dies auch in Hinblick auf eine zukünftige Umsetzung durch einen Schüler preislich aus dem Rahmen fallen würde. Also schnell mehrere Teile aus der berühmten Bastelkiste hervorgekramt und versucht, damit ein funktionsfähiges Gerät zu erstellen.
Die verwendeten Teile sind:
* Arduino Uno: Preis ca. 15 Euro über ebay
* Schrittmotor 12V, 3.6°, 5-polig: 5 Euro im Elektroladen (einen alten Drucker hatte ich im Moment keinen...)
* grüner DPSS-Laser mit rund 20 mW: Preis ca. 20 Euro über ebay (hatte ich aber bereits)
* TTL-Lasertreiber: Preis ?, bei TTL-Laser auf ebay ja inkludiert (hatte ich auch noch über)
* LM317, 7805, Potis, LDR, Platine: ca. 10 Euro
* ULN2003 als Treiber für den Schrittmotor: ca. 2 Euro (bei Conrad)
* Holzplatte, Winkel, Schrauben: ca. 4 Euro
Macht in Summe also rund 55 Euro inkl. Arduino aus
Zum Programmieren: Auf der Uni hatte ich in Fortran77, C und ein wenig C++ programmiert, dies liegt aber schon etwas länger zurück. Das Programm für den Arduino zu schreiben, ging aber wirklich sehr einfach, zumal der Programmablauf ja auch alles andere als komplex ist und zwar:
* stepper library einbinden; befindet sich schon im Arduino-Unterordner libraries
* Laser an; kurze und variable Verzögerungszeit
* LDR an einen Analog-In Pin nach der Helligkeit abfragen
* Liegt eine Spannung über einer einstellbaren Schwelle an, sprich fällt Laserlicht auf den LDR, so wird die erste Note gespielt (Befehl tone).
* Liegt die Spannung unter der Schwelle, wird die Tonausgabe beendet (Befehl noTone)
* Laser aus
* Schrittmotor einen Schritt weiter (Befehl step(1))
* variable Verzögerungszeit, damit der Laser nicht zu früh wieder leuchtet
* Laser an, kurze und variable Verzögerungszeit
* usw. mit der 2-ten, 3-ten... Note
Der Befehl tone läßt leider nur die Ausgabe einer Note zu. Wenn nun z.B. die 3-te Note gespielt wird, sprich die Hand sich im 3-ten Laserstrahl befindet, möchte ich natürlich nicht, dass durch die fehlende Hand im 4-ten, 5-ten usw. Laserstrahl die 3-te Note beendet wird. Dies würde aber laut obigen "Flussdiagramm" passieren mit der Abfrage * Liegt die Spannung unter der Schwelle, wird die Tonausgabe beendet.
Die Folge wäre eine völlig zerhackte Tonausgabe... Deshalb habe ich noch if-Befehle eingeführt und eine array-Variable, die mir zeigt, welcher Ton nun gerade gespielt wird. In die Abfrage Spannung vom LDR an Analog-In-Pin kommt man demnach nur bei der Note die gerade gespielt wird (um sie weiterhin zu spielen oder eben zu beenden) oder bei allen anderen Noten unter der Voraussetzung, dass im Moment keine einzige andere Note gespielt wird. Langer Rede kurzer Sinn: Es wird immer nur eine Note gespielt und zwar durchgehend so lange, bis die Hand aus dem jeweiligen Laserstrahl gezogen wird. In der Zwischenzeit kann keine andere Note gespielt werden und während der Abfrage bzgl. der anderen Noten wird die gespielte Note auch nicht unterbrochen, sondern spielt kontinuierlich weiter.
Einzig die Empfindlichkeit des LDR's macht im Moment kleinere Probleme. Der Abstand der in den Laserstrahl gehaltenen Hand zum LDR ist mir noch zu gering. Habe aber auch noch keine weißen Michael Jackson-Handschuhe in Verwendung, durch welche die Helligkeit des Laserreflexes natürlich noch erhöht werden würde. Der Aufbau funktioniert aber soweit... Bis zur nächsten Bastelei, stoppi
P.S.: Die größte Anstrengung war das händische Ausfeilen des Lochs am Schrittmotorhalter
Obwohl dieses Thema hier schon mehrmals präsentiert wurde, stelle ich dennoch meine Ergebnisse kurz vor. Seit rund 1 Woche im Besitz eines Arduino Uno ging ich gleich an die praktische Umsetzung einer Laserharfe. Eine simple Ausführung mittels Lichtschranken und Orgel-Platine habe ich bereits vor rund 2 Jahren umgesetzt; preislich gesehen sozusagen die Laserharfe für die "Unterschicht".
Einen Aufbau mit einem richtigen Galvo wollte ich mir auch nicht antun, da dies auch in Hinblick auf eine zukünftige Umsetzung durch einen Schüler preislich aus dem Rahmen fallen würde. Also schnell mehrere Teile aus der berühmten Bastelkiste hervorgekramt und versucht, damit ein funktionsfähiges Gerät zu erstellen.
Die verwendeten Teile sind:
* Arduino Uno: Preis ca. 15 Euro über ebay
* Schrittmotor 12V, 3.6°, 5-polig: 5 Euro im Elektroladen (einen alten Drucker hatte ich im Moment keinen...)
* grüner DPSS-Laser mit rund 20 mW: Preis ca. 20 Euro über ebay (hatte ich aber bereits)
* TTL-Lasertreiber: Preis ?, bei TTL-Laser auf ebay ja inkludiert (hatte ich auch noch über)
* LM317, 7805, Potis, LDR, Platine: ca. 10 Euro
* ULN2003 als Treiber für den Schrittmotor: ca. 2 Euro (bei Conrad)
* Holzplatte, Winkel, Schrauben: ca. 4 Euro
Macht in Summe also rund 55 Euro inkl. Arduino aus
Zum Programmieren: Auf der Uni hatte ich in Fortran77, C und ein wenig C++ programmiert, dies liegt aber schon etwas länger zurück. Das Programm für den Arduino zu schreiben, ging aber wirklich sehr einfach, zumal der Programmablauf ja auch alles andere als komplex ist und zwar:
* stepper library einbinden; befindet sich schon im Arduino-Unterordner libraries
* Laser an; kurze und variable Verzögerungszeit
* LDR an einen Analog-In Pin nach der Helligkeit abfragen
* Liegt eine Spannung über einer einstellbaren Schwelle an, sprich fällt Laserlicht auf den LDR, so wird die erste Note gespielt (Befehl tone).
* Liegt die Spannung unter der Schwelle, wird die Tonausgabe beendet (Befehl noTone)
* Laser aus
* Schrittmotor einen Schritt weiter (Befehl step(1))
* variable Verzögerungszeit, damit der Laser nicht zu früh wieder leuchtet
* Laser an, kurze und variable Verzögerungszeit
* usw. mit der 2-ten, 3-ten... Note
Der Befehl tone läßt leider nur die Ausgabe einer Note zu. Wenn nun z.B. die 3-te Note gespielt wird, sprich die Hand sich im 3-ten Laserstrahl befindet, möchte ich natürlich nicht, dass durch die fehlende Hand im 4-ten, 5-ten usw. Laserstrahl die 3-te Note beendet wird. Dies würde aber laut obigen "Flussdiagramm" passieren mit der Abfrage * Liegt die Spannung unter der Schwelle, wird die Tonausgabe beendet.
Die Folge wäre eine völlig zerhackte Tonausgabe... Deshalb habe ich noch if-Befehle eingeführt und eine array-Variable, die mir zeigt, welcher Ton nun gerade gespielt wird. In die Abfrage Spannung vom LDR an Analog-In-Pin kommt man demnach nur bei der Note die gerade gespielt wird (um sie weiterhin zu spielen oder eben zu beenden) oder bei allen anderen Noten unter der Voraussetzung, dass im Moment keine einzige andere Note gespielt wird. Langer Rede kurzer Sinn: Es wird immer nur eine Note gespielt und zwar durchgehend so lange, bis die Hand aus dem jeweiligen Laserstrahl gezogen wird. In der Zwischenzeit kann keine andere Note gespielt werden und während der Abfrage bzgl. der anderen Noten wird die gespielte Note auch nicht unterbrochen, sondern spielt kontinuierlich weiter.
Einzig die Empfindlichkeit des LDR's macht im Moment kleinere Probleme. Der Abstand der in den Laserstrahl gehaltenen Hand zum LDR ist mir noch zu gering. Habe aber auch noch keine weißen Michael Jackson-Handschuhe in Verwendung, durch welche die Helligkeit des Laserreflexes natürlich noch erhöht werden würde. Der Aufbau funktioniert aber soweit... Bis zur nächsten Bastelei, stoppi

P.S.: Die größte Anstrengung war das händische Ausfeilen des Lochs am Schrittmotorhalter
