AUTOR: Jorge Hermoso Fernndez. DIRECTOR: Alfonso Romero Nevado
Fecha: 05 / 2012
A ngel por confiar en m para desarrollar este producto, a Mar por revisar todo el trabajo, a Ricard por la magnfica labor de montaje y a todos aquellos que han participado de alguna u otra manera. Muchas Gracias 4 ndice
1 Glosario ............................................................................................................... 9 1.1 Vocabulario .................................................................................................. 9 1.2 Acrnimos .................................................................................................. 10 2 Introduccin ...................................................................................................... 11 2.1 Objetivos .................................................................................................... 11 2.2 Motivaciones .............................................................................................. 11 3 Descripcin de un sistema de fresado ............................................................... 12 3.1 ATC (Automatic Tool Changer) ................................................................ 12 4 Descripcin del proyecto ................................................................................... 14 4.1 Esbozo del sistema ..................................................................................... 14 4.1.1 Dimensiones ........................................................................................... 15 4.1.2 Funciones ............................................................................................... 15 4.1.3 Tipo de material para trabajar ................................................................ 16 4.1.4 Precisin ................................................................................................. 16 4.2 Sistema ATC y anclaje de herramientas .................................................... 16 4.3 Diseo mecnico del sistema ..................................................................... 17 4.4 Seleccin de actuadores y sensores ........................................................... 22 4.4.1 Necesidades ............................................................................................ 22 4.4.2 Restricciones .......................................................................................... 23 4.4.3 Seleccin ................................................................................................ 24 4.5 Requisitos de la unidad de control ............................................................. 28 4.6 Diseo de la unidad de control .................................................................. 28 4.6.1 Requisitos y eleccin driver motores ..................................................... 29 4.6.2 Requisitos y eleccin mdem BT........................................................... 29 4.6.3 Requisitos y eleccin extras ................................................................... 30 4.6.4 Requisitos y eleccin uC ........................................................................ 31 4.6.5 Eleccin de un comicro .......................................................................... 32 4.6.6 Panel de Control ..................................................................................... 32 4.6.7 Etapa de alimentacin ............................................................................ 33 5 Diseo y fabricacin.......................................................................................... 34 5.1 Herramientas utilizadas para la elaboracin de este proyecto ................... 34 5.1.1 Arduino IDE ........................................................................................... 34 5.1.2 Eclipse .................................................................................................... 34 5.1.3 WinAVR................................................................................................. 34 5 5.1.4 Android SDK.......................................................................................... 34 5.1.5 Altium Designer ..................................................................................... 34 5.1.6 Diseo de esquemticos y variantes ....................................................... 35 5.1.7 Diseo del PCB ...................................................................................... 36 5.2 Fabricacin de los prototipos ..................................................................... 36 5.2.1 Fabricacin de prototipos del PCB......................................................... 36 5.2.2 PCB del Panel de Control ...................................................................... 36 5.2.3 Montaje de los prototipos ....................................................................... 37 5.3 Desarrollo software .................................................................................... 37 5.3.1 FKT IO ................................................................................................... 38 5.3.2 Heavy Duty ............................................................................................ 38 5.3.3 Aplicacin de Configuracin y Control Manual .................................... 38 Aplicacin Comicro ........................................................................................... 41 Aplicacin Android ............................................................................................ 43 6 Clculos ............................................................................................................. 45 6.1 Consumo total de la unidad de Control ..................................................... 45 6.1.1 Peor caso 5V........................................................................................... 45 7 Planos ................................................................................................................ 47 8 Presupuesto........................................................................................................ 60 8.1 Estudio y diseo ......................................................................................... 60 8.2 Componentes ............................................................................................. 61 8.3 Fabricacin de prototipos ........................................................................... 62 8.4 Desarrollo de SW ....................................................................................... 63 8.5 Generacin de la documentacin ............................................................... 63 8.6 Costes Globales del Proyecto .................................................................... 63 9 Conclusiones ..................................................................................................... 65 Referencias ............................................................................................................. 66 Apndice A: Cdigo Aplicacin de Configuracin (Eclipse IDE) ............................ 67 Apndice B: Cdigo Aplicacin Configuracin Comicro (Arduino IDE)................ 85 Apndice C: Cdigo Test IO (Arduino IDE) ............................................................. 96 Apndice D: Cdigo Test Heavy Duty (Eclipse IDE) ............................................... 97 Apndice E: Aplicacin Android ............................................................................... 98 Apndice F: Variantes & PnP .................................................................................. 145 Apndice G: BOM ................................................................................................... 151 Apndice H: Planos Mecnicos ............................................................................... 152
6 Resumen
Ttulo: Unidad de control para fresadora CNC con cambio automtico de herramienta Autor: Jorge Hermoso Fernndez Direccin: Alfonso Romero Nevado Fecha: Junio de 2012
0. Resumen
Los sistemas de mecanizado en la industria son elementos cada vez ms comunes, siendo uno de los principales exponentes la fresadora por control numrico. La popularidad de estas mquinas ha ido creciendo hasta el punto de haberse convertido, incluso, en elementos disponibles para particulares y gracias, en gran medida, a las aplicaciones CAM. En este proyecto se presenta una aproximacin a un sistema de fresado por control nmerico de sobremesa con cambio automtico de herramienta mediante un carrusel dispensador. El propsito del sistema diseado ser el de poder validar el mtodo de anclaje propuesto en el proyecto, as como las alternativas que puedan derivar. Es por ello que el conjunto se dimensiona de una forma escalada buscando una reduccin de complejidad y de costes y utlizando servomotores de modelismo como alternativa a los motores paso a paso. La fijacin de la herramienta se ha previsto con un sistema imantado de corona dentada para facilitar el posicionamiento y reducir la complejidad de centraje y orientacin presente en otros sistemas de cambio automtico de herramienta. A partir del esbozo del sistema de fresado se describir el diseo y fabricacin de una unidad de control capaz de controlar la mquina, siendo este el verdadero objetivo del presente proyecto. Esta unidad deber permitir la comunicacin con el PC y va Bluetooth con dispositivos Android para el desarrollo de la futura aplicacin de trabajo. Como ejemplo, se desarrollar una aplicacin de configuracin y control manual que muestre a los interesados el uso del sistema.
7 Resum
Ttol: Unitat de control per a fresadora CNC amb canvi automtic deina. Autor: Jorge Hermoso Fernndez Direcci: Alfonso Romero Nevado Data: Juny de 2012
0. Resum
Els sistemes de mecanitzat a la industria sn elements cada cop ms comuns, essent un del principals exponents la fresadora per control numric. La popularitat daquestes mquines sha incrementat fins al punt dhaver-se convertit, fins i tot, en elements disponibles per a particulars grcies, en gran mesura, a les aplicacions CAM. En aquest projecte es presenta una aproximaci a un sistema de fresat per control numric de sobretaula amb canvi automtic deina mitjanant un carrusel dispensador. El propsit del sistema diseat ser el de poder validar el mtode danclatge proposat al projecte aix com les alternatives que es puguin derivar. s per aix que el conjunt es dimensiona duna forma escalada buscant una reducci de complexitat i de costos i utilitzant servomotors de modelisme com a alternativa als motors pas a pas. La fixaci de leina sha previst amb un sistema imantat de corona dentada per facilitar el posicionament i reduir la complexitat del centratge i orientaci present en altres sistemes de canvi automtic. A partir de lesbo del sistema de fresat es descriur el disseny i la fabricaci duna unitat de control capa de controlar la mquina, essent aquest el verdader objectiu del present projecte. Aquesta unitat haur de permetere una comunicaci USB amb lordinador i via Bluetooth amb un dispositiu Android per al desenvolupament duna futura aplicaci de treball. Com exemple es desenvolupar una aplicaci de configuraci y control manual que mostri als interessats ls del sistema.
8 Final Project Summary
Title: Control unit design for CNC milling machine with automatic tool changer Author: Jorge Hermoso Fernndez Management: Alfonso Romero Nevado Date: June of 2012
0. Abstract
Industrial machining systems are increasingly common elements to be one of the leading exponents the numerically controlled milling machine. The popularity of these machines has grown as much as to become available for individuals thanks greatly to CAM applications. This project presents an approach to a desktop numerical control milling system with automatic tool changer through a dispenser carousel. The main purpose of the designed system will be the validation of the fixing tool proposed in the document as well as several alternatives that may arise. Because of this the whole system will be accordingly sized to reduce complexity using hobby servomotors as an alternative to stepper motors. The tool locking system is composed by a geared ring with a magnetic core to facilitate the positioning and centering as well as reducing complexity and orientation issues present in other automatic tool changer systems. From the outline of the milling system this project will describe the design and manufacture of an electronic control unit capable of managing the machine, which is the main goal of this project. This unit will allow communication with the PC and via Bluetooth with Android devices for the development of future operating applications. As an example, a configuration and manual control application will be developed to show the reader the use of the system.
9 1 Glosario 1.1 Vocabulario Arduino: plataforma de hardware de fuente abierta basada en una sencilla placa de entradas y salidas simple y un simple entorno de desarrollo.
Despanelizado: Operacin de separacin dels scoring (restos sobrantes de PCB) de un panel con diversos placas electrnicas.
Android: Sistema operativo para dispositivos mviles (smartphones y tablets) basado en un kernel de Linux.
Diodo de clamping: Diodos que se colocan entre una salida o entrada y alimentacin y masa para asegurar los niveles de tensin de esta.
Firmware: bloque de instrucciones de mquina para propsitos especficos, grabado en una memoria de tipo de solo lectura.
iWrap: firmware especifico para modulos Bluetooth de Bluegiga que permite una gestin de las funcinalidades muy simple.
Comicro: microcontrolador secundario de una unidad electrnica con los objetivos de supervisar algunas operaciones del microcontrolador principal y liberarlo de cierta carga.
FTDI: Compaa escocesa de fabricacin de semiconductores especializada en conversores serie-USB. Tal es su popularidad que se abrevia el nombre de estos a chips FTDI.
Footprint: Diseo de los pads de un componente electrnico para un PCB, es la uella necessaria para hacer las conexiones a los pines de este.
Conector IDC: Tipo de conector para cable plano caractertico por ser de montaje fcil al quedar atrapado el cable entre unas pequeas cuchillas que automticamente cortan el aislamiento de plstico. Es muy popular en el hardware infrmtico.
XML: Extensible Markup Language, se trata de un lenguaje estructural que permite la compatibilidad entre sistemas.
10 1.2 Acrnimos
CNC: Control Numrico por Computadora CAM: Computer Aided Manufacturing CAD: Computer Aided Design PCB: Printed Circuit Board ATC: Automatic Tool Changer FSR: Force Sensing Resistor LDR: Light Dependent Resistor LED: Light Emitting Diode PnP: Pick and Place USART: Universal Synchronous/Asynchronous Receiver/Transmitter BT: Bluetooth IDE: Integrated Development Environment SO (Encapsulado): Small Outline
11 2 Introduccin Las mquinas de fresado son elementos muy comunes en los ambientes industriales. Su uso se extiende desde la creacin de piezas diseadas mediante programas de CAD hasta la simple tarea de despanelizado de PCBs. En un entorno cada vez ms estricto con los tiempos de produccin y la eficiencia, la automatizacin de los procesos se convierte poco a poco en una herramienta imprescindible.
2.1 Objetivos El objetivo general del presente proyecto es proponer un modelo escalado de bajo coste de una fresadora automtica de dos ejes con un sistema automtico de cambio de herramientas por revlver. A partir del esbozo del prototipo se pretende disear y fabricar una unidad de control electrnica capaz de controlar toda la mquina de forma escalada y de permitir al usuario la configuracin del sistema y su uso mediante una conexin Bluetooth a un dispositivo mvil con el sistema operativo Android. Se debern seleccionar los accionamientos y sensores necesarios del mercado para dimensionar la unidad de control. La aplicacin host para el programa CAM no se desarrollar en el presente proyecto. Tampoco se construir el prototipo del sistema CNC. Al tratarse de un proyecto en la especialidad de electrnica y automtica industrial esta memoria se centrar en el diseo y fabricacin de la unidad de control as como en la eleccin de los sensores y actuadores, aunque la totalidad del proyecto se mostrar en el documento para permitir al lector una mejor comprensin de las necesidades de desarrollo. Las conclusiones del proyecto acadmico se extraern sobre los resultados de la fabricacin del prototipo electrnico, mientras que la valoracin externa del proyecto se basar en las diferentes pruebas de los sistemas de fijacin para el sistema ATC (Automatic Tool Changer).
2.2 Motivaciones Con este proyecto se trata de presentar una alternativa a los actuales sistemas de fresado mediante las conclusiones que se puedan extraer del estudio y diseo que nos ocupan. La realizacin de este proyecto esta motivada por la necesidad de realizar un trabajo multidisciplinar que, si bien se encuentra claramente centrado en el desarrollo electrnico, requiere de planteamientos y herramientas del diseo mecnico. Es, por tanto, una excelente oportunidad para disear un sistema desde el inicio teniendo la libertad de tomar todas las decisiones.
12 3 Descripcin de un sistema de fresado La fresadora es una mquina de mecanizado por erosin cuyo primer modelo data de 1818 por Eli Whitney [1], un inventor estadounidense. Su principio de funcionamiento se basa en una herramienta rotativa de varios filos, llamada fresa, que elimina el material a su paso dando as forma a la pieza. Los primeros modelos, aunque poco efectivos, permitieron mediante el intercambio de piezas mecanizar diseos que no habran sido posibles de fabricar en masa de otra forma. A diferencia de un taladro corriente, la fresadora no est limitada a acceder a la pieza inmvil en el banco de trabajo mediante el movimiento en un nico eje, sino que la herramienta trabaja la pieza con libertad en los ejes horizontales permitiendo de esta manera la realizacin de formas complejas variando la posicin de la pieza, el grado de insercin de la herramienta y el perfil de la fresa. Por regla general, las fresadoras tienen precisiones de menos de 0.025mm gracias a sistemas reductores en caso de accionamiento manual (mediante manivelas) o a controles analgicos o digitales en los casos de sistemas automatizados. Debido a su gran polivalencia las fresadoras son cada vez ms comunes en el entorno industrial, pero con el avance tecnolgico es raro encontrar fresadoras manuales. El control numrico por ordenador (CNC) ha permitido informatizar el mecanizado y, gracias a la conjuncin de estas mquinas con del software de diseo y manufactura asistidos por ordenador (CAD y CAM), se han reducido los tiempos de produccin. La mayora de fresadoras CNC, tambin llamadas centros de mecanizado, consisten en taladros verticales con libertad de movimiento en los tres ejes cartesianos. Aunque el movimiento vertical en el eje Z suele realizarlo el til rotatorio, dependiendo de la arquitectura, hay maquinas que mueven la base con la pieza fija en los ejes planos X e Y, o bien otras que mueven la herramienta. Los modelos ms avanzados de fresadoras han llegado a incorporar hasta dos ejes ms de trabajo, incorporando la rotacin de la pieza como si de un torno se tratase, as como la inclinacin de sta, permitiendo a la herramienta trabajar en ngulo.
3.1 ATC (Automatic Tool Changer) En este escenario de avanzada automatizacin de procesos es prcticamente indispensable intentar aumentar la eficiencia de las mquinas. Con tal efecto se introdujo el concepto de cambio automtico de herramienta. Estos sistemas tambin son conocidos en el mundo de la robtica, aunque en este caso existen diferencias, al requerir no slo la transmisin de movimiento, sino tambin la de seales elctricas. El ATC reduce los tiempos de fabricacin al eliminar la necesidad de parar el proceso para permitir al operario acceder a cambiar la herramienta, con la posterior calibracin. Adems, permite el cambio automtico en caso de rotura de herramientas frgiles. De forma general, el cambio automtico de herramienta consiste en un mecanismo de acceso y extraccin ms un cojunto de dos piezas que conforman un sistema de fijacin mecnico siendo el lado de la mquina el anclaje maestro y la del lado de la herramienta el anclaje esclavo. 13 Entre los sistemas ATC para fresadoras, el ms comn con diferencia es el tipo in line, el cual consiste en una disposicin en lnea de todas las herramientas a lo largo de un eje exterior a la zona de trabajo. Este sistema presenta la principal ventaja de su simplicidad, adems de la gran accesibilidad para colocar y recoger las herramientas, tanto por parte de la mquina como del operario. La alternativa a este sistema es el carrusel o revlver, el cual almacena las herramientas en un dispensador giratorio. Se trata de un sistema ms complejo destinado sobretodo a grandes mquinas normalmente cerradas en las que interesa mantener la atmsfera interior y donde se busca proteger las herramientas de la suciedad. En este segundo caso es ms comn encontrar los sistemas de fijacin maestro-esclavo arriba mencionados, mientras que en los sistemas en lnea se suelen utilizar herramientas estndares, al igual que con los taladros convencionales, automatizando el movimiento de la mordaza del motor.
Imagen 1: Sistema lineal de cambio de herramienta [2]
Imagen 2: Sistema por carrusel de cambio de herramientas [3]
14 4 Descripcin del proyecto El proyecto tiene como objetivo el esbozo de un sistema de fresado, la eleccin de los actuadores y el diseo y fabricacin de la placa de control, as como su interfaz de configuracin mediante la aplicacin Android. Con el objetivo de facilitar al lector el seguimiento del presente documento, se ha divido el proceso de trabajo en diferentes secciones:
En primer lugar, se realizar un breve esbozo del sistema que se pretende disear, sealando las caractersticas necesarias. Posteriormente, y en base a las ideas expuestas en el punto anterior, se listarn las necesidades del sistema en lo que se refiere a actuadores y sensores elctricos. Con los requerimientos se realizar la bsqueda de los modelos necesarios en el mercado para la fabricacin del sistema CNC. Una vez seleccionados los actuadores, se dimensionar la placa de control para seleccionar los componentes. Finalmente, se realizar el diseo y se proceder a documentar su fabricacin y resultados.
4.1 Esbozo del sistema La fresadora se plantea como un sistema CNC de sobremesa de tres ejes en los que se puede controlar el movimiento relativo entre la pieza y el til en los tres ejes cartesianos. El accionamiento de la herramienta ser un motor de corriente continua de baja potencia, pues se tratar de un sistema a pequea escala para poder validar el sistema de fijacin de herramientas y desarrollar la aplicacin de control para terminales mviles.
Imagen 3: Ejes de trabajo de una fresadora
A pesar de que el diseo mecnico se basar en un sistema de tres ejes, la placa de control debe estar preparada para cinco ejes, aadiendo as la funcionalidad para tornear piezas con inclinacin. 15 Para el sistema ATC se disear un modelo de revlver con desplazamiento en el eje horizontal, para permitir la fijacin y extraccin de la herramienta mediante unas guas. Este punto se discutir ms delante de forma ms extensiva.
Imagen 4: Sistema ATC de carrusel con pin y cremallera
4.1.1 Dimensiones La mquina resultante debe ser una versin de escritorio, por lo que las dimensiones totales del sistema no debern exceder los 600 x 600 mm. La superficie til de trabajo ser de 360 x 360 mm, a excepcin de la zona de cambio de herramienta que le restar un rea de 60 x 60 mm en una esquina.
4.1.2 Funciones Con este sistema se espera, como principal resultado, mover el til de fresado por todo el rea activa horizontal, as como vertical, y poder realizar los cambios automticos de herramienta. Una vez conseguidos estos objetivos, el sistema deber ser capaz de trabajar exclusivamente materiales blandos en dos y tres dimensiones, erosionando, taladrando, cortando o dibujando. Una opcin que debe contemplar el sistema de control es la funcionalidad como torno con la adicin de hasta dos ejes ms de trabajo, uno en el eje de la pieza a trabajar y otro perpendicular a este:
16
Imagen 5: Ejes de trabajo adicionales (izquierda: inclinacin, derecha: rotacin)
4.1.3 Tipo de material para trabajar Al tratarse de un sistema a escala con accionamientos de baja potencia, se espera trabajar con materiales muy blandos como la espuma de poliestireno para diseos 2D y 3D. No obstante, el objetivo no es poder mecanizar materiales, sino poder evaluar el anclaje y su resistencia con un motor de baja potencia. 4.1.4 Precisin Al tratarse de un sistema para el desarrollo, se busca conseguir una precisin aceptable, aunque no se presenta como un detalle crtico, de modo que ste es un parmetro con un margen muy abierto. Como sistema de posicionamiento, este proyecto prev utilizar servomotores de 180 cuyas seales de control, de forma general, permiten una resolucin de 1024 pasos para modelos digitales. En este escenario, la resolucin esperada en los ejes horizontales es de:
360 mm/180 posiciones = 0.35 mm/paso
A este valor habra que aadir el error que pueda producir el sistema de transmisin por correa y engranajes.
4.2 Sistema ATC y anclaje de herramientas El sistema de fijacin en el cual se basa este proyecto consiste en cabezas con engranajes dentados en media V y ncleo imantado. De esta forma, es posible fijar la herramienta con poca presin gracias a la atraccin magntica y a la forma de los dientes, pero la transmisin del movimiento rotativo es eficiente gracias al ensamblaje por la cara plana de los engranajes en el sentido correcto de giro. 17
Imagen 6: Sistema de fijacin para ATC (izquierda maestro, derecha esclavo)
Por un lado, el eje del motor termina en una cabeza imantada que constituye la hembra del sistema de anclaje. Tal y como se aprecia en el modelo 3D, los dientes mecanizados en la pared interior sirven para acomodar y posicionar la herramienta al introducirla. Mientras los imanes mantienen unida la herramienta a la mquina, los dientes son los que transmiten la fuerza. Este tipo de anclaje es til siempre que la herramienta trabaje a presin. En casos en los que la herramienta pueda quedar atrapada en el material se pueden presentar problemas, aunque en este caso la resistencia de la unin vendr dada por la velocidad de rotacin y par de la fresadora. El sistema de dientes en V asimtricos permite alinear correctamente la herramienta con el eje motor en el momento de la introduccin de la herramienta sin necesidad de ningn control de la orientacin del eje motor o de la herramienta. Por ltimo, el cabezal de la herramienta incluye una muesca que le permite introducirse en las guas del revolver porta-herramientas y, de esta manera, desanclarse del eje motor al desplazarse ste verticalmente. Este tipo de anclaje es completamente original y, por tanto, no se han podido realizar pruebas hasta el momento. Con la mquina diseada en este proyecto se pretende validar en el futuro la eficiencia de este anclaje, as como su utilidad para sistemas de cambio automtico de herramienta.
4.3 Diseo mecnico del sistema El diseo del sistema se presenta a continuacin, mediante capturas del modelo 3D del sistema CNC creado al completo con el programa Solidworks. Se han tenido en cuenta todas las especificaciones anteriormente descritas y se han obviado todos los elementos irrelevantes al diseo para facilitar la comprensin del diseo (elementos de fijacin, soportes, etc.). 18
Imagen 7: Vista 3D de la fresadora diseada en Solidworks
Imagen 8: Fresadora con tapa abierta
Tal y como se puede observar, se ha planteado un sistema de transmisin por correas para los ejes X e Y en conjunto con un sistema de engranajes que permitir transformar el recorrido tpico de 180 de los servomotores en un desplazamiento lineal de 360 mm. El eje Y cuenta, adems, con una correa paralela conducida para permitir un desplazamiento equilibrado.
Imagen 9: Detalle del sistema de engranaje 19 Para el eje Z este sistema paralelo no ha sido necesario, al tratarse de un desplazamiento menor, por lo cual se ha previsto un sistema de pin y cremallera directamente sobre la base del motor de taladrado. Otro sistema de pin y cremallera es el utilizado para el desplazamiento lineal del revlver entre las posiciones de reposo y de carga. En todos los sistemas de desplazamiento lineal los accionamientos no soportan el peso de las partes mviles, pues ste se libera mediante el uso de guas en las que se integran los bloques en movimiento, como se puede observar en el detalle a continuacin.
Imagen 10: Detalle de gua mecanizada para soporte de peso
Finalmente, el giro del carrusel se ha planteado con el servo directamente acollado de forma concntrica. Esta solucin ser apta siempre que se trabaje con un modelo de servomotor que admita trabajar a 360. En caso contrario, se deber modificar el diseo mecnico para permitir una reduccin por engranajes. Como se puede observar, la tapa del sistema posee una obertura para permitir la carga y descarga de herramientas, tal y como se expuso con anterioridad, segn el proceso que se detalla a continuacin.
Procedimiento de cambio de herramientas El funcionamiento del sistema ATC diseado es el siguiente:
1. Orden de cambio de herramienta. 2. Aproximacin a la zona de cambio de herramienta. 3. Desplazamiento en -Z del til. 4. Desplazamiento horizontal del revolver a la posicin de cambio (herramienta insertada en las guas del revolver). 5. Desplazamiento en +Z del til con ligero giro anti horario del motor (herramienta extrada). 6. Rotacin del revolver hasta la posicin de la herramienta seleccionada. 7. Desplazamiento en -Z del til (insercin de la herramienta). 20 8. Desplazamiento horizontal del revolver a la posicin de reposo (herramienta liberada del revolver). 9. Desplazamiento en +Z del til a la posicin de reposo. 10. Continuar el fresado.
Para resolver los inicios despus de un reset de la estacin, se incorporara un sensor de presencia que detectar qu espacios del revolver estn vacos. Para simplificar su funcionamiento, el carrusel deber estar completo a excepcin de la herramienta en uso. De esta manera, slo quedar disponible un espacio para retornar la herramienta en el Power On de la mquina y se asegurar as que el orden de las herramientas se mantenga
Imagen 11: Vistas superior y frontal durante el cambio de herramienta Imagen 12: Vistas superior y frontal durante el cambio de herramienta con tapa abierta 21
Imagen 13: Recorrido lineal del revlver entre la posicin de reposo y la posicin de carga. . Procedimiento de carga semiautomtico de herramientas Para los casos en los que se tenga que reponer una herramienta del revlver (cambio de tipo o recambio), el proceso que deber seguir el sistema es el siguiente:
1. Orden de carga de revlver. 2. Extraccin automtica de la herramienta en uso (el til queda libre). 3. Desplazamiento del til a la esquina opuesta a la posicin de cambio. 4. El sistema cede el control al usuario para avanzar posicin por posicin. 5. El usuario cambia la herramienta manualmente a travs del espacio de carga. 6. Desplazamiento del revlver a la posicin de reposo. 7. Comprobacin de posiciones vacas (si hay alguna vaca, se genera error).
Este proceso se denomina semiautomtico porque el sistema en s sigue gestionando algunos movimientos. El proceso manual se realizar sin alimentacin y con la tapa abierta.
Todas las herramientas se suponen mecanizadas segn el sistema de fijacin descrito y diseado por el autor de este proyecto. 22
Imagen 14: Ejemplo de herramienta con cabezal para el sistema de fijacin propuesto
4.4 Seleccin de actuadores y sensores Con las caractersticas descritas en los puntos anteriores se puede perfilar el conjunto de actuadores y sensores necesarios y, posteriormente, la unidad de control del sistema completo. 4.4.1 Necesidades Recogiendo los elementos del diseo se presentan las siguientes necesidades por parte del sistema de fresado CNC: 1. Accionamiento elctrico para desplazamiento en X. 2. Control de posicin en X. 3. Accionamiento elctrico para desplazamiento en Y. 4. Control de posicin en Y. 5. Accionamiento elctrico para desplazamiento en Z. 6. Control de posicin en Z. 7. Accionamiento rotatorio continuo para el fresado. 8. Control de presin para asegurar la presencia de la herramienta.
Por parte del sistema ATC: 1. Accionamiento lineal para la insercin y extraccin de la herramienta. 2. Control de posicin del accionamiento lineal. 3. Accionamiento rotatorio para la seleccin de herramienta. 4. Sensor de presencia para las herramientas. 23
Por parte de las extensiones: 1. Accionamiento rotatorio continuo para el torneado de las piezas. 2. Accionamiento rotatorio para la inclinacin de la pieza. 3. Control de inclinacin.
4.4.2 Restricciones Para que el diseo sea fiel al requisito de la simplicidad y del coste se toman las siguientes decisiones respecto a los actuadores y sensores necesarios:
Respecto al sistema CNC Los accionamientos para los tres ejes sern servomotores digitales de alta resolucin. El accionamiento para el fresado ser un motor de 12V de menos de 1A El control de presencia de la herramienta se realizar mediante un sensor de presin en la base del anclaje del motor. El eje Z contar con dos finales de carrera para asegurar la posicin alta (extraccin herramienta) y baja (insercin de herramienta).
Respecto al ATC El accionamiento lineal ser un motor DC de 12V con reductora y control de posicin mediante finales de carrera. El accionamiento rotativo ser un servomotor digital. El sensor de presencia debe ser nico y ajustable para todos los tipos de herramientas.
Respecto a las extensiones Se prever un control adicional para un motor DC de altas velocidades con reductora. Para asegurar la fijacin de la pieza al eje de rotacin se instalarn dos sensores de presin en los anclajes. Se prever un control adicional para un servomotor para la inclinacin de la pieza.
El funcionamiento de los motores DC se sealizar con indicadores LED para asegurar una correcta utilizacin.
24 4.4.3 Seleccin Servomotores para los ejes La caracterstica principal que se busca en estos accionamientos es la precisin, adems de un par adecuado para poder desplazar cada una de las estructuras mviles. En el mercado se encuentran disponibles dos grandes grupos de servomotores de modelismo: los analgicos y los digitales. Para este proyecto se consideran necesarios los servomotores digitales, puesto que ofrecen ms par y ms precisin que un servo analgico de la misma categora, con el nico inconveniente de un consumo superior. El modelo escogido es el HS-7975HB V2 de la casa Hitech. Se trata de un servo de alta resolucin (2048 pasos para 90) con un par de 8,6Kgcm alimentado a 4.8V.
Imagen 15: Servomotor HS-7975HB [4]
Caractersticas: Voltaje de operacin: 4.8-6.0 V Velocidad sin carga (4.8 V): 0.14 sec/60 Par (4.8 V): 8.6 kg.cm Consumo en parada (4.8 V): 3 mA Consumo en funcionamiento (4.8 V): 200 mA 2 A en carga mxima Dimensiones: 40 x 20 x 37 mm Peso: 53 g
El servo es programable a 180 y rotacin continua. Se debe tener en cuenta que a 180 la resolucin bajar a 1024 pasos. No obstante, a este valor deberamos sumar la resolucin del sistema de transmisin que se utilizar para transformar el recorrido de 180 en 360mm lineales y la precisin de la seal PWM que gobernar los servomotores. Para facilitar la construccin, y a pesar de tener que trabajar con diferentes niveles de carga, se escoger el mismo modelo para todos los ejes.
Servomotor para el revolver El revlver porta-herramientas puede ser accionado por un servomotor de menor resolucin y menor precio. Se sigue enfocando a modelos digitales debido a su menor deriva temporal y desgaste. 25 El modelo escogido es de la casa Hitech, al igual que el anterior, referencia HS- 5065MG. Se trata de un servomotor digital de 180 con un par de 1.8Kgcm.
Imagen 16: Servomotor HS-5065MG [4]
Caractersticas: Voltaje de operacin: 4.8-6.0 V Velocidad sin carga (4.8 V): 0.14 sec/60 Par (4.8 V): 1.8 kg.cm Consumo en parada (4.8 V): 3 mA Consumo en funcionamiento (4.8 V): 200 mA 2 A en carga mxima Dimensiones: 23.6 x 11.6 x 24 mm Peso: 11.9 g
Servomotor para la inclinacin Al tratarse de una funcin de precisin, se escoge para esta tarea el mismo servomotor seleccionado para el posicionamiento de los ejes. De esta manera, se conseguir la precisin ptima y se sobredimensionar el sistema para casos de piezas ms pesadas, aunque no sea el escenario de este proyecto.
Motor DC para la fresadora Es difcil incluir el motor de la fresadora como un motor DC controlado electrnicamente. En la mayora de aplicaciones este motor se alimentara con tensin de red. No obstante, en esta aplicacin escalada se ha buscado el motor que mejor se pueda adaptar a las necesidades del proyecto. El motor escogido es el GP32 0019 de Trident de 14W, proporcionando un par mximo de 2.25 Nm a una velocidad de hasta 5400rpm con un consumo mximo de 1.66A. Se trata de un motor con caja reductora que permite obtener un buen equilibrio entre consumo, espacio y fuerza.
26
Imagen 17: Plano con dimensiones del motor GP32 0019 [5]
Motor DC para la aproximacin del revolver Para esta aplicacin, la velocidad no es tan importante como el par, aunque en cualquier caso la carga que deber soportar es mnima. Para asegurar un buen comportamiento se escoge un motor con caja reductora epicclica, el 944d41 de Como Drills.
Imagen 18: Motor Como Drills 944d41 [5]
Tabla 1: Caractersticas del motor 944d41 [6]
Motor DC para el torneado Para el torneado y rotacin de la pieza se asumir el mismo motor escogido para el desplazamiento lineal del revolver.
Sensores de presin Las medidas de presin en este proyecto no requieren de especial precisin, puesto que en todos los casos establecen un control de presencia que fcilmente podra ser sustituido por un final de carrera. No obstante, por cuestiones de espacio, no es viable la aplicacin de estos interruptores. La principal ventaja de usar sensores de presin es la 27 posibilidad de expandir las tareas de monitorizacin en futuras revisiones del proyecto gracias a la realimentacin que estos sensores puedan aportar. De entre todos los sensores disponibles en el mercado se eligen los sensores Flexiforce, por presentar un gran nmero de ventajas para nuestro proyecto:
Precio reducido Tamao mnimo de instalacin Simplicidad de lectura
Se trata de sensores resistivos que se pueden utilizar para medir presin o, simplemente, como botones sin elementos mviles o finales de carrera. Un simple divisor de tensin es todo el circuito necesario para poder medir la fuerza aplicada en el rea del FSR.
Imagen 19: Sensor Flexiforce [7]
Tabla 2: Relacin presin-resistencia para los sensores Flexiforce [7]
Finales de carrera Debido al descubrimiento de los sensores Flexiforce, estos sern los utilizados como finales de carrera, normalizando as la lectura de sensores.
Sensor de presencia Respetando la lnea de los sensores utilizados hasta el momento, se utilizar una barrera ptica basada en una LDR y un LED. Este conjunto se situar de forma fija en la 28 posicin de carga del revlver. Por tanto, el proceso de deteccin se realizar en la posicin de reposo del ATC, rotando cada herramienta y realizando una lectura de la LDR. Este sistema aporta la ventaja de ser fcilmente ajustable por software al tratarse de una medida analgica que permitir escoger el umbral de luz para cada herramienta. La segunda ventaja es que permite ms flexibilidad para montar en el carrusel, cuyo diseo puede verse sometido a variaciones.
4.5 Requisitos de la unidad de control Una vez conocidos los actuadores necesarios es posible generar las especificaciones de la unidad de control, que son los siguientes:
Control PWM de 5 servomotores a 5V (pulsos entre 600 y 2000us) Control de 3 motores DC de menos de 1A 12V Lectura de 5 sensores resistivos de presin Lectura de 1 sensor resistivo de luz Control de hasta 3 semforos de LEDs RGY Comunicacin por Bluetooth Espacio suficiente para aplicacin de control compatible con host CAM Posibilidad de extensiones de comunicacin Posibilidad de conectar panel de control (LCD + botonera)
La unidad de control debe ser robusta y debe incorporar todos los elementos necesarios para poder conectar directamente todos los elementos sin necesidad de aadir ningn hardware intermedio. El sistema CNC estar conectado siempre a la red, pero debe de ser capaz de trabajar a 12V.
4.6 Diseo de la unidad de control A partir de las especificaciones de la unidad se eligen los componentes necesarios para desarrollar la placa: El control PWM se realizar directamente desde el microcontrolador. Para el control de los 3 motores DC ser necesario un driver. Los sensores de presin se medirn con un divisor de tensin desde el micro, utilizando su ADC al igual que el sensor LDR. El control de los LEDs ser directo desde el microcontrolador. Para la comunicacin Bluetooth ser necesario un mdem BT. Se deber utilizar un microcontrolador de gran memoria para la aplicacin futura. Como mnimo, la placa deber disponer de dos puertos de 8 bits libres del microcontrolador para poder conectar una pantalla LCD y una mnima botonera.
29 4.6.1 Requisitos y eleccin driver motores Es necesario controlar, como mnimo, tres motores de corriente continua alimentados a 12V con un consumo inferior a 1A cada uno. El control debe ser bidireccional para el actuador lineal y para el motor de la fresadora, puesto que se espera que esta opcin ayude a la extraccin de la herramienta gracias a la estructura del anclaje. El motor del torno, por el contrario, slo requiere una direccin, aunque no se descarta la posibilidad de la bidireccionalidad. Frente a estas necesidades, el control electrnico parece el ms adecuado descartando la utilizacin de rels. En la categora de drivers de estas caractersticas aparece como predilecto el integrado L293, siendo ste un chip con cuatro medios puentes H. Permite, por tanto, controlar dos motores de hasta 36V de forma bidireccional y con proteccin trmica. Se escoge el modelo L293DD por tratarse del encapsulado SO e incluir los diodos de clamping necesarios, ahorrando espacio en el diseo final; por el contrario este modelo soporta menos corriente por canal (600 - 1200mA por canal).
Imagen 20: Driver para motores DC L293DD
Se instalarn un total de dos L293DD en la placa de control, puesto que uno ser necesario para los motores de fresado y de desplazamiento del revlver. El segundo driver permitir realizar un control bidireccional del torno y aadir un motor DC extra en caso de necesitarlo o incluso doblar la potencia de un motor en caso de necesidad.
4.6.2 Requisitos y eleccin mdem BT Para permitir la comunicacin Bluetooth del dispositivo se escoge un mdem de la marca finlandesa Bluegiga. De entre el catlogo disponible se elige el WT-11 por tratarse de la solucin integrada ms simple. La ventaja principal de los mdulos de Bluegiga es la transparencia que se consigue para incorporar comunicacin Bluetooth a los diseos electrnicos, puesto que sus productos incorporan todos los elementos necesarios, desde la antena hasta el firmware iWrap que permite una rpida configuracin del modulo va USART. 30
Imagen 21: Mdem Bluetooth WT11 [8]
El WT-11 es un mdem BT de clase 2 con una potencia de transmisin de hasta 17dBm (hasta 100m). La alimentacin necesaria es de 3.3V y posee un consumo en operacin de 170mA.
4.6.3 Requisitos y eleccin extras Para dotar a la placa de control de ms versatilidad se aadirn los siguientes elementos al diseo:
Sensor de temperatura ADC de alta resolucin EEPROM externa de gran tamao Interfaz USB mediante chip FTDI para depuracin
Para normalizar el diseo, la distribucin de seales en conectores se realizar en forma de mdulos independientes e intercambiables. Esto, junto con el puente H que queda disponible, permitir la adicin de un conjunto extra de backup. Cada conjunto de seales incluir:
1 Motor bidireccional 1 semforo de leds entradas analgicas
Imagen 22: Seales estndar para cada conector
1 2 3 4 5 6 7 8 9 10 11 12 P9 MOTOR1B FSR1 FSR2 LDR1 LED_L_GREEN LED_L_YELLOW VCC_5 MOTOR1A LED_L_RED 31 Adems, se aadir un conector extra para seales I/O generales como, por ejemplo, un final de carrera que detecte si el sistema ATC se encuentra debidamente cerrado, o una barrera ptica, si fuese necesario. Las seales de control para los servomotores sern independientes, puesto que stos ya se distribuyen con su cableado y conector.
Imagen 23: Seales genricas para extensiones
Tambin se prever un conector especial I2C que permitir en un futuro aadir ms mdulos al sistema de forma sencilla. Como principal aplicacin se propone la comunicacin con un mdulo de control de un motor de mayor potencia paa el uso del til.
4.6.4 Requisitos y eleccin uC Una vez expuestas las necesidades y los componentes, es posible dimensionar el microcontrolador necesario para gestionar le conjunto IO:
12 salidas digitales para el control de los motores. 12 salidas digitales para el control de LEDs. 12 entradas analgicas para la lectura de los sensores. 3 entradas/salidas digitales para propsitos generales. 3entradas analgicas para propsitos generales. 5 salidas PWM. 8 IO digitales para el control de LCD y botones 1 USART (comunicacin USB). Bus I2C (comunicacin externa + ADC 18 bits). Bus SPI (memoria externa EEPROM). Gran memoria de programa.
MASTER_SIGNAL D_CLOSE D_START D_BTN_1 PULL_DOWN PULLUP 1 2 3 4 5 6 7 8 9 10 11 12 P17 VCC_5 GND 32 De entre los productos que cumplen estos requisitos se escoge el ATMega2560, un microcontrolador AVR de la casa Atmel con las siguientes especificaciones [9]:
4Kbytes de EEPROM 8Kbytes de SRAM 256Kbytes de FLASH con seccin para bootloader 4 contadores de 8 bits + 4 de 16 bits 16 canales PWM 16 canales ADC de 10bits Cuatro USART SPI I2C Watchdog 86 IO digitales
4.6.5 Eleccin de un comicro Por diversas razones se ha decidido aadir al sistema un comicro que liberar de carga al micro principal reforzando la dedicacin a la aplicacin de fresado para la que se disea. De esta manera el comicro se encargar de gestionar las comunicaciones Bluetooth y determinar en situaciones de operacin que mensajes debe recibir el micro principal y cuando. Con esto se pretende conseguir menor vulnerabilidad de la aplicacin principal frente a incorrectas gestiones por parte del operario. Los dos mircrocontroladres se comunicarn mediante I2C siendo el comicro el esclavo. Esta configuracin tambin se realiza en previsin de una futura fase de este proyecto que podra incluir el desarrollo de un bootloader por I2C para el micro principal, de modo que desde cualquier dispositivo Android con Bluetooth e Internet se podra descargar la aplicacin a la placa y sera el comicro quin programara al micro principal y a todos aquellos que estuviera conectados al bus I2C. Esto no obstante se decidir en el futuro. La eleccin del comicro se ha basado en el Atmega328. Se escoge este microcontrolador por tratarse de una solucin bien conocida con espacio de memoria suficiente para la aplicacin puente y con asegurada compatibilidad con el micro principal.
4.6.6 Panel de Control El panel de control se realizar como una herramienta de acceso rpido a la configuracin del sistema pues a diferencia de la comunicacin Bluetooth este directamente comunicar con el microcontrolador principal. Se tratar de un panel LCD 16x2 con comunicacin en modo 4 bits junto con cuatro botones con circuito antibouncing y funcionalidades estndar:
Escape Enter Ms 33 Menos
4.6.7 Etapa de alimentacin El sistema se alimentar a 12 V, la tensin necesaria para los motores de continua. Para el circuito de control sern necesarios 5 V que se obtendrn de un regulador de tensin. Para este proyecto se ha escogido el modelo MIC29300-5.0WU de Micrel en base a los resultados obtenidos en el captulo de clculos. Este regulador puede proporcionar 3 A con picos de hasta 5 A. Para el modulo Bluetooth ser necesario aadir un regulador de 3.3 V, en este caso el LP298 de National Semiconducor.
34 5 Diseo y fabricacin 5.1 Herramientas utilizadas para la elaboracin de este proyecto Este proyecto abarca diversas reas de la ingeniera y se ha apoyado en varias herramientas de software para su desarrollo.
5.1.1 Arduino IDE Se trata del entorno de desarrollo centrado en la placa de prototipado ms popular en Internet actualmente, Arduino [10]. El entorno en si no se utilizar de froma directa aunque si el conjunto de libreras que respaldan este proyecto de licencia libre. La diferencia de este entorno en el desarrollo de aplicaciones para la familia de microcontroladores AVR de Atmel con otros IDEs es prinicipalmente toda la comunidad que respalda el proyecto en la red. Gracias a todas las soluciones presentes se reduce el tiempo de diseo de software gracias al encapsulado en libreras y clases de prcticamente cualquier funcin de los uC soportados.
5.1.2 Eclipse Eclipse es un entorno de desarrollo software gratuito muy potente gracias al gran nmero de extensiones que existen para utilizarlo en la programacin de prcticamente todos los lenguajes actuales. En este proyecto se utilizar este IDE para el desarrolo de las aplicaciones en C++ de los microcontroladores utilizados as como su versin JAVA para el desarrollo de la aplicacin Android que correra en el dispositivo mvil.
5.1.3 WinAVR Esta aplicacin permite descargar los ficheros .hex generados mediante Eclipse a los uCs. Se integra en el entorno de desarrollo Eclipse facilitando as el test de las aplicaciones.
5.1.4 Android SDK El kit de desarrollo de software para Android es un element necesario para poder trabajar en la programacin de las aplicaciones mviles. Constituye todo el conjunto de paquetes necesarios para cualquier release del sistema operativo.
5.1.5 Altium Designer El diseo del circuito de control se ha llevado a cabo con esta herramienta al tratarse de un software extremadamente eficiente para la creacin de placas electrnicas. Su interfaz de usuario es extremadamente intuitiva facilitando el diseo y reduciendo el tiempo gracias a todas las posibilidades que ofrece como sus excelentes algoritmos de autorouting. 35 5.1.6 Diseo de esquemticos y variantes El diseo se realiza mediante el software Altium Designer Release 10. Para facilitar el trabajo y la revisin, el diseo se divide en cuatro hojas separando as el proyecto en bloques funcionales. El primer plano incluye el bloque de control bsico con todos los extras. Remarcar la inclusin de los conectores de programacin ISP y de comunicaciones I2C. El control de las seales de habilitacin de los drivers para motores se realiza mediante transistores. Por defecto los tres primeros puentes se encuentran habilitados mediante resistencias de pull- up mientras que el cuarto est deshabilitado. Tambin se puede observar como los dos puentes del segundo driver pueden trabajar en paralelo gracias a los jumpers para tal efecto. Tambin sealar que se aade un conector extra para otro servomotor. El segundo plano incluye el circuito del comicro segn datasheet junto con el mdem Bluetooth y la etapa a 3.3 V. Puesto que el mdem puede ofrecer muchas ms funcionalidades que las previstas en este proyecto se han extrado todas sus seales para poder acceder a ellas en caso de querer desarrollar aplicaciones ms exigentes con este dispositivo. El tercer plano incluye el bloque de comunicacin USB. Este bloque procede directamente de la documentacin del chip FTDI y de los planos abiertos de la placa de prototipos Arduino Duemilanova [10]. Finalmente el cuarto plano recoge la configuracin de los conectores. Todas las entradas/salidas de los microcontroladores no utilizadas as como sus USARTs libres se han extrado para hacerlas accesibles en caso de necesidad. El diseo completo se distribuye en tres variantes de producto descritas a continuacin. Para informacin ms detallada del PnP consultar los apndices.
Low: Es la variante menos populada. Solo consta del micro principal con los componentes estrictamente necesarios para controlar servos, motores y sensores. El objetivo de esta variante es tener una placa de control automtica para pruebas de actuadores o procesos automticos. High: Es la variante principal que incluye adems del control el bloque de comunicacin Bluetooth. Esta variante es la diseada para que se puedan realizar los test del sistema ATC. Prototype: Esta variante es la ms populada y supone la unidad de control completa puesto que soporta la configuracin por Bluetooth y la descarga de datos desde la aplicacin CAM mediante una conexin USB.
Los esquemticos completos se encuentran en el captulo Planos.
36 5.1.7 Diseo del PCB El diseo de la placa de circuito impreso se realiz directamente sobre Altium utilizando sus herramientas de ruteado. El diseo se realizo en cuatro capas siendo una de ellas plano de masa necesario para el correcto funcionamiento del mdem Bluetooth y para la disipacin de calor de los drivers y reguladores. Las dimensiones acordadas para la placa de control son de 150mm x 90mm. A excepcin de los conectores todos los componentes elegidos son SMD y se han emplazado en las caras superior e inferior. Se busca con esto conseguir mejor aprovechamiento del espacio y eficiencia adems de facilitar el montaje automtico en caso de requerir pequeas series para prximas fases. Varios footprints tuvieron que ser diseados o modificados a mano por no existir en las libreras disponibles entre ellos los condensadores polarizados y el mdem Bluetooth de Bluegiga.
Imagen 24: Captura de pantalla del diseo 3D de la placa de control mediante Altium Designer
5.2 Fabricacin de los prototipos 5.2.1 Fabricacin de prototipos del PCB Al tratarse de un diseo complejo de PCB, la fabricacin se encargo a Eurocircuits. Se fabricaron para tal efecto 4 placas con objetivos de desarrollo. El tiempo requerido para la produccin fue de dos semanas. 5.2.2 PCB del Panel de Control Esta placa fue directamente diseada de forma manual sobre PCB debido a su simplicidad, es por ello que en esta memoria solo se incluye el esquemtico de esta placa. Se trata de un circuito de dimensiones 90mm x 70mm de una cara que incluye el conector 37 para el panel LCD y cuatro botones cada uno con un circuito anti-rebote. El ataque fue mediante cloruro frrico. Entrega de componentes Gracias a las herramientas de Altium Designer es posible comprobar la disponibilidad de los componentes en las tiendas online. Como nico proveedor de componentes se escogi a RS online [11], a excepcin de los conectores hembra IDC areos de 12 vas que tuvieron que pedirse a E.E.U.U. a la empresa Windford Engineering [12] por no encontrarse disponibles en Europa. Para ms informacin consultar la seccin presupuesto.
5.2.3 Montaje de los prototipos El montaje de los dos primeros prototipos (variantes Low y High) se realiz con la colaboracin de un equipo profesional de rework y prototipado. Posterior a su montaje las unidades de control superaron los siguientes test diseados especialmente:
Test de visin Una vez montadas las placas se sometieron a una estricta revisin con microscopio de soldaduras y polaridades
Test de cortocircuitos y continuidades El equipo de montaje comprob de forma manual y segn procedimientos industriales la presencia de cortocircuitos y de continuidades abiertas.
Test funcional de entradas salidas A la placa se le descarg una aplicacin de test que permiti realizar un test lecturas de entradas y de activacin de salidas.
Test de stress con cargas Una ltima aplicacin se descarg para verificar el funcionamiento tras largos periodos de activacin. El test se realiza con cargas reales durante una hora durante la cual tres motores funcionan continuamente con cambios de sentido y junto a operaciones de los servomotores.
Una vez finalizados los test las unidades son barnizadas para protegerlas de la suciedad.
5.3 Desarrollo software Todo el desarrollo de software para los microcontroladores de la placa de control se ha basado en la estructura diseada para el sistema Arduino en el que la ejecucin del cdigo se divide en dos funiones principales: setup y loop. La primera de ellas se ejecuta 38 una nica vez al inicarse el microcontrolador mientras que la funcin loop se ejecuta indefinidamente. Esto se corresponde a la estructura bsica de programacin con una funcin while(1).
5.3.1 FKT IO El objetivo de esta aplicacin es el de gobernar las entradas y salidas de la placa de control mediante un cdigo simple. Para este test se utiliza la USART 0 del ATMega2560 a modo de puerto de comunicaciones. Es necesaria la ayuda de un hardware USB externo que permita la interconexin con el PC (el mismo circuito USB que se monta en la variante Prototype en un PCB independiente). El modo de trabajo es muy simple y est basado en un sistema de pregunta respuesta en el que se enva un comando a travs de una aplicacin terminal del PC y se recibe un comando en contestacin. En el caso de lectura de entradas esta contestacin ser el valor ledo y en el caso de una activacin de salida se esperar una respuesta que permita asegurar la recepcin correcta del comando. El objetivo de este test es comprobar la integridad de la placa y de sus componentes verificando por un lado la lectura de los niveles de entrada que se forzarn a un valor deseado y por el otro la circuitera de salida que deber activar las cargas conectadas. Para completar el test se ha creado un nico conjunto de cargas reales y sensores que podrn conectarse a cada puerto de la placa aprovechando as el diseo comn de los conectores. Este incluye un motor DC, una LDR, un LED corriente, un LED doble y dos FSR, ms un servomotor que se conecta independientemente.
5.3.2 Heavy Duty Esta aplicacin se disea para ser ejecutada con la placa fabricada ya montada en el sistema final o con todas las cargas reales conectadas al mismo tiempo. A diferencia del test IO este programa est diseado para trabajar sin comunicacin con el PC, solo debe ejecutar un recorrido de ida y vuelta de forma continua. Este recorrido tiene su inicio en la esquina inferior derecha de la superficie de trabajo y el final en la esquina opuesta. Durante todo el desplazamiento la herramienta est en funcionamiento. Este test busca comprobar el funcionamiento en modo continuo de la placa de control para asegurar un correcto funcionamiento de los componentes en condiciones de trabajo.
La ventaja de utilizar diferentes etapas de test en lugar de utilizar la aplicacin final reside en la facilidad para diagnosticar la raz del problema sin tener que recurrir a otras herramientas.
5.3.3 Aplicacin de Configuracin y Control Manual La aplicacin final que este proyecto desarrolla es una simple interfaz de configuracin que permite modificar los valores de la EEPROM que posteriormente definirn el funcionamiento del sistema. Esta configuracin se podr realizar tanto mediante el uso del panel de control fsico diseado o mediante el uso de un dispositivo 39 mvil con SO Android. El uso de ambos podr ser simultaneo a excepcin de los periodos en los que una funcin en concreto se este utilizando. Para los propsitos de este proyecto la rutina de configuracin esta planteada para leer, controlar y configurar los siguientes elementos: Tres servomotores: permite mover y guardar hasta 7 posiciones para cada uno. Tres motores: permite girar en ambos sentidos con realimentacin de las FSRs. Doce LEDs: permite desactivar su uso y los utiliza para sealizar el estado de configuracin. Tres sensores LDR: Uno por conector, ms uno general. Permite realizar lecturas y almacenar el nivel general de luz. Permite guardar niveles umbral para cada uno de ellos. Seis sensores de presin: Permite realizar lecturas.
Aplicacin principal La aplicacin principal se encargar de manejar los datos almacenados en EEPROM que se prev sern utilizados en el programa CAM. Tambin es la encargada de manejar los actuadores en las opciones de control manual. Este conjunto de funciones permitirn al usuario final realizar la comprobacin del sistema y calibrar su funcionamiento para la aplicacin posterior (siempre que se respete la zona de EEPROM). La gestin de estas funciones se realizar mediante el panel de control manual o mediante los mensajes recibidos desde el dispositivo Android previamente filtrados por el comicro. La aplicacin en este ltimo caso solo deber gestionar los mensajes que reciba del esclavo I2C (el comicro) y en funcin de ellos decidir que funcin realizar y con que valores. El panel de control solo se ha instalado como solucin de emergencia para la resolucin de problemas, es por ello por lo que su funcionamiento se controla desde la aplicacin principal, esto puede penalizar los tiempos de trabajo del sistema final por la necesidad de aadir un sistema de polling para determinar cuando se utiliza el teclado, o bien por la inclusin de una rutina de atencin a la interrupcin. No obstante de esta forma se asegura un control robusto sobre la aplicacin principal. Para el sistema de men que utiliza el panel de control se ha creado una estructura de datos que conforma cada elemeno del men. Esta estructura se presenta de forma grfica a continuacin:
40
Imagen 25: Estructura Visual del Men.
Como se puede observar cada opcin del men se compone de diversos elementos:
El ndice de la opcin, que la situa en el array. El ttulo, que indica el nivel de la opcin. El nombre de la opcin, con fines descriptivos. El ndice de las opciones de igual jerarqua anterior y siguiente. El ndice de la opcin de jerarqua superior. El ndice, si existe, de la opcin de jerarqua inferior. El nombre, si existe, de la funcin que esa opcin debe ejecutar.
typedef struct{ int nmenu; String title; String text; int menuback; int menuenter; int menuplus; int menuminus; void (*PtrFuncSel)(); }menu;
Cdigo 1: Estructura del men.
De esta forma la gestin del men se simplifica al cargar la opcin correspondiente segn la tecla presionada, con la excepcin de las opciones finales que deben ejecutar una funcin especfica, en ese caso el ndice de la opcin para la tecla Enter es 33 y el 41 programa en lugar de cargar el men ejecuta la funcin que seala el puntero de la estructura.
El men completo de muestra a continuacin:
Imagen 26: Diagrama del men de configuracin
Las funciones de lecturas y escritura de EEPROM, as como las de control de servomotores, motores DC, conversor AD y otras se han basado en librerias abiertas sobretodo de la comunidad Arduino (la mayora modificadas para este proyecto) as como libreras propias del autor. Las clases presentes en estas librerias no se muestran en este documento al entenderse que el lector interesado podr recurrir a los medios digitales. Aplicacin Comicro El comicro se plante como una solucin para asegurar una menor carga del micro principal durante su operacin y a la vez como un sistema de seguridad de filtrado de los mensajes recibidos por Bluetooth. La tarea principal debe ser por tanto la de recibir cualquier comunicacin entrante y decidir si el micro principal debe o no atenderla y cuando. Adems deber formatear los datos para poder enviar a travs del bus I2C. 42 Otra tarea de la que se debe ocupar es de reclamar los datos que se pidan desde la aplicacin Android al micro principal cuando sea necesario (y seguro) y formatearlos posteriormente como JSON para poder ser correctamente tratados por la aplicacin. JSON (JavaScript Object Notation) no es ms que un formato ligero para el intercambio de datos que consiste en una cadena de caracteres que de por si constituyen un array. Es muy popular sobretodo para la descarga de informacin desde Internet, sobretodo cuando se quiere prescindir del XML. El lenguaje Java ya incorpora herramientas para recuperar los datos necesarios de una forma transparente y de esta manera se elimina la necesidad de enviar dato por dato con su correspondiente gestin de los mensajes. As pues las tareas a realizar por el comicro quedan descritas en la siguiente flowchart:
Imagen 27: Flowchart de la aplicacin del comicro
Se han utilizado en esta aplicacin las libreras Amarino [13] que permiten establecer de una forma fcil la comunicacin Bluetooth entre un microcontrolador Atmel y un dispositivo Android. Estas libreras poseen las funciones de inicalizacin que incluyen el handshake as como las tareas de envio y recepcin que permiten al programador reducir el tiempo de desarrollo.
43 Aplicacin Android La aplicacin Android deber mostrar una interfaz amigable al usuario y establecer comunicacin con el comicro para el intercambio de datos, encargndose de procesar los JSON recibidos para mostrarlos por pantalla. Al tratarse de una aplicacin puramente software se omitir la descripcin de este cdigo (presente como apndice) al entenderse que la implicacin de este apartado con la lnea general del proyecto es mnima en comparacin con toda la informacin que debera incluirse para facilitar al lector un correcto entendimiento del programa, teniendo adems en cuenta que la programacin basada en Java no es objeto de estudio en el la ingeniera que nos ocupa. Como muestra del programa se aaden unas capturas de pantalla:
Imagen 28: Men de configuracin de la aplicacin Android
Imagen 29: Configuracin de las posiciones del servo 1
44
Todas las pantallas se han diseado en XML optimizando las presentaciones para ambas orientaciones.
Imagen 30: Men de control manual (izquierda) y Opcin de configuracin de los niveles de luz 45 6 Clculos 6.1 Consumo total de la unidad de Control
Dispositivo Reposo Operacin Motor 70mA 200mA (sin regular) Servomotor 3mA 600mA (tpico) Motor driver 60mA 44mA ATmega2560 NA 14mA ATmega328 NA 7mA FTDI chip NA 15mA BT modem 1.5mA 150mA (reg. 3.3V) Temp sensor NA 1mA 18 bit A/D 0.5uA 190uA EEPROM 2uA 5mA LCD panel 1.5mA 4mA LCD backlight 0 120mA Tabla 3: Consumo de los componentes utilizados en el diseo
6.1.1 Peor caso 5V El pero caso para dimensionar el circuito de alimentacin de %v incluye las siguientes condiciones: Sensores resistivos en cortocircuito reduciendo la resistencia total de las 12 redes de sensado a 10K. o IsT12 Is 12 5V 10K 12 0.5 6 Variante con los dos microcontroladores en funcionamiento. o I mic = 14mA + 7mA = 21mA Mdem Bluetooth en modo TX, mximo consumo limitado por el regulador de 3.3V. o I BT = 150mA Estado en acceso a EEPROM externa. o I EEPROM = 5mA Entrada lgica a nivel bajo de los drivers (peor caso). o I dr = 4 60mA = 240mA (Cuatro motores activos) Tres servomotores en rotacin (ejes). o I serv = 3 600mA + 2 3mA = 1806mA Sensor de temperatura en conversin. o I temp = 1mA FTDI chip recibiendo datos. o I usb = 15mA 46 Todos los LEDs activos o I led = 7 30mA = 210mA Panel de control conectado y todos los botones presionados o IbutT4 Ibut 4 5V 10K 4 0.5 2 LCD panel activo con Backlight On o I LCD = 4mA + 120mA = 124mA
As que en el peor caso el regulador debe ser temporalmente capaz de entregar: I T = I sT + I mic + I BT + I EEPROM + I dr + I serv + I temp + I usb + I led + I butT + I LCD
I T = 6 + 21 + 150 + 5 + 240 + 1806 + 1 + 15 + 210 + 2 + 124 I T = 2580mA
Aunque el proceso deber asegurar que esta condicin nunca se de puesto que podra poner en peligro la integridad del PCB al tratarse de corrientes tan elevadas.
47 7 Planos
P1 Hoja 1 del esquemtico P2 Hoja 2 del esquemtico P3 Hoja 3 del esquemtico P4 Hoja 4 del esquemtico P5 Planos Panel de control P6 PCB vistaTop P7 PCB Top layer P8 PCB Ground Layer P9 PCB Inner Plane P10 PCB Bottom Layer P11 PCB Vista Bottom P12 PCB Mechanical Layer (Eurocircuits)
49
50
51 52
53
54
55
56
57
58
59
8 Presupuesto La informacin de costes que se presenta en este captulo hace referencia al esbozo del sistema de fresado y al diseo y fabricacin de la unidad de control y considera el desarrollo del proyecto como un encargo desde cliente externo. El total de costes se ha divido en bloques segn etapas de desarrollo. No se incluyen costes de fabricacin del sistema mecnico ni de accionamientos o sensores puesto que para la elaboracin de este proyecto no se ha fabricado el prototipo de la fresadora.
8.1 Estudio y diseo En este apartado se consideran todos los costes derivados de las reuniones con cliente para la recopilacin de especificaciones y discusin de alternativas. Incluye tambin el diseo hardware de la unidad de control mediante software CAD y la revisin de los planos. Tambin se incluye la fabricacin del PCB.
Diseo HW & PCB Materiales Trabajadores Parcial Total Tipo Cantidad (unidad) Coste (/unit) Categoria Horas Coste (/h) Diseo HW 460,0 Reuniones con cliente - - - Engineer 4 30 120,0
61 8.2 Componentes El listado de componentes se presenta a continuacin junto con los precios. Las cantidades estn ajustadas a las necesidades del proyecto y a los mnimos de adquisicin fijados por el proveedor:
8.3 Fabricacin de prototipos La fabricacin de los prototipos requiere un laboratorio y tcnico especializado en soldadura SMD. En el precio por hora se incluye el coste de utilizacin del equipo necesario. Como ya se especifico anteriormente cada unidad se testea completamente antes de enviarla a cliente.
Fabricacin y Test Materiales Trabajadores Parcial Total Tipo Cantdad (g) Coste (/g) Categoria Horas Coste (/h) Fabricacin prototipo 49,8 Revisin documentacin - - - Laboratory Technician 0,5 8 4,0
Short test - - - Laboratory Technician 0,5 8 4,0 I/O test - - - Junior Engineer 1 20 20,0 FKT test - - - Junior Engineer 1 20 20,0 Fabricacin y Test 97,8
63 8.4 Desarrollo de SW Incluye el desarrollo de la aplicacin de configuracin para las tres unidades implicadas as como el desarrollo de las aplicaciones para el test de las unidades fabricadas.
Desarrollo Sw Trabajadores Parcial Total Categoria Horas Coste (/h) Diseo Sw 150,0 Arquitectura Engineer 1 30 30,0 Desarrollo de cdigo Junior Engineer 3 20 60,0 Aplicacin Host Android Engineer 2 30 60,0 SW Test 30,0 Aplicacin test estrs Junior Engineer 0,5 20 10
Aplicacin test FKT Junior Engineer 1 20 20 Desarrollo Sw 180,0
8.5 Generacin de la documentacin Solo tareas de documentacin
Documentacin de proyecto Trabajadores Parcial Total Categora Horas Coste (/h) Documentacin 160,0 Generacin de documentacin Junior Engineer 3 20 60,0
8.6 Costes Globales del Proyecto La suma total de costes se especifica en la siguiente tabla. Este precio incluye el desarrollo del proyecto as como la fabricacin de dos prototipos de variantes High y Low completamente funcionales.
64 Componentes y materiales 281,55 Diseo Hw y fabricacin PCB 567,30 Manufactura y Test 97,80 Diseo Software 180,00 Documentacin de proyecto 160,00
Total project cost (two prototypes) 1.286,65
65 9 Conclusiones El enfoque propuesto en este proyecto para el sistema de cambio automtico de herramienta a resultado interesante desde diversos puntos de vista pero sobretodo para la concepcin de un sistema de fresado compacto y original de buenas caractersticas para un uso espordico no profesional. Debe tenerse en cuenta que la estructura de fresadora propuesta abre una abanico de posibilidades ms amplio que el expuesto aqu, dado que en este caso el proyecto se ha visto limitado por los objetivos de simplicidad y de economa al tratarse de una primera aproximacin a lo que en futuras revisiones debe presentarse como una solucin completa. Partiendo de esta idea principal el desarrollo de la placa de control ha sido una tarea complicada por el nmero de restricciones propuestas en el planteamiento del proyecto. El propsito de dichas restricciones estaba bien claro y de esta manera pretendan facilitar el objetivo final para el que debe servir el sistema aqu descrito (la validacin de la solucin ATC y de anclaje), no obstante han apartado al diseo completamente de las pautas generales para este tipo de mquinas en las que predominan los motores paso a paso como accionamientos principales y donde el til fresador no se ve limitado por una alimentacin en corriente continua de baja tensin. A pesar de estas diferencias se ha conseguido cumplir con las especificaciones, y lo que es ms importante, producir una placa de control con un alto grado de polivalencia gracias a detalles como las variantes de diseo, las funcionalidades aadidas, y la normalizacin de las seales de los conectores. Tanto es as que el producto de este proyecto ya se encuentra hoy en da en otros dispositivos. La capacidad del sistema se ha podido demostrar con la aplicacin de configuracin, requeriendo esta una distribucin de software completa para dos microcontroladores y un dispositivo Android genrico con Bluetooth. Cabe remarcar el uso de estas dos tecnologas (tanto el Bluetooth como el uso de Smartphones como paneles de control) dentro del proyecto para dotar al producto de capacidades innovadoras dentro las opciones presentes en el mercado. Como conclusin final se puede afirmar que se han conseguido las metas propuestas para este trabajo de forma satisfactoria, pero adems se han asentado las bases para un desarrollo ms profundo de una fresadora por control numrico que en futuros estudios requerir una mayor precisin en la elaboracin de los planos mecnicos y un rediseo de la placa de control en base a los resultados de las pruebas que se lleven a cabo con el sistema ATC descrito, para producir finalmente una herramienta capaz de introducirse en el mercado.
67 Apndice A: Cdigo Aplicacin de Configuracin (Eclipse IDE)
/* // Created 25/02/2012 // by Jorge Hermoso <jorges119@hotmail.com> // for XXXXXXXXX.com and URV */
#include "CNC.h"
typedef struct{ //Esructura para el men, consultar memoria para ms informacin int nmenu; String title; String text; int menuback; int menuenter; int menuplus; int menuminus; void (*PtrFuncSel)(); }menu;
const int Enter = 78; const int Back = 38; const int Plus = 12; const int Minus = 13;
menu currentmenu = {0, "", "", NULL, 0, NULL, NULL, NULL}; //variable temporal para la carga del menu en uso
int outmenu=0; bool flagleds = true; //-----------------------------------------------------------
Servo servo[4]; mOtor motor[4];
int temp; //variable para lectura temporal de EEPROM int posToSet = 0; //Variable para almacenar la posicin a grabar
int light[4]; int dark[4]; int sensPdown[4] = {9, A1, A4, 12}; //sensores de presion posicion A int sensPup[4] = {10, A2, A5, 13}; //sensores de presion posicion B int sens[4] = {8, A0, A3, A11}; //sensores de luz
int pos[4][9] = { // array para almacenar //las posiciones de los servos, {1,2,3,4,5,6,7,8,9}, //4 servos 9 posiciones para cada uno {10,11,12,13,14,15,16,17,18}, //permite tratar de la misma //manera al servo del ATC {19,20,21,22,23,24,25,26,27}, //y a los servos de posicionamiento //para los que se guardaran {28,29,30,31,32,33,34,35,36}}; //las posiciones crticas
int memMaster = 37; //espacio de memoria para lectura //analgica del conector global int per[4]= {20,20,20,20}; //umbrales por defecto int memper[4]= {38,39,40,41}; //espacios de memoria para los //valoRes umbrales
int giro[4] = {0,0,0,0}; //variable indice de posicion en el array //de posiciones de servomotores
int posini[4][7] = { // array con las posiciones iniciales de //los servomotores {0,1,2,3,4,5,6}, {16, 26, 37, 49, 60, 72, 90}, {16, 26, 37, 49, 60, 72, 90}, {16, 26, 37, 49, 60, 72, 90}};
int mAster = A6; //pin lectura analgica global int tApa = 70; //PIN 70 AADIDO A PINS_ARDUINO EN C:\arduino- //0022\hardware\arduino\cores\arduino 69 int tApaLow = 84; //pin para habilitacin deteccin de tapa cerrada
int sensorValue[4] = {0,0,0,0}; //v temporal para lectura analgica int sensorMaster = 0; //v temp para lectura de la //entrada analgica global int sensorTapa = 0; //variable temporal para la //lectura del estado de la tapa
int green[4] = {34,23,26,31}; //salidas de los LEDs int red[4] = {35,24,27,32}; int yellow[4] = {33,22,25,30};
int flagini =0; //Flag que determina si puede empezar o no //la aplicacin de mecanizado
int nservo = 1; //numero de servo en uso int npos = 0; //posicion inicial dentro //del array
//motor[0].wire(1,2); //motor sin uso motor[1].wire(48,49); //creacin motor para el desplazamiento del carrusel motor[2].wire(47,46); //creacin motor del til //motor[3].wire(45,44); //motor sin uso
for (int hole=0; hole<=4; hole++) { for (int dir = 0; dir <= 6; dir++) { //loop para recuperar todas las posiciones de memoria temp = EEPROM.read(pos[hole][dir]); posini[hole][dir] = temp; } } servo[0].attach(9); //Creacin de los servomotores servo[0].write(posini[1][0]); //Y situacin en la posicin inicial delay(1000); servo[1].attach(6); servo[1].write(posini[1][0]); delay(1000); servo[2].attach(7); servo[2].write(posini[2][0]); delay(1000); servo[3].attach(8); servo[3].write(posini[3][0]); delay(1000);
for (int i=0; i<=3; i++) //Declaracin de los pines de LEDs como salidas { pinMode(green[i], OUTPUT); pinMode(red[i], OUTPUT); 70 pinMode(yellow[i], OUTPUT); }
pinMode(84, OUTPUT); //Declaracin de salidas y entradas del sistema pinMode(80, OUTPUT); pinMode(4, OUTPUT); pinMode(tApa, INPUT); pinMode(19, INPUT); pinMode(18, INPUT);
//Carga de datos de memoria----------------------------------------------
for (int hole=0; hole<=3; hole++) //recuperacin de los datos //almacenados en EEPROM { temp = EEPROM.read(memper[hole]); per[hole] = temp; }
Wire.begin(1); //Inici de la comunicacin I2C
digitalWrite(tApaLow, LOW); //Habilitacin seal de tapa cerrada delay(500);
//esperar con tapa abierta
for (int hole=0; hole<=3; hole++)
//Iluminacin LEDS rojos y amarillos para sealar configuracin
{ onRed(hole); onYellow(hole); }
delay(2000);
if (digitalRead(tApa) == HIGH) panel(); //Si la seal de tapa abierta est activa se lanza else { //la rutina de configuracin configuracin lcd.clear(); //De lo contrario se borra el LCD y se apagan los leds offYellow(0); offYellow(1); offYellow(2); offYellow(3); }
flagini = 1; //Una vez aqu se activa el flag que sealiza el inicio de operacin
onGreen(0); //LEDs en verde para sealar mquina activa onGreen(1); onGreen(2); onGreen(3);
delay(1000); }
void loop(){
71 // XXX Aplicacin de trabajo
}
//----------------------------------------------------------------------- //----------------------------------------------------------------------- //-----------------FUNCIONES ESPECIFICAS--------------------------------- //----------------------------------------------------------------------- void onRed(int nhole) //Funcin que activa LED rojo { if (flagleds==true){ digitalWrite(red[nhole], HIGH); digitalWrite(green[nhole], LOW); } }
void onGreen(int nhole) //Funcin que activa LED verde { if (flagleds==true){ digitalWrite(red[nhole], LOW); digitalWrite(green[nhole], HIGH); } }
void offRed(int nhole) //Funcin que desactiva LED rojo { digitalWrite(red[nhole], LOW); digitalWrite(green[nhole], LOW); }
void offGreen(int nhole) //Funcin que desactiva LED verde { digitalWrite(red[nhole], LOW); digitalWrite(green[nhole], LOW); }
void onYellow(int nhole) //Funcin que activa LED amarillo { if (flagleds==true){ digitalWrite(yellow[nhole], LOW); } }
void offYellow(int nhole) //Funcin que desactiva LED amarillo { digitalWrite(yellow[nhole], HIGH); }
void motordown(int nhole) //mueve el motor en un sentido hasta activar FSR { motor[nhole].onCCW(); //bajar sensorValue[nhole] = analogRead(sensPdown[nhole]); if (nhole ==1) { //Si se trata del motor del til solo moverlo durante 2 segundos motor[nhole].onCCW(); delay (2000); motor[nhole].off(); }
if (sensorValue[nhole] > 200){ motor[nhole].off(); } }
72 else { motor[nhole].onCCW(); //bajar } }
void motorup(int nhole) //mueve el motor en otro sentido hasta activar FSR { motor[nhole].onCW();
sensorValue[nhole] = analogRead(sensPup[nhole]); if (nhole ==1) { //Si se trata del motor del til solo moverlo durante 2 segundos motor[nhole].onCW(); delay (2000); motor[nhole].off(); } else if (sensorValue[nhole] > 200){ delay (500); sensorValue[nhole] = analogRead(sensPup[nhole]);
if (sensorValue[nhole] > 150){ motor[nhole].off(); }
}
else { // turn LED on: motor[nhole].onCW(); } }
void panel() //Funcin que gestiona el menu LCD e incluye menu BT { pinMode(Enter, INPUT); pinMode(Back, INPUT); pinMode(Plus, INPUT); pinMode(Minus, INPUT);
int tecla=0; //Rutina inicial Si pulsa enter continuamos fshownumber();
while (outmenu!=1){ //flag que determina cuando se sale del menu //delay(800); tecla = teclapulsada();
switch(tecla){ case 1: //Enter menuenter(currentmenu.menuenter); //cargamos el menu elegido 73 break; //si se pulsa la tecla enter puede querer
//cargar una aplicacin case 2: //Back loadmenu(currentmenu.menuback); break;
case 3: //Plus loadmenu(currentmenu.menuplus); break;
case 4: //Minus loadmenu(currentmenu.menuminus); break;
default:
break; } tecla = 0; bt_config(); //Aqu es donde se lanza la rutina BT, mientras se espera tecla pulsada } //de esta manera los dos mtodos de configuracin son compatibles digitalWrite(4, LOW); //Cuando se sale del menu se apaga el LCD lcd.clear(); lcd.setCursor(0,0); lcd.print("Cerrar tapa...");
while (digitalRead(tApa) != LOW) //Se espera a que la seal de tapa cerrada est inactiva { }
}
int teclapulsada(){ //Detecta si se ha pulsado una tecla, cual es y efecto antibounce int index = 0; if (digitalRead(Enter)== LOW){ while (digitalRead(Enter)== LOW){} delay(500); index =1; } else if (digitalRead(Back)== LOW){ while (digitalRead(Back)== LOW){} delay(500); index =2; } else if (digitalRead(Plus)== LOW){ while (digitalRead(Plus)== LOW){} delay(500); index =3; } else if (digitalRead(Minus)== LOW){ while(digitalRead(Plus)== LOW){} delay(500); index =4; } return index; }
void menuenter(int menustep) //Rutina que carga el menu o la aplicacin correspondiente { //Si el cdigo es 33 significa que debe ejecutar la funcin del puntero 74 void (*PtrComando)(void);
//Cargas las variables del menu que toca if (currentmenu.menuenter !=33) { currentmenu = Menus[menustep]; lcd.clear(); lcd.setCursor(0,0); lcd.print(currentmenu.title); lcd.setCursor(0,1); lcd.print(currentmenu.text); } else { PtrComando = currentmenu.PtrFuncSel; PtrComando(); } }
void loadmenu(int menustep) //Rutina que carga el menu correspondiente { if (menustep == 0) { outmenu = 1; goto endloadmenu; }
//Cargas las variables del menu que toca currentmenu = Menus[menustep]; lcd.clear(); lcd.setCursor(0,0); lcd.print(currentmenu.title); lcd.setCursor(0,1); lcd.print(currentmenu.text);
endloadmenu: while (0) {} }
void fshownumber() //Funcion que permite acceder al menu en un tiempo determinado
void servoconf() //Funcin que permite la configuracin de las posiciones de los servos { //El incremento de posiciones se acelera para reducir el tiempo
int nser = 0; int npos = 0; int tecla = 0; int speed = 1;
switch (currentmenu.nmenu) { case 4: nser=1; break; case 5: nser=2; break; case 6: nser=3; break; }
//Aumentar------------------------------------------------- if (digitalRead(Plus)== LOW){ speed = 20; while (digitalRead(Plus)== LOW){ if (posini[nser][npos] <= 180) posini[nser][npos] ++; //Se decrementa un paso la posicin actual servo[nser].write(posini[nser][npos]); //actualiza la posicin del servo lcd.setCursor(8,1); lcd.print(posini[nser][npos]); lcd.print(" "); delay (500/(speed/20)); speed += 10; } }
//Disminuir-------------------------------------------------- - if (digitalRead(Minus)== LOW){ speed = 20; while (digitalRead(Minus)== LOW){ 76 if (posini[nser][npos] >= 3) posini[nser][npos] --; //Se decrementa un paso la posicin actual servo[nser].write(posini[nser][npos]); //actualiza la posicin del servo lcd.setCursor(8,1); lcd.print(posini[nser][npos]); lcd.print(" "); delay (500/(speed/20)); speed += 10; } } tecla = teclapulsada(); if (tecla== 1) { if (npos <= 9) { npos++; } else { lcd.clear(); lcd.setCursor(0,0); lcd.print("Guardar?"); tecla=teclapulsada(); while (tecla==0){ tecla=teclapulsada(); } if (tecla== 1) { lcd.clear(); lcd.setCursor(0,0); lcd.print("Guardando..."); for (int dir = 0; dir <= 6; dir++) { //loop para recuperar todas las posiciones de memoria EEPROM.write(pos[nser][dir], posini[nser][dir]); delay (500); } lcd.setCursor(0,1); lcd.print("Guard con exito!");
tecla=teclapulsada(); while (tecla==0){ tecla=teclapulsada(); } if (tecla== 1) { lcd.clear(); lcd.setCursor(0,0); lcd.print("Guardando..."); EEPROM.write(memMaster, sensorMaster); delay (500); lcd.setCursor(0,1); lcd.print("Guard con exito!"); delay (1000); goto salir2; } else goto vuelta; } } while (digitalRead(Back)!= HIGH){}
salir2:
loadmenu(currentmenu.menuback); }
void downconf() //Funcin que muestra por pantalla los niveles analgicos (sensores de //presin B) { lcd.clear(); lcd.setCursor(0,0); lcd.print("H1 H2 H3"); 78
void upconf() //Funcin que muestra por pantalla los niveles analgicos (sensores de //presin A) { lcd.clear(); lcd.setCursor(0,0); lcd.print("H1 H2 H3");
void moveservo() //Funcion que mueve el servo a traves de cada posicion seteada //sin posibilidad de variarla o guardarla { int nser = 0; int npos = 0; int tecla = 0; bool outfunc = false;
switch (currentmenu.nmenu) { case 13: nser=1; 79 break; case 14: nser=2; break; case 15: nser=3; break; }
while (outfunc == false){ lcd.setCursor(0,1); lcd.print("Pos "); lcd.print(npos); lcd.print(" "); lcd.setCursor(8,1); lcd.print(posini[nser][npos]); lcd.print(" "); servo[nser].write(posini[nser][npos]); tecla = teclapulsada(); //Aumentar------------------------------------------------- if (tecla== 3) { if (npos <= 8) { npos++; servo[nser].write(posini[nser][npos]); //actualiza la posicin del servo lcd.setCursor(8,1); lcd.print(posini[nser][npos]); lcd.print(" "); } } else if (tecla== 4) { if (npos >= 1) { npos--; servo[nser].write(posini[nser][npos]); //actualiza la posicin del servo lcd.setCursor(8,1); lcd.print(posini[nser][npos]); lcd.print(" "); } } else if (tecla == 2) outfunc = true; } loadmenu(currentmenu.menuback); } void movemotor() //mueve los motores arriba y abajo hasta activar los finales de carrera //en el caso del til simplemente gira de forma continua { int nmotor = 0; bool outfunc = false; int tecla = 0;
switch (currentmenu.nmenu) { case 16: nmotor=1; break; case 17: 80 nmotor=2; break; case 18: nmotor=3; break; }
void poscarga() //Situa a la fresadora en la posicion de inicio seguro { lcd.clear(); lcd.setCursor(0,0); lcd.print("Espere a que se "); lcd.setCursor(0,1); lcd.print("situe en posicion..."); servo[0].write(posini[1][0]); delay (1000); servo[1].write(posini[1][0]); delay (1000); servo[2].write(posini[2][0]); delay (1000); servo[3].write(posini[3][0]); delay (1000); motorup(1); motorup(2); motorup(3); lcd.clear(); }
void perconf() //Funcin que permite configurar hasta 3 umbrales para las seales //analgicas { int nlight = 0; int tecla = 0; int speed = 1;
switch (currentmenu.nmenu) { case 10: nlight=1; break; case 11: nlight=2; 81 break; case 12: nlight=3; break; }
while (digitalRead(Back)!= LOW){ lcd.setCursor(0,1); lcd.print("Porc. "); lcd.setCursor(6,1); lcd.print(per[nlight]);
//Aumentar------------------------------------------------- if (digitalRead(Plus)== LOW){ speed = 20; while (digitalRead(Plus)== LOW){ if (per[nlight] <= 99) per[nlight] ++; //Se decrementa un paso la posicin actual lcd.setCursor(6,1); lcd.print(per[nlight]); lcd.print(" "); delay (500/(speed/20)); speed += 10; } }
//Disminuir-------------------------------------------------- - if (digitalRead(Minus)== LOW){ speed = 20; while (digitalRead(Minus)== LOW){ if (per[nlight] >= 1) per[nlight] --; //Se decrementa un paso la posicin actual lcd.setCursor(6,1); lcd.print(per[nlight]); lcd.print(" "); delay (500/(speed/20)); speed += 10; } } tecla = teclapulsada(); if (tecla== 1) { lcd.clear(); lcd.setCursor(0,0); lcd.print("Guardar?"); tecla=teclapulsada(); while (tecla==0){ tecla=teclapulsada(); } if (tecla== 1) { lcd.clear(); lcd.setCursor(0,0); lcd.print("Guardando..."); EEPROM.write(memper[nlight], per[nlight]); delay (500); lcd.setCursor(0,1); lcd.print("Guard con exito!"); goto lsalir; } else if (tecla == 2) 82 { goto lsalir; } } else if (tecla == 2) goto lsalir; }
lsalir:
loadmenu(currentmenu.menuback); } bool outfunc = false; int tecla = 0;
void enableleds() { //Funcin que permite deshabilitar el uso de los leds se sealizacin lcd.clear(); lcd.setCursor(0,0); lcd.print("Estado leds"); lcd.setCursor(0,1); lcd.print("Habilitados");
while (outfunc == false){ tecla = teclapulsada(); if (tecla == 1) { if (flagleds==false){ flagleds =true; lcd.setCursor(0,1); lcd.print("Habilitados "); } else { flagleds=false; lcd.setCursor(0,1); lcd.print("Deshabilitados"); } } else if (tecla == 2) outfunc = true; } loadmenu(currentmenu.menuback); }
void bt_config() //Solicita mensaje I2C del esclavo y si est en la tabla ejecuta la //accin prevista { //Solo se han implementado algunas funciones como ejemplo byte code = 0; byte value = 1; int getvalue = 0;
Wire.requestFrom(5, 2); // request 2 bytes from slave device #5 if (Wire.available()) { code = Wire.receive(); value = Wire.receive(); } else { }
switch(code){ case 11: // sfini
break; case 12: // sfss nservo = value; break; case 13: // sfsp npos = value; 83 break; case 14: // sfsd servo[nservo].write(value); break; case 15: // sfs EEPROM.write(pos[nservo][npos], value); posini[nservo][npos]=value; delay(500); break; case 16: // sfo break; case 17: // clini break; case 18: // cls break; case 19: // clo break; case 20: // ctini break; case 21: // ctsu EEPROM.write(memper[1], value); delay(500); per[1] = value; break; case 23: // ctsd EEPROM.write(memper[2], value); delay(500); per[2] = value; break; case 24: // ctst EEPROM.write(memper[3], value); delay(500); per[3] = value; break; case 25: // cto break; case 26: // sspu servo[1].write(posini[1][value]); break; case 27: // sspd servo[2].write(posini[2][value]); break; case 28: // sspt servo[3].write(posini[3][value]); break; case 29: // mini break; case 30: // mup motorup(value); break; case 31: // mdown motordown(value); break; case 32: // pini break; case 33: // po break; case 34: // sp poscarga(); break; case 35: // info break; case 36: // ss outmenu =1; break; case 37: // leds if (value==1) flagleds = true; else flagleds = false; break; 84 case 38: // closed break;
case 40: //s1 Wire.beginTransmission(5); // transmit to device #5 Wire.send(posini[1][value-1]); // sends one byte Wire.endTransmission(); // stop transmitting break;
case 41: //s2 Wire.beginTransmission(5); // transmit to device #5 Wire.send(posini[2][value-1]); // sends one byte Wire.endTransmission(); // stop transmitting break;
case 42: //s3 Wire.beginTransmission(5); // transmit to device #5 Wire.send(posini[3][value-1]); // sends one byte Wire.endTransmission(); // stop transmitting break;
case 43: //umb Wire.beginTransmission(5); // transmit to device #5 Wire.send(per[value]); // sends one byte Wire.endTransmission(); // stop transmitting break;
case 44: //pres1 getvalue = analogRead(sensPup[value]); //sensPup[value]); Wire.beginTransmission(5); // transmit to device #5 Wire.send(getvalue/4); // sends one byte Wire.endTransmission(); // stop transmitting break; case 45: //pres2 getvalue = analogRead(sensPdown[value]); Wire.beginTransmission(5); // transmit to device #5 Wire.send(getvalue/4); // sends one byte Wire.endTransmission(); // stop transmitting break; case 46: //luz if (value==4) getvalue = analogRead(mAster); else getvalue = analogRead(sens[value]); Wire.beginTransmission(5); // transmit to device #5 Wire.send(getvalue/4); // sends one byte Wire.endTransmission(); // stop transmitting break;
int s1 = 40; int s2 = 41; int s3 = 42; int umb = 43; int pres1 = 44; int pres2 = 45; int luz = 46;
int nsfini = 11; int nsfss = 12; int nsfsp = 13; int nsfsd = 14; int nsfs = 15; int nsfo = 16; int nclini = 17; int ncls = 18; int nclo = 19; int nctini = 20; int nctsu = 21; int nctsd = 23; int nctst = 24; int ncto = 25; int nsspu = 26; int nsspd = 27; 86 int nsspt = 28; int nmini = 29; int nmup = 30; int nmdown = 31; int npini = 32; int npo = 33; int nsp = 34; int ninfo = 35; int nss = 36; int nleds = 37; int nclosed = 38;
String jname; String jiden; int jindex; String jmeasure;
void setup() {
Serial.begin(115200); Wire.begin(5); // join i2c bus with address #2 Wire.onRequest(requestEvent); // register event Wire.onReceive(receiveEvent); // register event wdt_enable(WDTO_8S);
meetAndroid.receive(); // you need to keep this in your loop() to receive events delay (150); if (sendflag == true) { getValues(jmeasure); messageK = json(jname, jiden, jindex); meetAndroid.send(messageK); } wdt_reset(); }
void requestEvent() { Wire.send(msend, 2); // respond with message of 6 bytes // as expected by master 88 flagi2cs = true; msend[0] = 0; }
void receiveEvent(int howMany) { if(Wire.available()) // loop through all but the last { mreceived = Wire.receive(); // receive byte as an integer flagi2cr = true; } //else mreceived = 515; }
//----------------------------------------------------------------- //------------------------------------ Funciones Registro BT ------ //---------------------------------------------------------------
void sfini (byte flag, byte numOfValues) { } void sfss (byte flag, byte numOfValues) { int val = 1; String mes = ""; val = meetAndroid.getInt(); jname = "servo"; jname = jname + val; jiden = "p"; jindex = 7;
msend[0] = nsfss; msend[1] = val; delay (300); if (val == 1) getValues("p1"); else if (val == 2) getValues("p2"); else if (val == 3) getValues("p3"); mes = json(jname, jiden, jindex); meetAndroid.send(mes); } void sfsp (byte flag, byte numOfValues) { int val;
char type = '-'; char conf = '-'; char state = '-'; int num = 0;
void setup(){ Serial.begin(9600); // Empieza transmission a 9600 bps: Serial.println('H', BYTE); // Envia H mayscula como seal alive }
void loop(){ if (Serial.available() > 0) { // el mensaje consta de cuatro bytes (digital/analogico, //entrada/salida, alto/bajo, numero de pin) type = Serial.read(); conf = Serial.read(); state = Serial.read(); num = Serial.read();
if (type == 'd') doDigital (conf, state, num); else if (type == 'a') doAnalog (num); }}
void doDigital(char inout, char estado, int numero) { if (inout == 'o'){ pinMode(numero, OUTPUT); if (estado == 'h') digitalWrite(numero, HIGH); else if (estado == 'l') digitalWrite(numero, LOW); Serial.println(inout, DEC); } if (inout == 'i'){ pinMode(numero, INPUT); int valor = digitalRead(numero); Serial.println(valor, DEC); }}
public static final String DEVICE_ADDRESS = "00:07:80:40:7D:07"; public static final char sfini= 'a'; //ConfServoInit public static final char sfss= 'b'; //ConfServoSend servo public static final char sfsp= 'c'; //ConfServoSend position public static final char sfsd= 'd'; //ConfServoSend data public static final char sfs= 'e'; //ConfServoSave public static final char sfo= 'f'; //ConfServoOut public static final char clini= 'g'; //ConflightInit public static final char cls= 'h'; //ConflightSave public static final char clo= 'i'; //ConflightOut public static final char ctini= 'j'; //ConfthresholdInit public static final char ctsu= 'k'; //ConfthresholdSend data 1 public static final char ctsd= 'l'; //ConfthresholdSend data 2 public static final char ctst= 'm'; //ConfthresholdSend data 3 public static final char cto= 'n'; //ConfthresholdOut public static final char sspu= 'o'; //ServoSend pos 1 public static final char sspd= 'p'; //ServoSend pos 2 public static final char sspt= 'q'; //ServoSend pos 3 public static final char mini= 'r'; //MotorInit public static final char mup= 's'; //MotorMotor n up 99 public static final char mdown= 't'; //MotorMotor n down public static final char pini= 'u'; //PressureInit public static final char po= 'v'; //PressureOut public static final char sp= 'w'; //Start PositionInit public static final char info= 'x'; //Software version/BatteryInit public static final char ss= 'y'; //Start ShowInit public static final char leds= 'z'; //LedsInit
public static boolean[] motors = {false, false, false, false}; public static int[][] servopos = new int[4][7]; public static int[] thresholds = {20, 20, 20, 20}; public static int[] lights = {0,0,0,0}; public static int master = 0; public static boolean ledon = true; public static int[][] pressures = {{0,0,0,0},{0,0,0,0},{0,0,0,0}};
public static String servo = "servo"; public static String light = "light"; public static String threshold = "threshold"; public static String motor = "motor"; public static String pressure = "pressure";
@Override public boolean onCreateOptionsMenu(Menu menu) { //menu.add(1, 1, 0, "Volver a Conectar"); menu.add(0, 1, 0, "Conectar").setIcon(android.R.drawable.stat_sys_data_bluetooth); return super.onCreateOptionsMenu(menu); }
@Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case 1: Amarino.connect(getBaseContext(), DEVICE_ADDRESS);
@Override protected void onStop() { super.onStop(); // stop Amarino's background service, we don't need it any more //Amarino.disconnect(this, DEVICE_ADDRESS); }
public void showPopup(){
LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); View layout = inflater.inflate(R.layout.welcome_popup, null, false); Button but = (Button) layout.findViewById(R.id.widget41); final PopupWindow pw = new PopupWindow(layout, 600, 400, true); OnClickListener cancel_button_click_listener = new OnClickListener() { public void onClick(View v) { Amarino.connect(getBaseContext(), DEVICE_ADDRESS); pw.dismiss(); } }; but.setOnClickListener(cancel_button_click_listener); pw.showAtLocation(findViewById(R.id.main), Gravity.CENTER, 0, 0);
}
/* @Override public boolean onTouch(View v, MotionEvent e) { // TODO Auto-generated method stub float x = e.getX(); float y = e.getY();
104
switch (e.getActionMasked()) { case MotionEvent.ACTION_DOWN:
if (x > 1 & x < 200 & y > 1 & y < 200) { startActivity(new Intent( this, AndroidBitmap.class)); } if (x > 1 & x < 200 & y > 200 & y < 400) { //Toast.makeText(HomeActivity.this, "Otro " , Toast.LENGTH_SHORT).show(); startActivity(new Intent( this, Motor.class));
/// this is just another example of another set of coordinates. }
break; }
return true;
}*/ }
class IconItem {
final String name; final int image; IconItem(String name, int image) { this.name = name; this.image = image; } }
class IconAdapter extends BaseAdapter { private final IconItem[] icons;
public int getCount(){ return icons.length; } public Object getItem(int index){ return icons[index]; } public long getItemId(int index){ return index; }
view.setAdapter(new IconAdapter(this, new IconItem ("Servos", R.drawable.servo_norm), new IconItem ("Motores", R.drawable.motor_norm), new IconItem ("Presin", R.drawable.pres_norm))); setContentView(view);
t3 =(SeekBar)findViewById(R.id.seekBar3); t3.setOnSeekBarChangeListener(sb3);
}
private SeekBar.OnSeekBarChangeListener sb1 = new SeekBar.OnSeekBarChangeListener(){
@Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { // TODO Auto-generated method stub thresholds[1]=t1.getProgress(); textthreshold1.setText(Integer.toString(thresholds[1])+ "%"); }
@Override public void onStartTrackingTouch(SeekBar seekBar) { 114
}
@Override public void onStopTrackingTouch(SeekBar seekBar) {
}};
private SeekBar.OnSeekBarChangeListener sb2 = new SeekBar.OnSeekBarChangeListener(){
@Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { // TODO Auto-generated method stub thresholds[2]=t2.getProgress(); textthreshold2.setText(Integer.toString(thresholds[2])+ "%"); }
@Override public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override public void onStopTrackingTouch(SeekBar seekBar) {
}};
private SeekBar.OnSeekBarChangeListener sb3 = new SeekBar.OnSeekBarChangeListener(){
@Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { // TODO Auto-generated method stub thresholds[3]=t3.getProgress(); textthreshold3.setText(Integer.toString(thresholds[3])+ "%"); }
@Override public void onStartTrackingTouch(SeekBar seekBar) {
} 115
@Override public void onStopTrackingTouch(SeekBar seekBar) {
}};
@Override protected void onStart() { super.onStart(); // in order to receive broadcasted intents we need to register our receiver registerReceiver(thres, new IntentFilter(AmarinoIntent.ACTION_RECEIVED));
// this is how you tell Amarino to connect to a specific BT device from within your own code Amarino.sendDataToArduino(getBaseContext(), DEVICE_ADDRESS, ctini, "0");
// if you connect in onStart() you must not forget to disconnect when your app is closed //Amarino.disconnect(this, DEVICE_ADDRESS); Amarino.sendDataToArduino(getBaseContext(), DEVICE_ADDRESS, clo, "0"); // do never forget to unregister a registered receiver if (freceived==true) unregisterReceiver(levels); else unregisterReceiver(thres); }
/** * ArduinoReceiver is responsible for catching broadcasted Amarino * events. * * It extracts data from the intent and updates the graph accordingly. */ private class ArduinoReceiverLevels extends BroadcastReceiver {
116 @Override public void onReceive(Context context, Intent intent) { String data = null;
// the device address from which the data was sent, we don't need it here but to demonstrate how you retrieve it final String address = intent.getStringExtra(AmarinoIntent.EXTRA_DEVICE_ADDRESS);
// the type of data which is added to the intent final int dataType = intent.getIntExtra(AmarinoIntent.EXTRA_DATA_TYPE, -1);
// we only expect String data though, but it is better to check if really string was sent // later Amarino will support differnt data types, so far data comes always as string and // you have to parse the data to the type you have sent from Arduino, like it is shown below if (dataType == AmarinoIntent.STRING_EXTRA){ data = intent.getStringExtra(AmarinoIntent.EXTRA_DATA);
private class ArduinoReceiverThresholds extends BroadcastReceiver {
@Override public void onReceive(Context context, Intent intent) { String data = null;
// the device address from which the data was sent, we don't need it here but to demonstrate how you retrieve it final String address = intent.getStringExtra(AmarinoIntent.EXTRA_DEVICE_ADDRESS);
// the type of data which is added to the intent final int dataType = intent.getIntExtra(AmarinoIntent.EXTRA_DATA_TYPE, -1);
// we only expect String data though, but it is better to check if really string was sent // later Amarino will support differnt data types, so far data comes always as string and // you have to parse the data to the type you have sent from Arduino, like it is shown below if (dataType == AmarinoIntent.STRING_EXTRA){ data = intent.getStringExtra(AmarinoIntent.EXTRA_DATA);
private ArduinoReceiver arduinoReceiver = new ArduinoReceiver();
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.simplepressure); left = (TextView) findViewById(R.id.value1); center = (TextView) findViewById(R.id.value2); right = (TextView) findViewById(R.id.value3); text1 = (TextView) findViewById(R.id.text1); text2 = (TextView) findViewById(R.id.text2); text3 = (TextView) findViewById(R.id.text3);
}
@Override protected void onStart() { super.onStart(); // in order to receive broadcasted intents we need to register our receiver registerReceiver(arduinoReceiver, new IntentFilter(AmarinoIntent.ACTION_RECEIVED));
// this is how you tell Amarino to connect to a specific BT device from within your own code Amarino.sendDataToArduino(getBaseContext(), DEVICE_ADDRESS, pini, 2);
// if you connect in onStart() you must not forget to disconnect when your app is closed //Amarino.disconnect(this, DEVICE_ADDRESS); Amarino.sendDataToArduino(getBaseContext(), DEVICE_ADDRESS, po, "0"); // do never forget to unregister a registered receiver unregisterReceiver(arduinoReceiver); }
/** * ArduinoReceiver is responsible for catching broadcasted Amarino * events. * * It extracts data from the intent and updates the graph accordingly. */ private class ArduinoReceiver extends BroadcastReceiver {
@Override public void onReceive(Context context, Intent intent) { String data = null;
// the device address from which the data was sent, we don't need it here but to demonstrate how you retrieve it final String address = intent.getStringExtra(AmarinoIntent.EXTRA_DEVICE_ADDRESS);
// the type of data which is added to the intent final int dataType = intent.getIntExtra(AmarinoIntent.EXTRA_DATA_TYPE, -1);
// we only expect String data though, but it is better to check if really string was sent // later Amarino will support differnt data types, so far data comes always as string and // you have to parse the data to the type you have sent from Arduino, like it is shown below 126 if (dataType == AmarinoIntent.STRING_EXTRA){ data = intent.getStringExtra(AmarinoIntent.EXTRA_DATA);
private ArduinoReceiver arduinoReceiver = new ArduinoReceiver();
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.simplepressure); left = (TextView) findViewById(R.id.value1); center = (TextView) findViewById(R.id.value2); right = (TextView) findViewById(R.id.value3); text1 = (TextView) findViewById(R.id.text1); text2 = (TextView) findViewById(R.id.text2); text3 = (TextView) findViewById(R.id.text3);
} 128
@Override protected void onStart() { super.onStart(); // in order to receive broadcasted intents we need to register our receiver registerReceiver(arduinoReceiver, new IntentFilter(AmarinoIntent.ACTION_RECEIVED));
// this is how you tell Amarino to connect to a specific BT device from within your own code Amarino.sendDataToArduino(getBaseContext(), DEVICE_ADDRESS, pini, 1);
// if you connect in onStart() you must not forget to disconnect when your app is closed //Amarino.disconnect(this, DEVICE_ADDRESS); Amarino.sendDataToArduino(getBaseContext(), DEVICE_ADDRESS, po, 1); // do never forget to unregister a registered receiver unregisterReceiver(arduinoReceiver); }
/** * ArduinoReceiver is responsible for catching broadcasted Amarino * events. * * It extracts data from the intent and updates the graph accordingly. */ private class ArduinoReceiver extends BroadcastReceiver {
@Override public void onReceive(Context context, Intent intent) { 129 String data = null;
// the device address from which the data was sent, we don't need it here but to demonstrate how you retrieve it final String address = intent.getStringExtra(AmarinoIntent.EXTRA_DEVICE_ADDRESS);
// the type of data which is added to the intent final int dataType = intent.getIntExtra(AmarinoIntent.EXTRA_DATA_TYPE, -1);
// we only expect String data though, but it is better to check if really string was sent // later Amarino will support differnt data types, so far data comes always as string and // you have to parse the data to the type you have sent from Arduino, like it is shown below if (dataType == AmarinoIntent.STRING_EXTRA){ data = intent.getStringExtra(AmarinoIntent.EXTRA_DATA);
@Override protected void onStart() { super.onStart(); // in order to receive broadcasted intents we need to register our receiver registerReceiver(arduinoReceiver, new IntentFilter(AmarinoIntent.ACTION_RECEIVED));
// this is how you tell Amarino to connect to a specific BT device from within your own code Amarino.sendDataToArduino(getBaseContext(), DEVICE_ADDRESS, sfss, nservo); // load last state SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); pos = prefs.getInt("pos", 0); // set seekbars and feedback color according to last state seekbarRotate.setProgress(pos);
new Thread(){ public void run(){ try { Thread.sleep(6000); } catch (InterruptedException e) {} updatePos(); } }.start();
} 140
@Override protected void onStop() { super.onStop(); // save state pos= seekbarRotate.getProgress(); PreferenceManager.getDefaultSharedPreferences(this) .edit() .putInt("pos", pos) .putBoolean("flag", loaded) .commit();
// stop Amarino's background service, we don't need it any more }
private void updatePos(){ // I have chosen random small letters for the flag 'o' for red, 'p' for green and 'q' for blue // you could select any small letter you want // however be sure to match the character you register a function for your in Arduino sketch Amarino.sendDataToArduino(this, DEVICE_ADDRESS, sfsd, pos); //textView2.setText(pos); }
private void drawMatrix(){
Matrix matrix = new Matrix(); matrix.postScale(curScale, curScale); matrix.postRotate(curRotate);
private Spinner.OnItemSelectedListener spinnerScaleOnItemSelectedListener = new Spinner.OnItemSelectedListener(){
@Override public void onItemSelected(AdapterView<?> arg0, View arg1, int index, long arg3) { // TODO Auto-generated method stub //curScale = floatScale[arg2]; //drawMatrix(); SpinnerSelect= index; refresh(); }
142 @Override public void onNothingSelected(AdapterView<?> arg0) { // TODO Auto-generated method stub spinnerScale.setSelection(SpinnerSelect); //curScale = floatScale[SpinnerSelect]; }};
private class ArduinoReceiver extends BroadcastReceiver {
@Override public void onReceive(Context context, Intent intent) { String data = null;
// the device address from which the data was sent, we don't need it here but to demonstrate how you retrieve it final String address = intent.getStringExtra(AmarinoIntent.EXTRA_DEVICE_ADDRESS);
// the type of data which is added to the intent final int dataType = intent.getIntExtra(AmarinoIntent.EXTRA_DATA_TYPE, -1);
// we only expect String data though, but it is better to check if really string was sent // later Amarino will support differnt data types, so far data comes always as string and // you have to parse the data to the type you have sent from Arduino, like it is shown below if (dataType == AmarinoIntent.STRING_EXTRA){ data = intent.getStringExtra(AmarinoIntent.EXTRA_DATA);
if ((data != null)&(loaded ==false)){ try { parse(data); } catch (Exception e) { e.printStackTrace(); } refresh(); int x=0; for (int i = 0; i < 7; i++) { if (servopos[nservo][i] != 0) x++; } if (x == 7) {