marcoteorico intro arduino gui (octubre10)
Post on 26-Oct-2015
71 Views
Preview:
TRANSCRIPT
INTRODUCCIÓN:
La evolución de las máquinas-herramientas de propósito general y la implementación
del control en ellas, han permitido que surjan máquinas cada vez mas especializadas
en aplicaciones particulares, donde las herramientas convencionales no satisfacen las
exigencias de precisión y comodidad para quien las utiliza.
Existen factores que determinan en qué casos es factible la implantación del control en
este tipo de máquinas, principalmente: la exigencia de precisión en procesos de
maquinado repetitivos (como la perforación de circuitos impresos, ya que se requieren
grandes cantidades de perforaciones sobre la placa para el montaje de los
componentes electrónicos); los diseños cada vez más complejos en las piezas a
maquinar; la diversidad de diseños de piezas (lo que ocasiona la necesidad de
estructuras de producción flexibles); la posibilidad de reducir errores en la producción
de lotes de piezas y principalmente obtener la calidad en los productos o piezas, que
satisfaga al usuario final.
El control en las máquinas-herramientas ofrece múltiples ventajas en comparación con
los sistemas manuales, algunas de ellas son: mejora en la precisión del maquinado, ya
que ésta no depende directamente de la habilidad del usuario sino de la resolución de
de la máquina; uniformidad en la producción, debido a la repetibilidad de
posicionamiento de la herramienta en el sistema; posibilidad de maquinar piezas de
distintos niveles de complejidad con una sola máquina; aumento de seguridad para el
usuario, ya que pasa de ser directamente el operador a ser solo un supervisor del
trabajo de la máquina y con ello se elimina, además, la fatiga que podría sufrir el
operador en un sistema manual; entre otras ventajas.
A lo largo de esta sección se muestran los distintos sistemas que componen una
máquina controlada numéricamente, los cuales son: sistemas de transmisión, sistemas
de control de posición y desplazamientos, tipo de control de posición en la máquina,
ejes de movimiento (capacidad de posicionamiento del efector final o herramienta en el
espacio de trabajo), efector final, sistema de sujeción de piezas, sistema eléctrico y
sistema de seguridad.
X. EJES DE MOVIMIENTO:
Una máquina herramienta controlada automáticamente debe disponer de diferentes
órganos de movimiento lineal (llamados ejes) que permitan posicional la herramienta o
el efector final dentro del espacio de trabajo, y para poder programar el movimiento en
dichos ejes se les asigna una letra a cada uno. Esta asignación de letras está
normalizada y no puede ser cambiada en ningún caso.
Los tres ejes principales de movimiento son:
Eje Z: a lo largo de este eje se realiza el movimiento perpendicular de la
herramienta hacia el suelo.
Eje Y: a lo largo de él se realiza el movimiento transversal de la herramienta.
Eje X: es el eje sobre el cual se realiza el movimiento longitudinal de la
herramienta.
Cada máquina cuenta con los ejes estrictamente necesarios para poder realizar el
proceso de maquinado sobre las piezas; así por ejemplo un torno sólo necesita del eje
Z y el eje X para posicionar la herramienta longitudinal y transversalmente, mientras
que una fresadora necesita de los tres ejes X, Y y Z para poder colocar la herramienta
dentro de su espacio de trabajo (ver imagen X. 1 a)).
Al movimiento simultáneo de dos o más ejes de forma controlada que realiza
trayectorias perfectamente definidas, tanto lineales como curvas, se le conoce como
interpolación.
Mientras más complejas sean las formas de las piezas a maquinar, se requiere de una
mayor cantidad de ejes en el diseño de la máquina para poder cubrir las necesidades
de cada caso. Por ello existen los denominados “ejes complementarios”, que son ejes
de rotación asociados a los tres ejes lineales de movimiento X, Y y Z designados por las
letras A, B y C. Algunas máquinas disponen de mesas giratorias y/o cabezales
orientables mediante ejes complementarios que permiten atacar la pieza a trabajar
desde diferentes planos y ángulos de aproximación (ver imagen X.1 b)).
Imagen X.1. a) Ejes principales de movimiento, b) ejes complementarios
X. TIPOS DE CONTROL DE POSICIÓN.
Existen fundamentalmente tres tipos de control de posición de la herramienta,
contemplados desde la perspectiva de la función que realizan. Éstos son:
I. Control punto a punto. Como lo indica su nombre, solo controla puntos
definidos por la programación, es decir, no tiene control del recorrido de la
herramienta de un punto a otro ni de la trayectoria, hasta alcanzar la posición
deseada y tampoco tiene control de la velocidad de desplazamiento entre ambos
puntos (ver imagen X.1 a)). Este tipo de control es el más sencillo de todos los
existentes, lo que le convierte en el más barato.
A pesar de ello tiene una función clara dentro de las máquinas herramienta,
usándose en máquinas taladradoras, semipunteadoras, etcétera.
II. Control paraxial o de recorridos. Con respecto a la velocidad de
desplazamiento, el recorrido lo hace de manera controlada pero sólo paralela u
ortogonal a los ejes. Esto se debe a que no tiene capacidad de interpolación, es
decir, el control solo puede mover un motor a la vez (ver imagen X.1 b)). Es ideal
para máquinas que tengan como única función escuadrar caras o en sierras de
control numérico, entre otros.
III. Control continuo o de trayectoria. Tiene la capacidad de movimiento en varios
ejes simultáneamente, puede realizar cualquier recorrido en un plano, tanto en
líneas curvas como en líneas rectas con cualquier tipo de inclinación; es decir,
puede interpolar ejes (ver imagen X.1 c)).
El control interpolar es el más completo de todos, pues tiende a realizar las
funciones de los tipos de control de los puntos anteriores, y además sus
funciones propias, por lo que es el tipo de control más usado a pesar de su
elevado costo de implementación.
Imagen X.1. Tipos de control de posición: a) Punto a punto, b) Paraxial y c) De trayectoria.
X. ELEMENTOS DE CONTROL.
Son componentes electrónicos e informáticos de un sistema, encargados de administrar
el funcionamiento de diversos dispositivos actuadores, ya sean eléctricos, neumáticos,
oleohidráulicos o electrónicos. Mediante los elementos de control se recibe información
del medio y del propio sistema, se procesa y analiza, y con base en ella se toman
decisiones para permiten o no la activación de motores, cilindros, indicadores
luminosos, etc.
Dentro de los elementos de control electrónicos se encuentran los circuitos basados en
microcontroladores (sistemas embebidos), PLC (controladores lógicos programables,
por sus siglas en inglés), PLD (Dispositivos Lógicos Programables, por sus siglas en
inglés), entre otros.
Con respecto a los sistemas informáticos, se tienen principalmente las GUI (interfaces
gráficas de usuario, por sus siglas en inglés) que fungen como el medio de
comunicación entre un ordenador convencional y un ser humano.
Esta sección se enfoca en el estudio de los sistemas electrónicos con base en
microcontroladores y las interfaces gráficas de usuario.
X.1. EL MICROCONTROLADOR. La mayoría de los sistemas electrónicos modernos tiene al menos un bloque o módulo
que trabaja con electrónica digital. Este bloque puede estar implementado con circuitos
integrados discretos o por elementos más avanzados como PLD’s (Dispositivo Lógico
Programable), microprocesador o por un microcontrolador.
Un microcontrolador tiene, en un solo circuito integrado, un microprocesador, la
memoria de datos, la memoria de programa y las unidades de entrada/salida, lo cual lo
hace muy pequeño, barato y fácil de manejar; por lo que es ideal para muchas
aplicaciones de propósito específico1. Físicamente, no es más que un circuito integrado
con patillas de conexión; y los hay en diferentes tipos de encapsulados según sus
características de hardware (número de puertos de comunicación, líneas de control por
puerto, convertidores análogo-digital, etcétera).
Imagen X.1.1 .Microcontroladores ATMEL™.
Para ilustrar de mejor manera la descripción
anterior, en la imagen X.1.1 se muestran
varios microcontroladores del fabricante
ATMEL™ en los diferentes encapsulados
existentes.
Los microcontroladores tienen gran aceptación y además son utilizados en diversas
áreas como son: sistemas de alumbrado público, tarjetas de desarrollo, alarmas
residenciales, sistemas de riego automatizado, control automático, máquinas eléctricas,
etcétera. El éxito de estos dispositivos se debe a las siguientes características:
a) Bajo costo. La implementación de un sistema de control básico puede tener un
costo muy reducido.
b) Hardware simple. Un microcontrolador no requiere muchos elementos externos
para poder funcionar correctamente, a diferencia de lo que sucede con otras
opciones.
c) Facilidad de aprendizaje. No se requiere de mucho tiempo antes de empezar a
desarrollar aplicaciones sencillas pero completas, lo que motiva a muchas
personas a continuar usando microcontroladores como parte central de sus
diseños.
d) Proliferación de herramientas de desarrollo. Además de que muchas
empresas venden herramientas de desarrollo completas, también existen en
internet multitud de compiladores, ensambladores, simuladores y diagramas para
programadores (llamados a veces circuitos quemadores o grabadores) que
pueden obtenerse de manera gratuita.
e) Gran cantidad de marcas y arquitecturas disponibles en el mercado. Varias
empresas ofrecen sus microcontroladores con sus propias características: bajo
consumo de energía, alta velocidad de operación, cantidad de periféricos
disponibles, interfaces digitales estándar para comunicación con otros sistemas,
reprogramación dinámica en el sistema, etcétera. Esto da a los diseñadores,
profesionales y aficionados, un amplio abanico de posibilidades de selección.
Como ya se mencionó en uno de los puntos anteriores, en el mercado de los
microcontroladores varias empresas se pelean el liderazgo ofreciendo diversas
arquitecturas para sus dispositivos, por lo que para alguien con experiencia en este
campo resulta bastante atractivo, el problema es seleccionar cuál microcontrolador
usar, lo cual debe hacerse considerando algunos factores como: cantidad de líneas de
control necesarias para la aplicación, hardware disponible (convertidores analógico-
digital, puertos de comunicación, módulos de comunicación con otros dispositivos,
velocidad de funcionamiento, etcétera). Los principales fabricantes de
microcontroladores son: ATMEL™, Dallas Semiconductor™, Microchip™, Motorola™,
National Semiconductor™, Intel™ y Texas Instruments™.
X.2. SISTEMAS EMBEBIDOS.
Un sistema de microcomputadora embebido es un conjunto de componentes físicos que
incluye una microcomputadora (también denominada microcontrolador) conectada a
dispositivos mecánicos, eléctricos y electrónicos, programada para un propósito
dedicado y empacada como un sistema completo. Cualquier sistema eléctrico,
mecánico, electrónico (o sus combinaciones), que incluya entradas, decisiones,
cálculos, análisis y salidas es candidato para implementarse como un sistema
embebido. Los sensores eléctricos, mecánicos, etc. reúnen la información del sistema.
Las interfaces electrónicas convierten las señales de un sensor a una forma que acepta
la microcomputadora. La microcomputadora procesa la información recabada por los
sensores y toma decisiones, según su programación y da órdenes a los actuadores del
sistema para realizar determinado trabajo.
Normalmente el software de los sistemas embebidos resuelve sólo una gama limitada
de problemas. La microcomputadora se incorpora u oculta dentro del dispositivo. La
memoria de solo lectura (ROM por sus siglas en inglés), es un tipo de memoria
incorporada en la estructura interna de la microcomputadora y es en ella donde la
información se programa o se graba dentro del dispositivo y los datos se conservan
guardados, incluso si se interrumpe la energía eléctrica y se vuelve a aplicar.
Las microcomputadoras embebidas afectan prácticamente todos los aspectos de la vida
diaria, por ejemplo en:
Los aparatos electrónicos.
Los sistemas de comunicación.
Los sistemas automotores.
El equipo militar.
Las aplicaciones empresariales.
Los dispositivos médicos.
Máquinas especializadas para procesos de manufactura.
Etcétera.
En contraste con los sistemas embebidos basados en microcomputadoras, un sistema
de cómputo de propósito general tiene un teclado, un disco duro, una pantalla y otros
periféricos y que se programan para una gran variedad de propósitos. 2
X.2.1. COMPONENTES BÁSICOS DE UN SISTEMA EMBEBIDO.
El concepto “embebido” hace referencia a “algo oculto en el interior para que nadie
pueda verlo”. En un sistema embebido, usamos la memoria de solo lectura (ROM) para
almacenar el software y los datos fijos y constantes, y la memoria de acceso aleatorio
(RAM por sus siglas en inglés) para guardar la información temporal.. Un puerto es una
conexión física entre la computadora y el mundo exterior; permite que entre y salga
información del sistema. La información llega mediante los puertos de entrada y se va
mediante los de salida (los puertos en ocasiones se conocen como interfaces o
dispositivos E/S). Algunos ejemplos de estos puertos son: los puertos paralelos, puertos
seriales, temporizadores, convertidores analógico a digital (ADC por sus siglas en
inglés). El software, junto con los puertos de entrada/salida y los circuitos de interfaz
asociados, le dan a un sistema de microcontrolador embebido sus características
definitivas.
Normalmente se reserva el término embebido a los sistemas que no se ven ni se
comportan como una computadora común. Casi todos estos sistemas carecen de un
teclado, una pantalla o un almacenamiento secundario (disco).
Los dispositivos externos conectados al microcontrolador permiten que el sistema
interactúe con su ambiente. Una Interfaz se define como el hardware y el software que
se combinan para permitir a la computadora comunicarse con el hardware externo.
A grandes rasgos, un sistema embebido es ideal en circunstancias en las que se
necesita que una tarea especializada (o un conjunto de ellas) se realice de manera
repetitiva y periódica, lo que se consigue mediante el software grabado internamente en
el microcontrolador y que es posible modificar en el futuro, si es necesario.
Imagen X.2.1.1. Componentes de un sistema embebido.
X.3. TARJETAS DE DESARROLLO.
Pueden considerarse como sistemas embebidos, y son tarjetas de circuito impreso
diseñadas, generalmente, con base en microcontroladores e involucran algunos
componentes adicionales que permitan al micro (de aquí en adelante la palabra “micro”
hace referencia al microcontrolador) funcionar adecuadamente. Son circuitos con
diseños flexibles, es decir, pueden adaptarse a casi cualquier proyecto ya que cuentan
con borneras para comunicar una gran variedad de periféricos, sensores o actuadores,
a las líneas de entrada/salida de los puertos del micro; reguladores de tensión para
poder alimentarlas con fuentes externas de mayor voltaje que el requerido por el
sistema; osciladores externos (circuitos de reloj) y en la gran mayoría de ellas se
Los elementos componentes de
un sistema embebido se
muestran en la siguiente
ilustración (ver imagen X.2.1.1).3
incluye el circuito programador, lo que permite grabar el código de control en el
microcontrolador sin tener que desmontarlo de la tarjeta y sin tener que comprar un
circuito con ese propósito exclusivamente.
El implementar una tarjeta de este tipo en proyectos y prototipos, permite reducir el
tiempo de diseño del circuito de control y en la mayoría de las ocasiones son tarjetas de
dimensiones mucho más pequeñas (y de mayor densidad) que una de diseño propio,
además de tener un entorno de programación integrado propio mucho más amigable
que el proporcionado por el fabricante de microcontroladores.
Existen multitud de tarjetas de desarrollo con base en microcontroladores en el
mercado, algunas diseñadas por desarrolladores independientes; es decir, plataformas
de código abierto que permiten ser compradas, construidas o modificadas por cualquier
usuario (según sus propias necesidades), debido a que los diseños de referencia del
hardware de este tipo de plataformas están disponibles gratuitamente.
A continuación se muestran dos tarjetas de desarrollo disponibles en el mercado
(imágenes X.3.1 y X.3.2). 4
Imagen X.3.1. Tarjeta de desarrollo ARDUINO™ UNO. Imagen X.3..2. Tarjeta de desarrollo PIC18 Explorer board.
X.3.1. TARJETAS DE DESARROLLO ARDUINO™.
ARDUINO™ es una plataforma de desarrollo electrónica de código abierto, basada en
hardware y software flexibles y fáciles de usar. Está dirigida a diseñadores, aficionados
y cualquier persona interesada en la creación de proyectos, prototipos y entornos
interactivos.5
El diseño de esta plataforma está basado en microcontroladores AVR (de la compañía
ATMEL™) y cuenta con una gran variedad de tarjetas para satisfacer las necesidades
de multitud de proyectos y prototipos. Actualmente es muy popular debido a que, en
una sola tarjeta de dimensiones reducidas, integra todo el hardware necesario para
comunicarse con el entorno y grabar el código de programación en el microcontrolador.
Cuenta con su propio entorno de desarrollo integrado gratuito y cualquier persona (con
experiencia en electrónica y programación, o sin ella) puede comenzar a realizar
aplicaciones muy potentes en poco tiempo.
De todas las tarjetas disponibles en la plataforma ARDUINO™, la más adecuada para
el presente proyecto es la denominada ARDUINO™ UNO (ver imagen X.3.1.1), cuyas
características más importantes son las siguientes6:
Utiliza un microcontrolador ATmega328.
Opera con un voltaje de 5 V.
Cuenta con catorce líneas de control bidireccionales (pines configurables como
entradas/salidas).
Cuenta con seis líneas análogas de entrada (convertidores análogo-digital), que
pueden ser configuradas también como entradas o salidas digitales.
Velocidad de trabajo de 16 MHz.
Comunicación mediante puerto USB.
Corriente máxima de 40 mA por línea (pin de entrada/salida).
Memoria de programa de 32 KB.
Imagen X.3.1.1. Tarjeta ARDUINO™ UNO y su diagrama de conexiones
X.3.2. “IDE” DE ARDUINO™.
Para poder escribir el código de programa que controla el funcionamiento de la tarjeta,
ARDUINO™ pone a disposición de cualquier usuario su propio Entorno de Desarrollo
Integrado (IDE por sus siglas en Inglés), de manera gratuita en su página de internet:
http://arduino.cc/en/Main/Software; el cual permite escribir y editar códigos de
programación, y posteriormente convertirlos en una serie de instrucciones que el
microcontrolador en la tarjeta pueda entender (proceso conocido como “compilar” el
código). Además, mediante el IDE se transfieren esas instrucciones a la tarjeta (proceso
conocido como “cargar el código” o “uploading” en Inglés). La imagen X.3.2.1 muestra
una captura de pantalla del IDE. Dentro del entorno gráfico (a lo largo de la parte
superior, debajo de la barra de menús) encontramos una serie de botones con las
funciones más utilizadas (“compilar/verificar”, “cargar en la tarjeta”, “nuevo sketch”,
“abrir un sketch”, “guardar sketch” y “monitor serial”) (ver imagen X.3.2.2.) que facilitan
el desarrollo de códigos, desde su escritura hasta el proceso para cargarlos en la
tarjeta.
Imagen X.3.2.1. IDE de ARDUINO™
X.3.3. LENGUAJE DE PROGRAMACIÓN DE ARDUINO™.
El lenguaje principal usado por el entorno de desarrollo de ARDUINO™ es el lenguaje
de programación C, desarrollado por primera vez en los laboratorios Bell en la década
de 1970 para su uso con el sistema operativo Unix. Este lenguaje utiliza una sintaxis de
escritura que permite usar palabras muy similares al lenguaje humano para escribir una
serie de instrucciones a ejecutar por una máquina, pero que necesita ser procesado por
un compilador para traducir, del código legible por humanos, a un listado de
instrucciones en “lenguaje máquina”.7
Debido a que hay aspectos del lenguaje C difíciles de entender por principiantes, y a la
complejidad propia de su estructura, la plataforma de ARDUINO™ ha desarrollado una
serie de librerías con funciones específicas muy comunes, que hacen que la
programación de la tarjeta sea muy sencilla (aunque en realidad estas librerías están
escritas en lenguaje C++, un subconjunto del lenguaje C original).
A pesar de ello, la mayor parte del código que puede escribirse para esta plataforma,
incluyendo la sintaxis, la estructura, los operadores, sentencias de control y funciones,
siguen siendo fundamentalmente lenguaje C.
El código fuente o de programación, escrito en esta plataforma recibe el nombre de
“sketch”, y consiste en un listado de instrucciones propias de ARDUINO™, escrito de tal
Imagen X.3.2.2. Botones de las funciones principales del IDE.
manera que respete la estructura establecida por el lenguaje de programación. Un
proceso posterior que toma el código fuente y lo convierte en uno que pueda funcionar
en la tarjeta se conoce como “compilación”. El IDE permite crear, abrir y modificar
sketches, los cuales definen las acciones a realizar por la tarjeta, para ello se utiliza el
área dentro del IDE conocida como “editor de sketch”.
Después de escribir un sketch, es necesario compilarlo para verificar que no existan
errores de sintaxis y el código se traduzca a lenguaje máquina; en la imagen X.3.3.1 se
muestra el IDE de ARDUINO™ con un sketch cargado en el editor8. Todas estas
funciones podemos realizarlas mediante la barra de menús o mediante los botones
indicados en la sección X.3.2. de este trabajo.
Imagen 2.2.3.1. Ejemplo de un sketch en el IDE de ARDUINO™
X.3.4. ESCRIBIR UN CÓDIGO Y CARGARLO A LA TARJETA
Antes de escribir un código en el IDE de ARDUINO™, lo más recomendable es tener
previamente definidas las tareas que queremos que la tarjeta realice y una herramienta
muy útil para ello es el diagrama de flujo, mediante el cual podemos representar de
manera gráfica el comportamiento de un sistema. En este caso, se pretende controlar el
funcionamiento de los actuadores involucrados en un sistema electromecánico a partir
de la recepción y análisis de datos provenientes de una PC.
Una vez definida la serie de tareas a realizar es necesario realizar el siguiente
procedimiento:
I. ABRIR UN NUEVO SKETCH. Antes de comenzar a escribir el código,
necesitamos que el área de edición en el IDE esté libre. Para ello presionamos el
botón “Nuevo” e inmediatamente aparece una nueva ventana limpia de código
donde podremos comenzar a escribir.
I. ESCRIBIR EL CÓDIGO: como ya se mencionó en secciones anteriores, un
código escrito en este IDE es conocido como sketch y consiste en la serie de
instrucciones que describen las tareas a realizar por la tarjeta. El sketch debe
estar escrito respetando la estructura del lenguaje C (y algunas reglas que no
corresponden completamente a programación en C pero que fueron
implementadas por los desarrolladores de esta plataforma para facilitar la
programación a los principiantes), y para hacer más sencilla e intuitiva esta parte
del proceso, ARDUINO™ cuenta con una serie de librerías para realizar
acciones específicas y muy comunes, que de otra manera serían difíciles de
escribir para muchas personas. Con ellas podemos controlar hardware como:
pantallas LCD, motores de corriente directa, servomotores, motores a pasos,
lectura y escritura de memorias EEPROM y memorias SD, entre otros; además
de que existen librerías que permiten la comunicación de la tarjeta con otros
dispositivos, ya sea mediante comunicación serial, software serial, WIFI, bus SPI
(Serial Peripherial Interface) u otras9. Las instrucciones están escritas con
palabras muy similares al lenguaje humano y la mayoría hace referencia a la
acción que realiza para poder recordarla con mayor facilidad y hacer más
amigable el proceso de escritura de códigos. Es recomendable también colocar
comentarios a lo largo del código, con el fin de describir las funciones que se van
ejecutando y poder realizar correcciones o mejoras futuras del programa; para
hacerlo, basta con colocar dos diagonales inversas (\\) antes del comentario, con
ello las palabras siguientes a estos caracteres no son tomadas en cuenta en el
proceso de compilación.
II. VERIFICAR EL SKETCH. Una vez escrito el código, es necesario revisar que la
sintaxis esté correcta y que no existan errores en la escritura de las
instrucciones. Este procedimiento se conoce como compilación y es
recomendable verificar el código periódicamente, no solo al terminar de
escribirlo. Si lo hacemos de esta manera, tenemos la posibilidad de identificar
errores oportunamente y corregirlos, en vez de dejarlos todos para el final. Esta
función podemos realizarla presionando el botón ”Verificar” (ver imagen X.3.2.2).
Mediante la compilación se realiza también la traducción de las instrucciones
escritas por el usuario a un formato binario, que pueda ser interpretado por el
microcontrolador de la tarjeta. Si la compilación se realiza exitosamente,
obtenemos el mensaje “compilación terminada” acompañado del tamaño binario
del sketch.
III. GUARDAR EL SKETCH. Ya que verificamos que el código escrito está libre de
errores y listo para cargarlo en la tarjeta, es necesario guardarlo. Esto podernos
hacerlo presionando el botón “Guardar” dentro del IDE y es recomendable
hacerlo periódicamente para respaldar el código y evitar la pérdida de
información en caso de algún accidente.
IV. CARGAR EL SKETCH EN LA TARJETA. Con el código previamente compilado y
respaldado, lo siguiente es cargarlo en la tarjeta para corroborar su
funcionamiento. Para ello debemos conectar la tarjeta a un puerto USB de la PC,
mediante el cable de datos, y una vez hecho esto se presiona el botón “cargar”
en la sección de botones. Si la carga se realizó con éxito, en la ventana del IDE
aparecerá un mensaje confirmando que la carga se ha completado y el sketch
comenzará a funcionar momentáneamente mientras la tarjeta esté conectada y
recibiendo alimentación del puerto de la PC.
Con el código cargado en el microcontrolador de la tarjeta, lo siguiente es probar que
funcione correctamente en el sistema a controlar y para ello debemos conectarla a los
actuadores involucrados (que pueden ser motores a pasos, servomotores, pantallas
LCD, sensores e incluso la propia PC). Si es necesario modificar el código, lo único que
tiene que hacerse es abrir el sketch correspondiente y corregirlo, verificarlo y cargarlo
de nuevo en la tarjeta cuantas veces sea necesario. El microcontrolador de la tarjeta
(ATMega328) está diseñado para soportar el borrado y escritura de programas por
aproximadamente 10 000 ciclos.10
BIBLIOGRAFÍA:
1) W. Valvano, Jonathan. “Introducción a los sistemas de Microcomputadores
embebidos”. Ed. Thomson. Año 2003, 480 páginas.
2) Asdrúbal López Chau. “Microcontroladores AVR, configuración total de
periféricos”. Universidad Autónoma de Estado de México. 1° Edición, México
2006. 113 páginas.
3) Brian Evans. “Beginning Arduino Programming”. Ed. Apress. Año 2011. 272
páginas.
4) Dale Wheat. “Arduino Internals”. Ed. Apress. Año 2011. 392 paginas.
5) Margolis, Michael. “Arduino Cookbook”. O’ Reilly Media, Inc. Año 2011, 662
páginas.
6) Cruz Teruel, Francisco. “Control numérico y programación II. Curso práctico”.
Ed. Alfaomega, 2ª edición. Año 2011, 424 páginas.
NOTAS: 1Extracto de bibliografía número 2. Para mayor información sobre microcontroladores,
consultar bibliografía. 2Extracto de bibliografía número 1. Para mayor información sobre sistemas embebidos
consultar bibliografía. 3Imagen extraída del libro “introducción a los sistemas de Microcomputadores
embebidos” de Jonathan W. Valvano, página 6.
4Imágenes extraídas de las páginas de ARDUINO™ y MICROCHIP™, respectivamente:
http://www.arduino.cc/ y http://www.microchip.com/. 5Extraido de la página oficial de ARDUINO™: http://www.arduino.cc/ 6Para conocer en su totalidad las características técnicas de esta tarjeta, consultar la
página: http://arduino.cc/en/Main/ArduinoBoardUno 7Para una mejor referencia sobre lenguaje C y su estructura, consulte el libro: “Lenguaje
C. Guía práctica para usuarios”, del autor Javier Moldes Teo, editorial Anaya
multimedia-Anaya interactiva, año 2005. 8El sketch fue tomado de los ejemplos que ARDUINO™ pone a disposición del usuario
y lleva por título “AnalogReadSerial”. Para abrirlo se selecciona la pestaña ”Archivo” de
la barra de menús y posteriormente “ejemplos”; ahí se encuentran una gran cantidad de
códigos que podemos modificar y utilizar como base para cualquier proyecto. 9Para mayor información sobre las librerías existentes y el listado de instrucciones que
contiene cada una, consultar la siguiente liga a la página oficial de ARDUINO™ en su
sección “Libraries”: http://arduino.cc/en/Reference/Libraries.
10Ver hoja de datos del microcontrolador ATMega328 proporcionada por el fabricante en
la siguiente liga: http://www.atmel.com/Images/doc8161.pdf 11Imagen extraída de la página:
http://content.heidenhain.de/presentation/elearning/ES/index.html
Interfaz Gráfica de Usuario
La Interfaz Gráfica de Usuario (GUI por sus siglas en inglés), es la representación en
pantalla de un sistema informático que se ofrece al usuario para que este pueda
interactuar con él.
Theo Mandel define interfaz gráfica de usuario como: la representación gráfica de
programas, datos y objetos en la pantalla del ordenador y la interacción con ellos.
Una GUI actual se compone de los siguientes elementos:
- Objetos: entre ellos; pantallas, botones de comando, cajas de texto, menús
desplegables, botones de opciones, casillas de verificación, barras de
desplazamiento, etiquetas, etc.
- Texto: donde habría que considerar aspectos como la fuente, el color, el tamaño,
el estilo, el fondo.
- Estructura de la visualización: tener en cuenta alineación, interlineado, formatos.
- Información instructiva: como ayuda, mensajes de ayuda, ayuda contextual o
ayuda en línea.
Java™
Java™ es un lenguaje de programación de propósitos generales. Es posible usar
Java™ para desarrollar el mismo tipo de aplicaciones que se realizan con otros
lenguajes como C o C++1.
Java™ no es un código ejecutable, sino un código de bytes. El código de bytes es un
conjunto altamente optimizado de instrucciones diseñado para que sea ejecutado por el
sistema de Java™ en tiempo de ejecución. A dicho sistema se le denomina máquina
virtual de Java™ (Java Virtual Machine, JMV), es decir, la máquina virtual de Java™ es
un intérprete de código de bytes.
La traducción de un programa de Java™ en código byte facilita la ejecución de un
programa en una gran variedad de entornos. La razón es sencilla: sólo se necesita
implementar la máquina virtual de Java™ en cada plataforma. Una vez que existe el
paquete en tiempo de ejecución para un sistema dado, cualquier programa Java™
puede ejecutarse en él. En resumen se puede escribir software en una plataforma y
ejecutarla virtualmente en otra.
Java™ es un lenguaje de programación de propósito general, concurrente, basado en
clases, y orientado a objetos, que fue diseñado específicamente para tener tan pocas
dependencias de implementación como fuera posible.
Simple Java™ tiene un conjunto conciso y cohesivo de funciones que facilitan su aprendizaje y uso.
Seguro Java™ proporciona un medio seguro de crear aplicaciones de Internet.
Portable Los programas de Java™ pueden ejecutarse en cualquier entorno para el cual haya un sistema de Java™ en tiempo de ejecución.
Orientado a objetos
Java™ encarna la filosofía moderna de programación orientada a objetos.
Robusto Java™ alienta una programación libre de errores, pues requiere una escritura estricta y realiza comprobaciones en tiempo de ejecución.
Subprocesos múltiples
Java™ proporciona un soporte integrado para la programación de subprocesos múltiples.
Arquitectura neutra
Java™ no está unido a una maquina o una arquitectura especifica de sistema operativo
Interpretado Java™ soporta un código de plataforma cruzada mediante el uso de un código de bytes de Java™
Alto desempeño
El código byte de Java™ está altamente optimizado para que se ejecute rápidamente
Distribuido Java™ fue diseñado tomando en consideración el entorno distribuido de Internet
Dinámico Los programas de Java™ incluyen importantes cantidades de información que son del tipo de tiempo de ejecución. Esta información se usa para verificar y resolver el acceso a objetos
Tabla. “Terminología de Java™”
Programación orientada a objetos
En el corazón de Java™ se encuentra la programación orientada a objetos OOP
(Object Oriented Programming).
La programación orientada a objetos retomó las mejores ideas de la programación
estructurada2 y las combinó con varios conceptos nuevos. El resultado fue una nueva
manera de organizar un programa. En el sentido más general, un programa puede
organizarse mediante una de las siguientes dos maneras:
Alrededor de su código (lo que está sucediendo)
Alrededor de sus datos (lo que se está efectuando)
Los programas orientados a objetos funcionan y están organizados alrededor de los
datos y el principio clave es que “los datos controlan el acceso al código”. En un
lenguaje orientado a objetos, el programador define los datos y las rutinas, las cuales
permiten actuar sobre los datos.
Para comprender la programación orientada a objetos se deben de conocer los
siguientes términos:
Objeto
Los objetos son la clave para entender la tecnología orientada a objetos.
Los objetos software consisten de estado y comportamiento. Un objeto almacena su
estado en campos («variables» en algunos lenguajes de programación) y muestra su
comportamiento a través de métodos («funciones» en algunos lenguajes de
programación). Los métodos operan sobre el estado interno del objeto y sirven como el
mecanismo principal para la comunicación entre objetos.
La ocultación del estado interno y requerir que toda interacción se realice a través de
los métodos de un objeto se conoce como encapsulación de datos — un principio
fundamental de la programación orientada a objetos.
Al agrupar código en objetos software individuales se obtienen ciertos beneficios:
Modularidad: El código fuente de un objeto se puede escribir y mantener
independientemente del código fuente de otros objetos. Una vez creado, un objeto se
puede pasar fácilmente de un lado al otro del sistema.
Ocultación de información: Al interactuar solamente con los métodos de un
objeto, los detalles de su implementación interna permanecen ocultos al mundo
exterior.
Reutilización de código: Si un objeto ya existe (quizás escrito por otro
desarrollador de software), puede utilizarse ese objeto en otro programa. Esto permite
que un especialista implemente/compruebe/depure objetos específicos para una tarea,
los que luego podrá implementar en su propio código.
Conectividad y facilidad de depuración: Si un objeto en concreto resulta ser
problemático, simplemente se podrá eliminar de la aplicación y «conectarse» un objeto
distinto para reemplazarlo.
Clase
Las clases definen la estructura de sus objetos. Es decir que todos los objetos de una
misma clase podrán almacenar el mismo tipo de información y tendrán la misma
capacidad para manipularla.
Herencia
En el lenguaje de programación Java™ se permite que cada clase tenga una
superclase directa y que cada superclase tenga el potencial para una cantidad ilimitada
de subclases.
La programación orientada a objetos permite que las clases hereden estados
(variables) y comportamientos (métodos) de uso común de otras clases.
Interfaz
Los objetos definen su interacción con el mundo exterior a través de los métodos que
exponen. Los métodos forman la interfaz del objeto con el mundo exterior.
En su forma más común, una interfaz es un grupo de métodos relacionados con
cuerpos vacíos.
Implementar una interfaz, permite a una clase ser más formal acerca del
comportamiento que promete proporcionar. Las interfaces forman un contrato entre la
clase y el mundo exterior, y este contrato se hace cumplir en el momento de la
compilación. Si su clase afirma implementar una interfaz, todos los métodos definidos
por esa interfaz deben aparecer en su código fuente para que se compile con éxito.
Paquete
Un paquete es un espacio de nombre que organiza un conjunto de clases e interfaces
relacionadas.
La plataforma Java proporciona una enorme biblioteca de clases (un conjunto de
paquetes) adecuado para usar en sus propias aplicaciones. A esta biblioteca se la
conoce como la «Interfaz de Programación de Aplicaciones» («Application
Programming Interface» en inglés) o por su abreviatura «API». Sus paquetes
representan las tareas más comunes asociadas a la programación en general.
Polimorfismo
Los objetos nunca dejan de reconocerse como miembros de una determinada clase.
Por tal motivo, independientemente del tipo de datos de la variable que los esté
conteniendo, estos ante la invocación de cualquiera de sus métodos siempre
reaccionaran como su propia clase lo defina.
Variables
Un objeto almacena su estado en campos (variables) y el lenguaje de programación
Java™ define los siguientes tipos de variables:
Variables de instancia (Campos no estáticos): Técnicamente, los objetos
almacenan sus estados individuales en «campos no estáticos», es decir, campos
declarados sin la palabra clave static. Los campos no estáticos también son
conocidos como variables de instancia porque sus valores son únicos para cada
instancia de una.
Variables de clase (campos estáticos): Una variable de clase es cualquier
campo declarado con el modificador static; esto le indica al compilador que existe
solamente una copia de esta variable, independientemente de cuántas veces se
haya instanciado esa clase. Además, se podría añadir la palabra clave final para
indicar que la cantidad de la variable nunca cambiará.
Variables locales: De un modo similar a como un objeto almacena su estado en
campos, un método a menudo almacenará su estado en variables locales.
Tipo de dato
Representación Tamaño (Bytes)
Rango de Valores Valor por defecto
Clase Asociada
byte Numérico Entero
con signo 1 -128 a 127 0 Byte
short Numérico Entero
con signo 2 -32.768 a 32.767 0 Short
int Numérico Entero
con signo 4
-2147483648 a 2147483647
0 Integer
long Numérico Entero
con signo 8
-9223372036854775808 a 9223372036854775807
0 Long
float
Numérico en Coma flotante de
precisión simple Norma IEEE 754
4 ± 3.4x10-38
a ± 3.4x1038
0.0 Float
double
Numérico en Coma flotante de
precisión doble Norma IEEE 754
8 ± 1.8x10-308
a ± 1.8x10308
0.0 Double
char Carácter Unicode 2 \u0000 a \uFFFF \u0000 Character
boolean Dato lógico - true ó false false Boolean
void - - - - Void Tabla. “Tipos de datos primitivos”
Swing
Dentro de las librerías de Java™ se encuentra un paquete llamado “Swing” que
pertenece a la JFC (Java Foundation Classes). “Swing” es una librería gráfica de
Java™ contenida en el paquete javax.swing que incluye “widgets” para interfaz gráfica
de usuario, tales como cajas de texto, botones, desplegables y tablas; que fue creada a
partir de java.awt la cual era también una librería gráfica La ventaja de Swing sobre
AWT es que permite una interfaz adaptada a cada sistema operativo sin cambio de
código, al igual que un fácil manejo.
Con la excepción de los contenedores de alto nivel, todos los componentes Swing
cuyos nombres comienzan con "J" descienden de la clase JComponent.
Componentes de texto
Los componentes de texto de Swing muestran texto y, opcionalmente, permiten al
usuario editar el texto. Swing proporciona seis componentes de texto, junto con clases
de apoyo e interfaces que cumplen aun los requisitos de texto más complejos. A pesar
de sus diferentes usos y capacidades, todos los componentes de texto de Swing
heredan de la misma superclase, “JTextComponent”, que proporciona una base
altamente configurable y de gran alcance para la manipulación de texto.
Figura. “Herencia de JTextComponent”
Áreas de texto plano (Plain Text Areas)
JTextArea pueden mostrar varias líneas de texto editable. Aunque un área de texto
puede mostrar texto en cualquier fuente, todo el texto está en la misma fuente. Las
áreas de texto son utilizadas para permitir que el usuario introduzca texto sin formato de
cualquier longitud o para mostrar información de ayuda sin formato.
Swing Class JTextArea
Áreas de texto con estilo
Un componente de texto con estilo puede mostrar texto editable usando más de una
fuente. Algunos componentes de texto con estilo permiten incrustar imágenes u otros
componentes.
Los componentes de texto con estilo son componentes de gran alcance y de múltiples
facetas, adecuados para necesidades de gama alta, y ofrecen más posibilidades de
personalización que los componentes de texto plano.
Swing Class JTextPane
Botones
Existen 7 botones disponibles en las librerías de Swing, los cuales son creados y
etiquetados con una variable tipo “String”. El manejo de eventos depende del tipo de
botón que se esté usando. En general, se implementa un “ActionListener”, el cual
notifica cada vez que el usuario hace click en el botón. Para “Check Boxes”
normalmente se usa un “ItemListener”, el cual notifica si el “Check Box” esta
seleccionado o no.
Una característica de Swing es la capacidad de asociar imágenes con botones. Swing
introdujo una clase de utilidad llamada “ImageIcon”, que permite especificar fácilmente
un archivo de imagen (JPEG, PNG o GIF). Muchos controles permiten la inclusión de
iconos.
Cuando un botón esta desactivado, automáticamente se genera una apariencia que
representa dicha acción. Sin embargo puede ser que una imagen sustituya a la imagen
inicial.
Botón común
Este es un botón común el cual usa un “ActionListener” para el manejo de sus eventos.
Pueden ser utilizados para realizar cualquier operación.
Swing Class JButton
Radio Button
Son grupos de botones en los que, por convención, solo un botón a la vez puede ser
seleccionado. Pueden ser utilizados para la selección de una opción de entre varias.
Swing Class JRadioButton y ButtonGroup
Combo Box
Un “Combo Box” permite al usuario elegir una de varias opciones, puede tener dos
formas muy diferentes. La forma predeterminada es el “Combo Box” que no se puede
editar, ya que cuenta con un botón y una lista desplegable de valores. La segunda
forma, llamada “Combo Box editable”, cuenta con un campo de texto con un pequeño
botón colindante con ella. El usuario puede escribir un valor en el campo de texto o
hacer click en el botón para mostrar una lista desplegable.
Figura. “Combo Box”
Swing Class JComoBox
Paneles
Un panel tiene el propósito general de servir como contenedor para componentes
ligeros, ya sean Áreas de Texto, Botones, etc. De forma predeterminada, los paneles no
agregan colores excepto su propio fondo, sin embargo, el usuario puede agregar
fácilmente diferentes tipos de bordes y personalizar el fondo.
Swing Class JPanel
Selector de Archivos
Los “Selectores de archivos” proporcionan una interfaz gráfica de usuario para navegar
por el sistema de archivos, y luego elegir un archivo o directorio desde una lista, o bien,
introducir su nombre. Para mostrar un selector de archivos, por lo general utiliza la API
“JFileChooser” para mostrar un cuadro de diálogo modal que contiene el selector de
archivos. Otra manera de presentar un selector de archivos es agregar una instancia de
“JFileChooser” a un contenedor.
Swing Class JFileChooser
Listas
Una lista presenta al usuario un grupo de artículos. Está representada en una o más
columnas y filas para elegir. Las listas pueden tener muchos elementos, por lo que a
menudo son puestas en “ScroollPanes” (barras desplazadoras).
Este tipo de componentes implementan modelos para su organización, de los cuales
son tres:
“DefaultListModel”: Todo es más o menos administrado para el usuario.
“AbstractListModel”: El usuario maneja la información e invoca los métodos
heredados por la interfaz de ListModel.
“ListModel”: El usuario se hace cargo de todo.
El uso de un modelo facilita el modo de selección de los elementos que se encuentren
en la lista, al igual que el borrado de los mismos.
Swing Class JList
Comunicación Serial en Java™
Para poder conectar la GUI de Java™ con la tarjeta de adquisición de datos, es
necesario que dentro del programa se encuentre la librería RXTX, la cual es una
biblioteca semejante a la “Java Communication API extensión”. Esta biblioteca posee
los Jar3 (Java ARchives) necesarios para poder establecer comunicación vía serial con
la tarjeta. La instalación dependerá del sistema operativo que el usuario utilice, en la
página http://rxtx.qbang.org/wiki/index.php/Main_Page se muestra la forma de
instalación para cada uno de los diferentes sistemas operativos.
Eclipse
Para la programación de los “widgets” (componentes de una GUI) y el código de control
de la interfaz gráfica, existe un Entorno de Desarrollo Integrado (IDE por sus siglas en
inglés) llamado Eclipse, el cual es un programa informático compuesto por un conjunto
de herramientas de programación de código abierto multiplataforma para desarrollar
modelos de Software. Incluye las herramientas de desarrollo de Java™, ofreciendo un
IDE con un compilador de Java™ interno y un modelo completo de los archivos fuente
de Java™. Esto permite técnicas avanzadas de refactorización y análisis de código.
Mediante diversos plugins, Eclipse provee al programador con frameworks muy ricos
para el desarrollo de aplicaciones gráficas, definición y manipulación de modelos de
software, aplicaciones web, etc.
Mediante los diversos plugins con los que cuenta Eclipse se encuentra uno llamado
“WindowBuilder”, el cual es una herramienta para el diseño de una GUI en Java™
bidireccional, poderosa y fácil de usar; la cual hace más fácil crear aplicaciones gráficas
sin gastar mucho tiempo en la escritura de código para mostrar formas simples. Con
“WindowBuilder” se puede crear complicadas interfaces gráficas en minutos. Utilizando
el diseñador se puede agregar controles mediante la acción de “arrastrar y soltar”,
agregar eventos a los controles, cambiar varias propiedades de los controles utilizando
un editor de propiedades, internacionalizar su aplicación y el código Java™ se generará
automáticamente, esto permite ser más productivos en el desarrollo de la interfaz de la
aplicación y ayuda a concentrarse en la lógica del problema.
Formatos para el procesamiento de PCB´s
Existen dos formatos de archivos importantes que se requieren para el procesamiento
de placas de circuito impreso:
Excellon4 (Archivo NC Drill)
Gerber5
Varios programas de Diseño Asistido por Computadora (CAD por sus siglas en inglés)
son capaces de producir estos tipos de archivos. Estos paquetes de CAD tienen
bibliotecas predefinidas que son fáciles de expandir y tienen las opciones Gerber y NC
Drill como parte de las opciones estándar.
Excellon
Excellon es un fabricante de sistemas de Control Numérico por Computadora (CNC por
sus siglas en inglés) para los taladros y fresadoras. Esta compañía ha estado en el
negocio de control de CNC desde hace muchos años. La empresa Excellon puede ser
descrita como uno de los pioneros en el taladrado y fresado de placas de circuito
impreso.
El formato Excellon se rige por la norma ANSI/IPC-NC-349. A grandes rasgos se trata
de un archivo con un listado de coordenadas (en un plano X, Y) e instrucciones simples
que permiten interpretar el circuito impreso a fabricar independientemente del sistema
de diseño utilizado.
Los ficheros NC Drill contienen tres secciones:
Cabecera
Lista de herramientas utilizadas
Datos de coordenadas
EJEMPLO
1. M48 Inicio Cabecera
2. T01 0.028in Herramienta 1 con diámetro
3. T02 0.035in
4. T03 0.042in
5. T04 0.052in
6. T05 0.125in
7. G90 Modo Coordenadas absolutas
8. M72 Modo pulgadas
9. % Inicio datos
10. T01 Poner herramienta 1
11. X344Y171 coordenadas x e y
12. X884Y851
13. X939Y916
14. X1704Y1296
15. X1914Y1526
16. .
17. .
18. .
19. M30 Fin de programa.
Los sistemas de coordenadas pueden presentarse en sistema imperial o métrico,
absoluto o incremental, y se fijan con omisión de ceros a la izquierda o derecha.
Coordenadas en pulgadas con 0.0001-in de resolución se expresan con 6 dígitos
(00.0000). Coordenadas en milímetros con de 10 micras de resolución se expresan con
5 dígitos (000.00).
La especificación completa la podemos encontrar en:
http://www.excellon.com/manuals/program.htm
NOTAS:
1 Para mayor información acerca de los lenguajes de programación C y C++
consultar el siguiente libro: Deitel, Harvey M. (2004). Cómo programar en C/C++ y Java. Cuarta edición. México. Pearson Educación.
2 Para mayor información acerca de programación estructurada consultar el siguiente libro: Francisco A. Martínez Gil. (2003). Introducción a la programación estructurada en C. Universidad de Valencia. Maite Simon.
3 Los ficheros Jar (Java ARchives) permiten recopilar en un sólo fichero varios ficheros diferentes, almacenándolos en un formato comprimido para que ocupen menos espacio.
4 Para mayor información acerca de la compañía Excellon y su formato consultar el siguiente link: http://www.excellon.com/.
5 Para mayor información acerca del formato Gerber consultar la norma RS-274X.
BIBLIOGRAFÍA: Libros
Theo Mandel. (1997). The Elements of User Interface Design. United States of
America. John Wiley & Sons, Inc.
Ian Sommerville. (2005). Ingeniería del Software. Séptima edición. United
Kingdom. Pearson.
Ing. Pablo Augusto Sznajdleder. (2013). Java a fondo: estudio del lenguaje y
desarrollo de aplicaciones (2ª edición). Buenos Aires: Alfaomega Grupo Editor.
Elliotte Rusty Harold. (1999). Java I/O (fist edition). O’Reilly
Fco. Javier Ceballos Sierra. (2006). Java 2: Interfaces gráficas y aplicaciones
para Internet (2ª edición). México: Alfaomega Grupo Editor.
James Gosling, Matthew Robinson and Pavel Vorobiev. (2005). Java Swing (2ª
edición).New York. EUA: Manning Publications Co.
Internet
Tutorial de Java. Consultada el 10 de Julio del 2013, de:
http://docs.oracle.com/javase/tutorial/
Google Developers. Java Developer Tools WindowsBuilder. Consultada el 11 de
Mayo del 2013, de: https://developers.google.com/java-dev-
tools/wbpro/userinterface/
Eclipse. Downloads Consultada el 11 de Mayo del 2013, de:
http://www.eclipse.org/
Java. Consultada el 11 de Mayo del 2013, de: http://www.java.com/es/
Librería RXTX. Consultada el 11 de Mayo del 2013 de:
http://rxtx.qbang.org/wiki/index.php/Main_Page
top related