You are on page 1of 14

PRACTICA 33.

Graficar los datos enviados de Arduino a MATLAB y pasar


esa grafica a Simulink.
Objetivo: Al finalizar la prctica, el participante ser capaz de utilizar la placa
Arduino como tarjeta de adquisicin de datos y graficar en MATLAB, posteriormente
esos datos se podrn enviar a Simulink para graficarlos, y, en caso de que aplique,
poder obtener la funcin de transferencia.
Material y Equipo a Utilizar.
1 placa Arduino UNO
1 potencimetro 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

3.- Abra MATLAB y en la ventana de nombre Editor debe crear una funcin
llamada Graficar_arduino(muestras). Copie y pegue el siguiente cdigo:
function voltaje=Graficar_arduino(muestras)
close all;
clc;
voltaje=0; %variable donde se guardarn 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','Comunicacin Serial: Matlab con Arduino')
title('Grafica de Datos Analogicos de Arduino')
xlabel('Nmero 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 conexin con el puerto serie
fclose(puerto);
delete(puerto);
end
Nota: Guarde este cdigo en la carpeta MATLAB que se encuentra en Mis Documentos

Nota:

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 lneas
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 funcin que acaba
de crear con el cdigo de arriba. Para que la funcin sea llamada correctamente,
debe estar escrita de la misma manera que como la escribi en el cdigo. El nmero
500 indica que se tomarn 500 muestras para graficar. Puede variar este nmero
de acuerdo al nmero de muestras que desee manejar.
5.- Comience a variar el potencimetro y ver que una grfica aparece en su
pantalla siguiendo los valores que usted manda por el potencimetro. Al llegar al
nmero de muestras programado la grfica se detendr y en la ventana Comand
Window se mostrarn los valores capturados por MATLAB. Como se ilustra en las
imgenes 33.2 y 33.3

Fig. 33.2. Grafica obtenida por datos enviados desde arduino

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 grfica se nos
extrava, 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 grfica.

Fig. 33.4. Datos de la grfica 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.

SI le damos doble click al archivo ans nos aparecer un archivo similar a Excel
en la ventana Editor. Estos archivos estn 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 grfica 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 graficarn 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 grfica.
B.- Simulink solo muestra una grfica de 0-10 segundos, por lo que, el vector de
tiempo que generemos deber ser menor o igual a 10.
C.- Para que la grfica sea reconstruida de forma similar a la original, SIMULINK
tambin nos pide que el nmero de datos proporcionados por el vector de tiempo
sea igual al nmero 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 cmo se hace.
7.- Como se muestra en la figura 33.5 los datos estn 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 continuacin.

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.

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:

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

9- Podemos comprobar que estamos reconstruyendo la grfica correctamente con


el comando siguiente:
plot(time,r)
El cual nos permite ver que la grfica est quedando exactamente igual a la
original.

Fig.33.9. Grfica 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 grfica.m, y escribimos time(espacio)r
entre corchetes. Veamos la grfica 33.10 y notemos que ahora el archivo grafica.m
contiene las dos columnas necesarias que nos pide Simulink colocadas de manera
vertical.

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

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

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 opcin Data escribimos el nombre del archivo que
vamos a trasladar, para este caso es el nombre grafica. En la opcin Output Data
Type, seleccionamos doble. La opcin Sample Time quedar en cero y en la
opcin Form output after final data value by: seleccionamos extrapolation Damos
click en Apply y posteriormente en OK. La configuracin debe quedar tal y como
se muestra a continuacin:
Nota: Es importante que el archivo grafica.m est cargado en la ventana
WorkSpace caso contrario, el bloque de Simulink no tomar los datos.

33.16. Configuracin del bloque From WorkSpace

17.- Finalmente debemos dar click en el botn Run y posteriormente dar doble
click sobre el icono Scope y veremos la misma grfica que capturamos con
arduino.

Fig. 33.17. Botn Run ubicado en la parte superior central de Simulink

Fig. 33.18 Grafica de MATLAB reconstruida en simulink.

Si comparamos la grfica de la figura 33.18, con las de las figuras 33.9 y 33.2,
veremos que son idnticas.
Ahora podemos obtener fcilmente la funcin de transferencia de una planta
cualquiera (presin, caudal, temperatura, velocidad, posicin nivel, etc) con la ayuda
de Simulink.