ATtiny85 Spectrum Analyzer With Fix_FFT




Introduction: ATtiny85 Spectrum Analyzer With Fix_FFT

About: Your focus determines your reality

ATtiny85 spectrum analyzer for music to RGB LED with FFT

Excited with the new discovery of FHT library. Yours truly definitely want to give it a try on an ATtiny85. After hours massaging the code to make it to work, sadly, none come to functionality (yet). According to this site ATtiny has as small footprint ""ATtiny85 on-board, 8K of flash, 512 byte of SRAM, 512 bytes of EEPROM"" hence can't work with FHT. However, yours truly beg to differ. He noticed that some code in the FHT.cpp can't compile due to reduced instruction sets on ATtiny85. More about that after some workaround can be found.

Nonetheless, yours truly really want to have some fun with sound to light on Arduino's poor cousin, the ATtiny85. Life is so boring without some LEDs' goodness. Just come to recall that, years ago yours truly have done a DIY spectrum analyzer using a modified FFT that use 8bits only, runs off an arduino and LOL shield This modified 8 bit FFT came for a forum discussion . Reusing the same library but has to be modified to for Arduino IDE v1.06 and later by replacing with in the fix_FFT library.

Now first, enjoy the end product of this make

Parts list:

1. Electrect and amplifier circuit; reuse the electret amplifier mentioned in an earlier post;

2. ATTiny85 breakout board; reuse the MitG PCB which is a breakout board for ATtiny85 made earlier

3. RGB LED; a common anode is used

4. Diffuser; a 3D printed LED holder and Fibre Optic cable is used


Step 1: Assemble the Circuitry

Assemble an electret amplifier

This make assumes an LM386 as the audio amplifier for the electret microphone is available.There are many manufacturers of LM386, one of the is TI. Refer to the link above for spec sheet and then scroll down to the diagram "amplifier with minimum parts". If you need help on making a LM386 based audio amplifier, this instructable is helpful on getting started.

Data out from the electret amplifier is connected to an analog pin of the ATtiny85. In the case of this bespoke ATtiny85 breakout board: the MitG PCB, it is pin A2; vcc and gnd also connected to the break out board

Assemble a ATtiny85 breakout board of your choice

ATtiny85 breakout board can be assembled on a breadboard, or a custom made PCB of your choice


Step 2: Program the ATtiny85

use an ISP of your choice to program the ATtiny85

An example of ATtiny85 ISP shield can be found from this link

The operational details of programming an ATtiny85 can be found from this link

Now the goodies!!

Source code for the ATtiny85 spectrum analyzer is on my gist

Step 3: Question to Ponder About Mapping of Audio Frequency to Colour Spectrum

The questions come begging: How to map audio frequency to the colour spectrum??

Drawing inspiration from yours truly secondary school physics: human voice ranges from 85Hz to 255Hz; male voice is at lower frequency bands 85Hz-180Hz whereas female voice is at higher frequency bands 165Hz to 255Hz. As for human hearing, it is from 20Hz to 20K Hz. Furthermore, each musical instruments has it's own frequency range, and as we know, music composes of a variety of frequency stemming for human voice and/or musical instruments. Hence, the choice of strategy will be reflected in the colour observed while a piece of music is played.

Strategy: mapping audio frequency to colour spectrum

1. Mapping of human hearing e.g 20Hz to 20K Hz to 16777216 of possible RGB colours

1a. Mapping of whole audio frequency bands to 6777216 of possible RGB colours.

2. Choosing 3 channels deliberately; one each from the low, mid, and high frequency bands as observed using the spectrum visualizer mentioned earlier. The 3 channels of low, mid, and high corresponds to Blue, Green, and Red; with the intensity of the colour corresponds to the amplitude of that chosen channel. The output of RGB LED will then be "blended".

3. Similar to 2, but instead of choosing the channels deliberately, this algo is to group frequency bands into larger low, mid, and high frequency bands; within each of this group of larger frequency bands , the amplitude that is used to turn on the corresponding LED is the result of averaging all the amplitude from the frequency bands.

4. Similar to 2,3, but first apply a Low Pass Filter at the frequency bands.

5. LED activated by predefined threshold on frequency band6. ........

N. ......

It seems to yours truly, finding an ideal mapping of music genre to colour is going to be an never ending story.


Step 4: Make Awesome Stuff!

Have fun massaging the code into what you have visualize for sound to light.

Speaking of which, how about a christmas tree that changes the colour of the light according to a christmas song?!

Post a link to your instructable too!

Make it Glow!

Participated in the
Make it Glow!

Be the First to Share


    • One Board Contest

      One Board Contest
    • Anything Goes Contest 2021

      Anything Goes Contest 2021
    • Fix It Speed Challenge

      Fix It Speed Challenge



    6 years ago on Introduction

    This is great, I learned about FFT today and after playing with it in MATLAB I wondered if it could be flashed in a ATtiny85. And apparently it can.

    I will test the code later. Cheers.