Escolar Documentos
Profissional Documentos
Cultura Documentos
Configuracin de Arduino
int out1 = 0;
int out2 = 0;
void setup() {
// inicializar puerto serie
Serial.begin(9600);
}
void loop() {
// leer pines
out1 = analogRead(A0);
out2 = analogRead(A1);
// enviar
Serial.print(out1);
Serial.print(",");
Serial.println(out2);
// esperar
delay(20);
}
Configuracin de Matlab
Una vez configurado el Arduino, los datos se enviarn por la propia conexin USB, pero
simulando un puerto serie que deberemos conocer (desde la propia interfaz de Arduino se
puede averiguar). En este caso, en el entorno Windows, el puerto ser el COM4. El primer
paso ser crear un objeto serie en Matlab y abrirlo para empezar a leer:
%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);
1
2
3
4
5
6
7
% 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);
xlabel('Tiempo (s)')
ylabel('Voltaje (V)')
title('Captura de voltaje en tiempo real con Arduino')
grid on
hold on
El ncleo del programa es el bucle de medida, en el cual iremos leyendo del puerto serie los
datos en el formato que hemos especificado, midiendo el tiempo de ejecucin y
actualizando los dos objetos lnea creados anteriormente: los datos Y sern los voltajes
medidos hasta el momento y los datos X el tiempo de ejecucin. Al salir del bucle,
imprimiremos el dato de capturas por segundo que hemos estimado arriba.
1
2
% inicializar
v1 = zeros(1,tmax*rate);
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
v2 = zeros(1,tmax*rate);
i = 1;
t = 0;
% ejecutar bucle cronometrado
tic
while t<tmax
t = toc;
% leer del puerto serie
a = fscanf(s,'%d,%d')';
v1(i)=a(1)*5/1024;
v2(i)=a(2)*5/1024;
% 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
% resultado del cronometro
clc;
fprintf('%g s de captura a %g cap/s \n',t,i/t);
savefigure('captura_multi','s',[4.5 3],'po','-dpdf')
Por ltimo, cerramos el puerto serie (para que otras aplicaciones lo puedan utilizar) y
eliminamos el objeto serie que hemos creado en el primer paso.
1
2
3
4
Resultado
Con el cdigo del ejemplo, obtendramos una figura semejante a esta:
Por supuesto, una vez recogidos los datos en las variables v1 y v2, ya podemos analizarlos
de cualquier manera que se nos ocurra: podemos realizar un anlisis espectral mediante
transformada rpida de Fourier; graficarlos frente a otras variables, realizar un test de
correlacin, salvarlos en formato Excel, etc.