Ejemplo de aplicación con Arduino: medida de caudal. TITULACIÓN: Ingeniería Técnica Industrial en Electrónica Industrial AUTOR: Josep Fernandez Daroca DIRECTOR: José Luís Ramírez Falo FECHA: Septiembre / 2012. Índice de contenido 1 OBJETIVO DEL PFC ................................................................................................................. 6 2 ARDUINO ..................................................................................................................................... 6 2.1 INTRODUCCIÓN A ARDUINO ................................................................................................... 6 2.1.1 ¿Qué es Arduino? ........................................................................................................ 6 2.1.2 ¿Qué significa que Arduino sea Open Hardware?[4] ................................................ 6 2.1.3 ¿Por qué Arduino? ...................................................................................................... 7 2.2 LAS PLACAS ARDUINO ........................................................................................................... 8 2.2.1 ¿Qué significa que una placa sea Arduino? ................................................................ 8 2.2.2 Placas de entradas y salidas ....................................................................................... 8 2.2.3 "Shields" y otras placas de terceros .......................................................................... 10 2.2.4 Construir nuestro propio Arduino ............................................................................. 12 2.2.5 ¿Cómo obtener una placa Arduino? ......................................................................... 12 2.2.6 Nuestra elección: El Arduino UNO ........................................................................... 12 2.2.6.1 El porqué de nuestra elección ................................................................................................ 12 2.2.6.2 Características ........................................................................................................................ 13 2.2.6.3 Esquema y pines .................................................................................................................... 14 2.3 EL ENTORNO DE TRABAJO .................................................................................................... 15 2.3.1 El entorno de desarrollo y los drivers de la placa para Windows ............................ 15 2.3.2 Descargar y ejecutar un ejemplo de aplicación Arduino .......................................... 18 2.3.2.1 Editor ..................................................................................................................................... 18 2.3.2.2 Compilador ............................................................................................................................ 19 2.3.2.3 Cargar y depurar .................................................................................................................... 20 2.4 LENGUAJE DE PROGRAMACIÓN ARDUINO ............................................................................ 22 2.4.1 Introducción e historia .............................................................................................. 22 2.4.2 Funciones básicas y operadores ............................................................................... 22 2.4.2.1 Estructuras ............................................................................................................................. 23 2.4.2.2 Variables ................................................................................................................................ 24 2.4.2.3 Funciones ............................................................................................................................... 25 2.4.3 Uso de librerías ......................................................................................................... 27 2.4.3.1 Librerías Estándar .................................................................................................................. 27 2.4.3.2 Librerías de terceros .............................................................................................................. 28 3 NUESTRO PROYECTO ARDUINO ....................................................................................... 30 3.1 MEDIDOR DE CAUDAL .......................................................................................................... 30 3.2 REQUERIMIENTOS INICIALES ............................................................................................... 30 3.3 ELECCIÓN DE LOS COMPONENTES ........................................................................................ 31 3.4 LISTA DE MATERIAL Y PRESUPUESTO ................................................................................... 32 3.5 EL HARDWARE ..................................................................................................................... 33 3.5.1 Características técnicas de los componentes ............................................................ 33 3.5.1.1 Shield LCD color ................................................................................................................... 33 3.5.1.2 Sensor de caudal .................................................................................................................... 34 3.5.2 El ensamblado ........................................................................................................... 35 3.6 EL SOFTWARE ...................................................................................................................... 37 3.6.1 Diseño de la pantalla ................................................................................................ 37 3.6.1.1 Uso de la librería del shield LCD a color de Sparkfun .......................................................... 37 3.6.1.2 Información a mostrar e interfaz ............................................................................................ 39 3.6.2 El programa de control de Arduino .......................................................................... 40 3.6.3 El programa de control del PC ................................................................................. 43 3.7 JUEGO DE PRUEBAS .............................................................................................................. 44 3.7.1 Test sobre el caudalímetro ........................................................................................ 44 3.7.2 Test sobre la captura de pulsos ................................................................................. 45 2 3.7.3 Test de funcionamiento general................................................................................. 47 4 USO DE ARDUINO EN ENTORNOS LECTIVOS ................................................................ 48 4.1 EDUCACIÓN SECUNDARIA .................................................................................................... 48 4.2 EDUCACIÓN TÉCNICA SUPERIOR .......................................................................................... 48 4.2.1 Usar AVRStudio, código C y Arduino ....................................................................... 49 4.2.2 Simular y ejecutar el código C en nuestro microcontrolador ................................... 52 4.2.2.1 Simular el código en el PC. AVRSimulator........................................................................... 53 4.2.2.2 Descargar el código en nuestra placa Arduino. AVRDude. ................................................... 53 4.2.2.3 Uso de entornos de depuración y programación .................................................................... 54 4.2.3 El ATmega328P ........................................................................................................ 55 4.2.3.1 Un breve resumen .................................................................................................................. 55 4.2.3.2 Puertos de entrada y salida digital ......................................................................................... 55 4.2.3.3 Uso de la USART/comunicación serie .................................................................................. 58 4.2.3.4 Las interrupciones en los ATmega328P ................................................................................ 60 4.2.3.5 Interrupciones por cambio de PIN ......................................................................................... 64 4.2.3.6 Uso de temporizadores y PWM ............................................................................................. 66 4.2.3.7 Uso del conversor ADC ......................................................................................................... 74 4.2.4 Codificación del medidor de caudal en C ................................................................. 75 5 PRESUPUESTO ......................................................................................................................... 78 5.1 PRECIOS UNITARIOS ............................................................................................................. 78 5.2 PRECIOS DESCOMPUESTOS ................................................................................................... 78 5.2.1 Capítulo 1: Estudios previos ..................................................................................... 78 5.2.2 Capítulo 2: Diseño y montaje del hardware ............................................................. 79 5.2.3 Capítulo 3: Diseño del firmware ............................................................................... 79 5.2.4 Capítulo 4: Diseño del software de PC ..................................................................... 79 5.2.5 Capítulo 5: Documentación ...................................................................................... 80 5.3 RESUMEN DEL PRESUPUESTO ............................................................................................... 80 6 CONCLUSIONES Y VALORACIÓN PERSONAL ............................................................... 81 Índice de ilustraciones Ilustración 1: Logo oficial de Arduino ......................................................................... 8 Ilustración 2: En la parte superior Arduino MEGA y en la inferior Arduino UNO .... 9 Ilustración 3: Arduino con tres "shields" ................................................................... 10 Ilustración 4: RobotShop Rover ................................................................................. 11 Ilustración 5: Arduino Single-Sided Serial o Severino .............................................. 12 Ilustración 6: Arduino UNO, vista frontal ................................................................. 13 Ilustración 7: Arduino UNO, vista trasera ................................................................. 13 Ilustración 8: Pines de Arduino contra ATmega328 .................................................. 14 Ilustración 9: Arduino en el administrador de dispositivos de Windows .................. 16 Ilustración 10: Entorno SW de Arduino..................................................................... 17 Ilustración 11: Acceso a los ejemplos a través del menú ........................................... 19 Ilustración 12: Acceso a los ejemplos a través de la barra de herramientas .............. 19 Ilustración 13: Ejemplo de código Arduino ............................................................... 19 Ilustración 14: Resultado de verificación correcto. .................................................... 20 Ilustración 15: Resultado de verificación incorrecto. ................................................ 20 Ilustración 16: Ubicación del LED de test en la placa Arduino ................................. 21 3 Ilustración 17: Monitor de comunicación serie integrado en el entorno Arduino ..... 22 Ilustración 18: Diagrama de bloques del caudalímetro .............................................. 31 Ilustración 19: Shield LCD a color ............................................................................ 33 Ilustración 20: Punto a cortocircuitar para activar la retro iluminación..................... 34 Ilustración 21: Sensor de caudal Koolance ................................................................ 34 Ilustración 22: Relación entre litros y frecuencia del medidor de caudal .................. 34 Ilustración 23: Esquema de montaje .......................................................................... 35 Ilustración 24: Esquema de conexionado del caudalímetro ....................................... 36 Ilustración 25: Vista lateral del montaje final ............................................................ 36 Ilustración 26: Vista frontal del montaje final ........................................................... 37 Ilustración 27: Listado de las librerías en el entorno Arduino ................................... 38 Ilustración 28: Uso de una librería una vez instalada en el entorno Arduino ............ 38 Ilustración 29: Pantalla principal ............................................................................... 40 Ilustración 30: Pantalla contadores parciales 1 .......................................................... 40 Ilustración 31: Pantalla contadores parciales 2 .......................................................... 40 Ilustración 32: Diagrama de flujo del firmware ......................................................... 41 Ilustración 33: Diagrama temporal del firmware ....................................................... 42 Ilustración 34: Salida del programa de visualización en el PC .................................. 43 Ilustración 35: Tren de pulsos del caudalímetro girando a baja velocidad ................ 44 Ilustración 36: Tren de pulsos del caudalímetro girando a media velocidad ............. 45 Ilustración 37: Tren de pulsos del caudalímetro girando a alta velocidad ................. 45 Ilustración 38: Respuesta ante un tren de pulsos de 31Hz ......................................... 46 Ilustración 39: Muestra de la pantalla principal ante una entrada de 31Hz ............... 46 Ilustración 40: Secuencia de acciones en funcionamiento normal............................. 47 Ilustración 41: Prueba de precisión del contador de segundos .................................. 48 Ilustración 42: Vista inicial del AVR Studio ............................................................. 49 Ilustración 43: Selección de dispositivo en AVR Studio ........................................... 50 Ilustración 44: Vista de codificación del AVR Studio ............................................... 51 Ilustración 45: Resultado de la compilación en el AVR Studio ................................. 52 Ilustración 46: Vista del simulador integrado en AVR Studio .................................. 53 Ilustración 47: Vista de ensamblador en AVRSimulator ........................................... 57 Ilustración 48: Puerto general de entrada/salida digital ............................................. 58 Ilustración 49: Ejemplo de uso del temporizador en modo CTC ............................... 71 Ilustración 50: Generación PWM en modo “Fast PWM” .......................................... 72 Ilustración 51: Generación PWM en modo “Phase Correct PWM” .......................... 72 4 Ilustración 52: Generación PWM en modo “Phase and Frequency Correct PWM”.. 73 Ilustración 53: Uso del temporizador como “Input capture” ..................................... 73 Ilustración 54: Configuración opciones de optimización del compilador ................. 76 Ilustración 55: Configuración opciones de optimización del linker .......................... 76 Ilustración 56: Resultado de la construcción del proyecto en AVRStudio ................ 77 Ilustración 57: Modificación del fichero ColorLCDShield.cpp. 1era parte ............... 84 Ilustración 58: Modificación del fichero ColorLCDShield.cpp. 2da parte ................ 85 Ilustración 59: Configuración de una herramienta externa en AVRStudio ............... 99 Ilustración 60: Vista para crear un botón para las herramientas externas en AVRStudio ........................................................................................................................ 100 Ilustración 61: Cuadro de opciones para botón en la barra de herramientas. I ........ 100 Ilustración 62: Cuadro de opciones para botón en la barra de herramientas. II ....... 101 Ilustración 63: Vista del botón en la barra de herramientas ..................................... 101 Ilustración 64: Estructura de carpetas del soporte digital ........................................ 112 Índice de anexos ANEXOS ............................................................................................................................................. 83 ANEXO 1: INFORMACIÓN USO LIBRERÍA LCD ................................................................................ 83 Modificaciones sobre la librería................................................................................................. 84 ANEXO 2: PROGRAMA DE CONTROL DE ARDUINO. ......................................................................... 86 ANEXO 3: PROGRAMA DE CONTROL DEL PC. ................................................................................. 91 ANEXO 4: CONFIGURACIÓN DEL AVRSTUDIO PARA DESCARGAR EL CÓDIGO EN ARDUINO. .......... 97 Contenido de “Upload.cmd” ...................................................................................................... 97 Contenido de “UploadFromAVRStudio.cmd” ............................................................................ 98 Uso de herramientas externas en AVRStudio ............................................................................. 98 ANEXO 5: LIBRERÍA DE USO DE LA COMUNICACIÓN SERIE EN AVRSTUDIO ................................. 101 Contenido de “Arduino_SERIAL_API.h” ................................................................................ 101 Contenido de “Arduino_SERIAL.c” ......................................................................................... 102 ANEXO 6: COMUNICACIÓN SERIE CON INTERRUPCIONES DE RECEPCIÓN ...................................... 103 Contenido de “Arduino_SERIAL_INTRx_API.h” .................................................................... 103 Contenido de “Arduino_SERIAL_INTRx.c” ............................................................................ 103 Contenido de “Arduino_SERIAL_INTERRUPT_example.c” ................................................... 104 ANEXO 7: MEDIDOR DE CAUDAL IMPLEMENTADO CON AVRSTUDIO ........................................... 105 Contenido de “medidorCaudal_AVR.cpp” .............................................................................. 105 Parte del contenido modificado de “ColorLCDShield.h” ........................................................ 110 ANEXO 8: CONTENIDO DEL SOPORTE DIGITAL DEL PFC ............................................................... 111 5 1 Objetivo del PFC El objetivo principal de este proyecto fin de carrera es conocer Arduino con todo su ecosistema de herramientas y accesorios, y evaluar sus capacidades y posibilidades. Se ha definido como segundo objetivo la evaluación de las capacidades formativas/lectivas de la plataforma Arduino en el ámbito de la educación tanto secundaria como universitaria. Para alcanzar tales objetivos propongo la realización de un medidor de caudal como hilo conductor para poder conocer y evaluar tanto el hardware como el software, así como conocer los distintos canales de distribución. 2 Arduino 2.1 Introducción a Arduino La mayor parte de esta sección es una recopilación de la información disponible en la página web del proyecto Arduino y de la entrada de la Wikipedia que hace referencia a Arduino. 2.1.1 ¿Qué es Arduino? “Arduino es una plataforma de electrónica abierta para la creación de prototipos basada en software y hardware flexibles y fáciles de usar. Se creó para artistas, diseñadores, aficionados y cualquiera interesado en crear entornos u objetos interactivos.”(Página principal de la web del proyecto Arduino [1]) Arduino es una plataforma de hardware libre (Open Source Hardware, OSHW) basada en una placa con un microcontrolador y un entorno de desarrollo. El hardware consiste en una placa con un microcontrolador Atmel AVR y varios puertos de entrada/salida, tanto digitales como analógicos, así como salidas PWM y de comunicaciones, para el control de objetos físicos (LEDs, servos, botones, etc.). Los microcontroladores más usados son el ATmega328 y el ATmega168 para las placas básicas, el ATmega1280 para la de mayor capacidad y el ATmega8 para las placas más antiguas. Todos estos microcontroladores incluyen un cargador de arranque (boot loader) de manera que sea lo más simple posible empezar a trabajar con ellos. El microcontrolador en la placa Arduino se programa mediante el lenguaje de programación Arduino (basado en Wiring[2]) y el entorno de desarrollo Arduino (basado en Processing[3]). 2.1.2 ¿Qué significa que Arduino sea Open Hardware?[4] El hardware open-source (de fuente abierta o libre) comparte muchos de los principios y metodologías del software libre y de código abierto. Algunos de los principios que se pretenden promover para considerar productos físicos como open hardware son los siguientes: 6 Publicar la documentación, incluyendo los archivos de los diseños mismos, que debe permitir su modificación y distribución. Especificar que porción del diseño es abierta en caso de que no se liberen todos sus componentes. Ofrecer el software para el visionado de los archivos de diseño y de la documentación, para que se pueda escribir el código open-source fácilmente. Ofrecer una licencia que permita producir derivados y modificaciones, además de su re-distribución bajo la licencia original, así como su venta y manufactura. La licencia no debe restringir que se venda o comparta la documentación necesaria. No pide una tarifa por su venta o la de sus derivados. La licencia no debe discriminar a ningún grupo o persona La licencia no debe de restringir a ningún campo o actividad el uso de la obra. Es decir, no se puede limitar su uso únicamente para negocios o prohibir sea utilizado para investigación nuclear. El licenciamiento de la obra no puede depender de un producto en particular. La licencia no debe restringir otro hardware o software, es decir que no puede insistir en que otros componentes de hardware o software externos a los dispositivos sean también open-source. La licencia tiene que ser neutral, ninguna disposición de la misma debe de basarse en una tecnología específica, parte o componente, material o interfaz para su uso. Cumpliendo con estas premisas, los diseños y esquemas de Arduino se distribuyen bajo licencia “Creative Commons Attribution-ShareAlike 2.5”[5]. Al seguir este tipo de licencias, donde toda la información es pública, todas las placas pueden ser construidas por uno mismo o bien comprarlas ya montadas. El software puede ser descargado de forma gratuita. Los ficheros de diseño de referencia (CAD), al estar disponibles bajo una licencia abierta, pueden ser libremente adaptados a las necesidades particulares. 2.1.3 ¿Por qué Arduino? Hay distintas soluciones comerciales que facilitan el trabajo de programar un microcontrolador y poder interactuar con ellos, como podrían ser Parallax Basic Stamp[6], BX-24 de Netmedia[7], Phidgets[8] o Handyboard del MIT[9] por citar algunos. Arduino, además de simplificar este proceso intenta ofrecer otras ventajas: Asequible – Las placas Arduino son más asequibles comparadas con otras plataformas de microcontroladores. La versión más cara de un modulo de Arduino puede ser montada a mano, e incluso ya montada cuesta bastante menos de 60€ Multi-Plataforma - El software de Arduino funciona en los sistemas operativos Windows, Macintosh OSX y Linux. La mayoría de los entornos para microcontroladores están limitados a Windows. Entorno de programación simple y directo - El entorno de programación de Arduino es fácil de usar para principiantes y lo suficientemente flexible para los usuarios avanzados. Software ampliable y de código abierto - El software Arduino esta publicado bajo una licencia libre, y preparado para ser ampliado por programadores experimentados. El lenguaje puede ampliarse a través de 7 librerías de C++, y si se está interesado en profundizar en los detalles técnicos, se puede dar el salto a la programación en el lenguaje C en el que está basado. De igual modo se puede añadir directamente código en C en los programas. Hardware ampliable y de Código abierto - Arduino está basado en los microcontroladores ATMEGA168, ATMEGA328 y ATMEGA1280. Los planos de los módulos están publicados bajo licencia Creative Commons, por lo que diseñadores de circuitos con experiencia pueden hacer su propia versión del módulo, ampliándolo u optimizándolo. Incluso usuarios relativamente inexpertos pueden construir la versión para placa de desarrollo para entender cómo funciona y ahorrar algo de dinero. 2.2 Las placas Arduino 2.2.1 ¿Qué significa que una placa sea Arduino? Ilustración 1: Logo oficial de Arduino “Arduino” es el nombre del proyecto “microcontrolador Arduino oficial”, alojado en http://arduino.cc. Aunque el nombre "Arduino" no está oficialmente registrado, generalmente es respetado por la comunidad como propiedad del equipo Arduino. Al tratarse de OSHW existen multitud de proyectos y placas basadas en Arduino que pueden ser totalmente compatibles con este, o que han sufrido ligeras modificaciones, ya sea para hacerlas especificas para ciertos trabajos o bien para reducir su coste. "Freeduino"[10] es un nombre que identifica las variantes del proyecto Arduino que no fueron creadas por el equipo oficial de desarrollo Arduino. Algunos de estos freeduinos serian Boarduino, uDUINO, iDuino, ArduPilot,...[11] 2.2.2 Placas de entradas y salidas Existe una gran variedad de placas Arduino, y de todas ellas se han hecho varias revisiones. 8 Ilustración 2: En la parte superior Arduino MEGA y en la inferior Arduino UNO Las placas Arduino oficiales a día de hoy son[12]: Arduino UNO. Es una placa Arduino que se conecta al PC a través de un cable USB estándar. A través de esta conexión la alimentación y, además, permite programarla y utilizarla. Arduino UNO es la última revisión de este tipo de placas que se conectan al USB. Entre las múltiples revisiones que se han hecho encontraríamos la Duemilanove, Diecimila, NG (Nuova Generazione) o Extreme. Arduino Mega Es una placa Arduino similar a la USB, pero más grande y potente. La última revisión posee el chip ATmega2560. Tiene mayor número de pines de entradas y salidas digitales, más pines PWM, entradas analógicas, etc. Arduino Mega ADK El Arduino ADK es una placa similar al Arduino Mega, pero con una interface USB para conectar con teléfonos basados en Android. Arduino Pro Es una placa similar al Arduino UNO, pero diseñada con la intención de instalaciones semipermanentes. La placa se entrega sin los distintos conectores o “headers”, es compatible con las distintas extensiones de Arduino, y existe una versión de 3.3V para ser alimentado con baterías. Arduino Ethernet Similar al Arduino UNO, sin soporte USB, pero con un conector RJ-45 para dar soporte Ethernet. Existe la posibilidad de tomar la alimentación de la propia Ethernet. Arduino Fio Un Arduino orientado para usarlo como nodo inalámbrico. Posee conectores para un módulo Xbee (módulo inalámbrico)[13], un conector para una batería LiPo (Polímeros de litio), y un circuito para cargar la batería. Arduino LilyPad 9 Una placa Arduino circular, reducida al máximo, diseñada para ser cosida a la ropa o a otro tipo de soporte flexible. Necesita un adaptador adicional para comunicarse con el PC. Arduino BT El Arduino BT contiene un módulo bluetooth integrado para las comunicaciones móviles. Arduino Nano El Arduino Nano es un todo-en-uno, diseño compacto para usar en una placa de prototipo. Arduino Serial Las versiones serial de Arduino se vendieron principalmente como kits no ensamblados o solo PCBs para que lo montara uno mismo, ya sea a modo de aprendizaje o para reducir costes. Arduino Mini El Arduino Mini es la placa compacta de Arduino. Para reducir espacio, la comunicación con el PC se hace a través de un adaptador de USB a Arduino Mini. Arduino Pro Mini Igual que el Arduino Mini, pero sin los “headers” ni lo conectores montados, con la intención de tenerlo en instalaciones semipermanentes o permanentes. Arduino Single-Sided Serial También conocido como "Severino". Esta es la versión de la placa Arduino de una sola cara, haciéndola fácil de hacer a mano. No fue manufacturada, sino que fue publicada en la web de Arduino para que la gente se la pudiese hacer ellos mismos a modo de aprendizaje de todo el proceso de grabación de PCB. El objetivo de Arduino y sus placas es ofrecer a la gente la posibilidad de seguir la filosofía DIY (Do it yourself). 2.2.3 "Shields" y otras placas de terceros Las shields son placas que se colocan encima de la placa Arduino y que amplían una nueva función para que sea controlada desde Arduino, para controlar diferentes aparatos, adquirir datos, etc. Ilustración 3: Arduino con tres "shields" 10
Description: