Está en la página 1de 42

6.

COMUNICACIN SERIAL
6.1. Introduccin a la comunicacin serial
6.1.1. Qu es Comunicacin
6.1.2. Estndar de interfaz de Comunicacin Serial (RS232)
6.1.3. Asignacin de Pines y Seales
6.1.3.1. Pines de Datos
6.1.3.2. Pines de Datos
6.1.4. Parmetros de Transmisin y Trama Serial
6.1.4.1. Bytes de Transmisin
6.1.4.2. Comunicacin Serial Sncrona y Asncrona
6.1.5. Cmo se Transmiten los Bits
6.1.5.1. Orden de transmisin
6.1.5.2. Bits de inicio y fin
6.1.5.3. Bits de datos
6.1.5.4. Bits de paridad
6.2. Configuracin de Comunicacin Serial en MATLAB
6.2.1. Sesin de Puerto Serial
6.2.2. Creacin Objeto Puerto Serial y Propiedades
6.2.3. Conectando al Dispositivo
6.2.4. Configuracin de Parmetros de Comunicacin
6.2.5 Escritura de datos
6.2.5.1. Buffer de Salida y Flujo de Datos
6.2.5.2. Funcin fprintf
6.2.5 Lectura de datos
6.2.5.1. Buffer de Entrada y Flujo de Datos
6.2.5.2. Funcin fscanf
6.3. Aplicaciones de Comunicacin Serial con Arduino
6.3.1. Comunicacin Serial va HyperTerminal
6.3.2. Instalacin del Toolkit ArduinoIO para adquirir datos
6.3.3. Adquisicin de datos de potencimetro
6.3.4. Adquisicin de datos de sensor temperatura
6.3.5. Adquisicin de datos sensor Ultrasonido

6.3.6. Posicin angular de Servomotores

6. COMUNICACIN SERIAL
6.1. Introduccin a la Comunicacin Serial
A continuacin se presentarn los conceptos bsicos que estn detrs de lo
referente a la comunicacin serial.
6.1.1. Qu es Comunicacin Serial
Es un protocolo de bajo nivel que sirve para establecer las pautas de comunicacin
entre dos o ms dispositivos (computadoras, microcontroladores, celulares, etc.)
Como indica el nombre, el puerto serial recibe y enva bytes de informacin un bit a
la vez en una trama. Estos bits se transmiten mediante el formato binario o el de
tipo carcter (ASCII).

6.1.2. Estndar de interfaz de comunicacin Serial (RS232)


A lo largo de estos aos han surgido muchos estndares de interfaz de puerto
serial para comunicacin entre computadoras. Algunas normas incluyen RS-232,
RS-422 y RS-485, de los cuales, el estndar RS-232 se usa con mayor frecuencia.
Las normas previamente mencionadas tienen en cuenta las siguientes
especificaciones:

Mxima capacidad de transferencia de bits y longitud de cable

Rtulos, caractersticas elctricas y funciones de las seales seriales

Conectores mecnicos y asignacin de pines

En principio, para establecer una comunicacin serial se necesitan nicamente tres


pines: Transmisin (Tx), Recepcin (Rx) y Ground (GND). Sin embargo, existen
muchos ms pines o seales de control de flujo de informacin para garantizar un
mejor trfico de informacin entre dispositivos.
Los estndares RS-232 y RS-485 definen a dos dispositivos conectados con cable
serial como Data Terminal Equipment (DTE) y Data Circuit-Terminating Equipment
(DCE). Esta terminologa refleja el origen del estndar RS-232 para comunicacin
entre un terminal de computadora y un MODEM.
En este manual se va a considerar a la computadora como un DTE y a los
perifricos tipo modems, impresoras, circuitos digitales y microcontroladores como
DCEs.
Para conectar dos dispositivos segn el estndar RS-232 hay dos formas:
Conexin Directa:
Usado para conectar DTE con DCE.

Conexin Cruzada
Usado para conectar DTE con DTE y DCE con DCE.

6.1.3. Asignacin de Pines y Seales


Los puertos seriales de comunicacin constan de dos tipos de seales: datos y
control. El estndar RS-232 define conectores de 9 y 25 pines que sirven para
transportar las seales de control y datos que toda comunicacin serial requiere,
sin embargo, cabe resaltar que los pines necesarios para realizar la comunicacin
son Tx, Rx y GND.
Los conectores que existen para comunicacin serial son los denominados DB-9 y
DB-25

