You are on page 1of 23

PROYECTO DE

COMUNICACION
ES II
Adquisicin de Datos Arduino + Matlab

INTEGRANTES:
- Pablo Barrios Bajaa.
- Kerly Paladines Samaniego.

TABLA DE CONTENIDO
INTRODUCCION.........................................................................................2
OBJETIVOS.................................................................................................3
OBJETIVOS GENERALES.......................................................................3
OBJETIVOS ESPECFICOS.....................................................................3
MARCO TERICO.......................................................................................4
ARDUINO.............................................................................................4
MATLAB.............................................................................................11
CONFIGURACIN DE LOS PINES DE LA TARJETA DESDE MATLAB.......12
LECTURA DE ENTRADA DIGITAL.........................................................12
ESCRITURA DIGITAL DE SALIDA.........................................................12
LECTURA DE ENTRADA ANLOGA......................................................13
ESCRITURA EN SALIDA ANLOGA......................................................13
DESARROLLO..........................................................................................14
CONFIGURACIN DE ARDUINO..........................................................14
CONFIGURACIN DE MATLAB............................................................15
RESULTADO Y EJEMPLO DE CAPTURA................................................17
CODIGO MATLAB...............................................................................18
CONCLUSIONES.......................................................................................20
RECOMENDACIONES...............................................................................20

INTRODUCCION
A la hora de empezar con cualquier proyecto con aplicacin prctica,
una de las cuestiones principales suele ser enlazar la parte terica que
suele ser un poco trabajoso programarla en el software de nuestra
eleccin como algoritmos para adquisicin de datos, sistemas de control
automtico, simulaciones de aplicaciones de seguridad, etc., con el
mundo real.
Hasta no hace mucho, la nica manera de poder trabajar con datos
fsicos consista en adquirir un sistema comercial de adquisicin de datos
(DAQ) como los de National Instruments; afortunadamente hoy en da
hay existen otras alternativas mucho ms asequibles: una de ellas es el
popular microcontrolador Arduino.
Uno de los ejemplos ms bsicos consiste en leer datos de un sensor
conectado al Arduino y transmitirlos al PC mediante una comunicacin
serie; sin embargo, este ejemplo tiene limitaciones: se limita a un nico
sensor y los datos se leen numricamente en pantalla, pero no es
posible adquirirlos ni trabajar con ellos.
Por eso nos ha parecido interesante realizar una aplicacin diferente a
esta pequea tarjeta, que ser leer una seal mediante la simulacin de
dos sensores, que para nosotros sern dos potencimetros y luego
transmitirla a Matlab, pudiendo visualizar sus cambios mediante el
software gracias a las variaciones que se hagan con los potencimetros.

OBJETIVOS
OBJETIVOS GENERALES
1.
2.
3.
4.

Realizar la adquisicin de datos de una onda.


Usar la Tarjeta Arduino para la entrada analgica.
Programar la adquisicin de datos mediante Matlab.
Enlazar la comunicacin de la tarjeta de adquisicin de datos

con el software Matlab.


5. Desarrollar habilidades en la programacin de Matlab

OBJETIVOS ESPECFICOS
1. Instalar los drivers necesarios para el uso de Arduino.
2. Usar potencimetros para simular la onda analgica.
3. Usar las entradas analgicas de la tarjeta Arduino para la
adquisicin de datos.
4. Conocer cmo trabajan las entradas de la tarjeta Arduino.
5. Diferenciar las entradas analgicas y digitales de Arduino.
6. Comunicar la tarjeta Arduino con Matlab.
7. Usar package especiales para la comunicacin.
8. Configurar el puerto serial de la tarjeta Arduino.
9. Programar la adquisicin de datos.
10. Desarrollar habilidades de programacin usando comando ya
antes vistos.
11. Usar una interfaz para visualizar los cambios de la onda de
entrada.

MARCO TERICO
ARDUINO

