ARDUINO
Lectura con los dos potenciómetros:
// definir variables
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);
}
Lectura de USB con Arduino:
// for incoming serial data
int incomingByte = 0;
void setup() {
// opens serial port, sets data rate to 9600 bps
Serial.begin(9600);
}
void loop() {
// send data only when you received data:
if (Serial.available() > 0) {
// read the incoming byte:
incomingByte = Serial.read();
// say what you got:
Serial.print("I received: ");
Serial.println(incomingByte, DEC);
}
(Serial.write)
(Serial.read)
M AT LA B
Para usar este puerto es necesario establecer los parámetros de su
funcionamiento, como por ejemplo baudrate, bits de datos, bit de
parada, etc.
%ABRIR el puerto COM1
clear all; clc; close all;
clc; disp('BEGIN')
SerPIC = serial('COM1');
set(SerPIC,'BaudRate',2400);
set(SerPIC,'DataBits',8);
set(SerPIC,'Parity','none');
set(SerPIC,'StopBits',1);
set(SerPIC,'FlowControl','none');
fopen(SerPIC);
%*-*-*-*-*-*-
Para escribir datos usamos la función fprintf:
fprintf(SerPIC,'%c',char(100));%Envía en código ASCII
fprintf(SerPIC,'%s',’100’);%Envía un string
Para leer los datos del puerto se usa la función fscanf:
s1 = serial('COM1');
s1.BaudRate=9600;
fopen(s1);
dato = fscanf(s1);
Syntax
A=fscanf(obj)
A=fscanf(obj, 'format')
A=fscanf(obj, 'format',size)
format = '%d … i, o, u, x, X, f, e, E, g, c y s'
obj = s1
Luego de realizar la comunicación, los pasos para cerrar el puerto
son:
%CERRAR el puerto COM1 al finalizar
fclose(SerPIC);
delete(SerPIC)
clear SerPIC
disp('STOP')
Lectura con los dos potenciómetros:
clear all; clc; close all;
%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);
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<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);
%% Limpiar la escena del crimen
fclose(s);
delete(s);
clear s;
Conexión de los potenciómetros al Arduino
Steps to setup serial communication through MATLAB
Connect the Arduino to your PC via USB
Program the microcontroller using the Arduino IDE
Identify the com port and enter it into MATLAB
Create and run the function file *.m