logo elektroda
logo elektroda
X
logo elektroda

Illuminophony, or a return to the past in a different edition.

efi222  31 6066 Cool? (+21)
📢 Listen (AI):

TL;DR

  • Illuminophony prototype drives three RGB LED channels to recreate colour-changing music lighting with simulated filament inertia.
  • It replaces analogue filters with FFT processing on an ESP32 using the arduinoFFT.h library, then maps frequency bands to PWM brightness.
  • The firmware uses 512 samples at a 40kHz sampling frequency, giving a bar value of approximately 78Hz and about 16ms per FFT cycle.
  • A timer interrupt modulates 9-bit PWM in 64 exponentially spaced levels, with separate inertia, automatic level, and free band allocation per channel.
  • The prototype used a 1W power LED and can be built on a development board in about an hour, but it has no UI and settings must be edited in code.
Generated by the language model.
Three LED spotlights in red, green, and blue illuminating a wall, blending in the center. .

Before publishing, I wondered if anyone else was interested in this topic. But maybe there is still a maniac for flashing lights :) .
Illuminophony - a somewhat forgotten topic. The device has, in my opinion, undergone a backward evouluation and at the outset let me quote my colleague @Preskaler who wrote 20 years ago:

The idea of illuminophony originated in the 18th century and consisted of casting coloured light on a screen depending on the content of particular frequencies in the music. Low tones corresponded to red (also low frequency) medium tones were green and blue tones were high. These were the beginnings of RGB! Listening to music in this way, that during its amplitude changes of individual frequencies, the listeners simultaneously saw colours changing, dimming when the music was quiet and brightening when the music was strong, and in addition with changing colours across the spectrum. This gave an enhanced artistic experience and the listeners were delighted. Of course, this was done by hand. Modern illuminophony has an excellent tool for this purpose but, unfortunately, the whole principle of this illuminophony has been neglected. What has appeared is a colourophone with three mercilessly flashing lights. This does not give the effect of mixing colours and creating resultant colours, thus making the effect negligible. It is no wonder that it is not clear why there is a division of the acoustic frequencies and even of the three spotlight colours?

another post in that thread confirms @Preskaler's argument :)
source: https://www.elektroda.pl/rtvforum/topic190754.html#928465

I did the project at the request of a colleague. Unfortunately not completed due to undecided periphery (executive headlights).
The main idea was to simulate the inertia of the bulb filaments. Unfortunately simple circuits using LEDs do not provide smooth modulation of light only, they work zero-one.

My design is an attempt to meet this challenge.
I have abandoned analogue filters in favour of a fast Fourier transform (FFT). This simplified the electronics layout considerably.
To do this, I used the powerful and inexpensive ESP32 MCU and the arduinoFFT.h library

Device features:
Three RGB channels.
9 bit PWM controlling the LED, exponentially modulated in 64 levels.
LED brightening and dimming inertia setting for each colour. Lovers of 'nystagmus' can set zero.
Atomatic level for each channel.
Free frequency (stripe) allocation for each channel.
Enabling or disabling LED glow in the absence of an audio signal (PWM = 1).
Unfortunately, the device did not get a UI and the settings have to be changed in program code.

Program description:
Program written in Arduino IDE.
For the purposes of the FFT, 512 samples are taken at a sampling frequency of 40kHz.
With these parameters, the bar value is approximately 78Hz.
The audio samples and FFT calculations are performed in the main loop.
It takes approximately 16ms to take a set of samples and calculate the FFT.
In the timer interrupt, the PWM LED waveform is modulated.

In the prototype circuit I have used a 1W power LED. Of course, this part can be freely extended.
I attach a schematic with the development circuit. For the development board, the 3.3V stablizer circuit and the Flash and Reset buttons must be omitted.
The circuit can be assembled "on your knee" within an hour.
Good luck with your experiments :) .

Example settings:

Increased light incidence:


.
Settings for "optical sprinters" (pure PWM): ;) .
And so it is better than switched LEDs.


.
Diagram:
Diagram of a photophonic device using ESP32 and FFT. .
Attachments:
  • Iluminofonia_ESP32.zip (65.78 KB) You must be logged in to download this attachment.

About Author
efi222
efi222 wrote 655 posts with rating 1057 , helped 12 times. Live in city Toruń. Been with us since 2019 year.

Comments

Preskaler 21 Mar 2025 21:19

@efi222 Congratulations on making this device. However, I was concerned with colour mixing and not flashing three separate colours. Colour mixing as it is, for example, on an LCD screen. Then there is... [Read more]

efi222 21 Mar 2025 22:05

This is a prototype. We have an RGB output. Further you can do whatever you want with it. You can mount the Led more point-wise. I focused more on the smooth modulation of the light. Nothing prevents you... [Read more]

Preskaler 22 Mar 2025 10:37

Sixty-plus years ago I did the blending on three bulbs painted with transparent spirit varnish and placed behind a milky glass. The bulbs were as close together as possible and placed some distance from... [Read more]

efi222 22 Mar 2025 11:01

LEDs, unlike incandescent bulbs, are not suitable for voltage control. The current characteristics are too steep. About the linearity of the luminosity of such a solution I will not even mention. (Most... [Read more]

miroskop 22 Mar 2025 11:12

I tried to compile the sketch but there are errors of missing declaration: adcAttachPin, timerAlarmWrite, timerAlarmEnable and some more errors. What am I doing wrong? The board I have chosen is the ESP32C3... [Read more]

efi222 22 Mar 2025 11:54

ESP32 C3 is a rather different architecture to ESP32 Wroom (ESP32 Dev Module). The code may not compile for this module. At the very top of the source code the requirements for correct compilation are... [Read more]

miroskop 22 Mar 2025 12:24

I had to roll back the version of "ESP32 by Espressif System" from 3.0.7 to 1.0.4 for the sketch to compile. Selected "ESP32 Dev Module" board. [Read more]

efi222 22 Mar 2025 19:41

Exactly as it is in the description. 1.0. 4 is the latest version where you can sample the ADC 40kHz and above. In all higher ones the maximum frequency at the ADC input is 10kHz. At least in Arduino... [Read more]

Preskaler 23 Mar 2025 07:48

For me "the bomb"! A really great job. White light will be difficult to achieve, because in this way of mixing there will always be unevenness in the individual colour beams and colour spots will appear.... [Read more]

LEDówki 23 Mar 2025 14:47

How does it work driven by "Enola Gay", "Take On Me" and "Gimme All Your Lovin'"? [Read more]

efi222 23 Mar 2025 14:53

On which settings? I can fire it up in the evening. [Read more]

LEDówki 23 Mar 2025 14:56

And how it comes out better there. I won't guess whether with high or low inertia. [Read more]

vodiczka 23 Mar 2025 16:23

I did something similar and at a similar time but I placed the bulbs in my parents' large, deep-cut crystal vase. The wall of the vase was about 25 mm thick. Super came out. [Read more]

efi222 23 Mar 2025 16:50

I can see that those interested in the device are of an older vintage. Not surprisingly, anyway. When the word "illuminophony" is said, the younger generation makes big eyes. Some try to analyse it.... I'll... [Read more]

LEDówki 23 Mar 2025 16:57

In Radioelektronik and Praktyczny Elektronik there were diagrams of such colourophones/colorophones :) . In Młody Technik there was a micro-luminophone - three or four transistors and attached to them... [Read more]

Preskaler 23 Mar 2025 17:24

. That's right - it flashed. The effect is only satisfactory if the colours are mixed. I "discovered" illuminophony in 1962 in an article from the magazine "Yunyj Tiochnik" (the Russian equivalent of... [Read more]

LEDówki 23 Mar 2025 21:08

But then there were no blue LEDs. So there was red, green and yellow. The Colorofon C23B also had these colours and on the wall the light mixes, but the effects are not like RGB mixing. That's what they... [Read more]

efi222 23 Mar 2025 21:31

The first illuminophony I made also had a yellow filter instead of blue. It wasn't until years later that incandescent bulbs with reflectors and coloured filters appeared. Also with blue. And whether... [Read more]

Preskaler 25 Mar 2025 05:15

. Of course not. There were no diodes or incandescent bulbs in the 18thw either but other light sources were and coloured filters too. The control was manual with a large time constant. I did on incandescent... [Read more]

FAQ

TL;DR: Sterownik z 3 kanałami RGB, FFT i regulowaną bezwładnością pokazuje, że prawdziwa iluminofonia to nie miganie, lecz „mieszanie barw” zsynchronizowane z pasmami muzyki. Ten FAQ pomaga hobbystom ESP32 zbudować płynny efekt świetlny, który bardziej przypomina żarówki niż ostro przełączane LED-y. [#21489719]

Dlaczego to ważne: Wątek pokazuje, jak tanim układem na ESP32 odejść od prostego kolorofonu i uzyskać wizualnie znacznie bogatszą, bardziej muzyczną modulację światła.

Podejście Przetwarzanie audio Efekt świetlny Ograniczenie z wątku
Klasyczny kolorofon 3-lampowy Filtry analogowe LP/BP/HP Wyraźne miganie osobnych kolorów Słabe mieszanie barw
Prototyp ESP32 + FFT 512 próbek, 40 kHz Płynna modulacja RGB z bezwładnością Brak interfejsu użytkownika
Proste LED-y sterowane napięciem Bezpośrednie sterowanie LED Twarde zmiany, efekt zero-jedynkowy Stroma charakterystyka LED
RGB z projekcją/dyfuzorem To samo sterowanie, lepsza optyka Lepsze mieszanie na ścianie lub macie Trudne poprawne filmowanie efektu

Najważniejszy wniosek: Największą różnicę daje nie sama analiza FFT, lecz połączenie PWM, korekcji wykładniczej i sztucznej bezwładności światła. Dopiero wtedy LED-y zaczynają zachowywać się wizualnie jak źródło światła do iluminofonii, a nie jak szybki wskaźnik migania.

Quick Facts

  • Projekt używa 3 kanałów RGB, 9-bitowego PWM i wykładniczej modulacji w 64 poziomach, aby uzyskać płynniejsze, bardziej naturalne zmiany jasności. [#21489646]
  • FFT pracuje na 512 próbkach przy 40 kHz, co daje rozdzielczość pasma około 78 Hz i cały cykl próbkowania z obliczeniami rzędu 16 ms. [#21489646]
  • Autor szacuje koszt podstawowej wersji na około 20 PLN, a układ demonstracyjny zbudowany „na kolanie” da się zmontować w około 1 godzinę. [#21491938]
  • Szkic kompilował się po ustawieniu płytki ESP32 Dev Module i cofnięciu pakietu ESP32 by Espressif Systems z 3.0.7 do 1.0.4. [#21490237]
  • Do zwiększania mocy można przejść z diod 1 W na większe ciągi LED, a do ograniczenia strat użyć drivera PT4115: 30 V, 1.2 A, sterowanego PWM. [#21503111]

1. Czym jest iluminofonia i czym różni się od migających, trójlampowych kolorofonów budowanych dawniej?

Iluminofonia to prezentacja muzyki światłem, w której barwy i jasność płynnie odpowiadają zawartości pasm częstotliwości. „Iluminofonia” jest układem świetlno-muzycznym, który mapuje pasma audio na kolory i miesza je w jeden wynikowy obraz świetlny, zamiast tylko przełączać osobne lampy. W wątku podkreślono, że klasyczne trzy migające lampy dają dużo uboższy efekt, bo nie tworzą barw wynikowych. W praktyce czerwony odpowiada basom, zielony średnim tonom, a niebieski wysokim. [#21489646]

2. Co w tym kontekście oznacza termin kolorofon i dlaczego część użytkowników uważa proste migające światła za namiastkę prawdziwej iluminofonii?

Kolorofon oznacza tu prostsze urządzenie, które zwykle tylko włącza i wyłącza kilka kolorów zależnie od pasma audio. „Kolorofon” jest prostszym sterownikiem świetlnym, który rozdziela muzykę na kilka kanałów i wywołuje miganie lamp, ale bez pełnego mieszania kolorów i bez płynnej modulacji. Uczestnicy wątku uznają taki efekt za namiastkę, bo trzy oddzielne błyski nie dają jednolitej, pulsującej barwy wynikowej. Ich zdaniem satysfakcjonujący efekt pojawia się dopiero wtedy, gdy kolory fizycznie się nakładają. [#21492006]

3. Jak zbudować sterownik iluminofonii na ESP32 z użyciem arduinoFFT.h zamiast analogowych filtrów audio?

Najprościej użyć ESP32 Wroom, wejścia audio do ADC i trzech wyjść RGB sterowanych PWM. 1. Pobierz próbki audio do FFT: autor używa 512 próbek przy 40 kHz. 2. Przypisz wybrane koszyki FFT do trzech kanałów RGB i ustaw automatyczny poziom. 3. Na wyjściu zastosuj 9-bitowy PWM, wykładniczą korekcję i bezwładność rozjaśniania oraz wygaszania dla każdego koloru. Autor zrezygnował z interfejsu użytkownika, więc parametry zmienia się bezpośrednio w kodzie Arduino IDE. [#21489646]

4. Dlaczego autor wybrał FFT na ESP32 Wroom zamiast klasycznych analogowych filtrów dolnoprzepustowych, pasmowych i górnoprzepustowych?

Wybrał FFT, bo uprościło to elektronikę i dało znacznie większą swobodę strojenia. Wprost napisał, że porzucił filtry analogowe na rzecz szybkiej transformaty Fouriera, używając taniego i wydajnego ESP32 oraz biblioteki arduinoFFT.h. Dzięki temu można dowolnie przydzielać pasma do kanałów RGB, ustawiać automatyczny poziom i zmieniać charakter efektu bez przebudowy toru analogowego. To ważne, bo projekt miał pozostać prosty sprzętowo, ale elastyczny programowo. [#21489646]

5. Jak ustawiono parametry FFT w tym projekcie i co oznacza 512 próbek przy 40 kHz dla rozdzielczości pasm?

Parametry ustawiono na 512 próbek i częstotliwość próbkowania 40 kHz. To daje szerokość jednego koszyka FFT około 78 Hz, co autor podał wprost. Pobranie próbek i wykonanie obliczeń zajmuje około 16 ms, więc sterownik reaguje szybko, ale nadal zostawia miejsce na dodatkowe wygładzanie światła. Taki kompromis dobrze pasuje do trzech kanałów RGB, bo nie wymaga bardzo drobnej analizy widma, a daje wystarczająco stabilny podział pasm. [#21489646]

6. Jaki jest najlepszy sposób uzyskania płynnej bezwładności światła z LED-ów, aby efekt przypominał żarniki żarówek zamiast twardego migania?

Najlepszy sposób z tego wątku to programowa bezwładność oparta na uśrednianiu kolejnych próbek oraz płynnym PWM. Autor chciał zasymulować bezwładność żarników i uznał, że proste układy LED działają zero-jedynkowo. Dlatego dodał regulację rozjaśniania i wygaszania dla każdego koloru oraz później opisał bufor FIFO z 30 próbkami, który bardzo wygładza zmiany. Użytkownicy zauważyli też, że fizyczne zbliżenie LED-ów i projekcja na białe tło poprawiają odbiór całego efektu. [#21494245]

7. Dlaczego w tej iluminofonii preferowane jest sterowanie PWM zamiast bezpośredniego sterowania napięciem RGB LED?

PWM jest tu lepsze, bo LED-y nie nadają się do sensownego sterowania samym napięciem. Autor wyjaśnił, że charakterystyka prądowo-napięciowa LED jest zbyt stroma, więc proste sterowanie napięciem daje słabą liniowość i nadal przypomina zwykłe miganie. W prezentowanym urządzeniu jasność zależy od wypełnienia PWM, a nie od bezpośredniej zmiany napięcia. Dzięki temu jasność jest praktycznie liniowa względem sterowania, a cały efekt daje się jeszcze skorygować wykładniczo pod percepcję wzroku. [#21490148]

8. Jak wykładnicza korekcja PWM pomaga sprawić, że zmiany jasności LED wyglądają liniowo dla ludzkiego oka?

Pomaga, bo oko odbiera zmiany światła logarytmicznie, a nie liniowo. Autor napisał, że sama jasność LED sterowanego PWM jest prawie liniowa względem wypełnienia, ale tę charakterystykę celowo „wygina” wykładniczo. W efekcie wykładniczne sterowanie połączone z logarytmicznym widzeniem daje wizualnie bardziej liniowe rozjaśnianie i ściemnianie. To właśnie dlatego projekt ma 9-bitowy PWM i dodatkową modulację w 64 poziomach, zamiast prostego przełączania stanów. [#21490148]

9. Co powoduje błędy kompilacji typu adcAttachPin, timerAlarmWrite i timerAlarmEnable podczas kompilowania tego szkicu dla ESP32-C3 Dev Kit?

Najczęściej problem powoduje zła architektura mikrokontrolera i niezgodna płytka. W wątku zgłoszono te błędy przy wyborze ESP32-C3 Dev Kit, a autor odpowiedział, że ESP32-C3 to wyraźnie inna architektura niż użyty przez niego ESP32 Wroom. Kod został przygotowany pod ESP32 Dev Module i może się nie kompilować dla C3. To jest typowy przypadek graniczny: nawet poprawny szkic nie ruszy, jeśli platforma sprzętowa i funkcje timera lub ADC różnią się od oryginału. [#21490215]

10. Jakie ustawienia Arduino core i płytki są potrzebne do poprawnej kompilacji tego szkicu iluminofonii na ESP32 i dlaczego użytkownicy cofnęli pakiet „ESP32 by Espressif Systems” z 3.0.7 do 1.0.4?

Trzeba wybrać płytkę ESP32 Dev Module i użyć pakietu ESP32 by Espressif Systems w wersji 1.0.4. Użytkownik potwierdził, że po cofnięciu z 3.0.7 do 1.0.4 szkic zaczął się kompilować. Autor doprecyzował też powód: 1.0.4 to ostatnia wersja, w której można próbkuować ADC z częstotliwością 40 kHz i więcej. W nowszych wersjach, przynajmniej w Arduino core, maksymalna częstotliwość na wejściu ADC spada do około 10 kHz, co psuje założenia projektu FFT. [#21490287]

11. Jak fizycznie mieszać światło RGB, aby uzyskać lepszy efekt iluminofonii z użyciem mlecznego dyfuzora, białej ściany, projektora lub taśmy RGB LED?

Najlepiej zbliżyć źródła RGB do siebie i pozwolić im nakładać się na matowej powierzchni. W wątku podano kilka praktycznych metod: pojedynczą diodę RGB za mlecznym szkłem, trzy źródła światła ustawione blisko siebie i świecące na matę, projekcję na białą ścianę oraz użycie taśmy RGB LED. Starsi uczestnicy uzyskiwali mieszanie nawet na żarówkach za mleczną szybą. Autor potwierdził też, że po zwiększeniu bezwładności i projekcji na białe tło efekt wyraźnie się poprawił. [#21490287]

12. Na czym polega opisana metoda ruchomej średniej z buforem FIFO do dodawania bezwładności światła i jak liczba przechowywanych próbek wpływa na szybkość reakcji?

Metoda polega na ciągłym uśrednianiu ostatnich próbek audio zamiast sterowania światłem pojedynczym odczytem. Autor użył bufora około 30 próbek dla każdego koloru. Nowa próbka trafia na początek, najstarsza wypada, a średnia z całego bufora steruje PWM. Aktualizacja następuje co jedną próbkę, czyli w jego przykładzie co około 16 ms. Im więcej próbek zapiszesz w buforze, tym wolniejsze i gładsze będą zmiany światła. Im mniej próbek, tym efekt będzie szybszy i bardziej nerwowy. [#21494245]

13. Jak działa automatyczna regulacja poziomu po FFT w tym projekcie i jak parametry max_level, divisor, arw_increase i arw_decrease zmieniają dynamikę?

Regulacja działa przez dynamiczną zmianę dzielnika, którym skaluje się wartość pasma FFT przed wysłaniem na wyjście PWM. Autor podał przykład z max_level, divisor startowym 1000, progiem prog_arw 100 oraz krokami arw_decrease 50 i arw_increase 25. Gdy level_output przekroczy max_level, dzielnik rośnie i wyjście słabnie. Gdy sygnał jest za mały, dzielnik stopniowo maleje i wyjście rośnie. To daje prostą ARW po stronie cyfrowej bez stosowania analogowego kompresora. [#21507177]

14. Jak najlepiej skalować ten prototyp od LED-ów 1 W do mocniejszego oświetlenia, na przykład przez szeregi, rezystory lub driver stałoprądowy PT4115?

Najpraktyczniej zwiększyć moc po stronie LED, a nie wracać do żarówek 230 V na triakach. Autor zaznaczył, że pokazany stopień wyjściowy to tylko przykład dla diody 1 W. Dalej można łączyć więcej LED szeregowo albo szeregowo-równolegle, z prostymi rezystorami kosztem większych strat. Lepszą drogą jest tani driver PT4115, opisany jako 30 V i 1.2 A, sterowany PWM z mikrokontrolera. To pozwala podnieść moc, zachować płynne sterowanie i uniknąć problemów z fazową regulacją żarówek sieciowych. [#21503111]

15. Jak wygląda efekt tej iluminofonii przy utworach „Enola Gay”, „Take On Me” i „Gimme All Your Lovin’” na różnych ustawieniach bezwładności?

Wątek nie zawiera gotowego porównania tych trzech utworów, bo autor tylko zadeklarował, że może uruchomić test wieczorem. Da się jednak wyciągnąć bezpieczny wniosek praktyczny: przy większej bezwładności światło będzie płynniejsze i bardziej „żarnikowe”, a przy zerowej lub małej bezwładności przejdzie w czystszy efekt PWM, czyli szybsze, ostrzejsze reakcje. Sam autor pokazał już dwa tryby: zwiększoną bezwładność oraz ustawienia dla „optycznych sprinterów”, i uznał oba za lepsze od zwykłego przełączania LED-ów. [#21489646]
Generated by the language model.
%}