Forum: Projekte & Code 5 Kanal Digital-Lichtorgel für Arduino


von Christof Rieger (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Forengemeinde,
Hier ein kleines Arduinoprojekt von mir.
Eine Digitale 5-Kanal PWM Lichtorgel mit Digitaler Kanalbildung.

Einfach mit einem Spannungsteiler am AO und Koppelkondensator ein 
Audiosignal einspeisen, und an den PWM Ausgängen die Kanäle abgreifen.
Pin 13 zeigt an, wenn der Eingangs-Spannungsteiler korrekt auf null 
gestellt ist.

Liebe Grüße

Christof Rieger

von Christof Rieger (Gast)


Lesenswert?


von A. F. (chefdesigner)


Lesenswert?

Sind Lichtorgeln wieder in Mode? Ich dachte, heute muss es gleich 
3D-Videoprojekttion sein :-)

von chris_ (Gast)


Lesenswert?

Danke für das Code Beispiel.

Eine Lichtorgel wollte ich auch schon immer mal mit dem Arduino machen.
Ich hätte dann aber keine FFT verwendet, sondern separate 
Bandpassfilter. Die FFT auf dem Atmega hat den Nachteil, dass sie nur 
kurze Signale verrechnen kann. Einen Bandpassfilter auf dem langsamen 
Prozessor könnte man schmalbandiger machen.

Für die Lichtorgel sind denke ich nur die Bassfrequenzen relevant. 
Deshalb kann man die Abtastrate nach einem schnellen LP-Filter stark 
heruntersetzen. Damit würde dann auch die Rechengeschwindigkeit für die 
Bandpassfilter reichen.

von Christof Rieger (Gast)


Lesenswert?

@chris_
Hey coole Sache. Wo kann ich den voll funktionsfähigen Quellcode da für 
kostenlos herrunter laden.

Ich hab das Ding desshalb programmiert, weil ich nichts kostenloses mit 
digitaler Kanaltrennung im Netz gefunden habe.

Nur Lösungen bei denen die Kanaltrennung analog mit einem Bauteilgrab 
realisiert wurde und der Arduino lediglich die Umsetzung analog auf PWM 
machte, dass ehrlich gesagt dann auch mit ein paar Komperatoren machbar 
gewesen wäre.

von chris_ (Gast)


Lesenswert?

Irgendwo hat hier im Forum schon mal jemand mit so was angefangen. Nur 
leider finde ich den Link gerade nicht.

Aber ich bin noch auf eine andere FFT-Lichtorgel gestoßen:
Beitrag "[C] AVR-Lichtorgel per FFT MEGA8 32 644"

von Simon B. (transistor2504)


Lesenswert?

Hallo
ich beschäftige mich momentan mit dem Projekt "Lichtorgel". Ich möchte 
mit einer Steuerspannung von 0-5 Volt einen Dimmer ansteuern. Diesen 
gibt es schon. Nun habe ich den Code von Christof heruntergeladen und 
versucht den Dimmer mit den, über dieses Programm erzeugten, 
Steuerspannungen anzusteuern. Das hat auch einiger Maßen gut 
funktioniert... Jedoch reagiert die Lampe zum Teil nicht so schnell, wie 
eine LED es tun würde und der Effekt ist nicht so gut. Kann mir jemand 
helfen das Programm so umzuschreiben, dass es Dimmer bzw. Lampen 
freundlicher wird? Ich bräuchte auch nur 3 Kanäle: Bässe, Mitten und 
Höhen.

Gruß Simon

von Christof Rieger (Gast)


Lesenswert?

@Simon B
Ich verstehe zwar nicht, warum du dann eine digitale Lichtorgel nehmen 
möchtest, da wär doch eine klassische mit Thyristoren die sinnvollere 
Wahl.

Aber versuch doch einfach ein RC-Glied an die Ausgänge zu schalten und 
dann auf den Dimmer gehen. Das sollte dann besser gehen.
                __
Arduino Pin >--|  R |---o----> Dimmer in
                        |
                       === C
                        |
                        |
                      Masse

R und C müssen zu der Eingangsimpedanz des Dimmers passen.

LG Christof

von Simon B. (transistor2504)


Lesenswert?

Hallo Christof
Ich finde man ist mit einem Mikrocontroller flexibler...
Der Tiefpass ist bereits vor die Dimmereingänge geschaltet. Kannst du 
mir sagen, wie ich deinen Code auf 3 Kanäle abändern kann (Höhen, Mitten 
und Bässe)? Kann man die Empfindlichkeit noch erhöhen? Also stärkere 
Auschläge bei schwächeren Pegeln?
Danke erstmal für den Tip.:)

Gruß Simon

von Christof Rieger (Gast)


Lesenswert?

@Simon B.
Die Kanaltrennung läuft über 4 Kaskadierte 2n FFT. Es ist nicht möglich 
eine der Berechnungstufen zu entfernen, da die eine auf der folgenden 
aufbaut. Du kannst dich also nur für 3 von den 5 Kanälen entscheiden, 
sprich einfach 2 nicht anschließen.
Das Programm enthält schon ein automatisches Gain controling.
Wenn das System auf leise Passagen nicht reagiert, ist dein 
Eingangssignal zu schwach. Hast du vor den AO einen Spannungsteiler 
gesetzt und ihn so abgeglichen, das PIN 13 umschaltet. Wenn nicht, ist 
es klar, dass sie nicht gescheit funktioniert.

