Manual Arduino Matlab
Manual Arduino Matlab
MATLAB
ARDUINO
MATLAB - ARDUINO
Copiamos el archivo arduinoIO dentro de la carpeta de MATLAB que est
en mis documentos.
C:\Users\JHON\Documents\MATLAB
MATLAB - ARDUINO
MATLAB - ARDUINO
MATLAB - ARDUINO
Observamos un archivo install_arduino.m , este debemos llamarlo dentro de
la ventana de comandos de MATLAB con el fin de que todos estos archivos
contenidos sean agregados correctamente y podremos verificar ello al
visualizar el siguiente mensaje.
Ya esta todo listo para comunicarnos con nuestra tarjeta arduino, pero antes
debemos conocer le puerto COM asignado a la tarjeta eso lo hacemos
entrando al Administrador de equipos / Administrador de
dispositivos.
MATLAB - ARDUINO
MATLAB - ARDUINO
MATLAB - ARDUINO
MATLAB - ARDUINO
DETECCIN DE MOVIMIENTO:
Usando el sensor PIR , mandaremos el mensaje detectado!! , cuando sea
detectado algn movimiento.
clc ; clear all; close all;
ino=arduino('COM18');
ino.pinMode(8,'input');%definimos pin8 como entrada
while 1
sensor=ino.digitalRead(8);
if sensor==1
fprintf('detectado!!\n');
end
if sensor==0
fprintf('Nada!!\n');
end
pause(0.1);
end
MATLAB - ARDUINO
Lectura de seal
ARDUINO
MATLAB - ARDUINO
Uso del sensor PIR , grfica del pin de dato (ALTO - BAJO)
MATLAB - ARDUINO
DISPLAY
ino=arduino('COM18');
3
B
T=0.5; % Tiempo en segundos
% Declaracion de salidas
4 para uso de
C DISPLAY
ino.pinMode(2,'output'); % A
5 % B
D
ino.pinMode(3,'output');
ino.pinMode(4,'output');
%
C
6
E
ino.pinMode(5,'output'); % D
7
G
ino.pinMode(6,'output'); % E
ino.pinMode(7,'output');
8 % F
F
ino.pinMode(8,'output'); % G
while 1 % Mensaje HOLA
%H
ino.digitalWrite(2,0);
ino.digitalWrite(3,1);
ino.digitalWrite(4,1);
ino.digitalWrite(5,0);
ino.digitalWrite(6,1);
ino.digitalWrite(7,1);
ino.digitalWrite(8,1);
pause(T);
%O
ino.digitalWrite(2,1);
ino.digitalWrite(3,1);
ino.digitalWrite(4,1);
ino.digitalWrite(5,1);
ino.digitalWrite(6,1);
ino.digitalWrite(7,1);
ino.digitalWrite(8,0);
pause(T);
%L
ino.digitalWrite(2,0);
ino.digitalWrite(3,0);
ino.digitalWrite(4,0);
ino.digitalWrite(5,1);
ino.digitalWrite(6,1);
ino.digitalWrite(7,1);
ino.digitalWrite(8,0);
pause(T);
%A
ino.digitalWrite(2,1);
ino.digitalWrite(3,1);
ino.digitalWrite(4,1);
ino.digitalWrite(5,0);
ino.digitalWrite(6,1);
ino.digitalWrite(7,1);
ino.digitalWrite(8,1);
pause(T);
%
%
%
%
%
%
%
A
B
C
D
E
F
G
%
%
%
%
%
%
%
A
B
C
D
E
F
G
%
%
%
%
%
%
%
A
B
C
D
E
F
G
%
%
%
%
%
%
%
A
B
C
D
E
F
G
MATLAB - ARDUINO
SERVO:
Para el uso de los servomotores con ayuda de la librera arduinoIO ,
necesitamos cargar otro cdigo en la tarjeta arduino ,el cual est dentro de
la carpeta arduinoIO , pdr , llamado motorsrv .
Pero antes de abrir ese archivo necesitamos una librera llamada AFMotor ,
esta librera est diseada en realidad para usar un shield de ADAFRIUT ,
como el que se puede observar :
MATLAB - ARDUINO
MATLAB - ARDUINO
Terminado ello, ya podremos tener el control de los servomotores, como
mximo dos , de ello parte que el uso del arduinoIO me limita poder
tener el control de los pines totales o su funcionalidad como tal.
MATLAB - ARDUINO
Arduino y GUIDE:
Este ejemplo consistir en obtener los valores presentes en los pines
analgicos de nuestra tarjeta ARDUINO. Crearemos una interfaz para su
visualizacin y un botn el cual me permita actualizar los datos.
Para ingresar al GUIDE que nos ofrece Matlab podemos hacerlo de dos
formas:
Escribiendo en la lnea de comandos:
guide
MATLAB - ARDUINO
Blank GUI (Default): La opcin de interfaz
grfica
de
usuario
en
blanco
(viene
predeterminada), nos presenta un formulario
nuevo, en el cual podemos disear nuestro
programa.
Al hacer
doble
nos
aparecer
propiedades
del
podemos cambiar
como el color, el
contenido , y el
asigna cuando se
MATLAB - ARDUINO
Seguimos agregando ms cosas a nuestro interfaz como podra ser el ttulo
con un Static Text
MATLAB - ARDUINO
MATLAB - ARDUINO
Esta interfaz an no tiene alguna utilidad solo me muestra lo que yo eh
creado en mi entorno del GUIDE.
A continuacin si nos dirigimos a MATLAB podemos ver que se ha creado un
cdigo para nuestra interfaz. Este cdigo encierra las caractersticas o
valores que se han asignado para la creacin de la ventana. Y tambin
podemos detallar aquellas funciones que en realidad son subrutinas que se
ejecutaran cuando se produzca el evento dependiendo de la programacin
que se le d.
Lo%siguiente
es tener
que deseamos
realizar:to the command line.
--- Outputs
fromclaro
thislofunction
are returned
arduino es por ello que nos dirigimos hacia la parte final del cdigo que
me grafica
la ventana
con,
textos, botones, etc., y agregamos las
global
ino; toda
% variable
global
ino
siguientes
lneas.
global
lect_A0;
global
global
global
global
global
lect_A1;
lect_A2;
lect_A3;
lect_A4;
lect_A5;
MATLAB - ARDUINO
% eventdata
- to
defined in pero
a future
of MATLAB
Con
lo anterior reserved
ya tenemos
la be
visualizacin,
ahoraversion
estos datos
estarn
%
handles
structure
with
handles
and
user
data
(see
GUIDATA)
cambiando constantemente, es por ello que usamos un botn para la
global ino;
actualizacin.
global lect_A0;
global lect_A1;
Nos
dirigimos
a la funcin de nuestro botn y agregamos algo similar a lo
global
lect_A2;
global lect_A3;
anterior.
global lect_A4;
global lect_A5;
MATLAB - ARDUINO
Declaramos las variables globales con el fin de poder usarlas dentro de esta
funcin , luego tomamos las lecturas y las mostramos en los cuadros vacos.
lectura_A0, lectura_A1, lectura_A2, lectura_A3, lectura_A4, lectura_A5
Son los nombres de las cuadros vacos, a cada uno le seteamos la
lectura de cada pin analgico.
Para finalizar, lo que podemos agregar es que al cerrar la ventana de nuestro GUIDE
creado, se pueda tambin finalizar la comunicacin serial establecida entre MATLAB
y arduino.
Es por ello que hacemos uso de la siguiente funcin Buscamos CloseRequestFcn,
para encontrarla hacemos doble click en el rea de trabajo que nos ofrece
inicialmente el guide (la cuadricula).
MATLAB - ARDUINO
Esta nueva funcin nos ayudara mucho, ya que si nosotros cerramos el guide sin
haber terminado la comunicacin, dejaramos el puerto serial abierto. Entonces con
el uso de esta funcin la cual se ejecuta cuando se cierra la interfaz creada,
hacemos que se termine la comunicacin serial.
% --- Executes when user attempts to close figure1.
function figure1_CloseRequestFcn(hObject, eventdata, handles)
% hObject
handle to figure1 (see GCBO)
% eventdata reserved - to be defined in a future version of
MATLAB
% handles
structure with handles and user data (see
GUIDATA)
% Hint: delete(hObject) closes the figure
delete(hObject);
delete(instrfind({'Port'},{'COM6'}));
% Hint: delete(hObject) closes the figure
delete(hObject);
MATLAB - ARDUINO
Resultado:
MATLAB - ARDUINO
ningn problema tambin la podemos usar para colocar una imagen en esa
caja que nos ofrece
MATLAB - ARDUINO
Estas imgenes son las que usaremos. Posterior a ello nos dirigimos a
nuestro cdigo generado para la pequea interfaz que creamos con el
function
axes. guide_axes_1_OpeningFcn(hObject, eventdata, handles, varargin)
%
%
%
%
%
img1=imread('imagen1.jpg');
axes(handles.axes1);
image(img1);
axis off;
MATLAB - ARDUINO
MATLAB - ARDUINO
global img;
global n;
switch n
case 1
img=imread('imagen1.jpg');
case 2
img=imread('imagen2.jpg');
case 3
img=imread('imagen3.jpg');
case 4
img=imread('imagen4.jpg');
case 5
img=imread('imagen5.jpg');
end
n=n+1;
if n==6
n=1;
endPara el botn anterior tenemos:
axes(handles.axes1);
image(img);
%
---off;
Executes on button press in boton_anterior.
axis
global img;
global n;
switch n
case 1
img=imread('imagen4.jpg');
case 2
img=imread('imagen5.jpg');
case 3
img=imread('imagen1.jpg');
case 4
img=imread('imagen2.jpg');
case 5
img=imread('imagen3.jpg');
end
n=n-1;
if n==0
n=5;
end
axes(handles.axes1);
image(img);
axis off;
MATLAB - ARDUINO
Obteniendo:
MATLAB - ARDUINO
imagen de inicio
% logo arduino
img1=imread('logo_arduino.png');
axes(handles.axes2);
image(img1)
axis off;
% logo matlab
img2=imread('logo_matlab.png');
axes(handles.axes3);
image(img2)
axis off;
MATLAB - ARDUINO
MATLAB - ARDUINO
MATLAB - ARDUINO
Tambin hacemos que este slider tenga un evento o rutina a la hora de
ocasionar algn cambio en su barra. Solo damos click derecho, View
Callbacks, Callback.
La programacin:
Lo primero que hacemos es dirigirnos a la funcin la cual me da la apertura
a la creacin de mi interfaz, dentro de ella colocamos unas imgenes base
las cuales terminada esta funcin sern visualizadas en nuestro GUIDE.
% --- Executes just before guide_control_servo_slider is made visible.
function guide_control_servo_slider_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject
handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles
structure with handles and user data (see GUIDATA)
% varargin
command line arguments to guide_control_servo_slider (see VARARGIN)
% Choose default command line output for guide_control_servo_slider
handles.output = hObject;
% Update handles structure
guidata(hObject, handles);
% UIWAIT makes guide_control_servo_slider wait for user response (see UIRESUME)
% uiwait(handles.figure1);
% logo arduino
img1=imread('logo_arduino.png');
axes(handles.axes1);
image(img1)
axis off;
% logo matlab
img2=imread('logo_matlab.png');
axes(handles.axes2);
image(img2)
axis off;
% servo
img3=imread('servo_imagen.jpg');
axes(handles.axes3);
image(img3)
axis off;
% --- Outputs from this function are returned to the command line.
function varargout = guide_control_servo_slider_OutputFcn(hObject, eventdata, handles)
Despus te tener las imgenes mostradas lo que se hace es ya
% varargout cell array for returning output args (see VARARGOUT);
% iniciar
hObject la comunicacin
handle to figurecon arduino.
% eventdata reserved - to be defined in a future version of MATLAB
% handles
structure with handles and user data (see GUIDATA)
% Get default command line output from handles structure
varargout{1} = handles.output;
global ino; % variable global ino
ino=arduino('COM33'); % creacion de objeto
ino.servoAttach(1); % activa el servo1 en el pin 10
MATLAB - ARDUINO
Comunicacin Serial:
La comunicacin serial se da cuando trasferimos datos de bit a bit en un
tiempo determinado, uno despus de otro.
Matlab puede enviar y recibir datos por el puerto serie de la computadora y
acceder a eso.
MATLAB - ARDUINO
Buffer:
Es el muy importante entender la naturaleza del buffer para que luego no
tengamos algn problema (error) al escribir nuestro cdigo.
Existen dos buffer, uno para el envio y el otro para recepcin de datos.
Luego los daos se almacenan en una lista llamada buffer
El buffer tiene un tamao finito.
Buffer:
Inicia el buffer vaco.
Cada nuevo valor que llega es almacenado dentro de una lista, donde el
ltimo valor que recibimos se coloca en la parte inferior de esta lista(los
datos ms recientes).
Si mi programa est listo para leer los datos almacenados, se sita en la
parte superior de la lista (datos ms antiguos).
Una vez que se lee un byte de datos, este se borra automticamente del
buffer.
Los datos que son los siguientes en leer se colocan en la posicin superior
cuando ocurre lo anterior.
Tan pronto como el buffer est lleno y se enva ms datos, el ms antiguo
datos se descarta para hacer espacio para nuevos datos.
Configurando el puerto serial:
Primeramente nosotros necesitamos crear un objeto serial esto lo hacemos
de la siguiente manera.
Este objeto serial llamado ino toma algunos parmetros por defecto.
Como la velocidad de transmisin, el timeout, los bits de transmisin, etc.
Colocando el nombre del objeto podemos ver algunas configuraciones
bsicas de nuestro objeto serial.
MATLAB - ARDUINO
MATLAB - ARDUINO
Tambin:
MATLAB - ARDUINO
En el editor de MATLAB:
clc;clear all;close all;
ino=serial('COM33'); % objeto serial asociado al COM33
("ARDUINO")
ino.Baudrate=9600; % colocamos a una velocidad de 9600
baudios
fopen(ino); % abrimos el objeto serial asociado al
objeto ino
data=fscanf(ino); % leemos el dato enviado
disp(data); % mostramos data adquirida
Obteniendo: