Laboratorio de Procesamiento Digital de Señales
Docente: Ing. Roger Guachalla Narváez
[email protected]
PRACTICA 06: Matlab y Arduino – Entrada y Salida de Datos 1. Objetivos: Conocer las características de la tarjeta Ardui no 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 análogos entre Matlab y Arduino
2. Fundamento Teórico 2.1 ¿Qué es Arduino? Arduino (http://www.arduino.cc (http://www.arduino.cc)) es en realidad tres cosas: libre que incorpora un microcontrolador reprogramable y una serie de pines (los 1. Una placa hardware libre que cuales están unidos internamente a las patillas de E/S del microcontrolador) que permiten conectar allí de forma muy sencilla y cómoda diferentes sensores y actuadores. 2. Un software libre (más 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 pl aca Arduino permite escribir, verificar y guardar (“cargar”) en la memoria del microcontrolad microcontrolador de la placa el conjunto de instrucciones que deseamos que este empiece a ejecutar. Es decir: nos permite programarlo. 3. Un lenguaje de programación libre . Por “lenguaje de programación” se entiende cualquier idioma artificial diseñado para expresar instrucciones (siguiendo unas determinadas reglas sintácticas) que pueden ser llevadas a cabo por máquinas. Concretamente dentro del lenguaje Arduino, encontramos elementos parecidos a muchos otros lenguajes de programación existentes (como los bloques condicionales, los bloques repetitivos, las variables, etc.), así como también 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 mi crocontrolador crocontrolador de la placa.
2.2 Tarjeta Arduino UNO Existen varios tipos de placas Arduino, cada una con características específicas que hay que conocer para poder elegir el modelo que más nos convenga según el caso. No obstante, existe un modelo “estándar” de placa, que es el más utilizado: la tarjeta Arduino UNO. 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 través de la conexión USB o con una fuente de alimentación externa. La fuente de alimentación se selecciona automáticamente.
Especificaciones Especificaciones técnicas Microcontrolador Primario Microcontrolador Secundario Voltaje de operación Entrada de voltaje externo Entradas/Salidas Digitales Entradas Analógicas Corriente DC para cada pin E/S Memoria de Código Flash ROM Memoria de Datos SRAM Memoria de Datos EEPROM Conector ICSP Frecuencia de Cristal
ATmega328 ATmega16 +5 V 6-20 V 14 (de las cuales 6 son Salidas PWM) 6 40 mA 32 KByte 2 KByte 1 Kbyte 1 16 MHz
Microcontrolador 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. Más concretamente, el ATmega328P ATmega328P pertenece a la subfamilia de microcontroladores “megaAVR”.
Microcontrolador Microcontrolador Secundario La conexión USB de la placa Arduino, además de servir como alimentación eléctrica, sobre todo es un medio para poder transmitir datos entre nuestro computador y la placa, y viceversa. Este tráfico de información que se realiza entre ambos aparatos se logra gracias al uso del protocolo USB, un protocolo de tipo serie que tanto nuestro computador 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 función de “traductor” del protocolo USB a un protocolo serie más 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 alimentación VIN: se trata de la fuente tensión de entrada que contendrá la tensión a la que estamos alimentando al Arduino mediante la fuente externa. 5V: fuente de tensión regulada de 5V, esta tensión puede venir ya sea de pin VIN a través de un regulador interno, o se suministra a través de U SB o de otra fuente de 5V regulada. 3.3V: fuente de 3.3 voltios generados por el regulador interno con un consumo máximo de corriente de 50mA. GND: pines de tierra.
Entradas/Salidas 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 máximo de 40mA. Además, algunos pines tienen funciones especializadas como: Pin 0 (RX) y 1 (TX). Se utiliza para recibir (RX) y la transmisión (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 (modulación por ancho de pulso). Constituyen bits de salida PWM con la función analogWrite(). Pin 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK). Estos pines son de apoyo a la comunicación comunicación 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 Analógicas El Arduino posee 6 entradas analógicas, etiquetadas desde la A0 a A5, cada una de las cuales ofrecen 10 bits de resolución (es decir, 1024 estados). Por defecto, tenemos una tensión de 5V, pero podemos cambiar este rango utilizando el pin de AREF y utilizando la función analogReference(), donde le introducimos una señal 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 pl aca Arduino no se puede usar toda la capacidad de la memoria Flash porque existen 512 bytes (el llamado “bootloader block”) ocupados ya por un código pre-programado de fábrica (el llamado “bootloader” o “gestor de arranque”), el cual nos permite usar la placa Arduino de una forma sencilla y cómoda sin tener que recurrir a un circuito Programador.
Memoria SRAM Memoria volátil 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 ejecución del programa y cada uno es de un tipo concreto (es decir, un dato puede contener un valor numérico entero, otro un número decimal, otro un valor de tipo carácter, también pueden ser cadenas de texto fijas u otros tipos de datos más especiales). Independientemente del tipo de dato, su valor siempre será eliminado cuando se deje de alimentar eléctricamente 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 método para programar directamente directamente microcontroladores microcontroladores de tipo AVR y PIC. Ya sabemos que la función de un bootloader es permitir cargar nuestros programas al microcontrolador conectando la placa a nuestro computador mediante un simple cable USB estándar, pero si ese microcontrolador no tiene grabado ningún bootloader, la escritura de su memoria no se puede realizar de esta forma tan sencilla y debemos utilizar otros métodos, como el ICSP.
El cristal oscilador Para marcar el ritmo de ejecución de las instrucciones en el microcontrolador, el ritmo de la lectura y escritura de los datos en su(s) memoria(s), el ritmo de adquisición de datos en los pines de entrada, el ritmo de envío 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 Instalación software IDE y Drivers de la tarjeta Arduino UNO a) Descargar la versión más 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 número 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 Menú]\Herramientas\Placa Elegir al que se conecta. En Menú]\Herramientas\Placa Elegir el modelo exacto de nuestro Arduino. En esta guía se usará el Arduino Uno)
g) En Menú]\Herramientas\Port seleccionar el número de Puerto Puerto Serial Virtual asignado. asignado. (En este ejemplo COM7)
h) Para probar el funcionamiento funcionamiento correcto de la l a tarjeta. Cargar el programa ‘Blink’ que hace parpadear el led incorporado en el pin número 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 compilación. 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 Legacy que requiere Matlab 2011 o superior (Se usará esta versión para esta guía)
El concepto de trabajo entre Matlab y Arduino usando este paquete es el siguiente:
3. Interface Matlab Arduino usando Arduino IO Package Packa ge a) Tener instalados el software IDE y los drivers de Arduino en el computador PC (Ver Sección 2.3) 2.3 ) b) Conectar y configurar la tarjeta Arduino Uno c) Descargar el archivo ArduinoIO.zip de ArduinoIO.zip de la dirección: http://www.mathworks.com/matlabcentral/fileexchange/32374-legacy-matlab-and-simulinksupport-for-arduino d) Descomprimir el archivo ArduinoIO.zip (se crea la carpeta ArduinoIO) e) Abrir el software IDE de Arduino y cargar el código ‘adio.pde ’ que se encuentra dentro de la carpeta ArduinoIO en: \ArduinoIO\pde\adio\ f) Pasar (Upload (Upload)) el código ‘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 añadido a la ruta
k) Iniciar la sesión entre Matlab y Arduino con los comandos del Arduino IO Package (Ver Sección 4.)
4. Comandos Arduino IO Package 4.1 Conectar Usar el comando a=arduino('port') para iniciar la sesión entre Matlab y Arduino port debe ser el puerto serial virtual asignado por el software Arduino IDE Ejemplo: >> a=arduino('COM5'); a=arduino('COM5'); La tarjeta Arduino debe estar conectada y los drivers instalados antes de realizar la conexión.
4.2 Asignación del modo Entrada/Salida de los pines pinMode(a,pin,string) para Usar el comando pinMode(a,pin,string) para configurar los pines como Entrada o Salida Ejemplos: >> pinMode(a,11,'output') pinMode(a,11,'output') >> pinMode(a,10,'input') 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=digitalRead(a,4) >> val=a.digitalRead(4) val=a.digitalRead(4) %val obtiene 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); digitalWrite(a,13,1); % pin #13 a +5V >> a.digitalWrite(13,1); a.digitalWrite(13,1); % pin #13 a +5V >> digitalWrite(a,13,0); digitalWrite(a,13,0); % pin #13 a 0V
4.5 Entrada analógica Usar el comando val=analogRead(a,pin) para leer el valor analógico de un pin. val tendrá 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 analógica (PWM) Usar el comando analogWrite(a,pin,val) para sacar una señal PWM val debe 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 demás. Ejemplos: >> analogWrite(a,11,90); analogWrite(a,11,90); % pin #11 a 90 de ciclo de trabajo >> a.analogWrite(11,90); a.analogWrite(11,90); % pin #11 to 90 de ciclo de trabajo >> analogWrite(a,3,10); analogWrite(a,3,10); % pin #3 to 10 de ciclo de trabajo
4.7 Desconectar Usar el comando delete(a) para terminar la sesión 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 Analógica
5.4 Salida Analógica
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 simultáneamente con una frecuencia variable controlada por potenciómetro 4. LEDs parpadeando uno después de otro (en forma de onda) con una velocidad variable Esquemático
Código Matlab
6. Procedimiento Procedimiento en Laboratorio 1era Firma: Ejemplos 4.1 al 4.4 Mostrar funcionamiento en hardware
2da Firma: Ejemplo 4.5 Defender el Defender el código y Mostrar el Mostrar el funcionamiento en hardware hardware
7. Informe escrito I. II.
Imprimir el código fuente del programa realizado en la obtención de la 2da Firma. Realizar un RESUMEN (escrito (escrito a mano) de por lo menos menos 4 páginas de:
Modelos de Placas ARDUINO Arduino MegaArduino Nano Arduino LilyPad Arduino Due Incluir: Fuentes de Información: direcciones web o bibliografía Impresión de las primeras primeras páginas de la fuente de información información Resumen escrito a mano (de un mínimo de 4 páginas )
III.
Conclusiones