14
PRACTICA 33. Graficar los datos enviados de Arduino a MATLAB y pasar esa grafica a Simulink. Objetivo: Al finalizar la práctica, el participante será capaz de utilizar la placa Arduino como tarjeta de adquisición de datos y graficar en MATLAB, posteriormente esos datos se podrán enviar a Simulink para graficarlos, y, en caso de que aplique, poder obtener la función de transferencia. Material y Equipo a Utilizar. 1 placa Arduino UNO 1 potenciómetro 10K ohms Software MATLAB Desarrollo: 1.- Cargue en Arduino el siguiente programa: // las variables no son necesarias void setup() { Serial.begin(9600); } void loop() { int grafica=analogRead(A0); Serial.println(grafica); delay(20); } 2.- Arme el circuito que se muestra en la siguiente figura: Fig. 33.1

Graficar Con Arduino y Matlab

  • Upload
    ssdewer

  • View
    280

  • Download
    12

Embed Size (px)

DESCRIPTION

Arduino

Citation preview

Page 1: Graficar Con Arduino y Matlab

PRACTICA 33. Graficar los datos enviados de Arduino a MATLAB y pasar esa grafica a Simulink. Objetivo: Al finalizar la práctica, el participante será capaz de utilizar la placa Arduino como tarjeta de adquisición de datos y graficar en MATLAB, posteriormente esos datos se podrán enviar a Simulink para graficarlos, y, en caso de que aplique, poder obtener la función de transferencia. Material y Equipo a Utilizar. 1 placa Arduino UNO 1 potenciómetro 10K ohms Software MATLAB Desarrollo: 1.- Cargue en Arduino el siguiente programa: // las variables no son necesarias void setup() { Serial.begin(9600); } void loop() { int grafica=analogRead(A0); Serial.println(grafica); delay(20); } 2.- Arme el circuito que se muestra en la siguiente figura:

Fig. 33.1

Page 2: Graficar Con Arduino y Matlab

3.- Abra MATLAB y en la ventana de nombre “Editor” debe crear una función llamada “Graficar_arduino(muestras)”. Copie y pegue el siguiente código: function voltaje=Graficar_arduino(muestras) close all; clc; voltaje=0; %variable donde se guardarán los datos %se inicia puerto serie a utilizar delete(instrfind({'Port'},{'COM3'})); puerto=serial('COM3'); puerto.BaudRate=9600; %Se abre puerto serie fopen(puerto); %Declarando contador de muestras ya tomadas contador=1; %Ventana para la grafica figure('Name','Comunicación Serial: Matlab con Arduino') title('Grafica de Datos Analogicos de Arduino') xlabel('Número de muestra'); ylabel('Voltaje (V)'); grid off; hold on; %Bucle While para dibujar las muestras while contador<=muestras ylim([0 5.1]); xlim([0 muestras]); dato=fscanf(puerto,'%d')'; voltaje(contador)=(dato*5)/1024; plot(voltaje); drawnow contador=contador+1; end %se cierra la conexión con el puerto serie fclose(puerto); delete(puerto); end Nota: Guarde este código en la carpeta “MATLAB” que se encuentra en “Mis Documentos”

Nota:

Page 3: Graficar Con Arduino y Matlab