Asignacin de pines para un conector DB-9:

A continuacin se presenta una descripcin de pines para el DB-9:


Pin
1
2
3
4
5
6
7
8
9

Nombre de
Abreviatura Tipo seal
Seal
Detector
CD
Control
Portadora
Dato Recibido
RD
Datos
Dato Transmitido
TD
Datos
Dato terminal
DTR
Control
listo
Referencia
GND
Tierra
Dato establecido
DSR
Control
listo
Solicitar para
RTS
Control
envo
Borrar para
CTS
Control
enviar
Indicador de
RI
Control
Ring

6.1.3.1. Pines de Datos


La mayora de dispositivos de comunicacin serial son de tipo full-duplex, es
decir, pueden transmitir y recibir datos al mismo tiempo, mientras que existen otros
dispositivos que solo pueden hacer una labor a la vez, los cuales son
denominados half-duplex.
Como el estndar RS-232 dispone de los pines de datos Tx, Rx por separado, es
posible realizar comunicaciones full-duplex.
El pin Tx transmite datos de una DTE a una DCE, el pin Rx recibe dato de un DCe
a un DTE.
6.1.3.2. Pines de Control
Los pines de control para un DB-9 se usan para determinar la presencia de
dispositivos conectados y para controlar el flujo de datos.
Los pines RTS y CTS se usan para sealizar si es que el dispositivo est listo para
enviar o recibir datos. A este tipo de control se la llama handshaking y se emplea
para prevenir prdida de datos durante la transmisin.
Cuando se habilitan ambos DTE y DCE el handshaking usando RTS y CTS sigue
los siguientes pasos:

1. El DTE pone en alta RTS pin para indicar que el DCE est listo para recibir
datos
2. El DCE indica que al CTS pin de que est listo para enviar datos a travs
del pin TD. Si el dato no puede ser enviado el pin CTS es puesto en baja.
3. El dato es transmitido al DTE mediante el pin TD. Si el dato no puede ser
aceptado, el RTS pin es puesto a baja por el DTE y la transmisin de datos
se finaliza.
Muchos dispositivos usan los pines DSR y el DTR para darse cuenta de que estn
conectados y energizados. La sealizacin de presencia de dispositivos
conectados usando DTR y DSR sigue los siguientes pasos:
1. El DTE pone en alta el DTR pin para solicitar que el DCE se conecte a la
lnea de comunicacin.
2. El DCE pone en alta el pin DSR para indicar que est conectado
3. DCE desactiva el pin DSR cuando se desconecta de la lnea de
comunicacin
Los pines DTR y DSR fueron originalmente diseados para proveer un mtodo
alternativo de handshaking. Sin embarbo, el RTS y el CTS son usados para este
fin y no los DSR y DTR.
Los pines CD y RI son usados tpicamente para indicar la presencia de ciertas
seales en conexiones MODEM-MODEM. CD es usado por un MODEM para
indicar que se ha realizado una conexin con otro MODEM o que se ha detectado
un tono portador. CD es activado cuando el DCE recibe una seal de frecuencia
permitida. CD es desactivado si la DCE no recibe una seal permitida.
RI se usa para indicar la presencia de una seal audible, RI se activa cuando la
DCE recibe una seal de este tipo. RI se desactiva cuando el DCE no recibe
seales de este tipo.

6.1.4. Parmetros de Transmisin y Trama Serial


La trama serial incluye un bit de inicio, entre cinco y ocho bits de datos y un bit de
stop. Adicionalmente se puede incluir un bit de paridad o un bit ms de stop.

Los bits de datos usualmente son denominados caracteres debido a que estos bits
usualmente representan un carcter ASCII. A los bits restantes se les llama bits de
trama.

6.1.4.1. Bytes de Transmisin


Al conjunto de bits que conforma los datos seriales se le denomina byte. En
principio, este trmino puede parecer errneo, ya que la cantidad de bits de
transmisin vara entre 7 a 12 bits, sin embargo, cuando la trama serial se
almacena en la computadora la trama de bits se desmenuza con el fin de quedarse
solo con los 8 bits de datos. Adems, aunque no se programe una transmisin de
datos de 8 bits aquellos bits que no se usan se les asignan valor de cero, de tal
modo que siempre se obtenga un byte por envo y recepcin.
Cuando se lee o escribe datos (en MATLAB), se necesita especificar un valor, el
cual puede consistir en uno o ms bytes. Por ejemplo, si se lee un valor de un
dispositivo usando el formato int32 entonces aquel valor consiste de cuatro bytes.
6.1.4.2. Comunicacin Serial Sncrona y Asncrona
Los estndares RS-232 y RS-485 soportan dos tipos de protocolos de
comunicacin: sncrona y asncrona.
Con el protocolo serial sncrono todos los bits transmitidos se sincronizan a una
seal de reloj comn. Los dos dispositivos inicialmente se sincronizan y se envan
mutuamente caracteres para mantener la sincrona. An si es que el dato actual no
haya sido enviado, un flujo constante de bits permite a cada dispositivo saber el
estado de la transmisin en un instante de tiempo dado. La comunicacin serial
sncrona permite transmitir datos a una velocidad relativamente alta en
comparacin con el protocolo asncrono porque no necesita de bits adicionales
para determinar el inicio y fin de la trama.
Por otro lado, la transmisin serial asncrona consta de un bit de inicio y uno o dos
bits de stop que indican el inicio y fin de la transmisin serial. Si comparamos este
tipo de transmisin con el tipo sncrono encontramos que es ligeramente ms lento
pero no requiere que los dispositivos involucrados en la comunicacin procesen
caracteres innecesarios para estar en sincrona. Normalmente se prefiere usar
comunicacin asncrona que sncrona.
6.1.5. Cmo se Transmiten los Bits
6.1.5.1. Orden de Transmisin
En comunicacin serial los datos se transmiten bit a bit uno a la vez, el orden
transmisin es el siguiente:
1. Bit de inicio se transmite con el valor lgico de 0
2. Bits de datos se transmiten, el primer bit de datos corresponde al menos
significativo (LSB), mientras que el bit ms significativo (MSB) se
transmite al final.
3. Bit de paridad se transmite (opcional)
4. Uno o dos bits de stop se transmite con el valor lgico de 1

6.1.5.2. Bits de inicio y fin


En el caso de comunicacin asncrona es necesario usar bits de inicio y fin. El bit
de inicio indica que se va a comenzar a enviar bits de datos, mientras que el bit de
stop indica el fin de un envo. El proceso de identificacin de bytes y control del
puerto serial es de la siguiente manera:
1. Cuando un pin de puerto serial no transmite dato entonces est en
estado de on o encendido.
2. Cuando un dato est a punto de ser transmitido el pin de puerto serial
cambia a estado de off o apagado debido al bit de inicio.
3. El pin de puerto serial cambia a on debido al bit de stop.
6.1.5.3. Bits de datos
Los datos pueden transmitirse segn el formato ASCII o segn el formato de dato
binario. La mayora de los puertos emplean entre cinco a ocho bits de datos. Si se
va a enviar datos de texto o caracteres (ASCII), es necesario emplear como
mnimo 7 bits de datos.
6.1.5.4. Bits de paridad
Los bits de paridad se usan para identificar de forma simple errores de transmisin,
los tipos de paridad se muestran a continuacin:
Paridad

Descripcin

Even (par)

Los bits de datos ms el


de paridad producen un
nmero par de unos

Mark (marca)
Odd (impar)
Space (espacio)

Paridad siempre 1
Los bits de datos ms el
de paridad producen un
nmero impar de 1's
Paridad siempre es 0

6.2. Configuracin de Comunicacin Serial en MATLAB

6.2.1. Sesin de Puerto Serial


En este acpite vamos a enlistar y detallar los pasos que se deben seguir para
llevar a cabo una comunicacin serial exitosa de principio a fin.
Los pasos son los siguientes:
1. Crear un objeto de puerto serial: Crear un objeto de puerto serial para
un puerto especfico usando la funcin serial.
2. Configurar las propiedades: Despus de la creacin del objeto serial,
configurar BaudRate, DataBits, StopBits, Parity, etc utilizando la funcin
set; si es que se desea conocer o mostrar los resultados de la
configuracin, usar la funcin get.
3. Conectar al dispositivo: Conectar el objeto de puerto serial al
dispositivo usando la funcin fopen.
4. Configurar propiedades: Para configurar las propiedades deseadas
usar la funcin set o la notacin de punto.
5. Escribir y leer datos: Escribir datos al dispositivo usando la funcin
fprintf o fwrite y leer datos del dispositivo usando la funcin fread o
fscanf.
6. Desconectar y limpiar puerto: Cuando ya no se va a usar el objeto de
puerto serial hay que desconectarlo desde el dispositivo usando la
funcin fclose, remover el objeto de la memoria usando la funcin
delete y, finalmente, removerlo del workspace de MATLAB usando el
comando clear.
6.2.2. Creacin Objeto Puerto Serial y Propiedades
Para poder configurar y posteriormente realizar comunicacin serial con
dispositivos externos es necesario configurar un objeto llamado serial, el cual se
logra mediante funcin serial que genera el mencionado objeto y permite realizar
configuraciones.
La funcin serial requiere que se especifique el nombre de puerto para poder
crear el objeto:
s = serial ( port ) ;
Donde port es el nombre del puerto disponible que se va a usar para la
comunicacin (COM1, COM2, COM3etc.)
Con la funcin y argumento instrhwinfo( serial ) se puede saber qu puertos
disponibles hay en la computadora.

Es importante recalcar que para acceder a un puerto existente en el equipo


debemos asegurarnos de que el puerto se encuentre disponible y no lo est
empleando otra aplicacin, de lo contrario, MATLAB no podr acceder a l. Sin
embargo, si primero se accede a un puerto disponible desde MATLAB, ser
posible emplearlo en conjunto con otras aplicaciones.
Una vez que el objeto de puerto serial se haya creado, las siguientes propiedades
del puerto serial en uso automticamente tendrn valores que proporcionan
informacin bsica del mismo:
Propiedad

Descripcin

Name

Nombre del objeto de


puerto serial

Port
Type

Indica en nombre de
puerto que se ha
escogido
Indica el tipo de objeto

Se puede mostrar los valores de dichas propiedades mediante la funcin get

Para mostrar los parmetros y estado de un puerto se puede hace una de estas
tres acciones:

Tipear el nombre del objeto de puerto serial en el Command Window

Excluir el punto y coma cuando se crea una variable de puerto serial

Excluir el punto y coma cuando se configuran las propiedades usando la


notacin de punto

6.2.3. Conectando al Dispositivo


Antes de poder usar el objeto de puerto serial para leer o escribir datos se debe
conectarlo al dispositivo mediante la funcin fopen de la siguiente manera:
fopen(s)
Es importante resaltar que algunas propiedades del objeto de puerto serial se
pueden leer solo mientras est conectado y debe ser configurado antes de usar la
funcin fopen como el caso de InputBufferSize y OutputBufferSize.
Por otro lado, se puede examinar el estado del puerto usando la propiedad Status
de la siguiente manera:
s.Status
ans=
open

6.2.4. Configuracin de Parmetros de Comunicacin


Antes de escribir o leer datos, tanto el objeto de puerto serial de MATLAB como el
instrumento o dispositivo con el que se quiere comunicar deben tener los mismos
parmetros de comunicacin. Esto significa que se deben configurar con valores
permitidos los parmetros que involucran la velocidad de transmisin y el formato
de trama serial.
A continuacin se presentan algunas propiedades importantes de configuracin:
Parmetro

Descripcin

BaudRate

Configura la tasa de
transmisin de bits

DataBits
Parity
StopBits
Terminator

Configura el nmero de
bits de datos
Configura el tipo de
paridad
Especifica el nmero de
bits usados para final de
envo de un byte
Especifica el carcter de
trmino de transmisin

Si queremos verificar el estado de la configuracin utilizamos la funcin get

Si queremos configurar los parmetros de un objeto serial usamos la funcin set

6.2.5. Escritura de datos


Las siguientes funciones estn asociadas a la escritura de datos en MATLAB:
Nombre de
Funcin
fprintf
fwrite

stopasync

Descripcin
Escribe texto al
dispositivo
Escribe dato
binario al
dispositivo
Termina
operaciones de
lectura y
escritura
asncrona

Por otro lado, la siguiente tabla muestra las propiedades asociadas a la escritura
de datos:
Propiedad

Descripcin
Nmero de bytes
BytesToOutput
actualmente en el
buffer de salida
Tamao del buffer de
OutputBufferSize
salida en bytes
Timeout

Tiempo de espera
para que se complete
una operacin de
lectura y escritura

TransferStatus

Indica si una
operacin de lectura
o escritura est en
progreso

ValuesSent

Total de nmero de
valores escritos al
dispositivo

6.2.5.1. Buffer de Salida y Flujo de Datos


El buffer de salida es memoria del computador separada por el objeto de puerto
serial para guardar los datos que se van a escribir al dispositivo. Cuando se
escribe datos al dispositivo ocurre el siguiente flujo de datos:
1. Los datos especificados por la funcin de escritura es enviado al buffer
de salida
2. Los datos en el buffer de salida se envan al dispositivo
La propiedad OutputBufferSize especifica el mximo nmero de bytes que se
puede almacenar en el buffer, mientras que la propiedad BytesToOutput indica el
nmero de bytes que se encuentran actualmente en el buffer de salida.
Por defecto, los valores para ambas propiedades son:
s = serial('COM1');
get(s,{'OutputBufferSize','BytesToOutput'})
ans =
[512]

[0]

Si se desea escribir ms datos de los que pueden alcanzar en el buffer de


salida, un error es retornado y no se escribe ningn valor.
6.2.5.2. Funcin fprintf

Se puede emplear la funcin fprintf para escribir datos al dispositivo, por


defecto, fprintf escribe dato usando formato string o %s\n porque muchos
dispositivos aceptan solo formatos de de este tipo.
La funcin fprintf tiene la siguiente sintaxis:
fprintf(OBJ, 'FORMAT', 'CMD', 'MODE')
Donde OBJ es el nombre del objeto serial, FORMAT es el formato de texto que
se utiliza para la escritura, CMD es el texto que se desea escribir y MODE es el
tipo de comunicacin que se desea realizar, es decir, sncrono o asncrono. Por
defecto, est funcin trabaja en modo sncrono.
Se puede verificar el nmero de valores que se han enviado al dispositivo
mediante la propiedad ValuesSent de la siguiente manera:
s.ValuesSent
ans =
20
Como se mencion, la funcin fprintf trabaja en modo sncrono por defecto,
esto significa que cuando se ejecuta esta funcin bloquea el command line de
MATLAB hasta que se complete la ejecucin. Para escribir texto de forma
asncrona al dispositivo se debe emplear el identificador async en el
argumento final de la funcin fprintf.
fprintf(s,'Display:Contrast 45','async')

Las operaciones asncronas no bloquean el acceso a la lnea de comandos de


MATLAB, es ms, mientras se realicen operaciones de escritura se puede
realizar lo siguiente:

Ejecutar operacin de lectura, debido a que el puerto serial tiene


pines separados de lectura y escritura.
Hacer uso de todas las propiedades de callbacks.

Tambin se puede determinar qu operaciones asncronas estn en progreso


con la propiedad TransferStatus de la siguiente manera:
s.TransferStatus
ans =
idle
La operacin de escritura con fprintf, sncrona o asncrona, termina cuando:

El dato especfico se escribe


El tiempo especificado por Timeout pasa del lmete

Adicionalmente se puede terminar una operacin de escritura en curso con la


funcin stopasync.
6.2.6. Lectura de Datos:

Las siguientes funciones estn relacionadas con la operacin de lectura de


datos:
Funciones
fgetl

fgets

fread
fscanf

readasync
stopasync

Descripcin
Lee una lnea de
texto del dispositivo y
descarta el carcter
terminador
Lee una lnea de
texto del dispositivo e
incluye el carcter
terminador
Lee dato binario del
dispositivo
Lee datos del
dispositivo y le da
formato de texto
Lee datos
asncronamente
desde el dispositivo
Termina operaciones
de lectura y escritura

La siguiente tabla muestra las propiedades asociadas a lectura de datos:


Propiedad
BytesAvailable

Descripcin
Nmero de bytes
disponibles en el
buffer de entrada

Tamao del buffer de


entrada en bytes
Especifica si una
ReadAsyncMode operacin asncrona
es continua o manual
InputBufferSize