INFORMACIN GENERAL
El Arduino Uno es una placa electrnica basada en el ATmega328 (ficha
tcnica). Cuenta con 14 pines digitales de entrada / salida (de los cuales
6 pueden utilizarse para salidas PWM), 6 entradas analgicas, un
16 MHz resonador

cermico,

una

conexin

USB,

un

conector

de

alimentacin, un header ICSP, y un botn de reinicio. Contiene todo lo


necesario para apoyar el microcontrolador; basta con conectarlo a un
ordenador con un cable USB o el poder con un adaptador o la batera AC
- to - DC para empezar.
El Uno se diferencia de todas las placas anteriores en que no utiliza el
chip controlador de USB a serial FTDI. En lugar de ello, cuenta con
la Atmega16U2 (Atmega8U2 hasta la versin R2) programado como un
convertidor de USB a serie.
Revisin 2 de la junta Uno tiene una resistencia tirando de la lnea 8U2
HWB a tierra, por lo que es ms fcil de poner en modo DFU.
Revisin 3 de la Junta tiene las siguientes caractersticas nuevas:
pinout: SDA aadido y pines SCL que estn cerca al pin AREF y
otros dos nuevos pernos colocados cerca del pin de RESET, la
instruccin IOREF que permiten a los escudos para adaptarse al

voltaje suministrado desde la pizarra. En el futuro, los escudos


sern compatibles tanto con el tablero que utiliza el AVR, que
funciona con 5V y con el Arduino Debido que funciona con 3.3V. El
segundo es un pin no est conectado, que se reserva para usos
futuros.
Circuito de rearme fuerte.
ATmega 16U2 sustituir el 8U2.
"Uno" significa uno en italiano es el ltimo de una serie de placas
Arduino USB y el modelo de referencia para la plataforma Arduino .

RESUMEN
Microcontroladores
Tensin de funcionamiento
Voltaje de entrada
(recomendado)
Voltaje de entrada (lmites)
Digital pines I / O

ATmega328
5V
7-12V
6-20V
14 (de los cuales 6 proporcionan

Pines de entrada analgica


Corriente DC por Pin I / O
Corriente DC de 3.3V Pin

PWM)
6
40 mA
50 mA
32 KB ( ATmega328 ) de los cuales

Memoria Flash

0,5 KB utilizado por gestor de

SRAM
EEPROM
Velocidad de reloj

arranque
2 KB ( ATmega328 )
1 KB ( ATmega328 )
16 MHz

POTENCIA
El Arduino Uno puede ser alimentado a travs de la conexin USB o con
una fuente de alimentacin externa. La fuente de alimentacin se
selecciona automticamente.

Potencia (no USB) externo puede venir con un adaptador de CA a CC


(pared-verruga) o la batera. El adaptador se puede conectar enchufando
un conector de 2,1 mm de centro positivo en el conector de
alimentacin de la placa. Los cables desde una batera se pueden
insertar en los encabezados de pin GND y Vin del conector de
alimentacin.
La tarjeta puede funcionar con un suministro externo de 6 a 20
voltios. Si se suministra con menos de 7 V, sin embargo, el pin de 5V
puede suministrar menos de cinco voltios y el tablero puede ser
inestable. Si se utiliza ms de 12V, el regulador de voltaje se puede
sobrecalentar y daar la placa. El rango recomendado es de 7 a 12
voltios.
Los pines de alimentacin son como sigue:
VIN. El voltaje de entrada a la placa Arduino cuando se trata de
utilizar una fuente de alimentacin externa (en contraposicin a 5
voltios de la conexin USB o de otra fuente de alimentacin
regulada). Usted puede suministrar tensin a travs de este pin, o,
si el suministro de tensin a travs de la toma de poder, acceder a
l a travs de este pin.
5V. Este pin como salida una 5V regulada desde el regulador en el
tablero. El tablero puede ser alimentado ya sea desde la toma de
alimentacin de CC (7 - 12), el conector USB (5V), o el pin VIN del
tablero (7-12V). El suministro de tensin a travs de los pines de
5V o 3.3V no pasa por el regulador, y puede daar su tablero. No
aconsejamos ella.
3V3. Un suministro de 3,3 voltios generada por el regulador de a
bordo. El drenaje actual mximo es de 50 mA.
GND. patillas de tierra.
Instruccin IOREF. Este pin de la placa Arduino proporciona la referencia
de tensin con la que opera el microcontrolador. Un escudo configurado

