Sei sulla pagina 1di 13

Laboratorio de Procesamiento Digital de Seales Docente: Ing.

Roger Guachalla Narvez


xoroger@yahoo.es

PRACTICA 06: Matlab y Arduino Entrada y Salida de Datos


1. Objetivos:
Conocer las caractersticas de la tarjeta Arduino
Instalar el software Arduino IDE y probar su funcionamiento con la tarjeta Arduino UNO
Instalar Arduino IO Package para realizar la interface entre Matlab y la tarjeta Arduino UNO
Realizar programas de entrada y salida de datos digitales y anlogos entre Matlab y Arduino
2. Fundamento Terico
2.1 Qu es Arduino?
Arduino (http://www.arduino.cc) es en realidad tres cosas:
1. Una placa hardware libre que incorpora un microcontrolador reprogramable y una serie de pines (los
cuales estn unidos internamente a las patillas de E/S del microcontrolador) que permiten conectar
all de forma muy sencilla y cmoda diferentes sensores y actuadores.
2. Un software libre (ms en concreto, un entorno de desarrollo), gratis y multiplataforma (ya que
funciona en Linux, MacOS y Windows) que debemos instalar en nuestro computador y que nos
permite escribir, verificar y guardar (cargar) en la memoria del microcontrolador de la placa Arduino
el conjunto de instrucciones que deseamos que este empiece a ejecutar. Es decir: nos permite
programarlo.
3. Un lenguaje de programacin libre. Por lenguaje de programacin se entiende cualquier idioma
artificial diseado para expresar instrucciones (siguiendo unas determinadas reglas sintcticas) que
pueden ser llevadas a cabo por mquinas. Concretamente dentro del lenguaje Arduino, encontramos
elementos parecidos a muchos otros lenguajes de programacin existentes (como los bloques
condicionales, los bloques repetitivos, las variables, etc.), as como tambin diferentes comandos
asimismo llamados rdenes o funciones que nos permiten especificar de una forma coherente y
sin errores las instrucciones exactas que queremos programar en el microcontrolador de la placa.
2.2 Tarjeta Arduino UNO
Existen varios tipos de placas Arduino, cada una con caractersticas especficas que hay que conocer para
poder elegir el modelo que ms nos convenga segn el caso. No obstante, existe un modelo estndar
de placa, que es el ms utilizado: la tarjeta Arduino UNO. Desde que apareci en 2010 ha sufrido tres
revisiones, por lo que el modelo actual se suele llamar UNO Rev3 o simplemente UNO R3.
El Arduino puede ser alimentado a travs de la conexin USB o con una fuente de alimentacin externa.
La fuente de alimentacin se selecciona automticamente.
Especificaciones tcnicas
Microcontrolador Primario ATmega328
Microcontrolador Secundario ATmega16
Voltaje de operacin +5 V
Entrada de voltaje externo 6-20 V
Entradas/Salidas Digitales 14 (de las cuales 6 son Salidas PWM)
Entradas Analgicas 6
Corriente DC para cada pin E/S 40 mA
Memoria de Cdigo Flash ROM 32 KByte
Memoria de Datos SRAM 2 KByte
Memoria de Datos EEPROM 1 Kbyte
Conector ICSP 1
Frecuencia de Cristal 16 MHz

Microcontrolador Primario
El microcontrolador que lleva la placa Arduino UNO es el modelo ATmega328 de la marca Atmel que tiene
una arquitectura de tipo AVR, arquitectura desarrollada por Atmel y en cierta medida competencia de
otras arquitecturas como por ejemplo la PIC del fabricante Microchip. Ms concretamente, el
ATmega328P pertenece a la subfamilia de microcontroladores megaAVR.
Microcontrolador Secundario
La conexin USB de la placa Arduino, adems de servir como alimentacin elctrica, sobre todo es un
medio para poder transmitir datos entre nuestro computador y la placa, y viceversa. Este trfico de
informacin que se realiza entre ambos aparatos se logra gracias al uso del protocolo USB, un protocolo
de tipo serie que tanto nuestro computador como la placa Arduino son capaces de entender y manejar.
No obstante, el protocolo USB internamente es demasiado complejo para que el microcontrolador
ATmega328 pueda comprenderlo por s mismo. La placa Arduino UNO R3 dispone de un chip que realiza
esta funcin de traductor del protocolo USB a un protocolo serie ms sencillo (y viceversa). Ese chip es
el ATmega16U2. El ATmega16U2 es todo un microcontrolador en s mismo con su propia CPU, con su
propia memoria tiene por ejemplo 16 Kilobytes de memoria Flash.
Pines de alimentacin
VIN: se trata de la fuente tensin de entrada que contendr la tensin a la que estamos
alimentando al Arduino mediante la fuente externa.
5V: fuente de tensin regulada de 5V, esta tensin puede venir ya sea de pin VIN a travs de un
regulador interno, o se suministra a travs de USB o de otra fuente de 5V regulada.
3.3V: fuente de 3.3 voltios generados por el regulador interno con un consumo mximo de
corriente de 50mA.
GND: pines de tierra.
Entradas/Salidas Digitales
Cada uno de los 14 pines digitales se puede utilizar como una entrada o salida. Cada pin puede
proporcionar o recibir un mximo de 40mA. Adems, algunos pines tienen funciones especializadas
como:
Pin 0 (RX) y 1 (TX). Se utiliza para recibir (RX) y la transmisin (TX) de datos serie TTL.
Pin 2 y 3. Interrupciones externas. Se trata de pines encargados de interrumpir el programa
secuencial establecido por el usuario.
Pin 3, 5, 6, 9, 10 y 11. PWM (modulacin por ancho de pulso). Constituyen bits de salida PWM con
la funcin analogWrite().
Pin 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK). Estos pines son de apoyo a la comunicacin SPI.
Pin 13. LED. Hay un LED conectado al pin digital 13. Cuando el pin es de alto valor, el LED est
encendido, cuando el valor est bajo, esta pagado.
}

Entradas Analgicas
El Arduino posee 6 entradas analgicas, etiquetadas desde la A0 a A5, cada una de las cuales ofrecen 10
bits de resolucin (es decir, 1024 estados). Por defecto, tenemos una tensin de 5V, pero podemos
cambiar este rango utilizando el pin de AREF y utilizando la funcin analogReference(), donde le
introducimos una seal externa de continua que la utilizara como referencia.
Memoria Flash
Memoria persistente donde se almacena permanentemente el programa que ejecuta el microcontrolador
(hasta una nueva reescritura si se da el caso). En el caso del ATmega328P tiene una capacidad de 32KB.
En los microcontroladores que vienen incluidos en la placa Arduino no se puede usar toda la capacidad de
la memoria Flash porque existen 512 bytes (el llamado bootloader block) ocupados ya por un cdigo
pre-programado de fbrica (el llamado bootloader o gestor de arranque), el cual nos permite usar la
placa Arduino de una forma sencilla y cmoda sin tener que recurrir a un circuito Programador.
Memoria SRAM
Memoria voltil donde se alojan los datos que en ese instante el programa necesita crear o manipular
para su correcto funcionamiento. Estos datos suelen tener un contenido variable a lo largo del tiempo de
ejecucin del programa y cada uno es de un tipo concreto (es decir, un dato puede contener un valor
numrico entero, otro un nmero decimal, otro un valor de tipo carcter, tambin pueden ser cadenas de
texto fijas u otros tipos de datos ms especiales). Independientemente del tipo de dato, su valor siempre
ser eliminado cuando se deje de alimentar elctricamente al microcontrolador. En el caso del
ATmega328P esta memoria tiene una capacidad de 2KB.
Memoria EEPROM
Memoria persistente donde se almacenan datos que se desea que permanezcan grabados una vez
apagado el microcontrolador para poderlos usar posteriormente en siguientes reinicios. En el caso del
ATmega328P esta memoria tiene una capacidad de 1 KB, por lo que se puede entender como una tabla
de 1024 posiciones de un byte cada una.
El conector ICSP
Las siglas ICSP (cuyo significado es In Circuit Serial Programming) se refieren a un mtodo para
programar directamente microcontroladores de tipo AVR y PIC. Ya sabemos que la funcin de un
bootloader es permitir cargar nuestros programas al microcontrolador conectando la placa a nuestro
computador mediante un simple cable USB estndar, pero si ese microcontrolador no tiene grabado
ningn bootloader, la escritura de su memoria no se puede realizar de esta forma tan sencilla y debemos
utilizar otros mtodos, como el ICSP.
El cristal oscilador
Para marcar el ritmo de ejecucin de las instrucciones en el microcontrolador, el ritmo de la lectura y
escritura de los datos en su(s) memoria(s), el ritmo de adquisicin de datos en los pines de entrada, el
ritmo de envo de datos hacia los pines de salidas y en general, para controlar la frecuencia de trabajo del
microcontrolador, la placa Arduino posee un reloj, el cual funciona a una frecuencia de 16 millones de
hercios (16MHz). Esto quiere decir que (aproximadamente y simplificando mucho) el microprocesador es
capaz de realizar 16 millones de instrucciones en cada segundo.
2.3 Instalacin software IDE y Drivers de la tarjeta Arduino UNO

