Sensores

Filtro de primer orden para sensor de temperatura con arduino

Objetivos:

  • Diseñar un filtro digital de primer orden para filtral la temperatura

Desarrollo:

Se utilizo Matlab para diseñar el filtro

fc=20;
wc=2*pi*fc;

%G(s)=(wc/(s+wc))

num = [wc]
den = [1 wc]
fs=1000
Ts =1/fs
sistema = tf(num,den)  % sistema continuo
sisd=c2d(sistema, Ts ,'tustin')

 

Resultados Matlab

  125.7
---------
s + 125.7
 
 
Transfer function:
0.05912 z + 0.05912
-------------------
    z - 0.8818

De función de transferencia z obtenemos la ec. en diferencias

 

y(n)=0.05912*(x(n)+x(n-1))+ 0.8818*y(n-1);

Código Arduino

int analog_pin = A0;   // definimos el pin 0 que analogico como anolog_pin
float xn;// temperatura
float xnanterior=0; // x(n-1)
int tempdigital;
float yn;  // temperatura filtrada
float ynanterior=0;  //  y(n-1)


void setup () {
  Serial.begin(9600);   // habilitamos la transmisción serial 
}
void loop() {
  tempdigital = analogRead(analog_pin);  // leemos lo que entrada en el pin y lo convertimos a digital
  
  xn = (5.0*tempdigital*100)/1024.0;  // calculamos la temperatura a partir de la lectura digital
  
  yn=0.05912*(xn+xnanterior)+ 0.8818*ynanterior;  // ecuación en diferencias
  
  
    
  xnanterior=xn;
  ynanterior=yn;
   
  Serial.println(yn);    // enviamos el valor de temperatura via serial y damos salto de linea y retorno de carro
    
  delay(1);   // pausa de 1 ms ( milisegundos) delay(ms);
}

 

 

 

 

 

2 Comments

    1. Estimado Ziriano, si lo quieres hacer a mano usa la aproximación tusting o bilinial

      s= (2/T)*((z-1)/(z+1))

      donde T es el periodo de muestreo

      En Matlab se hace con

      sisd=c2d(sistema, Ts ,’tustin’)

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *