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
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.
@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.
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"
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
@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
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
@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.
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
@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
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"!
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
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.