El puerto Serie a utilizar para recibir datos, deberá ser el mismo que Arduino utiliza al enviar datos, para este caso, se está utilizando en puerto COM3, en caso de ser diferente el puerto que usa Arduino, favor de modificar las líneas que se encuentran marcadas con azul. La velocidad de transferencia deberá ser de 9600 baudios, tanto en arduino como en MALTLAB. 4.- En MATLAB vaya a la ventana de nombre “COMAND WINDOW” y escriba el comando “Graficar_arduino(500)” y presione ENTER (ES IMPORTANTE QUE EL ARCHIVO HAYA SIDO GUARDADO EN LA CARPETA “MIS DOCUMENTOS/MATLAB”. Lo que se hace aquí es llamar a la función que acaba de crear con el código de arriba. Para que la función sea llamada correctamente, debe estar escrita de la misma manera que como la escribió en el código. El número 500 indica que se tomarán 500 muestras para graficar. Puede variar este número de acuerdo al número de muestras que desee manejar. 5.- Comience a variar el potenciómetro y verá que una gráfica aparece en su pantalla siguiendo los valores que usted manda por el potenciómetro. Al llegar al número de muestras programado la gráfica se detendrá y en la ventana “Comand Window” se mostrarán los valores capturados por MATLAB. Como se ilustra en las imágenes 33.2 y 33.3

Fig. 33.2. Grafica obtenida por datos enviados desde arduino

Page 4: Graficar Con Arduino y Matlab

Fig. 33.3. Datos obtenidos por MATLAB que fueron enviados desde arduino.

6.- Guarde los datos obtenidos, esto es muy importante ya que si la gráfica se nos extravía, la podemos recuperar con los datos. Para ello note que en la ventana “WorkSpace” Se ha generado un archivo de nombre “ans”, este archivo contiene los datos de la gráfica.

Fig. 33.4. Datos de la gráfica almacenados en el archivo “ans” en la ventana del WorkSpace

Para guardar los datos, debemos dar click derecho sobre el archivo “ans” e ir al menú “Save as”. Seleccionamos la carpeta “Mis Documentos/MALTAB” y colocamos el nombre “ans” para identificarlo posteriormente.

Page 5: Graficar Con Arduino y Matlab

SI le damos doble click al archivo “ans” nos aparecerá un archivo similar a Excel en la ventana “Editor”. Estos archivos están colocados de manera horizontal.

Fig. 33.5. Datos provenientes de arduino que fueron graficados como se indica en la figura 33.2.

Una vez que tenemos los datos podemos pasar la gráfica a Simulink considerando lo siguiente: A.- Simulink nos pide un archivo “*.m” (como el archivo “ans” que acabamos de guardar) que incluya dos columnas (MATLAB los llama vectores). La primer columna deberá tener los datos que se graficarán en el eje x (en este caso es el tiempo) y la segunda columna los datos obtenidos por MATLAB que proporcionan la forma de la gráfica. B.- Simulink solo muestra una gráfica de 0-10 segundos, por lo que, el vector de tiempo que generemos deberá ser menor o igual a 10. C.- Para que la gráfica sea reconstruida de forma similar a la original, SIMULINK también nos pide que el número de datos proporcionados por el vector de tiempo sea igual al número de muestras tomadas. Es decir, si nosotros tomamos 500 muestras, el vector de tiempo deberá tener 500 valores: SIEMPRE RESPETANDO QUE NO EXCEDA LOS 10 SEGUNDOS que simulink es capaz de graficar. Veamos cómo se hace. 7.- Como se muestra en la figura 33.5 los datos están acomodados en forma de fila, debemos pasarlos a forma de columna. Para ello abra el archivo “ans” que anteriormente guardó en la carpeta “Mis Documentos/MATLAB” dando doble click sobre él. 7.- En el “comand window” tecleamos “r=Transpose(ans). El comando “Transpose” nos permite sacar la matriz transpuesta de un vector. En este caso nos ayudará a convertir los datos de “ans” de forma horizontal a una columna en vertical, como se muestra a continuación.

Page 6: Graficar Con Arduino y Matlab

Fig.33.6. Datos de “ans” pasados a columna en el archivo “r”

Note que en la ventana “Workspace” se ha generado un archivo de nombre “r”, y que en la ventana de “editor” ahora se muestran los archivos de “r” de forma vertical una vez colocado el comando r=transpose(ans) . 8.- Ahora crearemos un vector de tiempo que contenga 500 valores (500 por que tenemos 500 muestras), tecleamos el siguiente comando: t=0.01:0.02:10 Generamos un vector que vaya desde 0.01, y lo incremente de 0.02 en 0.02 hasta 10, obteniendo un total de 500 valores. Lo comprobamos con el comando “length(t)” Como se muestra en la siguiente figura, la ventana de comando nos genera un nuevo archivo llamado “t”, al darle doble click, en el editor nos muestra los valores de tiempo generados (pero en forma horizontal), mientras que en el “comand window” se nos muestra que la longitud de los datos es de 500.

Page 7: Graficar Con Arduino y Matlab

Fig. 33.7. Datos de tiempo generados en el archivo “t” con una longitud de 500 mostrados de forma horizontal.

8.- Pasamos los datos “t” de fila a columna como lo hicimos en el paso 7, esta vez tecleamos time=transpose(t) y obtenemos un nuevo archivo “*.m” llamado “time” que contiene los datos de tiempo, pero esta vez, generados de manera vertical, justo como lo pide Simulink. Veamos la siguiente imagen:

Page 8: Graficar Con Arduino y Matlab

Fig.33.8. Vector de tiempo “t” generado en una matriz vertical de nombre “time”

9- Podemos comprobar que estamos reconstruyendo la gráfica correctamente con el comando siguiente: plot(time,r) El cual nos permite ver que la gráfica está quedando exactamente igual a la original.

Page 9: Graficar Con Arduino y Matlab

Fig.33.9. Gráfica reconstruida, formada por los vectores “time” y “r” que incluyen datos de manera

vertical.

10.- Finalmente debemos crear una matriz que contenga las dos columnas que acabamos de transponer, la columna “r” y la columna “time”, siempre teniendo en cuenta que, del lado derecho del comando debe ir la columna referente al tiempo (que es la del eje x) y del lado izquierdo la columna referente a los datos (que es la del eje y). Escribimos: grafica=[time r] donde “´grafica” nos generará el archivo “gráfica.m”, y escribimos time(espacio)r entre corchetes. Veamos la gráfica 33.10 y notemos que ahora el archivo “grafica.m” contiene las dos columnas necesarias que nos pide Simulink colocadas de manera vertical.

Page 10: Graficar Con Arduino y Matlab

Fig.33.10. Matriz de 500x2 generada por el comando “grafica=[time r]”

11.- En el “comand window” tecleamos “simulink” y presionamos “enter”, se abrirá la siguiente ventana:

Fig. 33.11. Ventana principal de Simulink

Page 11: Graficar Con Arduino y Matlab

12. Nos vamos a la parte superior central de la pantalla y le damos click en “new model”. Ver figura 33.12.

Fig. 33.12. Abrir nuevo modelo

13.- Se abrirá la siguiente ventana:

Fig.33.13 Ventana de diagramas de Simulink

Page 12: Graficar Con Arduino y Matlab

14.- En la ventana principal de Simulink nos vamos al menú “Commonly Used Blocks” y seleccionamos el icono “Scope” y lo arrastramos a la ventana del “new model”

Fig.33.14. Scope proveniente del menú “commonly used blocks”

15.- Nos trasladamos al menú “Sources”, buscamos el bloque “From WorkSpace” y lo arrastramos a la ventana del New Model” y unimos la salida de este bloque con la entrada del scope.

Fig. 33.15. Bloque “From Workspace” Unido al bloque “Scope”

16.- El bloque From Workspace debe contener los datos del archivo “grafica.m” que creamos como matriz de dos columnas y 500 valores. Para ello damos doble click sobre dicho bloque, y en la opción “Data” escribimos el nombre del archivo que vamos a trasladar, para este caso es el nombre “grafica”. En la opción Output “Data Type”, seleccionamos “doble”. La opción “Sample Time” quedará en cero y en la opción “Form output after final data value by:” seleccionamos “extrapolation” Damos click en “Apply” y posteriormente en “OK”. La configuración debe quedar tal y como se muestra a continuación: Nota: Es importante que el archivo “grafica.m” esté cargado en la ventana “WorkSpace” caso contrario, el bloque de Simulink no tomará los datos.

Page 13: Graficar Con Arduino y Matlab

33.16. Configuración del bloque “From WorkSpace”

17.- Finalmente debemos dar click en el botón “Run” y posteriormente dar doble click sobre el icono “Scope” y veremos la misma gráfica que capturamos con arduino.

Fig. 33.17. Botón Run ubicado en la parte superior central de Simulink

Page 14: Graficar Con Arduino y Matlab

Fig. 33.18 Grafica de MATLAB reconstruida en simulink.

Si comparamos la gráfica de la figura 33.18, con las de las figuras 33.9 y 33.2, veremos que son idénticas. Ahora podemos obtener fácilmente la función de transferencia de una planta cualquiera (presión, caudal, temperatura, velocidad, posición nivel, etc) con la ayuda de Simulink.