puede leer el voltaje pin instruccin IOREF y seleccione la fuente de


alimentacin adecuada o habilitar traductores de voltaje en las salidas
para trabajar con el 5V o 3.3V.

MEMORIA
El ATmega328 tiene 32 KB (con 0,5 KB utilizados para el gestor de
arranque). Tambin tiene 2 KB de SRAM y 1 KB de EEPROM (que puede
ser ledo y escrito con la librera EEPROM).

ENTRADA Y SALIDA
Cada uno de los 14 pines digitales en el Uno se puede utilizar como una
entrada o salida, utilizando

pinMode()

, digitalWrite ( )

digitalRead

() funciones. Operan a 5 voltios. Cada pin puede proporcionar o recibir


un mximo de 40 mA y tiene una resistencia de pull-up (desconectada
por defecto) de 20-50 kOhms. Adems, algunos pines tienen funciones
especializadas:
De Serie: 0 (RX) y 1 (TX). Utiliza para recibir (RX) y transmitir datos
en serie (TX) TTL. Estos pines estn conectados a los pines
correspondientes del ATmega8U2 USB-to-TTL chips Serial.
Interrupciones externas: 2 y 3 Estos pines pueden ser configurados
para activar una interrupcin en un valor bajo, un flanco
ascendente o descendente, o un cambio en el valor.
PWM: 3, 5, 6, 9, 10, y 11 para salidas PWM de 8 bits con
el

analogWrite( )

funcin.

SPI: 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK) Estos pines soportan


la comunicacin SPI utilizando la librera SPI.
LED: 13 Hay un built-in LED conectado al pin digital 13 Cuando el
pin es de alto valor, el LED est encendido, cuando el pasador es
bajo, es apagado.

El Uno tiene 6 entradas analgicas, etiquetados A0 a A5, cada uno de los


cuales proporcionan 10 bits de resolucin (es decir, 1024 valores
diferentes). Por defecto se miden desde el suelo a 5 voltios, aunque es
posible cambiar el extremo superior de su rango usando el pin AREF y
analogReference

la

funcin( ) . Adems, algunos pines tienen funciones

especializadas:
TWI: Pin A4 o A5 y SDA o pin SCL comunicacin Apoyo TWI usando
la librera Wire.
Hay un par de otras clavijas de la placa:
AREF. Voltaje de referencia para las entradas analgicas. Se utiliza
con

analogReference() .

Restablecer. Traiga

esta

lnea

LOW

para

reiniciar

el

microcontrolador. Normalmente se utiliza para aadir un botn de


reinicio a los escudos que bloquean el uno en el tablero.

COMUNICACIN
El Arduino Uno tiene una serie de instalaciones para la comunicacin con
un ordenador, otro Arduino, u otros microcontroladores. El ATmega 328
ofrece. El ATmega328 ofrece UART TTL (5V) de comunicacin en serie,
que

est

disponible

en

los

pines

digitales

(RX)

(TX). Un ATmega16U2 en los canales de mesa esta comunicacin serie a


travs de USB y aparece como un puerto COM virtual para el software en
el ordenador. El "firmware 16U2 utiliza los controladores USB COM
estndar, y no se necesita ningn controlador externo. Sin embargo, en
Windows, es necesario un archivo inf. El software de Arduino incluye un
monitor de serie que permite a los datos textuales sencillos para ser
enviados hacia y desde la placa Arduino. Las RX y TX LED en el tablero
parpadean cuando se estn transmitiendo datos a travs del chip y USB

de conexin de USB a serie al ordenador (pero no para la comunicacin


en serie en los pines 0 y 1).
Una biblioteca

Softwar eSerial

permite la comunicacin en serie en

cualquiera de los pines digitales de la ONU.


El ATmega328 tambin soporta I2C (TWI) y la comunicacin SPI. El
software de Arduino incluye una librera Wire para simplificar el uso
del I2C bus; consulte

la documentacin para

obtener

ms

informacin. Para la comunicacin SPI, utilice la librera SPI.

PROGRAMACIN
El

Arduino

Uno

se

puede

programar

con

el

software

Arduino

(descarga). Seleccione "Arduino Uno de los Herramientas> Junta de


men (de acuerdo con el microcontrolador en la placa). Para ms
detalles, consulte la referencia y tutoriales.
Los ATmega328 en la Arduino Uno viene precargado con un gestor de
arranque que le permite cargar nuevo cdigo a la misma sin el uso de un
programador

de

hardware

externo. Se

comunica

utilizando

el

original STK500 protocolo (referencia, archivos de cabecera C).


Tambin puede pasar por alto el gestor de arranque y programar el
microcontrolador a travs del ICSP (In-Circuit Serial Programming)
cabecea

utilizando Arduino

ISP o

similar; consulte estas

instrucciones para obtener ms detalles.


El ATmega16U2 (o 8U2 en el rev1 y tableros REV2) cdigo fuente del
firmware disponible. El ATmega16U2 / 8U2 se carga con un cargador de
arranque DFU, que puede ser activado por:
En las placas Rev1: conectan el puente de soldadura en la parte
posterior de la placa (cerca del mapa de Italia) y luego reiniciar el
8U2.

En las placas Rev2 o posteriores: hay una resistencia que tirando


de la lnea 8U2 / 16U2 HWB a tierra, por lo que es ms fcil poner
en modo DFU.

PROTECCIN DE SOBRECORRIENTE USB


El Arduino Uno tiene un polifusible reseteable que protege los puertos
USB de tu ordenador de cortocircuitos y sobrecorriente. Aunque la
mayora de los ordenadores proporcionan su propia proteccin interna,
el fusible proporciona una capa adicional de proteccin. Si hay ms de
500 mA se aplica al puerto USB, el fusible se romper automticamente
la conexin hasta que la corta o se elimina la sobrecarga.

