Como definir Taxa de Amostragem Arduino UNO

Olá amigos,

Estou fazendo um projetinho com Arduino UNO e gostaria de uma ajuda. Através de um sensor de corrente, quero capturar cerca de 4096 amostras em 1s (não preciso de mais informações além do 1º s), mas não estou encontrando onde consigo mexer no tempo de amostragem do Arduino, para que ele me dê essa quantidade de informação.

Alguém tem alguma ideia ?

Acredito que para isso eu precise definir um Tempo de Amostragem (Ts) em torno de 976us, para conseguir uma Frequência de Amostragem (fs) de 1025 Hz +/- ( fs = 1/ Ts ) .

Preciso desses valores para trabalhar com banda de 500 Hz, da qual consigo verificar freqûencias até a 7ª harmônica para uma alimentação de 60 Hz.

Δ f = fs/N = 1025/4096 = 0,25 Hz

f máx = ( N x Δf ) / 2 = ( 4096 x 0,25 ) / 2 = 512,5 Hz

Segue meu código:
(Projeto usa o sensor SCT 30A para capturar os valores da corrente elétrica). O código foi retirado do "Medidor de Energia" do site FilipeFlop

//Programa : Medidor de energia elétrica com Arduino e SCT-013
//Autor : FILIPEFLOP
 
//Baseado no programa exemplo da biblioteca EmonLib
 
//Carrega as bibliotecas
#include "EmonLib.h" 
#include <LiquidCrystal.h>
 
EnergyMonitor emon1;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
 
//Tensao da rede eletrica
int rede = 127.0;
 
//Pino do sensor SCT
int pino_sct = 1;
 
void setup() 
{
  lcd.begin(16, 2);
  lcd.clear();
  Serial.begin(9600);   
  //Pino, calibracao - Cur Const= Ratio/BurdenR. 1800/62 = 29. 
  emon1.current(pino_sct, 30);
  //Informacoes iniciais display
  lcd.setCursor(0,0);
  lcd.print("Corr.(A):");
} 
  
void loop() 
{ 

  //Calcula a corrente  
  double Irms = emon1.calcIrms(1480);
  //Mostra o valor da corrente
  
  Serial.print("Corrente: ");
  
  Serial.print(Irms); // Irms
  Serial.println();
  lcd.setCursor(10,0);
  lcd.print(Irms);

 
  delay(1000);
  
}

Já ouviste falar do termo oversampling?
O ADC tem um prescaler (registo ADCSRA) que te permite dividir a frequência do ADC para uma gama mais apropriada. Eu nunca me dei ao trabalho de fazer as contas para ver qual é a frequência.

https://www.avrfreaks.net/forum/avr-adc-prescaler-and-adc-clock-frequency

Eu confirmaria qual é a maneira de correr o ADC dentro do envelope óptimo (50kHz a 200kHz) e usaria a frequência mais rápida.

Outra coisa que podes tentar fazer que tem mais controlo da temporização é utilizares um timer para iniciar a conversão. Como os timers tem prescaler e funções de comparação é mais simples de atingir uma frequência específica do que ir apenas pelo prescaler do ADC.

Nota: Esse projecto necessitaria duma medida de tensão também... e isso adiciona uma dificuldade interessante quando se usa um Arduino para fazer a amostragem do sinal.

cara estou com a mesma dificuldade, caso tenha conseguido resolver seu problema, poderia me ajudar ????

Harlysson_hegler@hotmail.com