Timeout

Tiempo de espera a
que se complete un
operacin de lectura
o escritura

TransferStatus

Indica si una
operacin de lectura
o escritura est en
progreso

ValuesReceived

Nmero total de
valores ledos del
dispositivo

6.2.6.1. Buffer de entrada y Flujo de Datos

El buffer de entrada es memoria de la computadora separada por el objeto de


puerto serial para almacenar los datos que se leern desde el dispositivo.
Cuando una operacin de lectura se lleva a cabo, ocurre el siguiente flujo de
datos:

Los datos ledos se almacenan en el buffer de entrada


Los datos del buffer de entrada se retornan a una variable
especificada por la funcin de lectura

La propiedad InputBufferSize define el nmero mximo de bytes que se


pueden almacenar en el buffer de entrada, mientras que BytesAvailable
especifica el nmero de bytes que actualmente han sido ledos en el buffer de
entrada.
Si se intenta leer ms datos de lo que puede alojarse en el buffer, un error es
retornado y ningn dato se lee.
6.2.6.2. Funcin fscanf

Para leer datos se puede utilizar la funcin fscanf de la siguiente manera:


A=fscanf( OBJ , FORMAT , SIZE)
Donde OBJ es el nombre del objeto serial, FORMAT es el formato de texto que
la funcin va a configurar y SIZE es la cantidad de datos que se espera leer.
Por defecto, la funcin fscanf lee datos usando el formato %c debido a que los
datos retornados por muchos dispositivos estn basados en formato de texto.
Sin embargo, se pueden especificar otro tipo de formatos.
Por otro lado, se puede verificar el nmero de valores ledos desde el
dispositivo con la propiedad ValuesReceived de la siguiente manera:

s.ValuesReceived
ans =
56
Al igual que el caso de escritura, se puede especificar si es que las lecturas
que se van a realizar son sncronas o asncronas con la propiedad
ReadAsyncMode. Si ReadAsyncMode est en modo continuous (activado por
defecto) el objeto de puerto serial continuamente verifica si es que el dispositivo
est listo para ser ledo, si es que hay dato disponible, se almacena
asncronamente en el buffer de entrada. Si es que ReadAsyncMode est en
modo manual el objeto de puerto serial no verifica continuamente el dispositivo
para determinar si es que se puede leer datos.
s.ReadAsyncMode = 'continuous';
fprintf(s,'*IDN?')
s.BytesAvailable
ans =
56
out = fscanf(s);
Operaciones asncronas no bloquean acceso a la lnea de comandos de
MATLAB, es ms, se pueden ejecutar al mismo tiempo las siguientes acciones:

Llevar a cabo operaciones de escritura asncrona


Usar las propiedades de los callbacks

Una operacin de lectura termina cuando:

El carcter terminador es ledo


El tiempo especificado por Timeout se excedi
El nmero especificado de bytes de lectura se terminaron de leer
El buffer de entrada se llen

6.2.7. Desconectar y limpiar Puerto

En este paso debemos cerrar el puerto conectado al dispositivo, eliminar de


memoria cualquier rastro de comunicacin serial que hubo y, finalmente,
eliminar de WorkSpace de MATLAB las variables asociadas al objeto serial.
Para hacerlo debemos utilizar los siguientes comandos despus de que se
haya finalizado el envo y recepcin:

6.3. Aplicaciones de Comunicacin Serial


6.3.1. Comunicacin Serial va HyperTerminal
El primer ejemplo que vamos a realizar consiste en configurar MATLAB como
transmisor y el HyperTerminal para recibir datos.
Debemos primero crear una conexin virtual entre MATLAB y el HyperTerminal,
esto se logra mediante el programa Virtual Serial Ports Emulator (VSPE), el
cual tiene el siguiente icono:

Damos doble click y nos aparecer la siguiente ventana:

Debemos situarnos en el centro de la ventana aproximadamente, hacer click


derecho y seleccionar la opcin Create

Luego nos aparecer una nueva ventana:

Debemos seleccionar el tipo de enlace virtual que nos convenga, escogeremos


el tipo Pair y luego hacer click en siguiente.

Luego nos aparecer la ventana de seleccin de puertos:

En este caso escogeremos el par COM2 y COM3 pero pueden ser otros. Hacer
click en finalizar.
Vemos que se ha creado el par o enlace COM2 COM3

Luego nos ubicarnos en Inicio, luego Accesorio, Comunicaciones y click en


HyperTerminal

En la siguiente ventana de Descripcin de conexin escribimos un nombre para


la conexin.

Luego debemos seleccionar un puerto de comunicaciones disponible, en este


caso debemos seleccionar uno de los dos puertos virtuales creados en el
VSPE, para este ejemplo escogemos el COM2.

Luego nos aparecer la ventana de configuracin de parmetros de


transmisin, en este caso seleccionamos 9600 baudios, 8 bits de datos, 1 bit de

stop y sin paridad, hay que recalcar que esta configuracin de parmetros debe
coincidir con la de MATLAB.

Damos click en Aceptar y para tener un mejor entorno de comunicacin ir a


Archivo, Propiedades y dar click en Configuracin ASCII

Debemos asegurarnos que estn marcadas las siguientes casillas:

Damos click en aceptar y estamos listos para recibir y enviar datos:

Ahora procedemos a configurar MATLAB:


El siguiente cdigo hace que se enve el carcter x usando la funcin fwrite

Ahora vemos los resultados en el HyperTerminal:

Podemos modificar el programa (en el Buffer de salida y en la funcin fwrite)


para mostrar una frase:

Resultado en HyperTerminal:

Ahora vamos a realizar otro ejemplo en el que MATLAB va a recibir datos que
se digiten va HyperTerminal; en este caso hay que mantener la configuracin
del HyperTerminal y configurar solamente MATLAB para que reciba datos:

El programa est preparado para recibir 10 datos, ahora escribimos en el


HyperTerminal 10 caracteres:

Los resultados lo podemos observar en el Command Window:

Una vez terminada la comunicacin y los puertos destruidos, se procede a


eliminar del VSPE la conexin virtual haciendo click derecho en la ubicacin del
enlace serial y luego click en Delete:

6.3.2. Instalacin del Toolkit ArduinoIO para adquirir datos


Se puede utilizar la tarjeta Arduino UNO y Arduino Mega en conjunto con el software MATLAB
para poder adquirir datos, procesarlos y, adems, controlar actuadores como servomotores,
motores PID, etc.
Sin embargo, hay que tener en cuenta que es necesario contar con la versin 2012 de MATLAB
para poder utilizar el toolkit de Arduino para MATLAB sin ningn problema.
Para instalar el toolkit mencionado debemos seguir los siguientes pasos:
1) Ingresar a la pgina Web de Mathworks para poder descargarlo, seguir el siguiente enlace:

http://www.mathworks.com/hardware-support/arduino-matlab.html
2) Nos debe aparecer la siguiente pgina:

3) Luego, en la parte inferior de la misma pgina debemos seguir el siguiente enlace (Matlab
Support for Arduino):

4) Despus de hacer click nos aparecer la siguiente ventana:

Debemos hacer click en el link de descarga (Download Submission) del archivo que contiene
el ToolKit.
5) Luego nos aparecer la ventana para guardar el archivo llamado ArduinoIO, debemos
descargarlo en una carpeta conocida para poder instalar

6) Debemos guardar el archivo y descomprimir todos sus archivos en una misma carpeta,
sobre todas las cosas debemos asegurarnos de que los archivos arduino.m e
install_arduino.m deben encontrarse en la misma carpeta:

7) Luego debemos ir al Seth Path de MATLAB para agregar la carpeta en donde se haya
descomprimido los archivos:

8) Luego debemos situarnos en el Command Window de MATLAB y tipear el siguiente


comando para instalar el Toolkit de Arduino:
run install_arduino

9) Despus de instalar, debe salir un aviso de confirmacin de que se ha agregado


exitosamente el archivo al Path y est listo para ser usado.

El paso final antes de utilizar MATLAB para controlar la tarjeta Arduino, es grabar en la tarjeta
Arduino el programa que lo convierte en tarjeta de adquisicin de datos UNA SOLA VEZ.
Debemos seguir los siguientes pasos:
1) Abrir el IDE de Arduino:

2) Debemos abrir el archivo correspondiente:


Se llama adiosrv y est dentro de la carpeta ArduinoIO pde adiosrv