von Christof Rieger (Gast)


Lesenswert?

In diesen Codeteil kannst du auch noch etwas die Empfindlichkeit 
einstellen.
1
//Je nach Spannungsteiler am Analogeingang kann hiermit die Referenzpannung eingestellt werden.
2
//REFS1 REFS0 Voltage Reference Selection
3
//  0     0   AREF, Internal Vref turned off
4
//  0     1   AVCC with external capacitor at AREF pin
5
//  1     0   Reserved
6
//  1     1   Internal 1.1V Voltage Reference with external capacitor at AREF pin
7
//ADC0 Ref 5V 8Bit in ADCH Eingang A0
8
#define S_ADMUX   0<<REFS1 | 1<<REFS0 | 1<<ADLAR | 0 | 0<<MUX3 | 0<<MUX2 | 0<<MUX1 | 0<<MUX0
mit 11 auf REFS wird die Empfindlichkeit 4x höher.

von Simon B. (transistor2504)


Lesenswert?

Hallo
Danke für deine schelle Antwort. Ich werde das mal probieren... Berichte 
dann wie es funktioniert. Ich benutze keinen einfachen Spannungsteiler, 
auf den das Signal über einen Kondensator gekoppelt wird. Sondern einen 
Addierer (weil 2 Signale: Links und Rechts) über den auch die 2,5 Volt 
Offset erzeugt werden. So wird das Signal dann auch noch leicht 
verstärkt. Gut für Geräte mit geringem Ausgangspegel:). Versorgt wird 
der OPV mit den 5V vom Arduino. Mal sehen wie es funktioniert. Ich 
wollte den Code auch noch erweitern. Entweder soll die FFT die Signale 
für die Dimmer erzeugen, oder ein Poti gibt die Aussteuerung vor. Dann 
werden alle Dimmer gleich angesteuert und man kann das Gerät auch noch 
als "normalen" Dimmer benutzen.

Gruß Simon

von Christof Rieger (Gast)


Lesenswert?

@Simon B.
Das könnte eng werden, wenn der OPV nur mit 5V versorgt wird. Welchen 
Typ willst du da verwenden ? Ein klassischer OPV mit Gegentaktendstufe 
kappt den maximal Vpp mindestens um 1,4V bezogen auf die 
Versorgungspannung. Das Signal wird dann nur von 0,7 bis 4,3 Volt 
reichen.
Das mit dem Softwareumschalten sollte kein Problem sein. Setze einfach 
oben in die Berechnungsschleife eine Abfrage für einen freien PIN. Je 
nach Pegel läuft er in der Schleife weiter oder springt in dein Programm 
teil.

LG Christof

von Jürgen S. (jurs)


Lesenswert?

Simon B. schrieb:
> Ich finde man ist mit einem Mikrocontroller flexibler...
> Der Tiefpass ist bereits vor die Dimmereingänge geschaltet. Kannst du
> mir sagen, wie ich deinen Code auf 3 Kanäle abändern kann (Höhen, Mitten
> und Bässe)? Kann man die Empfindlichkeit noch erhöhen? Also stärkere
> Auschläge bei schwächeren Pegeln?
> Danke erstmal für den Tip.:)

> Gruß Simon

Mal ein kleiner Tipp: Der Standard-Chip für Lichtorgel-Spielereien auf 
der Arduino-Plattform ist der MSGEQ7 Audio Analyzer Chip im DIP Gehäuse.

Der Chip kann ein Audio-Stereosignal in 7 Frequenzbändern gleichzeitig 
analysieren, ist mit einem Arduino-Board leicht auslesbar, und viele 
Arduino-Bastler haben damit schon nette Sachen gemacht.
Wenn Du mal was sehen möchtest, gehe zu Youtube und suche dort nach 
"MSGEQ7  Arduino"!

: Bearbeitet durch User
von Simon B. (transistor2504)


Lesenswert?

Hi
@Christof: Ja das stimmt, aber damit kann ich noch immer eine leichte 
Verstärkung erreichen. Zudem braucht der Controller ja nicht eine 
Spannung von 5Vpp :D. Ich verwende einen TLC272.
@Jürgen: Habe ich mir angeguckt und würde es in Erwägung ziehen, wenn es 
so wie geplant nicht funktioniert. Dennoch interessant... Muss ja nicht 
mit dem einen Projekt aufhören.:)
Hat eigentlich schon jemand von euch Erfahrung mit dem Auslesen von DMX 
gemacht? Würde mich mal sehr interessieren.

Gruß Simon

von Christof Rieger (Gast)


Lesenswert?

DMX512 ist ein sehr einfaches Protokoll. Gib in die Forensuche einfach 
mal DMX ein. Ich glaube da wurde schon alles dikutiert. :-)

LG Christof

von Markus (Gast)


Lesenswert?

Hallo,
bei, mir funktioniert der Code nicht.
Benutze einen Arduiono-Mega.
Zum besseren verständniss des Codes,würde ich gerne wissen in welchem 
Teil der Analogeingan A0 eingelesen wird.
Habe im Code nichts gefunden.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.