Table of Contents

LED Spectrum Analyzer

Email contact: andreilica1@gmail.com

Introducere

Intotdeauna am fost pasionat de jocurile de lumini si de impactul vizual pe care acestea il au asupra spectatorilor. In trecut am mai realizat cateva mici proiecte precum cateva Vu-Meter, dar niciodata unul mai complex ca un Spectrum Analyzer. Acest dispozitiv va analiza input-ul audio primit (ori prin intermediul unei mufe jack, ori prin intermediul unui microfon) si va afisa pe o matrice de LED-uri, in functie de frecventa, amplitudinea semnalului respectiv. Consider ca este o provocare interesanta si poate reprezenta un element decorativ atragator in casa celor pasionati de astfel de proiecte.

Descriere generală

Aceasta este o prezentare generala a proiectului pe care il voi implementa.

Schema bloc

Se vor prelua date prin intermediul unei surse de semnal audio (jack sau microfon) de catre ADC-ul integrat in uC, vor fi analizate folosind transformari Fourier si vor fi afisate pe matricea de LED-uri in functie de amplitudinea semnalului pe fiecare frecventa.

Interfata cu utilizatorul

Utilizatorul va putea actiona trei butoane: unul pentru a schimba sursa semnalului audio, unul pentru a cicla printre diferitele moduri de afisare, unul pentru a schimba culorile led-urilor. Pe LCD se vor afisa modul curent de afisare si sursa semnalului audio.

Hardware Design

Semnalul analogic de la input (atat cel de la jack cat si iesirea din preamplificatorul cu LM358N) puteau avea si valori negative, acest lucru afectand microcontroller-ul intr-un mod negativ asa ca am introdus un circuit de DC bias pentru a face ca semnalul sa fie intre 0-5V cu mijlocul in 2.5V. Acest lucru a fost realizat folosind un divizor de tensiune (2 rezistente de 10k) si niste condensatori pentru filtrarea zgomotului. In consecinta, atunci cand nu exista niciun input, ADC-ul citeste valoarea 512. De acest bias trebuie tinut cont atunci cand se iau sample-urile deoarece trebuie scazut din valoarea finala.

Lista de piese

Schema electrica

Software Design

Software-ul este scris in C folosind Visual Studio Code. Codul este impartit in mai multe functii dupa cum urmeaza:

Rezultate Obţinute

Rezultatul final mi-a depasit asteptarile, proiectul fiind unul foarte responsive (cu un refresh rate chiar bun) si cu un impact vizual placut. Carcasa a fost realizata folosind un router CNC, iar una dintre placute (preamplificatorul pentru microfon) a fost realizata de la 0 folosind metoda Toner Transfer.

Demo Video

watch

Concluzii

ADC-ul intern din Atmega324 este unul destul destul de incet si sampling rate-ul maxim este aproximativ 9610 samples/s, prescaler 128. Din aceasta cauza gama de frecvente analizata este undeva intre 30Hz- 4800Hz. A fost un proiect foarte interesant la care chiar am muncit destul de mult pentru ca mi-a facut placere si din care am avut de invatat multe lucruri despre microcontrollere si despre electronica, in general. Satisfactia de a iti vedea proiectul finalizat si functional este una de nedescris. :-D

Download

Codul sursa: ledspectrumanalyzer.zip

Proiect eagle: led_spectrum_analyzer_eagle.zip

Jurnal

18.04.2019 - Realizare placa de baza

4.05.2019 - Realizare PCB preamplificator

8.05.2019 - Comandat piese necesare

10.05.2019 - Procurat piese aditionale + asamblat butoane si placuta DC bias

15.05.2019 - Realizare matrice leduri si inceput de testare pentru FFT

18.05.2019 - Asamblare carcasa

22.05.2019 - Versiune finala de cod + imbunatatiri estetice

Bibliografie/Resurse

Biblioteca FFT: report_e.html

Biblioteca WS2812: https://github.com/cpldcpu/light_ws2812

WS2812B Datasheet: WS2812.pdf

Ideas for frequency buckets: www.waitingforfriday.com

Schema pentru preamplificator: mini-microphone-pre-amplifier-using-lm358

Generare PDF

Generare PDF