3) Finalmente lo cargamos al Arduino UNO:

A continuacin se presenta la lista de comandos que se pueden ordenar desde MATLAB para
que la tarjeta Arduino lo ejecute:

Comando

Descripcin

Conecta el Arduino al
a=arduino('COM5')
puerto COM5
Configura pin 4 como
a.pinMode(4,'input');
entrada
Configura pin 5 como
a.pinMode(5,'output');
salida
Lee entrada digital en
dv=a.digitalRead(4);
el pin 4
Escritura digital en el
a.digitalWrite(13,dv);
pin 13
Lectura analgica en
av=a.analogRead(5);
el pin 5
Salida tipo PWM por
a.analogWrite(5,round(av))
el puerto 5
Cambia la referencia
a.analogReference('external'); de voltaje a tipo
externo
Referencia por
a.analogReference('default');
defecto
Borra el buffer de
a.flush;
entrada
Anexa servomotor a
a.servoAttach(9);
la entrada 9
Muestra el estado de
a.servoStatus;
todos los servos
aderidos
a.servoWrite(9,100);

val=a.servoRead(9)
a.servoDetach(9);
a.encoderAttach(0,3,2)
a.encoderRead(0)
a.encoderDebounce(2,17)
a.encoderReset(2)
a.encoderStatus;
a.encoderDetach(0);
delete(a)
6.3.3. Adquisicin de datos de potencimetro

Gira el servo que est


en el pin 9 hasta
llegar a 100 grados
Lee la posicin
angular del servo
anexado en pin 9
Deseconecta el servo
del pin 9
Anexa encoder 0 en
pin 3 (PIN A) y al pin
2 (PIN B)
Lee la posicin del
encoder 0
Configura retardo de
movimiento del
encoder 2 a 1.7ms
Resetea la posicin
del encoder 2
Muestra el estado de
todos los encoders
Desconecta el
encoder 0
Cerrar sesin de
comunicacin

Vamos a realizar una experiencia con el potencimetro, tarjeta Arduino y Matlab, la experiencia
consistir en adquirir los datos de naturaleza analgica y procesarlo en Matlab.
Experiencia
Adquisin de datos de voltaje de un potencimetro
Materiales

Arduino UNO

Matlab 2012 / 2013

Potencimetro

Cables tipo macho

Protoboard

Diagrama de conexiones

Tal como se mencion, el primer paso para realizar este ejercicio es grabar el programa Adiosrv
de la carpeta pde, este procedimiento se hace solo una vez. Luego solamente debemos
enfocarnos en MATLAB, es decir, todos los cambios que queramos realizar, se harn desde el
entorno de MATLAB y ya no es necesario re-grabar la tarjeta Arduino, solo se debe usar para
montar los componentes que usemos, en este caso el potencimetro.

Programacin en MATLAB

Se tiene el siguiente cdigo en MATLAB:

Al ejecutar el cdigo obtenemos lo siguiente el Command Window:

Una vez que se ha conectado al Arduino:

Cuando variamos la perilla del potencimetro obtenemos lo siguiente en la ventana de grfico:

6.3.4. Adquisicin de datos de sensor temperatura

Vamos a realizar una experiencia con el sensor de temperatura LM35, tarjeta Arduino y Matlab,
la experiencia consistir en adquirir los datos de naturaleza analgica y procesarlo en Matlab.
Experiencia
Adquisicin de datos de temperatura mediante un sensor LM35
Materiales

Arduino UNO

Matlab 2012 / 2013

Sensor de temperatura LM35

Cables tipo macho

Protoboard

Diagrama de conexiones

Programacin en MATLAB

Se tiene el siguiente cdigo:

Se tiene la siguiente adquisicin (temperatura ambiente)

Se tiene el siguiente resultado de la etapa de procesamiento:

6.3.6. Posicin angular de Servomotores

Vamos a realizar una experiencia con servomotor, en esta oportunidad, vamos a realizar
un barrido que cubra el rango angular del servomotor cada 10 grados.
Experiencia
Control de posicin angular del servomotor en todo el rango angular.
Materiales

Arduino UNO

Matlab 2012 / 2013

Sensor de temperatura LM35

Cables tipo macho

Protoboard

Diagrama de Conexiones

Programacin en MATLAB