a) Descargar la versin ms reciente del IDE (Entorno de Desarrollo Integrado) de Arduino para Windows
http://arduino.cc/en/main/software
b) Instalar el programa, al terminar en el rea de trabajo del equipo aparecer el icono de Arduino:

c) Conectar la tarjeta Arduino Uno al computador PC mediante el cable USB

d) El computador detectar el nuevo dispositivo USB.

e) Montar el driver adecuado, asignando un nmero de Puerto Serial Virtual (En este ejemplo COM7)

f) Abrir el IDE Arduino del escritorio de trabajo y configurar el modelo de Arduino. Confirmar el puerto serie
al que se conecta. En Men]\Herramientas\Placa Elegir el modelo exacto de nuestro Arduino. En esta
gua se usar el Arduino Uno)
g) En Men]\Herramientas\Port seleccionar el nmero de Puerto Serial Virtual asignado. (En este ejemplo
COM7)

h) Para probar el funcionamiento correcto de la tarjeta. Cargar el programa Blink que hace parpadear el
led incorporado en el pin nmero 13 de la tarjeta Arduino

i) Finalmente grabar el programa en la tarjeta haciendo click en el cono de flecha. En la ventana inferior se
muestra el proceso de compilacin. Al cabo de unos segundos verificar el parpadeo del led.
2.4 Arduino IO Package
El paquete Arduino IO permite la Entrada y Salida de datos entre Matlab y Arduino.
Existen 2 versiones de este archivo:
ArduinoIO.zip actual que requiere Matlab 2014 o superior
ArduinoIO.zip Legacy que requiere Matlab 2011 o superior (Se usar esta versin para esta gua)

El concepto de trabajo entre Matlab y Arduino usando este paquete es el siguiente:


3. Interface Matlab Arduino usando Arduino IO Package

a) Tener instalados el software IDE y los drivers de Arduino en el computador PC (Ver Seccin 2.3)

b) Conectar y configurar la tarjeta Arduino Uno


c) Descargar el archivo ArduinoIO.zip de la direccin:

http://www.mathworks.com/matlabcentral/fileexchange/32374-legacy-matlab-and-simulink-
support-for-arduino

d) Descomprimir el archivo ArduinoIO.zip (se crea la carpeta ArduinoIO)


e) Abrir el software IDE de Arduino y cargar el cdigo adio.pde que se encuentra dentro de la carpeta
ArduinoIO en: \ArduinoIO\pde\adio\

f) Pasar (Upload) el cdigo adios.pde a la tarjeta Arduino Uno


g) Abrir Matlab y cargar el archivo install_arduino.m que se encuentra dentro de la carpeta ArduinoIO
h) Ejecutar el archivo install_arduino.m

i) En la ventana emergente, seleccionar Add to path

j) La ventana de comandos de Matlab indicar que las carpetas Arduino se han aadido a la ruta

k) Iniciar la sesin entre Matlab y Arduino con los comandos del Arduino IO Package (Ver Seccin 4.)
4. Comandos Arduino IO Package
4.1 Conectar
Usar el comando a=arduino('port') para iniciar la sesin entre Matlab y Arduino
port debe ser el puerto serial virtual asignado por el software Arduino IDE
Ejemplo:
>> a=arduino('COM5');
La tarjeta Arduino debe estar conectada y los drivers instalados antes de realizar la conexin.
4.2 Asignacin del modo Entrada/Salida de los pines
Usar el comando pinMode(a,pin,string) para configurar los pines como Entrada o Salida
Ejemplos:
>> pinMode(a,11,'output')
>> pinMode(a,10,'input')
4.3 Entrada digital
Usar el comando digitalRead(a,pin) para leer el estado digital de un pin
Ejemplos:
>> val=digitalRead(a,4)
>> val=a.digitalRead(4) %val obtiene un 1 o 0 del pin digital #4
4.4 Salida Digital
Usar el comando digitalWrite(a,pin,val) para escribir un estado digital a un pin
Ejemplos:
>> digitalWrite(a,13,1); % pin #13 a +5V
>> a.digitalWrite(13,1); % pin #13 a +5V
>> digitalWrite(a,13,0); % pin #13 a 0V
4.5 Entrada analgica
Usar el comando val=analogRead(a,pin) para leer el valor analgico de un pin.
val tendr un rango de 0 a 1023
Ejemplos:
>> val=analogRead(a,0); % leer pin analogico #0
>> val=a.analogRead(5); % leer pin analogico #5
4.6 Salida analgica (PWM)
Usar el comando analogWrite(a,pin,val) para sacar una seal PWM
val debe tener un rango de 0 (0% de ciclo de trabajo) a 255 (100% de ciclo de trabajo)
Los pines con PWM en el Arduino Uno son 3, 5, 6, 9, 10 y 11
La frecuencia PWM es de 980Hz en los pines 5 and 6 y 480Hz en los dems.
Ejemplos:
>> analogWrite(a,11,90); % pin #11 a 90 de ciclo de trabajo
>> a.analogWrite(11,90); % pin #11 to 90 de ciclo de trabajo
>> analogWrite(a,3,10); % pin #3 to 10 de ciclo de trabajo
4.7 Desconectar
Usar el comando delete(a) para terminar la sesin entre Matlab y Arduino
Permite liberar el puerto serial para otras sesiones.
Ejemplos:
>> delete(a);
>> a.delete;
5. Ejemplos
5.1 Entrada Digital

5.2 Salida Digital


5.3 Entrada Analgica

5.4 Salida Analgica


5.5 Proyecto: Efectos con Leds
Consiste de un circuito con 5 leds y 4 modos de funcionamiento seleccionados mediante un pulsador:
1. Todos los LEDs apagados
2. Todos los LEDs prendidos
3. LEDs parpadeando simultneamente con una frecuencia variable controlada por potencimetro
4. LEDs parpadeando uno despus de otro (en forma de onda) con una velocidad variable
Esquemtico

Cdigo Matlab
6. Procedimiento en Laboratorio

1era Firma:
Ejemplos 4.1 al 4.4 Mostrar funcionamiento en hardware

2da Firma:
Ejemplo 4.5 Defender el cdigo y Mostrar el funcionamiento en hardware

7. Informe escrito
I. Imprimir el cdigo fuente del programa realizado en la obtencin de la 2da Firma.
II. Realizar un RESUMEN (escrito a mano) de por lo menos 4 pginas de:
Modelos de Placas ARDUINO
Arduino MegaArduino Nano
Arduino LilyPad
Arduino Due
Incluir:
Fuentes de Informacin: direcciones web o bibliografa
Impresin de las primeras pginas de la fuente de informacin
Resumen escrito a mano (de un mnimo de 4 pginas)
III. Conclusiones