//Ejemplo ADC - ED2
#include <Arduino.h> //librerías
#define pinADC 34 //definición del pin donde se conecta el potenciómetro
//Variables globales
int adcRaw = 0;
int numeroLecturas = 10; // Número de muestras
int sumaLecturas = 0; // Sumatoria de lecturas
int numLecturas = 10; // Número de muestras
float bufferLecturas[numLecturas]; // Buffer de lecturas
int indexLecturas = 0; // índice de muestras
int adcRaw = 0;
long mAvgSuma = 0; // Valor de adc media movil
long adcfiltrado = 0; // Valor de adc filtrado
//Prototipos de funciones
void promedio(void);
void mediaMovil(void);
//ISR vectores de interrupciones
void setup() {
Serial.begin(115200);
Serial.println("Ejemplo ADC"); //cada vez que corra este programa se imprime esto
adcRaw = 0; //por seguridad
}
void loop() {
adcRaw = analogRead(pinADC); //lee el valor del poten
promedio();
Serial.print("ADC: "); //solo imprime lo que está aquí
Serial.println(adcRaw); //println, le agrega un enter al final
Serial.println(promedioLecturas); //para comparar valores
// Serial.printf("ADC: %d\n", adcRaw); sería lo mismo que las dos líneas anteriores
delay(1000);
}
//Filtro de promedio
void promedio(void){
for(int k= 0; k < numeroLecturas; k++){
sumaLecturas += analogRead(pinAnalog);
delay(1);
}
float promedioLecturas = sumaLecturas / numeroLecturas;
}
//Filtro media movil
// Se resta el último valor y se suma el nuevo valor
mAvgSuma = mAvgSuma – bufferLecturas[indexLecturas] + adcRaw;
bufferLecturas[indexLecturas] = adcRaw; // Se actualiza el valor
indexLecturas++; // Se incrementa el índice
if(indexLecturas >= numLecturas){
indexLecturas = 0;
}
adcFiltrado = mAvgSuma / numLecturas;
/***************************************************************************************
Para que no hayan ruidos con solo este programa se deben de agregar
filtros para que solo nos tire la info necesaria
Con el filtro promedio se filtró el ruido y quita los grandes picos que
tira solo el adc
Con el filtro media movil se logró filtrar mejor el ruido del potenciómetro
No tiene tantos picos como el filtro promedio. Sin embargo, se tarda un poco
en seguir la señal, no la sigue muy bien como el filtro promedio
Si la señal cambia constantemente, resulta mejor el filtro promedio
Si no hay mucho cambio o el cambio es lento, resulta mejor el filtro media movil
Filtro EMA funciona mucho mejor que los anteriores, pero se tarda más con los cambios
cambia suavecito. Si se cambia el alfa a más grande el cambio es más brusco pero más rápido,
si es muy suave, cambia muy lento. Cambiar el factor de suavisado (alfa), mientras más grande
o más rápido, más ruido
***************************************************************************************/