Wiring and Matlab/es

From Wiring

Jump to: navigation, search

Por Luis Arias y Martha Maldonado

Este tutorial muestra cómo comunicar Wiring con Matlab. Wiring envía los valores leídos de un sensor análogo (en este caso un potenciómetro) a través del puerto serial y Matlab lee los valores para trazar un gráfico que muestra el comportamiento del sensor durante un lapso de tiempo.

*Recuerde que un sensor análogo toma valores desde 0 hasta 1023.

Contents

Comunicación de Wiring a Matlab

Esquema

Potentiometer.png

Código en Wiring

/**
* Ejemplo simple de la comunicación con Matlab
*
* Comunica Wiring con Matlab enviando los valores leídos del sensor a través
* del puerto serial. Matlab lee los valores y traza una gráfica.
*/

int sensorA;

void setup()
{
  Serial.begin(9600);  // define el puerto serial a 9600
}

void loop()
{
  sensorA = analogRead(0);
  Serial.println(sensorA); 
  delay(20);                      // Espera 20 ms para la siguiente lectura
}


Código en Matlab

% Ejemplo simple de la comunicación Simple Wiring - Matlab
% por Luis Arias y Martha Maldonado
% 
% Comunica Wiring con Matlab enviando los valores del sensor a través del
% puerto serial. Matlab lee los valores para trazar la gráfica.

%Elimina los anteriores objetos del puerto serial. Cambie el puerto "COM9"
%de acuerdo al puerto serial que diga en Wiring.
delete(instrfind('Port','COM9'));

%Crea un objecto del puerto serial con la velocidad especificada de la transmisión de datos
%y especifica la lectura para cada salto de línea
serObj = serial('COM9','BaudRate',9600,'Terminator','CR/LF');

%Abre el puerto para conectar el objeto del puerto serial al dispositivo
fopen(serObj);

%Crea la figura y define sus propiedades
figure('Name','Comunicación Matlab-Wiring');
axes('XLim',[0 60],'YLim',[0 1023]);    %Límites de los ejes
title('Comunicación en Tiempo Real Matlab-Wiring')
ylabel('Valor del Sensor')
xlabel('Tiempo Aproximado (s)')     
grid on
hold on

%Crea una línea sin valores x y y por defecto, el color de la línea es
%azul y el grosor es de 2 mm
l = line(nan,nan,'Color','b','LineWidth',2);

%Inicializa variables para trazar la gráfica
sensorVal = zeros(1,1000);  %Arreglo de ceros de tamaño 1000
i = 1;

%Genera la gráfica hasta 60 segundo
 for i=1:600
    %Lectura del puerto serial
    reading = fscanf(serObj,'%d,%d')';
    %Asigna el valor de la lectura a la posición i de sensorVal.
    sensorVal(i)=reading(1);
    %Genera un vector fila de i posiciones linearmente espaciados entre sí. Determina
    %el avance de la gráfica en el eje x.
    x = linspace(0,i/10,i);
    set(l,'YData',sensorVal(1:i),'XData',x);
    drawnow
end

%Limpia y elimina los objetos del puerto serial
fclose(serObj);
delete(serObj);
clear serObj;

Salida de Matlab

La siguiente imagen muestra la salida de Matlab después de cambiar los valores del potenciómetro durante 1 minuto.

Screenshot.JPG



Idioma: English  • Español
Personal tools