CARACTERSTICAS FSICAS
La longitud mxima y la anchura del PCB Uno son 2,7 y 2,1 pulgadas,
respectivamente, con la toma de conector USB y el poder que se
extiende ms all de la dimensin anterior. Cuatro orificios de los
tornillos permiten la junta que se une a una superficie o caja. Tenga en
cuenta que la distancia entre los pines digitales 7 y 8 es de 160
milsimas de pulgada (0,16 "), no un mltiplo par de la separacin de
100 milsimas de pulgada de los otros pasadores.

MATLAB
MATLAB es un entorno de programacin para el desarrollo de algoritmos,
el anlisis de datos, la visualizacin y el clculo numrico. Con MATLAB,
puede solucionar problemas de clculo tcnico ms rpidamente que
con lenguajes de programacin tradicionales tales como C, C++ o
Fortran.

10

Puede utilizar MATLAB en una gran variedad de aplicaciones, tales como


procesamiento de seales e imgenes, comunicaciones, diseo de
control, pruebas y medidas, modelado y anlisis financiero o biologa
computacional. Para un milln de ingenieros y cientficos de la industria
y la educacin, MATLAB es el lenguaje del clculo tcnico.
Como podemos ver en la descripcin que nos presentan desde
MathWorks, MATLAB es un entorno de programacin con infinidad de
posibilidades, que nos ayudar a resolver nuestros problemas de clculo
tcnico

incluso

ms

rpidamente

que

otros

lenguajes

de

programacin. MATLAB es extremadamente potente, por lo que puede


costar hacerse con l, pero, ya estoy yo aqu para ayudarte a programar
tu propio Script para la comunicacin con Arduino en tiempo real.

CONFIGURACIN DE LOS PINES DE LA


TARJETA DESDE MATLAB
Para interactuar con la tarjeta, desde el entorno de Matlab; primero se
debe crear un objeto para acceder a la informacin de puerto de
comunicacin a la que est conectada la tarjeta. Se hace con la lnea de
comando, de la siguiente forma:

11

cIO=arduino( COM 3 )

En este ejemplo COM3, pero puede ser cualquier otro valor.


Al ejecutar la lnea anterior en la ventana de comandos, se inicia una
conexin

aparecer

en

pantalla,

texto

informativo

sobre

la

configuracin de entradas, salidas y estado actual de los pines.


Los pines de la tarjeta o borneras de conexin, que permiten conectar el
sistema a dispositivos externos, pueden configurarse como entradas o
como salidas y a su vez, en forma digital o anloga.

LECTURA DE ENTRADA DIGITAL


Si un pin ha sido configurado como entrada, el comando para leerlo es:
cIO . digitalRead(10)
que permite leer el estado alto 1 o bajo 0 del pin 10.
val=cIO . digitalRead (10)

Asigna el valor booleano presente en la entrada pin 10, a la variable


val.

ESCRITURA DIGITAL DE SALIDA


Si un pin ha sido configurado como salida, para colocar un estado alto
1 o bajo 0 en dicha salida, se usa el comando:

cIO . digitalWrite (13,1)


Pone en alto el pin 13.
cIO . digitalWrite (13, 0)

12

Pone el pin 13 en estado bajo.

LECTURA DE ENTRADA ANLOGA


Las entradas anlogas, son pines de la tarjeta Arduino, que pueden
recibir voltajes en un rango de 0 a 5 voltios. tiles cuando se requiere un
sensor que represente el valor de una variable anloga, como por
ejemplo: la temperatura. Suministran un valor entero entre 0 y 1023,
proporcional al valor de voltaje de la entrada anloga. El comando para
leer es:
cIO . analogRead (5)

Muestra el valor presente en la entrada anloga 5, como un nmero


entero entre 0 y 1023.
lect=cIO . analogRead (1)
Asigna el valor entero presente en la entrada anloga 1, a la variable
lect , como un nmero entero entre 0 y 1023

ESCRITURA EN SALIDA ANLOGA


Para asignar un valor anlogo a un pin de salida, se sigue el siguiente
formato:
cIO . analogWrite(3, 200)
El primer argumento de la funcin o mtodo, es el pin anlogo (Slo se
pueden usar los pines 3, 5, 6, 9, 10, 11) y el segundo argumento, un
valor de 0 a 255, proporcional al voltaje de salida presente en ese pin.

13

DESARROLLO
CONFIGURACIN DE ARDUINO
En primer lugar, vamos a preparar el Arduino. Conectamos los
potencimetros entre los pines de +5V y Gnd (neutro) y sus pines
centrales (que por tanto presentarn un voltaje entre +5V y 0V) a las
entradas analgicas A0 y A1 del Arduino, de esta manera:

Por supuesto, cualquier otro sensor analgico sirve exactamente igual


para este ejemplo. A continuacin, hemos de programar el Arduino, para
que recoja la informacin de A0 y A1 y la enve via serie; el formato del
envo consiste en: valor de A0, coma, valor de A1 y retorno de carro +
lnea nueva (debido a que se usa la funcin

14

Serial . println()

al final)

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:

El siguiente paso es preparar la medida, ajustando dos parmetros: el


tiempo total de medida, y la velocidad de capturas por segundo. ste
ltimo parmetro hay que estimarlo, pero haremos que el programa nos
devuelva el valor real, con lo que si ste se aleja de lo estimado ser
inmediato corregirlo.

15

A continuacin preparamos la figura en la que leeremos la seal de


ambos potencimetros. Abrimos una nueva ventana y unos nuevos ejes,
y creamos dos objetos grficos de tipo lnea, que iremos actualizando a
medida que tengamos los datos. De esta manera Matlab no se saturar,
que es lo que pasara si intentsemos utilizar la funcin

plot ()

dentro

del bucle.

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.

16

Si queremos, podemos salvar la figura en forma de PDF (vectorial) o


cualquier otro formato que queramos. Para esto yo uso una maravillosa
funcin externa creada por

Aslak Grinsted .

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.

RESULTADO Y EJEMPLO DE CAPTURA


Con el cdigo del ejemplo, obtendramos una figura semejante a esta:

17

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.

CODIGO MATLAB
1.

%Captura de datos mediante MATLAB

2.
3.

%borrar previos

4.

delete(instrfind({'Port'},{'COM3'})); %ajustar puerto serie!

5.

%crear objeto serie

6.

s = serial('COM4','BaudRate',9600,'Terminator','CR/LF');

7.

warning('off','MATLAB:serial:fscanf:unsuccessfulRead');

8.

%abrir puerto

9.

fopen(s);

18

10.
11.

% parmetros de medidas

12.

tmax = 10; % tiempo de captura en s

13.

rate = 33; % resultado experimental (comprobar)

14.
15.

% preparar la figura

16.

f = figure('Name','Captura');

17.

a = axes('XLim',[0 tmax],'YLim',[0 5.1]);

18.

l1 = line(nan,nan,'Color','r','LineWidth',2);

19.

l2 = line(nan,nan,'Color','b','LineWidth',2);

20.
21.

xlabel('Tiempo (s)')

22.

ylabel('Voltaje (V)')

23.

title('Captura de voltaje en tiempo real con Arduino')

24.

grid on

25.

hold on

26.
27.

% inicializar

28.

v1 = zeros(1,tmax*rate);

29.

v2 = zeros(1,tmax*rate);

30.

i = 1;

31.

t = 0;
19

32.
33.

% ejecutar bucle cronometrado

34.

tic

35.

while t<tmax

36.

t = toc;

37.

% leer del puerto serie

38.

a = fscanf(s,'%d,%d')';

39.

v1(i)=a(1)*5/1024;

40.

v2(i)=a(2)*5/1024;

41.

% dibujar en la figura

42.

x = linspace(0,i/rate,i);

43.

set(l1,'YData',v1(1:i),'XData',x);

44.

set(l2,'YData',v2(1:i),'XData',x);

45.

drawnow

46.

% seguir

47.

i = i+1;

48.

end

49.

% resultado del cronometro

50.

clc;

51.

fprintf('%g s de captura a %g cap/s \n',t,i/t);

52.

%savefigure('captura_multi','s',[4.5 3],'po','-dpdf')

53.
20

54.

%% Limpiar la escena del crimen

55.

fclose(s);

56.

delete(s);

57.

clear s;

CONCLUSIONES

La tarjeta ARDUINO UNO es de gran utilidad no solo para MATLAB


sino para otros programas como los son LABVIEW, SIMULINK, etc.

21

Con MATLAB llegar a ser ms rpida y entendible lo que


corresponde a la programacin y con respecto a su interfaz grfica
ms amigable hacia la persona.

RECOMENDACIONES

Tener en cuenta en que puerto COM se encontrar habilitado la


tarjeta ARDUINO UNO.
Tener bien claro los pasos a seguir para que entre el ARDUINO y
MATLAB haya una correcta comunicacin.
Tener en cuenta los puertos de la tarjeta que servirn de entrada y
salida para que no ocurra error de comunicacin.

22

You might also like