ARDUINO NANO = ANALISADOR DE ESPECTRO DE AUDIO
ARDUINO NANO = AUDIO SPECTRUM ANALYZER


Foto : Espectro do receptor do FT7, recebendo sinais  (ruido branco), em CW, escala de 0 a 4,5kHz. Note a presença de sinais em torno de 800Hz.
A esquerda o mesmo sinal com uso de um PC + software de audio espectro, de 0 a 4,5kHz.

Mais um equipamento de medições para uso em radio, usando o Arduino.
Este analisador é bem simples e não requer muitos componentes, a maioria que monta este tipo de aparelho, é para ver o espectro dançar ouvindo musica. Nosso uso é outro.
Como dá para ver na foto ou nos videos (link abaixo), o resultado é muito interessante.
É possivel ver a banda passante do nosso radio ou até ajustar a banda passante de um QRP, ou ainda visualizar a reposta de um filtro ladder recem montado.
Este projeto foi baseado nestes links :
Arduino real time spectrum analyzer with TV out

Arduino forum

Arquivo rar do sketch e biblioteca :

Arduino Audio Spectrum Analyzer Sketch and library spectro.rar 


Funcionamento :
O sinal de entrada passa por um amplificador simples com um transistor comum com 3 resistores, 3 capacitores eletroliticos e um potenciometro, para que o arduino possa ter um nivel mais alto de tensão.
O sinal de entrada é dividido em amostras de tensão e submetido a um calculo matematico onde se consegue extrair as frequencias dos sinais.
Os 4,5Khz são dvididos em 64 segmentos de 70,3Hz (aprox), como o meu display tem 180 pixels na horizontal eu fui obrigado a fazer apenas duas barras para cada frequencia, usando 128 pixels. Na vertical este display tem 128 pixels e eu usei todos eles.
É possivel alterar o software, de tal forma a mudar de cor, de 500 em 500 Hz ou menos, assim identificar melhor as medições.

Resultado :
Nos testes com radios ou visualizando filtros o resultado foi muito bom.
No teste com gerador de funções, com onda senoidal  o resultado foi bom até 4,5kHz, acima disto o calculo matematico  destas frequencias se sobrepõe a frequencias mais baixas (acumula valores em celulas de frequencias mais baixas), ficando inviavel o uso para observar frequencias acima de 4,5kHz.
Para observar musica até funciona, mas o que esta na tela não será o real.

Esquema :

VIDEO : ANALISADOR E GERADOR DE SINAIS

VIDEO: ANALISADOR MEDINDO RADIO FT7 CW E SSB

Fotos da montagem :


Foto: Arduino montado em uma PCB padrão com soquete.


Foto: lado inferior da placa, montagem rapida.


Foto: Outra vista da parte superior.

 
Foto:
montagem com soquetes tipo sandwich.


Foto :
Amplificador de audio montado em uma placa (15x25mm) com ilhas .

SKETCH :

++++++++++++++++++++++++++++

#include <fix_fft.h>
char im[128], data[128] ;
int i = 0, val;
#include <TFT.h>
#include <SPI.h>
#define cs   10
#define dc   8
#define rst  9
int x0 = 0;
int x1 = 0;
int y1 = 0;
TFT TFTscreen = TFT(cs, dc, rst);
int alt;  //altura do diplay automatica
int larg; // largura do display automatica

void setup()
{
  TFTscreen.begin();
  TFTscreen.background(0, 0, 0);
  alt = TFTscreen.height();
  larg = TFTscreen.width();
}

void loop()
{
  x0++;
  if (x0 == 100) {
    TFTscreen.background(0, 0, 0); //executa 100 vezes depois limpa
    x0 = 0;
  }
  TFTscreen.stroke(0, 255, 255);
  for (i = 1; i < 128; i++) {
    val = analogRead(5);
    data[i] = val / 4 - 128;
    im[i] = 0;
  }
  fix_fft(data, im, 7, 0);
  for (i = 1; i < 64; i++) {
    data[i] = sqrt(data[i] * data[i] + im[i] * im[i]);
    x1 = i;
    y1 = 5 * data[i];
    if (y1 > 126) y1 = 126;
    // TFTscreen.line(x1, alt, x1, alt - y1);// Uma coluna
    TFTscreen.line(2 * x1, alt, 2 * x1, alt - y1);
    TFTscreen.line (2 * x1 - 1, alt, 2 * x1 - 1, alt - y1); // duas colucas
    //  TFTscreen.line(3*x1-2, alt, 3*x1-2, alt - y1);
    //  TFTscreen.line (3*x1-1, alt, 3*x1-1, alt - y1);
    //  TFTscreen.line (3*x1, alt, 3*x1, alt - y1);// tres colunas
    // TFTscreen.line(1, 2* x1, y1, 2*x1);//128x160 invertendo eixos
    // TFTscreen.line(1, 2* x1 -1, y1, 2*x1-1);//128x160 invertendo eixos
  }
}

++++++++++++++++++++++++++++++

73 de py2ohh miguel
Aug/2018