CAPTURA DE DATOS ARDUINO MATLAB PROYECTO ESTOCÁSTICOS TERCER PARCIAL
6 DE AGOSTO DE 2014 CARLOS ORTIZ; GORDY GARZON 2014
1 CONTENIDO 2
Objetivos ............................................................................................................................................... 2
3
Marco Teórico ....................................................................................................................................... 2 3.1 3.1.1
4
LM35 ............................................................................................................................................. 2 Características ....................................................................................................................... 2
3.2
Matlab ........................................................................................................................................... 2
3.3
Arduino ......................................................................................................................................... 3
3.4
Correlación .................................................................................................................................... 3
3.4.1
Sentido y forma de la correlación ......................................................................................... 3
3.4.2
Coeficientes de correlación................................................................................................... 4
3.4.3
Interpretación geométrica .................................................................................................... 4
3.4.4
Distribución del coeficiente de correlación .......................................................................... 5
Capítulo I ............................................................................................................................................... 6 4.1
Aplicación 1 ................................................................................................................................... 6
4.2
Aplicación 2 ................................................................................................................................... 7
5
Captura de Datos y Autocorrelación de dos Señales .......................................................................... 10
6
Análisis de Resultados ......................................................................................................................... 14
7
6.1
Captura de Datos ........................................................................................................................ 14
6.2
Correlación y Autocorrelación .................................................................................................... 15
6.3
Autocorrelacion Cruzada ............................................................................................................ 16
Conclusiones ....................................................................................................................................... 16
1
Control de Temperatura Arduino-Matlab 2 OBJETIVOS
Implementar un sistema de control de temperatura a través de un LM35 muestreado por arduino y graficado por Matlab Comprobar las temperaturas de los dos sensores mediante la auto correlación Aplicar los conocimientos de digitalización de señales
3 MARCO TEÓRICO 3.1 LM35 El LM35 es un sensor de temperatura con una precisión calibrada de 1ºC. Su rango de medición abarca desde -55°C hasta 150°C. La salida es lineal y cada grado centígrado equivale a 10mV, por lo tanto: 150ºC = 1500mV -55ºC = -550mV1 3.1.1
Características Sus características más relevantes son:
Está calibrado directamente en grados Celsius. La tensión de salida es proporcional a la temperatura. Tiene una precisión garantizada de 0.5°C a 25°C. Opera entre 4 y 30 voltios de alimentación. Baja impedancia de salida. Baja corriente de alimentación (60uA). Bajo costo.
3.2 MATLAB MATLAB (abreviatura de MATrix LABoratory, "laboratorio de matrices") es una herramienta de software matemático que ofrece un entorno de desarrollo integrado (IDE) con un lenguaje de programación propio (lenguaje M) y servicio de especie. Está disponible para las plataformas Unix, Windows, Mac OS X y GNU/Linux. Entre sus prestaciones básicas se hallan: la manipulación de matrices, la representación de datos y funciones, la implementación de algoritmos, la creación de interfaces de usuario (GUI) y la comunicación con programas en otros lenguajes y con otro s dispositivos hardware. El paquete MATLAB dispone de dos herramientas adicionales que expanden sus prestaciones, a saber, Simulink (plataforma de simulación multidominio) y GUIDE (editor de interfaces de usuario - GUI). 2
Además, se pueden ampliar las capacidades de MATLAB con las cajas de herramientas (toolboxes); y las de Simulink con los paquetes de bloques (blocksets). Es un software muy usado en universidades y centros de investigación y desarrollo. En los últimos años ha aumentado el número de prestaciones, como la de programar directamente procesadores digitales de señal o crear código VHDL.
3.3 ARDUINO Arduino es una plataforma de hardware libre, basada en una placa con un microcontrolador y un entorno de desarrollo, diseñada para facilitar el uso de la electrónica en proyectos multidisciplinares.2 3 El hardware consiste en una placa con un microcontrolador Atmel AVR y puertos de entrada/salida.4 Los microcontroladores más usados son el Atmega168, Atmega328, Atmega1280, ATmega8 por su sencillez y bajo coste que permiten el desarrollo de múltiples diseños. Por otro lado el software consiste en un entorno de desarrollo que implementa el lenguaje de programación Processing/Wiring y el cargador de arranque que es ejecutado en la placa.4 Arduino se puede utilizar para desarrollar objetos interactivos autónomos o puede ser conectado a software tal como Adobe Flash, Processing, Max/MSP, Pure Data). Las placas se pueden montar a mano o adquirirse. El entorno de desarrollo integrado libre se puede descargar gratuitamente.
3.4 CORRELACIÓN En probabilidad y estadística, la correlación indica la fuerza y la dirección de una relación lineal y proporcionalidad entre dos variables estadísticas. Se considera que dos variables cuantitativas están correlacionadas cuando los valores de una de ellas varían sistemáticamente con respecto a los valores homónimos de la otra: si tenemos dos variables (A y B) existe correlación si al aumentar los valores de A lo hacen también los de B y viceversa. La correlación entre dos variables no implica, por sí misma, ninguna relación de causalidad (Véase cum hoc ergo propter hoc). 3.4.1
Sentido y forma de la correlación La relación entre dos variables cuantitativas queda representada mediante la línea de mejor ajuste, trazada a partir de la nube de puntos. Los principales componentes elementales de una línea de ajuste y, por lo tanto, de una correlación, son la fuerza, el sentido y la forma:
La fuerza extrema según el caso, mide el grado en que la línea representa a la nube de puntos: si la nube es estrecha y alargada, se representa por una línea recta, lo que indica que la relación es fuerte; si la nube de puntos tiene una tendencia elíptica o circular, la relación es débil. El sentido mide la variación de los valores de B con respecto a A: si al crecer los valores de A lo hacen los de B, la relación es directa (pendiente positiva); si al crecer los valores de A disminuyen los de B, la relación es inversa (pendiente negativa). La forma establece el tipo de línea que define el mejor ajuste: la línea recta, la curva monotónica o la curva no monotónica 3
3.4.2
Coeficientes de correlación Existen diversos coeficientes que miden el grado de correlación, adaptados a la naturaleza de los datos. El más conocido es el coeficiente de correlación de Pearson (introducido en realidad por Francis Galton), que se obtiene dividiendo la covarianza de dos variables entre el producto de sus desviaciones estándar. Otros coeficientes son:
3.4.3
Coeficiente de correlación de Spearman Correlación canónica Coeficiente de Correlación Intraclase
Interpretación geométrica Dados los valores muéstrales de dos variables aleatorias e , que pueden ser consideradas como vectores en un espacio a n dimensiones, pueden construirse los "vectores centrados" como: E
.
El coseno del ángulo alfa entre estos vectores es dado por la fórmula siguiente:
Pues es el coeficiente de correlación muestral de Pearson. El coeficiente de correlación es el coseno entre ambos vectores centrados: Si r = 1, el ángulo Si r = 0, el ángulo Si r =-1, el ángulo Más generalmente:
°, ambos vectores son colineales (paralelos). °, ambos vectores son ortogonales. °, ambos vectores son colineales de dirección opuesto. .
Por supuesto, del punto vista geométrica, no hablamos de correlación lineal: el coeficiente de correlación tiene siempre un sentido, cualquiera sí que sea su valor entre -1 y 1. Nos informa de modo preciso, no tanto sobre el grado de dependencia entre las variables, que sobre su distancia angular en la hiperesfera a n dimensiones.
La Iconografía de las correlaciones es un método de análisis multidimensional que reposa en esta idea. La correlación lineal se da cuando en una nube de puntos estos se encuentran o se distribuyen alrededor de una recta. 4
La fórmula de correlación para dos series distintas con cierto desfase "k", está dada por la fórmula:
3.4.4
Distribución del coeficiente de correlación El coeficiente de correlación muestral de una muestra es de hecho una variable aleatoria, eso significa que si repetimos un experimento o consideramos diferentes muestras se obtendrán valores diferentes y por tanto el coeficiente de correlación muestral calculado a partir de ellas tendrá valores ligeramente diferentes. Para muestras grandes la variación en dicho coeficiente será menor que para muestras pequeñas. R. A. Fisher fue el primero en determinar la distribución de probabilidad para el coeficiente de correlación. Si las dos variables aleatorias que trata de relacionarse proceden de una distribución gaussiana bivariante entonces el coeficiente de correlación r sigue una distribución de probabilidad dada por:
Donde: Es la distribución gamma Es la función gaussiana hipergeométrica. Nótese que
, por tanto r es estimador sesgado de .
Puede obtenerse un estimador aproximado no sesgado resolviendo la ecuación: For Aunque, la solución:
Es subóptima. Se puede obtener un estimador sesgado con mínima var ianza para grandes valores de n, con sesgo de orden
buscando el máximo de la expresión:
5
, i.e. En el caso especial de que
Donde
, la distribución original puede ser reescrita como:
es la función beta.
4 CAPÍTULO I En esta práctica se estudiará el uso de la auto correlación y de la correlación cruzada. Estas operaciones se van a utilizar principalmente para el reconocimiento de determinados patrones dentro de una señal, para la identificación de pautas y para la determinación de la relación existente entre sucesivas muestras.
4.1 APLICACIÓN 1 La primera aplicación de la auto correlación de una señal es determinar las posibles repeticiones de patrones en la señal. Para comprobar este punto se va a generar una sinusoide de frecuencia igual a 100 Hz con amplitud uno y muestreada a 1 kHz. %Generación de la señal n = 0:99; x = cos(2*pi*n*0.1); %Cálculo de la autocorrelación normalizada y = xcorr(x,'coeff'); %Representación de las dos señales subplot(221), stem(x,'k'), title('(a)') subplot(222), plot(x,'k'), title('(b)') subplot(223), stem(y,'k'), title('(c)') subplot(224), plot(y,'k'), title('(d)')
La gráfica obtenida al emplear este código se muestra en la figura siguiente. Podemos apreciar que la autocorrelación tiene una longitud doble a la señal temporal. Este hecho se debe a que los desplazamientos, a la hora de calcular la autocorrelación, pueden ser positivos o negativos. El índice central se corresponde con un desplazamiento cero y, se corresponde, lógicamente, con el valor máximo de dicha correlación.
6
4.2 APLICACIÓN 2 Para la siguiente aplicación vamos hacer la captura en tiempo real de dos señales analógicas procesadas por medio de un arduino y graficadas en Matlab. Las conversión de las señales tienen una resolución de 10 bits y los voltajes referenciales son de 0 – 5 lo que lo hace ideal para varios sensores que se los puede conectar en las entradas analógicas A0 y A1. %Apertura del serie (COM) %Borrar previos delete(instrfind({'Port'},{'COM4'})); %Crear objeto serie s = serial('COM4','BaudRate',9600,'Terminator','CR/LF'); warning('off','MATLAB:serial:fscanf:unsuccessfulRead'); %Abrir puerto fopen(s); %Parámetros de medidas tmax = 10; % tiempo de captura en s rate = 33; % resultado experimental (comprobar) %Preparar la figura f = figure('Name','Captura'); a = axes('XLim',[0 tmax],'YLim',[0 5.1]); l1 = line(nan,nan,'Color','r','LineWidth',2); l2 = line(nan,nan,'Color','b','LineWidth',2);
7
xlabel('Tiempo (s)') ylabel('Voltaje (V)') title('Captura de voltaje en tiempo real con Arduino') grid on hold on %Inicializar Captura v1 = zeros(1,tmax*rate); v2 = zeros(1,tmax*rate); i = 1; t = 0; %Ejecutar Bucle Temporizado tic while t
Para la Parte del Arduino la conexión es la siguiente
8
void setup() { // inicializar puerto serie Serial.begin(9600); int out1 = 0; int out2 = 0; } void loop() { // leer pines out1 = analogRead(A0); out2 = analogRead(A1); // enviar Serial.print(out1); Serial.print(","); Serial.println(out2); // esperar delay(20); } Mediante el código enviamos los datos transformados por el conversor ADC integrado en el arduino y lo enviamos mediante una comunicación R232 de tal forma que Matlab lo pueda leer y trabajar con estos valores en forma de vector. Y obtenemos la gráfica de los dos sensores en escala de grados centígrados en tiempo real de 20 segundos
9
5 CAPTURA DE DATOS Y AUTOCORRELACIÓN DE DOS SEÑALES Para realizar la implementación de los sensores de temperatura vamos a capturar los valores enviados desde el arduino hasta Matlab, una vez ahí los datos los almacenaremos en vectores para poder trabajar con los datos. Cuando se tiene los dos vectores con los parámetros de la temperatura y el tiempo obtendremos la autocorrelación de las señales para verificar si los dos sensores están trabajando de igual forma y ver cuál es el error uno frente a otro. Mediante el código de obtención de datos de Matlab una vez obtenidos los dos vectores calcularemos la autocorrelación de cada una de las señales para luego realizar una comparación. En el arduino mientras estaremos enviando los valores en temperatura a una pantalla lcd y a su vez al puerto serie por medio de una comunicación R232 a Matlab. Código de Matlab %% Apertura del serie (COM) %borrar previos delete(instrfind({'Port'},{'COM8'})); %crear objeto serie s = serial('COM8','BaudRate',9600,'Terminator','CR/LF'); warning('off','MATLAB:serial:fscanf:unsuccessfulRead'); %abrir puerto fopen(s); % parámetros de medidas tmax = 20; % tiempo de captura en s rate = 23; % resultado experimental (comprobar) % preparar la figura f = figure('Name','Captura'); a = axes('XLim',[0 tmax],'YLim',[0 100.1]); l1 = line(nan,nan,'Color','r','LineWidth',2); l2 = line(nan,nan,'Color','b','LineWidth',2); xlabel('Tiempo (s)') ylabel('Voltaje (V)') title('Captura de voltaje en tiempo real con Arduino') grid on hold on % inicializar v1 = zeros(1,tmax*rate); v2 = zeros(1,tmax*rate); i = 1; t = 0; % ejecutar bucle cronometrado tic while t
10
% leer del puerto serie a = fscanf(s,'%d,%d')'; v1(i)=a(1)*100/204; v2(i)=a(2)*100/204; % dibujar en la figura x = linspace(0,i/rate,i); set(l1,'YData',v1(1:i),'XData',x); set(l2,'YData',v2(1:i),'XData',x); drawnow % seguir i = i+1; end % Autocorrelacion de las señales legend('Temperatura 1','Temperatura 2'); figure(2) d=xcorr(v1,'coeff'); [z lag1] =xcorr(v1,'coeff'); subplot(211) plot(v1,'k'); title('Grafica en tiempo real primera senal') subplot(212) stem(d,'b') title('autoccorrelacion de la primera senal') figure(3) h=xcorr(v2,'coeff'); subplot(211) plot(v2,'k'); title('Grafica en tiempo real primera senal') subplot(212) stem(h,'b') title('autoccorrelacion de la segunda senal') figure(4) [zz lag2] = xcorr(v1,v2,'coeff'); %correlacion cruzada %Representación de las señales plot(lag1,z,'Color','g') hold on grid on plot(lag2, zz,'Color','r','LineWidth',2) if d==h disp('las temperaturas son iguales'); end % resultado del cronometro clc; fprintf('%g s de captura a %g cap/s \n',t,i/t); %% Borrar Puerto fclose(s); delete(s); clear s;
11
Programa en Arduino #include void setup() { // inicializar puerto serie Serial.begin(9600); lcd.begin(16,2); pinMode(A1,INPUT); lcd.setCursor(0,0); lcd.print("PE PROYECTO"); lcd.setCursor(0,1); lcd.print("GARZON - ORTIZ"); delay(1000); } void loop() { // leer pines out1 = analogRead(A0); out2 = analogRead(A1); // enviar Serial.print(out1); Serial.print(","); Serial.println(out2); // esperar delay(10); float Centigrados = centi(); float Centigrados1= centi1(); lcd.setCursor(0,0); lcd.print("T1="); lcd.print(Centigrados); lcd.print(" \337C "); lcd.setCursor(0,1); lcd.print("T2="); lcd.print(Centigrados1); lcd.print(" \337C "); delay(10); } float centi() { // Funcion para leer el dato analogico y convertirlo a digital: int dato=0,dato1=0; float c; 12
dato=analogRead(A0); c = (500.0 * dato)/1023; return (c); } float centi1() { // Funcion para leer el dato analogico y convertirlo a digital: int dato1=0; float c; dato1=analogRead(A1); c = (500.0 *dato1)/1023; return (c); } El circuito a implementar es el siguiente:
13
6 ANÁLISIS DE RESULTADOS 6.1 CAPTURA DE DATOS En la siguiente imagen podemos ver la captura de datos en Matlab de los dos sensores en una escala de temperatura de 0 – 100 grados centígrados en un tiempo de 20 segundos Y en la segunda figura la captura de datos en el arduino y mostrada en una pantalla LCD
Figura 1
Figura 2
14
6.2 CORRELACIÓN Y AUTOCORRELACIÓN En las siguientes graficas se muestra la auto correlación de las dos señales hechas vector mediante el código mostrado anteriormente
15
6.3 AUTOCORRELACIÓN CRUZADA En la siguiente grafica se puede observar la autocorrelacion esta desfasa por lo tanto las señales en el periodo no fueron iguales a cierta temperatura. Por medio de la autocorrelacion cruzada se puede observar cuando las señales son iguales en el intervalo de tiempo establecido nunca llegaran a ser iguales puesto que a bajos voltajes existe la introducción de ruido en la señal por causa de los generadores de voltaje pero en gran parte si, si variamos la temperatura de un sensor se podrá ver un desfase de una de las dos señales mas pronunciado.
7 CONCLUSIONES
Mediante la correlacion podemos ver como cambia una señal en función de otro parámetro en este caso la temperatura en función del tiempo Con la correlacion cruzada podemos ver si dos señales son iguales Con Matlab podemos obtener datos muestreados y enviados por el puerto serial los cuales podemos almacenarlos en forma de vector para poder trabajar con estos. La función de correlación cruzada muestral (FCCM) entre una serie de t iempo y los residuos de un modelo propuesto para representar dicha serie constituye una herramienta de gran 16
utilidad para verificar si este modelo puede considerarse apropiado para la serie en consideración. Si los elementos del lado izquierdo del croscorrelograma no muestran ninguna estr uctura y los elementos del lado derecho reproducen la estructura de autocorrelación de la serie, el modelo propuesto es correcto; en caso contrario, el lado derecho del autocorrelograma contiene elementos de la estructura de autocorrelación del modelo correcto que permiten su identificación. El procedimiento presentado en este artículo es de gran utilidad en el análisis de series de tiempo univariadas porque se puede iniciar con modelo muy aproximado, incluso errado, y se logra determinar si el modelo propuesto es correcto. En caso contrario se tienen nuevos elementos que permiten una identificación correcta del modelo buscado.
8 BIBLIOGRAFÍA 1. Bartlett, M. S. (1985), Stochastic Processes, Cambridge University Press, Cambridge, USA. 2. Beguin, J. M., Gourieroux, C. & Monfort, A. (1980), Identification of a Mixed AutoregressiveMoving Average Process: The Corner Method, Time Series, Amsterdam, Nederlans. 3. Box, G. E. P. & Jenkins, G. M. (1976), Time Series Analysis: Forecasting and Control, HoldenDay, San Francisco, USA. 4. Castaño, E. (2005), La función de correlación cruzada en series no estacionarias: identificación, tendencias determinísticas y raíces unitarias, Tesis de maestría, Universidad Nacional de Colombia, Sede Medellín, Facultad de Ciencias, Escuela de Estadística. 5. Rosales, L. F. (2004), La función de correlación cruzada como elemento de diagnóstico para los modelos ARMA(p,q), Trabajo de grado, Universidad Nacional de Colombia, Sede Medellín, Facultad de Ciencias, Escuela de Estadística. 6. Schwarz, G. (1978), ‘Estimating the Dimension of a Model’, Ann. Statist 6(2), 461 – 464. 7. Tsay, R. S. & Tiao, G. C. (1984), ‘Consistent Estimates of Autoregresive Parameters and Extended Sample Autocorrelation Function for Stationary and Non-stationary ARMA Models’, Journal of the American Statistical Association 79, 84 –96. 8. Tsay, R. S. & Tiao, G. C. (1985), ‘Use of Canonical Analysis in Time Series Model Identification’, Biometrika 72, 299–315. 9. Wei,W.W. S. (1990), Time Series Analysis, Univariate and Multivariate Methods, AddisonWesley, California, USA.
17