Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Prototipado de Disenos Con Arduino PDF
Prototipado de Disenos Con Arduino PDF
Curso 2011-2012
Plataforma de experimentacin para prototipado de diseos mediante
Arduino, trabajo fin de estudios
de Santiago Reig Chiva, dirigido por Carlos Alberto Rodrguez Gonzlez (publicado por la
Universidad de La Rioja), se difunde bajo una Licencia
Creative Commons Reconocimiento-NoComercial-SinObraDerivada 3.0 Unported.
Permisos que vayan ms all de lo cubierto por esta licencia pueden solicitarse a los
titulares del copyright.
El autor
Universidad de La Rioja, Servicio de Publicaciones, 2012
publicaciones.unirioja.es
E-mail: publicaciones@unirioja.es
PLATAFORMA DE EXPERIMENTACIN PARA
PROTOTIPADO DE DISEOS MEDIANTE ARDUINO
ndice
Memoria ............................................................................................. 3
Anexos ..............................................................................................85
Pgina 2
MEMORIA
DOCUMENTO N 1
Plataforma de experimentacin para prototipado de diseos mediante Arduino
ndice de la memoria
1. Antecedentes............................................................................................ 13
3. Definiciones .............................................................................................. 17
4. Introduccin ............................................................................................. 19
Pgina 4
Plataforma de experimentacin para prototipado de diseos mediante Arduino
Pgina 5
Plataforma de experimentacin para prototipado de diseos mediante Arduino
8. Desarrollo ................................................................................................. 55
Pgina 6
Plataforma de experimentacin para prototipado de diseos mediante Arduino
Pgina 7
Plataforma de experimentacin para prototipado de diseos mediante Arduino
Pgina 8
Plataforma de experimentacin para prototipado de diseos mediante Arduino
ndice de ilustraciones
Ilustracin 1 | Polmetro analgico .................................................................... 20
Pgina 9
Plataforma de experimentacin para prototipado de diseos mediante Arduino
Pgina 10
Plataforma de experimentacin para prototipado de diseos mediante Arduino
ndice de tablas
Tabla 1 | Anlisis Arduino UNO ......................................................................... 33
Pgina 11
Plataforma de experimentacin para prototipado de diseos mediante Arduino
Pgina 12
Plataforma de experimentacin para prototipado de diseos mediante Arduino
1. Antecedentes
El presente proyecto, titulado Plataforma de experimentacin para
prototipado de diseos mediante Arduino, surge de las conversaciones mantenidas
entre D. Eduardo Gallego, principal desarrollador de ArduLab y orientador del aula de
robtica del C.P. Miguel Hernndez de Madrid; D. Carlos Alberto Rodrguez Gonzlez,
profesor perteneciente al departamento de Ingeniera Elctrica de la Universidad de La
Rioja y D. Santiago Reig Chiva, alumno de Ingeniera Tcnica Industrial especialidad en
Electrnica Industrial de la Universidad de La Rioja, con motivo de la realizacin del
proyecto final de carrera de dicho alumno.
Pgina 13
Plataforma de experimentacin para prototipado de diseos mediante Arduino
Hace dos aos apareci ArduLab, un software que combinado con una placa
Arduino permita controlar manualmente los perifricos del chip integrado en la placa
Arduino, por lo que facilitaba las tareas de prototipado al poder cambiar los valores
lgicos en los pines, leer dichos valores o tensiones de forma analgica, sacar ondas
PWM y todo esto sin tener que cambiar cables ni programar una lnea de cdigo por
parte del usuario. El problema de este programa es que es de cdigo cerrado y
programado sobre LabView, por lo que depende tambin depende de las libreras
cerradas de ste. La idea inicial fue la de que el programa llegara a la mayor cantidad
de personas, pero para ello se necesitaba soporte para Windows, Linux y Mac, y
aunque LabView en las especificaciones provea ese soporte, a la hora de la realidad no
se poda preparar el compilar el programa para los sistemas operativos Linux y Mac,
quedando slo disponible la versin de Windows. Las actualizaciones de las libreras
han ido arreglando problemas existentes en el pasado, pero llegan muy lentamente y
no solucionan el problema de forma completa, por lo que no es viable la dependencia
que existe sobre ste paquete de software.
Pgina 14
Plataforma de experimentacin para prototipado de diseos mediante Arduino
Todas las partes estn bajo licencias libres y sean de cdigo abierto.
Pgina 15
Plataforma de experimentacin para prototipado de diseos mediante Arduino
Pgina 16
Plataforma de experimentacin para prototipado de diseos mediante Arduino
3. Definiciones
El vocabulario tcnico utilizado a lo largo de este documento es definido para
su correcta comprensin:
Pgina 17
Plataforma de experimentacin para prototipado de diseos mediante Arduino
Pgina 18
Plataforma de experimentacin para prototipado de diseos mediante Arduino
4. ntroduccion
Las herramientas para prototipado han ido apareciendo en el tiempo segn se
iba aumentado el conocimiento existente sobre la fsica, especialmente en los campos
de la electricidad y magnetismo. Estas herramientas son vitales tanto para el desarrollo
de nuevas aplicaciones como para la reparacin y revisin del funcionamiento de las ya
existentes.
4.1. El polmetro
El polmetro es un instrumento elctrico porttil para medir directamente
magnitudes elctricas como pudieran ser tensiones, corrientes o pasivas como
resistencias, continuidad y otras. Las medidas pueden realizarse para corriente
continua o alterna.
Pgina 19
Plataforma de experimentacin para prototipado de diseos mediante Arduino
4.2. Osciloscopio
Un osciloscopio es un instrumento de medicin electrnico para la
representacin grfica de seales elctricas que pueden variar en el tiempo. Dada su
gran versatilidad, se utiliza con asiduidad en electrnica y telecomunicaciones.
Pgina 20
Plataforma de experimentacin para prototipado de diseos mediante Arduino
Pgina 21
Plataforma de experimentacin para prototipado de diseos mediante Arduino
4.4. Actualidad
Actualmente se utilizan todas las herramientas mencionadas anteriormente y la
prctica totalidad de ellas en las versiones digitales o electrnicas, que poseen una
funcionalidad mucho mayor a la de sus homlogos analgicos, aunque cuenta con las
limitaciones de la propia conversin de analgico a digital y al revs, como pueden ser,
velocidad, resolucin, etc.
Pgina 22
Plataforma de experimentacin para prototipado de diseos mediante Arduino
Pgina 23
Plataforma de experimentacin para prototipado de diseos mediante Arduino
Pgina 24
Plataforma de experimentacin para prototipado de diseos mediante Arduino
Fue creada por Ian Lesnet mientras era escritor en el blog de noticias de
electrnica Hackaday, que debido al xito del proyecto cre la empresa Dangerous
Prototypes, la cual se ocupa del actual desarrollo de ste proyecto entre otros tantos
que han ido apareciendo. La evolucin del proyecto no es realizada slo por Ian, si no
que al tratarse de un proyecto de software y hardware libre, mucha gente colabora
con su tiempo y cdigo para la mejora de la herramienta en beneficio de toda la
comunidad de usuarios.
Pgina 25
Plataforma de experimentacin para prototipado de diseos mediante Arduino
o 1-Wire
o I2C
o SPI
o Serie
o JTAG
o MIDI
o Teclados de PC
o Y ms
Programar microcontroladores
o PIC
Pgina 26
Plataforma de experimentacin para prototipado de diseos mediante Arduino
o AVR
Programador de CPLDs
Medidor de voltaje
Otras muchas
Pgina 27
Plataforma de experimentacin para prototipado de diseos mediante Arduino
Manejo de servos
Pgina 28
Plataforma de experimentacin para prototipado de diseos mediante Arduino
Pgina 29
Plataforma de experimentacin para prototipado de diseos mediante Arduino
6. Analisis de soluciones
La solucin ideal ser una combinacin de placa de interfaz, protocolo de
comunicaciones y software que congenien de forma que permita realizar el proyecto
sin una gran inversin de tiempo.
Pgina 30
Plataforma de experimentacin para prototipado de diseos mediante Arduino
Las caractersticas que debern reunir estos componentes para ser objetos del
estudio, sern las siguientes:
Pgina 31
Plataforma de experimentacin para prototipado de diseos mediante Arduino
Arduino tambin es una sencilla placa de desarrollo, que est actualmente muy
extendida y puede encontrarse en prcticamente cualquier distribuidor de electrnica
del mundo, a un precio que ronda los 18 a 26 euros segn modelo y distribuidor y
cuenta adems con un diseo libre. La sencillez de esta placa tambin es uno de sus
puntos fuertes, ya que permite replicar de forma artesanal la placa con componentes
disponibles en las tiendas de electrnica.
Pgina 32
Plataforma de experimentacin para prototipado de diseos mediante Arduino
Una de las ventajas, y la razn por la que Arduino eligi la plataforma AVR, es la
existencia del compilador libre basado en GCC denominado avr-gcc.
Ventajas
Toolchain libre y gratuito
Gran comunidad de usuarios
Cantidad de documentacin y ejemplos
Desventajas
Precio
Pgina 33
Plataforma de experimentacin para prototipado de diseos mediante Arduino
Ventajas
Toolchain gratuito
Desventajas
Toolchain no libre
Libreras poco desarrolladas
Pgina 34
Plataforma de experimentacin para prototipado de diseos mediante Arduino
Ventajas
Toolchain gratuito
API exactamente igual que la de Arduino
Se mantiene la API lo ms actualizada posible
Desventajas
Toolchain no libre
Pequea comunidad de usuarios
Los procesadores de ARM han venido siendo muy competitivos desde siempre
tanto en precio como en rendimiento, llegando a hacer frente a los existentes
fabricantes tanto microcontroladores como de microprocesadores que lideran el
mercado actual.
Pgina 35
Plataforma de experimentacin para prototipado de diseos mediante Arduino
Otro problema es que los chips con este ncleo casi siempre estn a la venta
con empaquetado de montaje superficial, por lo que dificulta su montaje si no se tiene
los conocimientos necesarios, aunque actualmente estn empezando a aparecer las
primeras versiones con empaquetado en tipo DIP.
Pgina 36
Plataforma de experimentacin para prototipado de diseos mediante Arduino
Ventajas
Toolchain gratuito y libre
Programador compatible con opciones libres
Alta velocidad de procesamiento
Desventajas
Pines de conexin por el lado inferior de la placa
Pgina 37
Plataforma de experimentacin para prototipado de diseos mediante Arduino
Ventajas
Toolchain gratuito y libre
Alta velocidad de procesamiento
Desventajas
Precio
Pgina 38
Plataforma de experimentacin para prototipado de diseos mediante Arduino
La principal desventaja es que los chips bsicos de esta familia no suelen tener
mdulo hardware de UART, por lo que habra que implementarlo por software.
Ilustracin 15 | TI Launchpad
Ventajas
Toolchain gratuito y libre
Precio
Desventajas
Pocas libreras
Dificultad de desarrollo
Ausencia de USART en el microcontrolador provisto
Pgina 39
Plataforma de experimentacin para prototipado de diseos mediante Arduino
Los que se han estudiado para su posible implantacin en el proyecto, han sido
los siguientes:
El puerto paralelo nos podra servir de interfaz entre el mundo virtual y real, ya
que podemos controlar las tensiones en los pines de ste y tenemos pines que pueden
ser configurados como salida pero tambin como entrada.
Otro problema existente es que cada vez es ms difcil que un ordenador que
disponga de un puerto paralelo, siendo hoy en da casi imposible encontrar uno.
Pgina 40
Plataforma de experimentacin para prototipado de diseos mediante Arduino
Ventajas
Posibilidad de usarlo directamente para realizar la interfaz con el mundo fsico
Desventajas
Los sistemas operativos no suelen trabajar en tiempo real
Difcil de encontrar en equipos nuevos
Aunque al igual que el puerto paralelo cada vez es ms difcil encontrar dicha
interfaz en ordenadores nuevos, aunque debido a su gran versatilidad y utilidad
todava siguen apareciendo en ordenadores de sobremesa, pero prcticamente
desaparecido en los ordenadores porttiles. De todas maneras, debido a esta
desaparicin, fomentada en gran medida por la aparicin del puerto USB, se han
creado chips que traducen el protocolo serie desde el microcontrolador y lo
empaquetan a travs del USB, mostrando luego al ordenador un puerto serie virtual a
travs del cual se realiza la conexin.
Ventajas
Suficientemente rpido
Buena inmunidad al ruido
Barato de implementar
Muy utilizado y sencillo de trabajar
Desventajas
Difcil de encontrar en nuevos equipos
Pgina 41
Plataforma de experimentacin para prototipado de diseos mediante Arduino
Ventajas
Muy rpido
Buena inmunidad al ruido
Muy verstil
Correccin de errores
Desventajas
Encarece el microcontrolador
Pgina 42
Plataforma de experimentacin para prototipado de diseos mediante Arduino
Durante los ltimos aos se ha producido una reduccin enorme del coste de
implantacin de este protocolo, siendo incluido cada vez ms en proyectos de bajo
coste y comercializacin.
Ventajas
Inalmbrico
Velocidad similar al puerto serie
Fcil de implementar
Desventajas
Poca potencia de transmisin
No muy fiable y consistente a largo plazo
Pgina 43
Plataforma de experimentacin para prototipado de diseos mediante Arduino
Ventajas
Largas distancias de comunicacin
Correccin de errores
Fcil de implementar
Desventajas
Precio
Existen otros muchos protocolos por los que se podra realizar la comunicacin
entre la placa de interfaz fsica y el ordenador con el software, tales como
radiofrecuencia, WiFi, Ethernet, GSM y cualquier otro para el que exista una puerta de
enlace que haga de traductora entre ambos protocolos.
Pgina 44
Plataforma de experimentacin para prototipado de diseos mediante Arduino
El protocolo guarda una estrecha relacin con el protocolo MIDI, ya que ha sido
su referencia desde casi la primera versin, cuando se rescribi el cdigo para hacerse
compatible con ste.
Pgina 45
Plataforma de experimentacin para prototipado de diseos mediante Arduino
PWM.
Control de servomotores.
I2C.
Ventajas
Ya implementado
Comunidad de usuarios
Desarrolladores activos
Protocolo libre y gratuito
Desventajas
Ninguna
Pgina 46
Plataforma de experimentacin para prototipado de diseos mediante Arduino
Ventajas
Ya implementado
Sencillo
Desventajas
No muy escalable
Pgina 47
Plataforma de experimentacin para prototipado de diseos mediante Arduino
Ventajas
Totalmente adaptado a las necesidades
Desventajas
Tiempo de desarrollo
El lenguaje deber ser multiplataforma, sin tener que realizar grandes cambios
en el cdigo para tener que conseguirlo, ser un lenguaje conocido y estable y que el
desarrollo con l sea simple y verstil, con el que poder realizar todas las
funcionalidades del proyecto que se nos ocurran. Al deber ser multiplataforma la parte
de software, se descartarn de entrada la familia de lenguajes Visual y .NET de
Microsoft.
Pgina 48
Plataforma de experimentacin para prototipado de diseos mediante Arduino
Ventajas
Gran comunidad de usuarios
Gran cantidad de ejemplos
Elimina las complejidades de C++
Desventajas
Librera para interfaces de usuario incluida muy antigua
6.4.2. Anlisis de Qt
Est basado en C++ y su punto fuerte es la capa de abstraccin que han creado
encima de este para aadir caractersticas multiplataforma, tanto de escritorio como
mviles (Windows, Linux, Mac OS, Symbian, and Maemo), incluye libreras para
desarrollar interfaces de usuario con ventanas y est acompaado por una gran
cantidad de herramientas potentes y una extensa y bien organizada documentacin.
Pgina 49
Plataforma de experimentacin para prototipado de diseos mediante Arduino
Tabla 16 | Anlisis de Qt
Ventajas
Basado en C++
Gran calidad de la documentacin
Herramientas de desarrollo muy completas e integradas
Libreras para interfaces de usuario de gran calidad
Desventajas
Futuro algo incierto
Python es un lenguaje ideal tanto para realizar programas prototipo como para
programas finales, ya que aunque es interpretado, los ordenadores hoy en da son lo
suficientemente potentes como para poder con esta sobrecarga. La ventaja es que se
pueden probar trozos de cdigo directamente en la consola de ejecucin para su
prueba, pero con la desventaja de que los fallos de programacin no aparecen hasta
que el intrprete ejecuta la instruccin errnea, pudiendo pasarse por alto en las
revisiones de cdigo.
Pgina 50
Plataforma de experimentacin para prototipado de diseos mediante Arduino
Ventajas
Sencillez de desarrollo
Cantidad de libreras
Gran comunidad de usurarios
Desventajas
Librera para interfaces de usuario incluida muy antigua
Pgina 51
Plataforma de experimentacin para prototipado de diseos mediante Arduino
7. Descripcion de la solucion
adoptada
7.1. Descripcin de la placa de interfaz adoptada
En el proyecto utilizaremos la placa Arduino, por su alta disponibilidad y
cantidad de documentacin disponible. Es una placa con entradas y salidas digitales y
salidas de PWM, entradas analgicas, pudiendo conectarla a una gran cantidad de
perifricos como leds, sensores resistivos o de voltaje, servomotores, dimmers, etc.
Una de las principales ventajas es que el firmware del protocolo Firmata viene
ya implementado y probado, por lo que se puede centrar todo el esfuerzo en el
desarrollo de la parte de la interfaz de usuario.
Pgina 52
Plataforma de experimentacin para prototipado de diseos mediante Arduino
Para suplir las deficiencias de la librera estndar de Python se har uso de las
siguientes libreras adicionales:
Pgina 53
Plataforma de experimentacin para prototipado de diseos mediante Arduino
PyQwt: es una librera que aade elementos grficos cientficos tales como
grficas, sliders con medida, etc. Se basa en la librera Qwt desarrollada
para Qt.
Pgina 54
Plataforma de experimentacin para prototipado de diseos mediante Arduino
8. Desarrollo
8.1. Diseo general
Una vez ya conocidas las tecnologas a utilizar en el proyecto, conocemos
cuales van a ser las caractersticas y lmites que nos vamos a encontrar. El proyecto va
a constar de cuatro partes diferenciadas, las cuales son:
Pgina 55
Plataforma de experimentacin para prototipado de diseos mediante Arduino
8.2.1. Introduccin
ste protocolo soporta las placas Arduino tanto Uno, Duemilanove, Diecimila
como las Mega, aunque en el proyecto se ha decidido soportar la placa ms comn y
utilizada que es la Uno.
Pgina 56
Plataforma de experimentacin para prototipado de diseos mediante Arduino
Con las distribuciones del software de Arduino, se adjunta una copia del
firmware de Firmata para las placas Arduino, que implementa el protocolo y nos
permite realizar las siguientes acciones:
PWM
Control de servomotores
I2C
Durante la realizacin del protocolo, los creadores vieron que era similar al
existente MIDI, por lo que lo modificaron para hacerlo totalmente compatible con
este, que aunque no es directamente usable con controladores MIDI, puede coexistir
con MIDI sin problemas y ser tratado por intrpretes MIDI sin problemas, aunque
algunos datos de los mensajes son utilizados de forma diferente al estndar.
8.2.2.1. Mensajes
El protocolo est formado por mensajes, que consisten en una serie de 8 bits.
Cada mensaje tiene su funcin asignada. Algunos mensajes consisten en un solo byte,
mientras que otros pueden llegar a tener 2 3 bytes. Tambin existe un mensaje con
el que poder enviar un nmero ilimitado de bytes. Algo que todos los mensajes tienen
en comn es que el primer byte del mensaje es el de estado, que es especial ya que es
el nico que tiene el bit 7 activado, mientras que los siguientes bytes del mensaje no lo
tienen activado, de sta manera se puede detectar siempre el inicio de un mensaje. Se
Pgina 57
Plataforma de experimentacin para prototipado de diseos mediante Arduino
puede deducir entonces que los bytes de estado estn en el rango 0x800xFF, por lo
que el nmero de stos est limitado a 127 y el resto de los bytes del mensaje, los de
datos si es que existen, estarn en el rango 0x000x7F.
Pgina 58
Plataforma de experimentacin para prototipado de diseos mediante Arduino
Pgina 59
Plataforma de experimentacin para prototipado de diseos mediante Arduino
Bits de datos
Idle o
segundo byte
Trama
Mensaje
Pgina 60
Plataforma de experimentacin para prototipado de diseos mediante Arduino
Pgina 61
Plataforma de experimentacin para prototipado de diseos mediante Arduino
El quinto pin existente en las versiones de los conectores micro y mini puede
estar desconectado o referenciado a masa.
Pgina 62
Plataforma de experimentacin para prototipado de diseos mediante Arduino
Pgina 63
Plataforma de experimentacin para prototipado de diseos mediante Arduino
8.3.1. Introduccin
Pgina 64
Plataforma de experimentacin para prototipado de diseos mediante Arduino
Pgina 65
Plataforma de experimentacin para prototipado de diseos mediante Arduino
La aplicacin mandar por el cable USB las modificaciones de los valores que
realicemos y mostrar la informacin del estado de la placa de interfaz.
Pgina 66
Plataforma de experimentacin para prototipado de diseos mediante Arduino
Pgina 67
Plataforma de experimentacin para prototipado de diseos mediante Arduino
Estas lneas cargan los archivos .py existentes en la carpeta ui y dan acceso a las
clases que controlan la interfaz de usuario de cada mdulo.
De esta forma se inicializa la interfaz de usuario con los valores por defecto y
configuracin adecuada.
Para aadir o quitar mdulos slo hace falta hacer modificaciones en los dos
grupos de cdigo anteriores, por lo que es muy sencillo y rpido.
Las clases tienen que tener dos mtodos que se llamarn cuando se entre o se
salga de la pestaa a la que corresponde esa clase, de esta forma se pueden liberar
pines, iniciar la captura de datos, etc. de forma automtica al cambiar de pestaa y sin
tener que realizar continuamente transmisiones de datos para representar
informacin que se dibuja en una pestaa oculta.
self.tabs[self.lastIndex].exitTab()
Pgina 68
Plataforma de experimentacin para prototipado de diseos mediante Arduino
self.tabs[index].enterTab()
ports = list()
if POSIX:
ports += glob.glob("/dev/ttyACM*") +
glob.glob("/dev/ttyUSB*") + glob.glob("/dev/tty.usb*") +
glob.glob("/dev/tty.serial*")
for i in xrange(256):
try:
s = serial.Serial(i)
ports.append(s.portstr)
s.close()
except serial.SerialException:
pass
En Windows slo se miran uno a uno cada puerto serie del 1 al 256 si existen y
son accesibles y tambin en Linux y Mac, pero los puerto series virtuales a travs de
USB, se deben buscar en la ruta /dev.
Una vez se haya seleccionado un puerto serie, se crea un objeto que representa
el Arduino, y se comunica con el a travs del protocolo Firmata por el puerto serie.
Pgina 69
Plataforma de experimentacin para prototipado de diseos mediante Arduino
Una vez lista la llamada al ejecutable del programador con todos los
parmetros listos, se iniciaba la programacin.
self.program.start(command)
Otra parte muy problemtica fue la de encontrar la ruta de los archivos del
proyecto, ya que es una tarea relativamente sencilla si se ejecuta desde el cdigo
Pgina 70
Plataforma de experimentacin para prototipado de diseos mediante Arduino
entry = os.path.realpath(entry)
appdir = os.path.dirname(entry)
BOARDS = {
'arduino' : {
Pgina 71
Plataforma de experimentacin para prototipado de diseos mediante Arduino
self.it = util.Iterator(self.board)
self.it.start()
Una vez recibida una trama se proceder a comprobar si se trata de una trama
vlida. Para ello se comprobarn que las transmisiones que se estn recibiendo siguen
las especificaciones del protocolo que se han marcado.
byte = self.sp.read()
Pgina 72
Plataforma de experimentacin para prototipado de diseos mediante Arduino
if not byte:
return
data = ord(byte)
received_data = []
handler = None
if data < START_SYSEX:
try:
handler = self._command_handlers[data & 0xF0]
except KeyError:
return
received_data.append(data & 0x0F)
while len(received_data) < handler.bytes_needed:
received_data.append(ord(self.sp.read()))
elif data == START_SYSEX:
data = ord(self.sp.read())
handler = self._command_handlers.get(data)
if not handler:
return
data = ord(self.sp.read())
while data != END_SYSEX:
received_data.append(data)
data = ord(self.sp.read())
else:
try:
handler = self._command_handlers[data]
except KeyError:
return
while len(received_data) < handler.bytes_needed:
received_data.append(ord(self.sp.read()))
try:
handler(*received_data)
except ValueError:
pass
Se discrimina segn el tipo de dato que se haya recibido para ser procesado de
la forma que se debe hacer, una vez identificado el tipo de dato, y separado el
comando de los datos, se llama a la funcin que debe procesarlos pasndole una
referencia de los datos recibidos.
El envo de tramas se realiza de forma individual para cada caso, por ejemplo si
se desea cambiar el tiempo de muestreo de los pines analgicos se utiliza la siguiente
funcin para mandar los tiempos a la placa Arduino:
Pgina 73
Plataforma de experimentacin para prototipado de diseos mediante Arduino
En los casos en los que existe un comando para la accin a realizar, por
ejemplo, para cambiar el modo de funcionamiento de un pin, el cdigo sera algo
distinto:
command = chr(SET_PIN_MODE)
command += chr(self.pin_number)
command += chr(mode)
self.board.sp.write(command)
8.4.1. Introduccin
Pgina 74
Plataforma de experimentacin para prototipado de diseos mediante Arduino
Arduino toma informacin del entorno a travs de sus pines de entrada por los
que se puede conectar una gran variedad de sensores y puede interactuar con lo que
le rodea a travs de actuadores tales como luces, motores, etc.
Los proyectos hechos con Arduino pueden ejecutarse sin necesidad de estar
conectados a un ordenador, el cdigo es grabado en la memoria flash de la placa y su
ejecucin comienza automticamente al alimentar la placa.
Pgina 75
Plataforma de experimentacin para prototipado de diseos mediante Arduino
Ilustracin 28 | ATmega328P
Caracterstica Nombre
Microcontrolador ATmega328
Voltaje de funcionamiento 5V
Voltaje de entrada (recomendado) 7-12V
Pgina 76
Plataforma de experimentacin para prototipado de diseos mediante Arduino
La placa puede ser alimentada a travs de la conexin USB o con una fuente de
alimentacin externa. La fuente de la alimentacin es escogida automticamente
mediante la electrnica integrada en la placa, dando prioridad a la alimentacin
externa que probablemente tenga una capacidad mucho mayor a la del USB.
Pgina 77
Plataforma de experimentacin para prototipado de diseos mediante Arduino
ser usado tanto como entrada como salida de alimentacin, pero slo si se
est alimentando externamente.
5V: este pin est conectado a la salida del regulador de tensin que
transforma la tensin de Vin en 5V, tambin est conectado al pin de 5V del
conector USB. La mxima intensidad que se puede obtener de este pin es
de 500mA. En caso de alimentarlo por USB, en caso de alimentacin
externa es difcil de determinar ya que depende en gran medida de la
tensin de entrada, cuanto mayor sea la tensin, menor ser la intensidad
mxima que se pueda obtener.
El Atmega328 tiene 32KB de memoria flash, que permite una rpida descarga
del programa en el microcontrolador. De los 32KB, 0,5KB son utilizados por el
bootloader.
Tambin posee 2KB de memoria RAM esttica y 1KB de memoria EEPROM, que
a esta ltima no se le dar uso en el proyecto, aunque en el plan de ruta del protocolo
Firmata se usar para guardar el estado de la placa entre usos aunque esta haya sido
desconectada de la alimentacin.
Cada una de los 20 pines digitales del Arduino puede ser usado como entrada o
salida, usando las funciones adecuadas. Todos los pines funcionan a 5V, por lo que si
se les conecta a una tensin mayor puede que dejen de funcionar permanentemente.
Cada pin tiene una salida de intensidad de 40mA mximo y una resistencia de pull-up
integrada de unos 20-50 kOhms.
Pgina 78
Plataforma de experimentacin para prototipado de diseos mediante Arduino
Serie: 0 (RX) y 1 (TX). Se usan para recibir y transmitir datos serializados con
niveles TTL. Estos pines estn conectados al conversor USB-Serie para
comunicarse con el ordenador. En el proyecto se utilizar esta
comunicacin por lo que su uso como pines digitales no estar disponible.
Pgina 79
Plataforma de experimentacin para prototipado de diseos mediante Arduino
Pgina 80
Plataforma de experimentacin para prototipado de diseos mediante Arduino
Pgina 81
Plataforma de experimentacin para prototipado de diseos mediante Arduino
Pgina 82
Plataforma de experimentacin para prototipado de diseos mediante Arduino
Tiene dos botones principales, que son los que realizan la tarea de verificar el
cdigo escrito mediante la compilacin de ste y el segundo el de compilacin y carga
del cdigo en la placa Arduino a travs del puerto serie.
Tambin lleva integrado un simple monitor serie, con el que poder depurar el
cdigo mandando mensajes a travs del puerto serie, o directamente interactuar con
un programa que tenga su interfaz de usuario a travs de este protocolo.
Pgina 83
Plataforma de experimentacin para prototipado de diseos mediante Arduino
Lleva incluida una toolchain para los AVR basada en avr-gcc, que es compilador
que toma cdigo en lenguaje C/C++ de alto nivel o ensamblador y crea un archivo
binario que se pueda programar en un AVR. Tcnicamente avr-gcc es slo un
compilador, portado de GCC (GNU Compiler Collection) para la familia de AVR de
Atmel, pero las mayoras de referencias a avr-gcc se refieren a todo el toolchain.
Pgina 84
ANEXOS
DOCUMENTO N 2
Plataforma de experimentacin para prototipado de diseos mediante Arduino
Pgina 86
Plataforma de experimentacin para prototipado de diseos mediante Arduino
Pgina 87
Plataforma de experimentacin para prototipado de diseos mediante Arduino
ndice de ilustraciones
Ilustracin 35 | Nuevo hardware encontrado ................................................. 132
Pgina 88
Plataforma de experimentacin para prototipado de diseos mediante Arduino
Pgina 89
Plataforma de experimentacin para prototipado de diseos mediante Arduino
ndice de tablas
Tabla 20 | Asignacin de pines ......................................................................... 154
Pgina 90
Plataforma de experimentacin para prototipado de diseos mediante Arduino
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sip
sip.setapi('QString', 2)
if __name__ == "__main__":
logging.basicConfig(format="%(levelname)-8s %(asctime)s %(module)-
12s %(message)s", level=logging.DEBUG)
logger = logging.getLogger(__name__)
app = QtGui.QApplication(sys.argv)
app.setOrganizationName("Universidad de La Rioja")
app.setOrganizationDomain("unirioja.es")
app.setApplicationName("Platex")
main = MainWindow()
main.show()
sys.exit(app.exec_())
Pgina 91
Plataforma de experimentacin para prototipado de diseos mediante Arduino
"""
This module contains the class MainWindow.
"""
import logging
from PyQt4.QtGui import QMainWindow, QPushButton, QMenu, QActionGroup
from PyQt4.QtCore import QTimer, pyqtSlot
from pyfirmata import Arduino, util
logger = logging.getLogger(__name__)
QTimer.singleShot(0, self.selectPort)
Pgina 92
Plataforma de experimentacin para prototipado de diseos mediante Arduino
def selectPort(self):
dialog = SelectPortDlg(self)
dialog.exec_()
# If empty object is returned, we exit
self.board = dialog.getBoard()
if not self.board:
self.close()
else:
self.tabs = (ModeTab(self), DigitalTab(self),
AnalogTab(self), PWMTab(self), ServoTab(self), MotorTab(self),
SequencerTab(self))
self.tabs[0].enterTab()
self.it = util.Iterator(self.board)
self.it.start()
@pyqtSlot(int)
def on_tabWidget_currentChanged(self, index):
"""
Slot documentation goes here.
"""
self.tabs[self.lastIndex].exitTab()
self.tabs[index].enterTab()
self.lastIndex = index
Pgina 93
Plataforma de experimentacin para prototipado de diseos mediante Arduino
POSIX = False
if os.name == "posix":
import glob
POSIX = True
entry = os.path.realpath(entry)
appdir = os.path.dirname(entry)
logger = logging.getLogger(__name__)
class SelectPortDlg(QDialog):
Pgina 94
Plataforma de experimentacin para prototipado de diseos mediante Arduino
multiLbl.setBuddy(self.portsCmb)
self.stackedWidget = QStackedWidget()
mainWidget = QWidget()
mainLayout = QHBoxLayout()
mainLayout.addWidget(multiLbl)
mainLayout.addWidget(self.portsCmb)
mainWidget.setLayout(mainLayout)
self.stackedWidget.addWidget(mainWidget)
progWidget = QWidget()
progLayout = QHBoxLayout()
progLayout.addWidget(statusLbl)
progLayout.addStretch()
progWidget.setLayout(progLayout)
self.stackedWidget.addWidget(progWidget)
buttonLayout = QHBoxLayout()
buttonLayout.addWidget(self.connectBtn)
buttonLayout.addWidget(self.programBtn)
buttonLayout.addStretch()
buttonLayout.addWidget(exitBtn)
layout = QVBoxLayout()
layout.addWidget(self.stackedWidget)
layout.addLayout(buttonLayout)
self.setLayout(layout)
self.boards = list()
self.board = None
self.programBtn.clicked.connect(self.programBoard)
self.portsCmb.currentIndexChanged[int].connect(self.updatePorts)
self.connectBtn.clicked.connect(self.connectBoard)
exitBtn.clicked.connect(self.reject)
self.setWindowTitle(u"Iniciando comunicacin")
self.updatePorts(True)
@pyqtSlot()
def updatePorts(self, force=False):
# FIXME: Program button gets focus when opening QComboBox
if self.portsCmb.currentText() != "Actualizar" and not force:
return
logger.debug("Searching available serial ports")
self.connectBtn.setEnabled(False)
self.programBtn.setEnabled(False)
ports = list()
if POSIX:
Pgina 95
Plataforma de experimentacin para prototipado de diseos mediante Arduino
ports += glob.glob("/dev/ttyACM*") +
glob.glob("/dev/ttyUSB*") + glob.glob("/dev/tty.usb*") +
glob.glob("/dev/tty.serial*")
for i in xrange(256):
try:
s = serial.Serial(i)
ports.append(s.portstr)
s.close()
except serial.SerialException:
pass
logger.debug("Found %d serial port(s): %s", len(ports), ports)
if not len(ports):
ports = [""]
self.portsCmb.clear()
self.portsCmb.addItems(ports)
self.portsCmb.addItem("Actualizar")
if self.portsCmb.currentText() != "":
self.connectBtn.setEnabled(True)
self.programBtn.setEnabled(True)
self.connectBtn.setFocus()
@pyqtSlot()
def connectBoard(self):
try:
logger.debug("Connecting to Arduino board on port
"+self.portsCmb.currentText())
board = Board(self.portsCmb.currentText(),
BOARDS['arduino'])
except ValueError, e:
logger.warning(e)
QMessageBox.warning(self, u"!Atencin", unicode(e))
self.updatePorts(True)
except TypeError, e:
logger.debug(e)
QMessageBox.warning(self, u"!Atencin", unicode(e))
self.updatePorts(True)
except serial.serialutil.SerialException, e:
logger.warning(e)
QMessageBox.warning(self, u"!Atencin", unicode(e))
self.updatePorts(True)
else:
logger.debug("Using Arduino board on port
"+board.sp.portstr)
self.board = board
self.accept()
@pyqtSlot()
def programBoard(self):
if not os.path.exists(os.path.join(appdir, "avrdude",
"PlatexFirmata.hex")):
Pgina 96
Plataforma de experimentacin para prototipado de diseos mediante Arduino
@pyqtSlot()
def programFinished(self):
output = str(self.program.readAllStandardError())
if output.find("flash written") == -1: # avrdude: xxxx bytes
of flash written
if output.find("Expected signature") != -1: # avrdude:
Expected signature for ATMEGA328P is 1E 95 0F
error = u"La placa conectada no tiene un chip
compatible."
elif output.find("not in sync: resp=0x00") != -1: #
avrdude: stk500_getsync(): not in sync: resp=0x00
error = u"No parece que haya ninguna placa conectada
al puerto."
elif output.find("ser_send()") != -1: # ser_send(): write
error: sorry no info avail
error = u"Se produjo un error durante la comunicacin
con la placa.\nAsegrate de que est correctamente conectada."
elif output.find("ser_open()") != -1: # ser_open(): ....
error = u"El puerto no se pudo abrir.\nAsegrate de
que ningn programa lo est usando."
else:
error = u"Se produjo un error al programar la
placa.\nComprueba el conexionado."
logger.warning("avrdude output: "+output)
logger.warning("An error ocurred: "+error)
QMessageBox.warning(self, u"Atencin!", error)
Pgina 97
Plataforma de experimentacin para prototipado de diseos mediante Arduino
else:
logger.debug("Programmed successfully")
self.updatePorts(True)
self.connectBtn.setEnabled(True)
self.programBtn.setEnabled(True)
self.connectBtn.setFocus()
self.stackedWidget.setCurrentIndex(0)
def getBoard(self):
return self.board
Pgina 98
Plataforma de experimentacin para prototipado de diseos mediante Arduino
import logging
logger = logging.getLogger(__name__)
class ModeTab(object):
def enterTab(self):
logger.debug("Entering mode tab")
Pgina 99
Plataforma de experimentacin para prototipado de diseos mediante Arduino
def exitTab(self):
logger.debug("Exiting mode tab")
@pyqtSlot()
def clickNone(self):
self._changeMode(self.mw.sender(), 7)
@pyqtSlot()
def clickInput(self):
self._changeMode(self.mw.sender(), 0)
@pyqtSlot()
def clickOutput(self):
self._changeMode(self.mw.sender(), 1)
@pyqtSlot()
def clickPWM(self):
self._changeMode(self.mw.sender(), 3)
@pyqtSlot()
def clickAnalog(self):
self._changeMode(self.mw.sender(), 2)
Pgina 100
Plataforma de experimentacin para prototipado de diseos mediante Arduino
import logging
logger = logging.getLogger(__name__)
class DigitalTab(object):
def __init__(self, mwHandle):
self.mw = mwHandle
for x in self.mw.board.ports:
x.pinChanged.connect(self.updatePin)
@pyqtSlot(int, bool)
def updatePin(self, number, state):
logger.debug("Input pin "+str(number)+" changed its state to
"+str(state))
eval("self.mw.di%02d" % (number)).setChecked(state)
def enterTab(self):
logger.debug("Entering digital tab")
for x in xrange(2, 20):
digPin = eval("self.mw.d%02d" % (x))
digInPin = eval("self.mw.di%02d" % (x))
digPin.setVisible(False)
digInPin.setVisible(False)
mode = self.mw.board.pins[x].mode
if mode == 1:
digPin.clicked.connect(self.digPinClicked)
digPin.setVisible(True)
digPin.setChecked(self.mw.board.pins[x].read())
elif mode == 0:
digInPin.setVisible(True)
digInPin.setChecked(self.mw.board.pins[x].read())
self.mw.board.pins[x].enable_reporting()
def exitTab(self):
logger.debug("Exiting digital tab")
for x in xrange(2, 20):
self.mw.board.pins[x].disable_reporting()
@pyqtSlot()
def digPinClicked(self):
pin = self.mw.sender()
Pgina 101
Plataforma de experimentacin para prototipado de diseos mediante Arduino
number = int(pin.property("objectName").toString()[-2:])
if pin.isChecked():
self.mw.board.pins[number].write(1)
logger.debug("Changed output pin "+str(number)+" state to
True")
else:
self.mw.board.pins[number].write(0)
logger.debug("Changed output pin "+str(number)+" state to
False")
Pgina 102
Plataforma de experimentacin para prototipado de diseos mediante Arduino
import logging
from functools import partial
logger = logging.getLogger(__name__)
HISTORY = 60
class AnalogTab(object):
self.mw.analogPlot.setAutoReplot(False)
self.mw.analogPlot.plotLayout().setAlignCanvasToScales(True)
grid = QwtPlotGrid()
grid.enableXMin(True)
grid.enableYMin(True)
grid.attach(self.mw.analogPlot)
grid.setPen(QPen(Qt.black, 0, Qt.DotLine))
grid.setMinPen(QPen(Qt.lightGray, 0, Qt.DotLine))
self.mw.analogPlot.setAxisScale(QwtPlot.xBottom, 0, HISTORY)
self.mw.analogPlot.setAxisScale(QwtPlot.yLeft, 0, 5)
self.mw.analogUnits.currentIndexChanged.connect(self._changedUnits)
Pgina 103
Plataforma de experimentacin para prototipado de diseos mediante Arduino
self.mw.analogUnitsTime.currentIndexChanged.connect(self._changedUnitsTime)
self.mw.analogTime.valueChanged[int].connect(self._changedTime)
self.mw.analogPlot.replot()
@pyqtSlot(int, int)
def _newSample(self, channel, value):
if self.mw.analogUnits.currentIndex() is 0:
value = round(float(value*5) / 1023, 2)
self.data[channel] = self.data[channel][1:]
self.data[channel].append(value)
self.curves[channel].setData(range(0, HISTORY+1),
self.data[channel])
self._updatePlot(channel)
self.bars[channel]['bar'].setValue(round(self.data[channel][HISTORY], 1))
self.bars[channel]['label'].setText(str(round(self.data[channel][HISTORY],
1)))
else:
self.bars[channel]['bar'].setValue(int(self.data[channel][HISTORY]))
self.bars[channel]['label'].setText(str(int(self.data[channel][HISTORY])))
self.mw.analogPlot.replot()
def enterTab(self):
logger.debug("Entering analog tab")
self._changedTime(self.mw.analogTime.value())
for pin in self.mw.board.pins:
if pin.type is 2:
channel = pin.pin_number-14
if pin.mode is 2:
pin.enable_reporting()
Pgina 104
Plataforma de experimentacin para prototipado de diseos mediante Arduino
self.curves[channel].setVisible(self.bars[channel]['active'].isChecked())
self.bars[channel]['group'].setEnabled(True)
else:
self.curves[channel].setVisible(False)
self.bars[channel]['group'].setEnabled(False)
self.bars[channel]['bar'].setValue(0)
self.bars[channel]['label'].setText(str(0))
self.data[channel] = self._zeros(HISTORY+1)
self.curves[channel].setData(range(0, HISTORY+1),
self.data[channel])
self._updatePlot(channel)
def exitTab(self):
logger.debug("Exiting analog tab")
for pin in self.mw.board.pins:
if pin.type is 2 and pin.mode is 2:
channel = pin.pin_number-14
logger.debug("Disabled analog reporting of analog pin
"+str(channel))
pin.disable_reporting()
self.data[channel] = self._zeros(HISTORY+1)
self.mw.board.sampling_interval()
@pyqtSlot(int)
def _changedUnits(self, index):
if index is 0:
logger.debug("Changed analog units to volts")
self._resizeHistory(5.0/1024)
self.mw.analogPlot.setAxisScale(QwtPlot.yLeft, 0, 5)
self.mw.analogPlot.replot()
for bar in self.bars:
bar['bar'].setRange(0, 5)
else:
Pgina 105
Plataforma de experimentacin para prototipado de diseos mediante Arduino
@pyqtSlot(int, int)
def _channelVisible(self, channel, state):
self.curves[channel].setVisible(state)
self._updatePlot(channel)
@pyqtSlot(int)
def _changedUnitsTime(self, index):
value = self.mw.analogTime.value()
self.mw.analogTime.blockSignals(True)
if index is 0:
self.mw.analogTime.setRange(19, 16383)
self.mw.analogTime.setValue(value*1000)
else:
self.mw.analogTime.setRange(0, 16)
self.mw.analogTime.setValue(value/1000)
self.mw.analogTime.blockSignals(False)
@pyqtSlot(int)
def _changedTime(self, time):
if self.mw.analogUnitsTime.currentIndex() is 0:
self.mw.board.sampling_interval(time)
else:
self.mw.board.sampling_interval(time*1000)
Pgina 106
Plataforma de experimentacin para prototipado de diseos mediante Arduino
import logging
logger = logging.getLogger(__name__)
class PWMTab(object):
for x in self.mw.board.pins:
if x.PWM_CAPABLE:
slider = eval("self.mw.pwmBar%02d" % x.pin_number)
slider.valueChanged.connect(self.updatePwm)
self.sliders.append(slider)
self.mw.cbPwmUnit.currentIndexChanged.connect(self.changedUnits)
@pyqtSlot(int)
def updatePwm(self, value):
if self.mw.cbPwmUnit.currentIndex() is 0:
number =
int(self.mw.sender().property("objectName").toString()[-2:])
logger.debug("PWM value pin "+str(number)+" set to
"+str(int(value))+"%")
self.mw.board.pins[number].write(value/100)
else:
number =
int(self.mw.sender().property("objectName").toString()[-2:])
logger.debug("PWM value pin "+str(number)+" set to
"+str(int(value)))
self.mw.board.pins[number].write(round(value/1023, 2))
def enterTab(self):
logger.debug("Entering PWM tab")
for x in self.mw.board.pins:
if x.PWM_CAPABLE:
slider = eval("self.mw.pwmBar%02d" % x.pin_number)
slider.blockSignals(True)
eval("self.mw.gbPwm%02d" %
x.pin_number).setEnabled(x.mode is 3)
Pgina 107
Plataforma de experimentacin para prototipado de diseos mediante Arduino
slider.setValid(x.mode is 3)
slider.blockSignals(False)
def exitTab(self):
logger.debug("Exiting PWM tab")
@pyqtSlot(int)
def changedUnits(self, index):
if index is 0:
logger.debug("Changed PWM units to percentage")
for slider in self.sliders:
value = slider.value()
slider.blockSignals(True)
slider.setRange(0, 100, 1)
slider.blockSignals(False)
slider.setValue(round(value*100/1023))
else:
logger.debug("Changed PWM units to counts")
for slider in self.sliders:
value = slider.value()
slider.blockSignals(True)
slider.setRange(0, 1023, 1)
slider.blockSignals(False)
slider.setValue(round(value*1023/100))
Pgina 108
Plataforma de experimentacin para prototipado de diseos mediante Arduino
import logging
logger = logging.getLogger(__name__)
class ServoTab(object):
slider.valueChanged.connect(spinBox.setValue)
spinBox.valueChanged[int].connect(slider.setValue)
spinBox.valueChanged[int].connect(partial(self._updateServo, x))
eval("self.mw.servoCmb%d" %
x).currentIndexChanged[str].connect(partial(self._pinSelected, x))
eval("self.mw.servoCb%d" %
x).stateChanged[int].connect(partial(self._activated, x))
eval("self.mw.servoBut%d" %
x).clicked.connect(partial(self._zero, x-1))
self.mw.servoBut0.clicked.connect(self._allZero)
def enterTab(self):
logger.debug("Entering servo tab")
self._updateAvailable()
def exitTab(self):
logger.debug("Exiting servo tab")
@pyqtSlot(int)
def _zero(self, slider):
if self.sliders[slider].isValid():
self.sliders[slider].setValue(0)
Pgina 109
Plataforma de experimentacin para prototipado de diseos mediante Arduino
@pyqtSlot()
def _allZero(self):
for x in xrange(0, len(self.sliders)):
self._zero(x)
@pyqtSlot(int, int)
def _activated(self, group, status):
if status:
self._groupEnabled(group, True)
pin = int(eval("self.mw.servoCmb%d" %
group).currentText())
logger.debug("Pin "+str(pin)+" set to Servo mode")
self.selected[group-1] = pin
self.mw.board.pins[pin].mode = 4
else:
self._groupEnabled(group, False)
pin = self.selected[group-1]
logger.debug("Pin "+str(pin)+" restored to Output mode")
self.selected[group-1] = 0
self.mw.board.pins[pin].mode = 1
self.mw.board.pins[pin].write(0)
@pyqtSlot(str)
def _pinSelected(self, group, pin):
if pin:
try:
self.suitables.remove(int(pin))
eval("self.mw.servoCb%d" % group).setEnabled(True)
except ValueError:
pass
else:
eval("self.mw.servoBox%d" % group).blockSignals(True)
eval("self.mw.servoBar%d" % group).setValue(0)
eval("self.mw.servoBox%d" % group).blockSignals(False)
self._groupEnabled(group, False)
self._disableCheckBox(group)
self._updateAvailable()
def _updateAvailable(self):
Pgina 110
Plataforma de experimentacin para prototipado de diseos mediante Arduino
self.suitables = list()
@pyqtSlot(int, int)
def _updateServo(self, group, angle):
pin = int(eval("self.mw.servoCmb%d" % group).currentText())
Pgina 111
Plataforma de experimentacin para prototipado de diseos mediante Arduino
Pgina 112
Plataforma de experimentacin para prototipado de diseos mediante Arduino
import logging
logger = logging.getLogger(__name__)
class MotorTab(object):
def enterTab(self):
logger.debug("Entering motor tab")
self._updateAvailable()
for page in xrange(0, 3):
for section in ("A", "B"):
try:
pin1 = int(eval("self.mw.motorPwm%s%d" % (section,
page)).currentText())
pin2 = int(eval("self.mw.motorDir%s%d" % (section,
page)).currentText())
state = self.mw.board.pins[pin1].mode is 3 and
self.mw.board.pins[pin2].mode is 1
except ValueError:
Pgina 113
Plataforma de experimentacin para prototipado de diseos mediante Arduino
state = False
eval("self.mw.motorAct%s%d" % (section,
page)).setEnabled(state)
def exitTab(self):
logger.debug("Exiting motor tab")
@pyqtSlot(int)
def _zero(self, section, page):
if eval("self.mw.motorAct"+section+str(page)).isChecked():
eval("self.mw.motorPer"+section+str(page)).setValue(0)
@pyqtSlot()
def _allZero(self, page):
for section in ("A", "B"):
self._zero(section, page)
@pyqtSlot(str, str)
def _pinSelected(self, section, pin):
try:
pwm = eval("self.mw.motorPwm%s2" % section).currentText()
dir = eval("self.mw.motorDir%s2" % section).currentText()
eval("self.mw.servoCb%d" % group).setEnabled(True)
except ValueError:
pass
self._updateAvailable()
def _updateAvailable(self):
Pgina 114
Plataforma de experimentacin para prototipado de diseos mediante Arduino
self.suitableDir = list()
self.suitablePwm = list()
Pgina 115
Plataforma de experimentacin para prototipado de diseos mediante Arduino
@pyqtSlot(int)
def _changedPage(self, page):
eval("self.mw.motorBut%d" % page).setChecked(True)
for x in [y for y in range(0,3) if y is not page]:
eval("self.mw.motorBut%d" % x).setChecked(False)
for section in ("A", "B"):
if eval("self.mw.motorAct%s%d" % (section,
x)).isChecked():
eval("self.mw.motorAct%s%d" % (section,
x)).setChecked(False)
self._activated(section, page, False)
self._updateAvailable()
Pgina 116
Plataforma de experimentacin para prototipado de diseos mediante Arduino
POSIX = False
if os.name == "posix":
import glob
POSIX = True
entry = os.path.realpath(entry)
appdir = os.path.dirname(entry)
logger = logging.getLogger(__name__)
class SelectPortDlg(QDialog):
Pgina 117
Plataforma de experimentacin para prototipado de diseos mediante Arduino
self.stackedWidget = QStackedWidget()
mainWidget = QWidget()
mainLayout = QHBoxLayout()
mainLayout.addWidget(multiLbl)
mainLayout.addWidget(self.portsCmb)
mainWidget.setLayout(mainLayout)
self.stackedWidget.addWidget(mainWidget)
progWidget = QWidget()
progLayout = QHBoxLayout()
progLayout.addWidget(statusLbl)
progLayout.addStretch()
progWidget.setLayout(progLayout)
self.stackedWidget.addWidget(progWidget)
buttonLayout = QHBoxLayout()
buttonLayout.addWidget(self.connectBtn)
buttonLayout.addWidget(self.programBtn)
buttonLayout.addStretch()
buttonLayout.addWidget(exitBtn)
layout = QVBoxLayout()
layout.addWidget(self.stackedWidget)
layout.addLayout(buttonLayout)
self.setLayout(layout)
self.boards = list()
self.board = None
self.programBtn.clicked.connect(self.programBoard)
self.portsCmb.currentIndexChanged[int].connect(self.updatePorts)
self.connectBtn.clicked.connect(self.connectBoard)
exitBtn.clicked.connect(self.reject)
self.setWindowTitle(u"Iniciando comunicacin")
self.updatePorts(True)
@pyqtSlot()
def updatePorts(self, force=False):
# FIXME: Program button gets focus when opening QComboBox
if self.portsCmb.currentText() != "Actualizar" and not force:
return
logger.debug("Searching available serial ports")
self.connectBtn.setEnabled(False)
self.programBtn.setEnabled(False)
ports = list()
if POSIX:
ports += glob.glob("/dev/ttyACM*") +
glob.glob("/dev/ttyUSB*") + glob.glob("/dev/tty.usb*") +
glob.glob("/dev/tty.serial*")
Pgina 118
Plataforma de experimentacin para prototipado de diseos mediante Arduino
for i in xrange(256):
try:
s = serial.Serial(i)
ports.append(s.portstr)
s.close()
except serial.SerialException:
pass
logger.debug("Found %d serial port(s): %s", len(ports), ports)
if not len(ports):
ports = [""]
self.portsCmb.clear()
self.portsCmb.addItems(ports)
self.portsCmb.addItem("Actualizar")
if self.portsCmb.currentText() != "":
self.connectBtn.setEnabled(True)
self.programBtn.setEnabled(True)
self.connectBtn.setFocus()
@pyqtSlot()
def connectBoard(self):
try:
logger.debug("Connecting to Arduino board on port
"+self.portsCmb.currentText())
board = Board(self.portsCmb.currentText(),
BOARDS['arduino'])
except ValueError, e:
logger.warning(e)
QMessageBox.warning(self, u"!Atencin", unicode(e))
self.updatePorts(True)
except TypeError, e:
logger.debug(e)
QMessageBox.warning(self, u"!Atencin", unicode(e))
self.updatePorts(True)
except serial.serialutil.SerialException, e:
logger.warning(e)
QMessageBox.warning(self, u"!Atencin", unicode(e))
self.updatePorts(True)
else:
logger.debug("Using Arduino board on port
"+board.sp.portstr)
self.board = board
self.accept()
@pyqtSlot()
def programBoard(self):
if not os.path.exists(os.path.join(appdir, "avrdude",
"PlatexFirmata.hex")):
logger.error("Hexadecimal file not found")
QMessageBox.warning(self, u"Atencin!", u"No se pudo
encontrar el fichero a programar")
Pgina 119
Plataforma de experimentacin para prototipado de diseos mediante Arduino
return
self.programBtn.setEnabled(False)
self.connectBtn.setEnabled(False)
self.stackedWidget.setCurrentIndex(1)
logger.debug("Programming Arduino board on
"+self.portsCmb.currentText())
executable = os.path.join(appdir, "avrdude", "avrdude")
configuration = os.path.join(appdir, "avrdude",
"avrdude.conf")
hexadecimal = os.path.join(appdir, "avrdude",
"PlatexFirmata.hex")
self.program = QProcess()
# avrdude reference:
http://www.ladyada.net/learn/avr/avrdude.html
command = "\""+executable+"\" -q -V -C \""+configuration+"\" -
p atmega328p -c arduino -P "+self.portsCmb.currentText()+" -b 57600 -D -U
flash:w:\""+hexadecimal+"\":i"
logger.debug("avrdude call: "+command)
self.program.start(command)
self.program.finished.connect(self.programFinished)
@pyqtSlot()
def programFinished(self):
output = str(self.program.readAllStandardError())
if output.find("flash written") == -1: # avrdude: xxxx bytes
of flash written
if output.find("Expected signature") != -1: # avrdude:
Expected signature for ATMEGA328P is 1E 95 0F
error = u"La placa conectada no tiene un chip
compatible."
elif output.find("not in sync: resp=0x00") != -1: #
avrdude: stk500_getsync(): not in sync: resp=0x00
error = u"No parece que haya ninguna placa conectada
al puerto."
elif output.find("ser_send()") != -1: # ser_send(): write
error: sorry no info avail
error = u"Se produjo un error durante la comunicacin
con la placa.\nAsegrate de que est correctamente conectada."
elif output.find("ser_open()") != -1: # ser_open(): ....
error = u"El puerto no se pudo abrir.\nAsegrate de
que ningn programa lo est usando."
else:
error = u"Se produjo un error al programar la
placa.\nComprueba el conexionado."
logger.warning("avrdude output: "+output)
logger.warning("An error ocurred: "+error)
QMessageBox.warning(self, u"Atencin!", error)
else:
logger.debug("Programmed successfully")
self.updatePorts(True)
Pgina 120
Plataforma de experimentacin para prototipado de diseos mediante Arduino
self.connectBtn.setEnabled(True)
self.programBtn.setEnabled(True)
self.connectBtn.setFocus()
self.stackedWidget.setCurrentIndex(0)
def getBoard(self):
return self.board
Pgina 121
Plataforma de experimentacin para prototipado de diseos mediante Arduino
# http://cx_freeze.readthedocs.org/en/latest/distutils.html#distutils
import sys, os
from cx_Freeze import setup, Executable
base = None
targetName = "platex"
includes = []
if sys.platform == "win32":
base = "Win32GUI"
targetName = "platex.exe"
includes.extend(['numpy.core.multiarray', 'serial.win32'])
include_files = ['avrdude/']
Pgina 122
Plataforma de experimentacin para prototipado de diseos mediante Arduino
#!/bin/bash
asterisks ()
{
echo "*********************************************"
}
header ()
{
echo
asterisks
echo "$1"
asterisks
echo
}
remove()
{
if [ -d $1 ]; then
rm -rf $1
fi
}
create()
{
if [ ! -d $1 ]; then
mkdir -p $1
fi
}
remove_and_create()
{
remove $1
create $1
}
copy()
{
echo "COPYING [$1] TO [$2]"
cp $1 $2
}
PYQWT=5.2.0
ARDUINO=1.0
PROJECT=Platex
Pgina 123
Plataforma de experimentacin para prototipado de diseos mediante Arduino
CXFREEZE=4.2.3
#######
header \
"DO NOT RUN THIS SCRIPT ON A PRODUCTION COMPUTER
IT MAY END UP BREAKING THINGS
#######
header "Creating build folder"
#######
remove_and_create build
cd build
#######
header "Installing libraries available in repositories"
#######
apt-get update
apt-get -y install git avrdude python-qt4 pyqt4-dev-tools python-pip
qt4-qmake g++ libqt4-dev python-sip-dev python-qt4-dev arduino-core alien rpm
pip install pyserial --upgrade
#######
header "Installing cx_Freeze $CXFREEZE"
#######
#######
header "Installing PyQwt $PYQWT"
#######
wget --trust-server-name
http://prdownloads.sourceforge.net/pyqwt/PyQwt-$PYQWT.tar.gz || exit 1
tar -zxvf PyQwt-$PYQWT.tar.gz
Pgina 124
Plataforma de experimentacin para prototipado de diseos mediante Arduino
pushd PyQwt-$PYQWT/configure
python configure.py -Q ../qwt-5.2 --qt4 --disable-numarray --
disable-numeric --disable-numpy
make
make install
popd
#######
header "Downloading Arduino IDE $ARDUINO"
#######
wget http://arduino.googlecode.com/files/arduino-$ARDUINO-linux.tgz ||
exit 1
tar -zxvf arduino-$ARDUINO-linux.tgz
#######
header "Downloading and compiling $PROJECT source code"
#######
pushd firmware
pushd ${PROJECT}Firmata
make -f Makefile-linux
mv applet/${PROJECT}Firmata.hex ../../avrdude/
popd
popd
popd
#######
header "Creating distribution files"
#######
pushd $PROJECT
python setup.py bdist_rpm
pushd dist
alien -d $PROJECT-*.i386.rpm
popd
popd
#######
header "Cleaning workspace"
#######
Pgina 125
Plataforma de experimentacin para prototipado de diseos mediante Arduino
mv $PROJECT/dist ../$PROJECT-dist
cd ..
remove build
rm "$0"
#######
header "Done!"
#######
Pgina 126
Plataforma de experimentacin para prototipado de diseos mediante Arduino
#!/bin/bash
asterisks ()
{
echo "*********************************************"
}
header ()
{
echo
asterisks
echo "$1"
asterisks
echo
}
remove()
{
if [ -d $1 ]; then
rm -rfv $1
fi
}
create()
{
if [ ! -d $1 ]; then
mkdir -p $1
fi
}
remove_and_create()
{
remove $1
create $1
}
copy()
{
echo "COPYING [$1] TO [$2]"
cp $1 $2
}
PROJECT=Platex
GCC=10.7-v2
GIT=1.7.8.3
Pgina 127
Plataforma de experimentacin para prototipado de diseos mediante Arduino
PYTHON=2.7.2
QT=4.7.4
SIP=4.13.2
PYQT=4.9.1
PYQWT=5.2.0
AVRDUDE=5.11.1
ARDUINO=1.0
CXFREEZE=4.2.3
#######
header \
"DO NOT RUN THIS SCRIPT ON A PRODUCTION COMPUTER
IT MAY END UP BREAKING THINGS
#######
header "Creating build folder"
#######
remove_and_create build
cd build
#######
header "Installing GCC $GCC"
#######
#######
header "Installing Git $GIT"
#######
#######
header "Installing Python $PYTHON"
#######
Pgina 128
Plataforma de experimentacin para prototipado de diseos mediante Arduino
#######
header "Installing Qt $QT"
#######
#######
header "Installing SIP $SIP"
#######
#######
header "Installing PyQt $PYQT"
#######
#######
header "Installing PyQwt $PYQWT"
#######
Pgina 129
Plataforma de experimentacin para prototipado de diseos mediante Arduino
#######
header "Installing pySerial"
#######
easy_install pip
pip install pyserial
#######
header "Installing cx_Freeze $CXFREEZE"
#######
#######
header "Installing avrdude $AVRDUDE"
#######
#######
header "Downloading Arduino IDE $ARDUINO"
#######
Pgina 130
Plataforma de experimentacin para prototipado de diseos mediante Arduino
#######
header "Downloading and compiling $PROJECT source code"
#######
pushd firmware
pushd ${PROJECT}Firmata
make -f Makefile-mac
mv applet/${PROJECT}Firmata.hex ../../avrdude/
popd
popd
popd
#######
header "Creating distribution files"
#######
pushd $PROJECT
python setup.py bdist_dmg
popd
#######
header "Cleaning workspace"
#######
mv $PROJECT/dist ../$PROJECT-dist
cd ..
remove build
rm "$0"
#######
header "Done!"
#######
Pgina 131
Plataforma de experimentacin para prototipado de diseos mediante Arduino
Pgina 132
Plataforma de experimentacin para prototipado de diseos mediante Arduino
Pgina 133
Plataforma de experimentacin para prototipado de diseos mediante Arduino
Pgina 134
Plataforma de experimentacin para prototipado de diseos mediante Arduino
Pgina 135
Plataforma de experimentacin para prototipado de diseos mediante Arduino
Pgina 136
Plataforma de experimentacin para prototipado de diseos mediante Arduino
El instalador posee los ficheros del proyecto, las libreras de las que ste hace
uso y el intrprete de Python sobre el que se haya creado el instalador, por lo que para
el usuario, no tiene diferencia alguna la instalacin de este software a otros muchos de
los que hayan pasado por sus manos, dejando todo listo para su uso y sin requisitos
previos de software algunos.
Al abrir el instalador, tras configurarse, nos mostrar la ruta por defecto para la
instalacin. Se aconseja dejar esta ruta por defecto. La instalacin requiere de
permisos de administrador, para realizar las modificaciones necesarias al sistema.
Pgina 137
Plataforma de experimentacin para prototipado de diseos mediante Arduino
Pgina 138
Plataforma de experimentacin para prototipado de diseos mediante Arduino
Pgina 139
Plataforma de experimentacin para prototipado de diseos mediante Arduino
Si al ejecutar el programa nos aparece una ventana de error, que nos avisa de
que ha sido imposible abrir el puerto serie, significa que no tenemos los permisos
suficientes par ello, por lo que deberemos aadir nuestro usuario al grupo adecuado
para poder realizar esta operacin.
Pgina 140
Plataforma de experimentacin para prototipado de diseos mediante Arduino
Donde USUARIO es el nombre del usuario con el que se haya iniciado sesin en
el sistema. Para que se hagan efectivos los cambios, se deber cerrar la sesin y volver
a entrar.
11.1.3. Mac OS X
Como solucin para correr el software bajo este sistema operativo, se deber
realizar con la ayuda del script de compilacin del proyecto para Mac, que aunque est
preparado para no interferir con el normal funcionamiento del ordenador en su uso
diario, no es recomendable realizarlo sin conocimiento del funcionamiento. La gua
para la utilizacin de este script viene adjuntada en el siguiente anexo.
Pgina 141
Plataforma de experimentacin para prototipado de diseos mediante Arduino
Pgina 142
Plataforma de experimentacin para prototipado de diseos mediante Arduino
Configuracin
Digital
Analgico
PWM
Servo
Motores
Secuenciador
Pgina 143
Plataforma de experimentacin para prototipado de diseos mediante Arduino
11.3.1. Configuracin
Output: el pin se utilizar como salida con niveles lgicos (1 0). Bajo este
modo se podr hacer tambin control de servomotores de radiocontrol.
Pgina 144
Plataforma de experimentacin para prototipado de diseos mediante Arduino
PWM: el pin se utilizar como salida de ancho de pulso modulado, til para
reguladores, dimmers y otros elementos que necesiten una forma de
control ms precisa que el todo o nada de la lgica digital.
Los pines analgicos tambin pueden ser usados tanto como entradas como salidas
digitales, por lo que se ha dado la opcin de configurarlos como tales en el software.
Pgina 145
Plataforma de experimentacin para prototipado de diseos mediante Arduino
Los pines 0 y 1 no estn disponibles para su uso ya que se utilizan para realizar
la comunicacin entre el software y la propia placa, son los encargados de realizar la
comunicacin por el puerto serie.
11.3.2. Digital
Las entradas vienen designadas por un crculo verde oscuro encima del pin,
intentando asemejarse a un led verde, y de color ms claro al detectar un nivel alto en
l.
Pgina 146
Plataforma de experimentacin para prototipado de diseos mediante Arduino
un amarillo dorado cuando se haya activado. Para cambiar de estado la salida slo hay
que pinchar con el ratn encima de l.
11.3.3. Analgico
Pgina 147
Plataforma de experimentacin para prototipado de diseos mediante Arduino
Pgina 148
Plataforma de experimentacin para prototipado de diseos mediante Arduino
Hay que tener en cuenta que el voltaje se muestra mediante una simple regla
de 3 desde el valor en cuentas, es decir, de 0 a 1023 se convierte de 0 a 5V. Esto
tcnica de conversin, aunque sencilla, tiene un problema, ya que las cuentas son el
valor del voltaje con respecto a la tensin de alimentacin, por lo que una lectura de
1023, no es la misma a 3V que a 5V, representando 3V y 5V respectivamente. En el
software se ha supuesto que se utiliza el Arduino tal y como es recomendado, a 5V,
aunque pueden existir pequeas desviaciones de la tensin del orden de unos pocos
cientos de milivoltios, que se suman a los errores de conversin de los ADC del
Arduino.
11.3.4. PWM
Con este mdulo podremos sacar una seal de PWM en los pines que tengan
capacidad para ello, los cuales tienen el texto PWM junto a ellos en el mdulo de
configuracin.
Pgina 149
Plataforma de experimentacin para prototipado de diseos mediante Arduino
11.3.5. Servo
Pgina 150
Plataforma de experimentacin para prototipado de diseos mediante Arduino
Pgina 151
Plataforma de experimentacin para prototipado de diseos mediante Arduino
En la lista podremos seleccionar uno de los pines que estn configurados como
entradas (Input) y al seleccionar Activar se configurar en modo servo, por lo que
estar listo para controlar dichos motores.
El ngulo de giro de los servos puede ser controlado tanto con la barra
deslizadora como introduciendo manualmente el valor en grados en la caja numrica.
Se han incluido botones para devolver al origen los motores tanto individualmente
como de forma general a todos ellos.
Si se desea volver a utilizar ese pin para otras funciones, se deber desmarcar la
casilla de Activar, volviendo a configurarse el pin como entrada, listo para poder ser
usado en otros mdulos.
11.3.6. Motores
Pgina 152
Plataforma de experimentacin para prototipado de diseos mediante Arduino
Pgina 153
Plataforma de experimentacin para prototipado de diseos mediante Arduino
Direccin 12 13 12 13
Velocidad 10 11 3 11
11.3.7. Secuenciador
Pgina 154
Plataforma de experimentacin para prototipado de diseos mediante Arduino
Se han incluido en este mdulo, seis salidas digitales, tres pines para controlar
servos y 3 salidas de PWM. Los pines a los que estn asignados cada funcin son fijos y
no modificables, estando indicados por el nmero encima de cada control. Los
controles solo estarn activos si el pin al que estn asignados est configurado de
forma que sea compatible con la funcin que desempean en este mdulo.
Pgina 155
Plataforma de experimentacin para prototipado de diseos mediante Arduino
La primera caja numrica controla los pasos del secuenciador, los cambios que
se realicen en los controles se aplicarn al paso que aparezca en esta caja. Al cambiar
el nmero de paso se guardaran los valores de los controles y se cargarn los del paso
que se haya elegido. Por defecto se inicia con un solo paso y se podrn aadir ms
como se explica ms adelante.
Los botones con los smbolos + y sirven para aadir un paso a continuacin
del actual o para eliminar el paso actual, respectivamente.
Pgina 156
Plataforma de experimentacin para prototipado de diseos mediante Arduino
12.1. Windows
Debido al bajo nmero de herramientas de automatizacin de tareas existentes
o su alta dificultad de uso o poca difusin, se ha optado por realizar una parte de ella
manualmente.
La primera tarea a realizar ser instalar una versin del intrprete de Python, el
proyecto se ha desarrollado usando la versin 2.7.2, por lo que es la que se
recomienda instalar, tambin hay una alta probabilidad de que sea compatible con las
siguientes revisiones de esta versin, tales como 2.7.3 (que ya est lanzada y es
compatible), la futura 2.7.4, etc. mientras que la subversin siga siendo la 2.7. Como
tambin se deben instalar otras libreras necesarias para el proyecto y existe un
instalador de Python enfocado desarrollo por cientficos e ingenieros con una gran
cantidad de libreras numricas y anlisis y visualizacin de datos llamada Python(x,y),
se recomienda el uso de esta, ya que contiene todas las libreras que se necesitarn y
permite instalarlas de una manera sencilla y cmoda, evitando as realizar compilacin
Pgina 157
Plataforma de experimentacin para prototipado de diseos mediante Arduino
alguna. Para ello se realizar la descarga del paquete de instalacin desde la seccin de
descargas de su pgina web.
Python 2.7.X
Python
o PyQt
o PyQwt
o PySerial
> mkpyqt.py -b -r
Se deber crear una carpeta nueva llamada avrdude, donde se copiarn los
ficheros avrdude.exe y avrdude.conf, existentes en la descarga de Arduino que hemos
descargado anteriormente. Para aumentar la fiabilidad del programador (avrdude) en
Pgina 158
Plataforma de experimentacin para prototipado de diseos mediante Arduino
todos los ordenadores y hacerlo compatible con Windows XP, se deber aadir
tambin el fichero libusb0.dll, tambin existente en la descarga de Arduino.
Pgina 159
Plataforma de experimentacin para prototipado de diseos mediante Arduino
Una vez finalizado el proceso, dentro de la carpeta del cdigo fuente, aparecer
una nueva carpeta llamada dist, donde estar el instalador con extensin .msi listo
para usar y distribuir.
12.2. Linux
La creacin del instalador en Linux est totalmente automatizada, por lo que
para iniciar la creacin del instalador slo es necesario ejecutar la siguiente lnea en
una terminal:
Pgina 160
Plataforma de experimentacin para prototipado de diseos mediante Arduino
Pgina 161
Plataforma de experimentacin para prototipado de diseos mediante Arduino
12.3. Mac OS
El script para crear el instalador en Mac OS es muy similar al de Linux, debido a
su similar naturaleza, aunque como es lgico difiere bastante en algunos puntos.
Pgina 162
Plataforma de experimentacin para prototipado de diseos mediante Arduino
Pgina 163
Plataforma de experimentacin para prototipado de diseos mediante Arduino
problema funcione de manera correcta. Aunque el script falle en ese punto se podr
ejecutar el programa, ya que todas las libreras estn ya instaladas, para ello y para
ejecutar el programa desde la lnea de comandos, habr que ejecutar la siguiente lnea
dentro de la carpeta build/Platex que existir en la carpeta donde ejecutaste el
script:
$
/Library/Frameworks/Python.framework/Versions/Current/bin/python
platex.pyw
Pgina 164
PLIEGO DE CONDICIONES
DOCUMENTO N 3
Plataforma de experimentacin para prototipado de diseos mediante Arduino
Pgina 166
Plataforma de experimentacin para prototipado de diseos mediante Arduino
Pgina 167
Plataforma de experimentacin para prototipado de diseos mediante Arduino
ndice de ilustraciones
Ilustracin 69 | Localizacin del ejemplo Blink ................................................ 175
Pgina 168
Plataforma de experimentacin para prototipado de diseos mediante Arduino
Todas las modificaciones de las que pueda ser susceptible el proyecto, debern
ser aprobadas por el ingeniero o proyectista.
Pgina 169
Plataforma de experimentacin para prototipado de diseos mediante Arduino
Pgina 170
Plataforma de experimentacin para prototipado de diseos mediante Arduino
Pgina 171
Plataforma de experimentacin para prototipado de diseos mediante Arduino
Una vez realizado el montaje, su utilizacin podr ser realizada por cualquier
persona con conocimientos suficientes demostrables sobre el proyecto, la tecnologa
Pgina 172
Plataforma de experimentacin para prototipado de diseos mediante Arduino
Pgina 173
Plataforma de experimentacin para prototipado de diseos mediante Arduino
Las placas disponen de un LED de color verde el cual se ilumina cuando la placa
est siendo alimentada correctamente. Si este LED se desvanece lentamente al realizar
alguna conexin es el principal indicativo de que se est produciendo un cortocircuito
y el limitador de corriente est realizando su trabajo.
Se har uso del programa de ejemplo denominado Blink que hace parpadear
intermitentemente cada segundo el LED que la placa de interfaz tiene conectada al pin
13, que se puede identificar en la placa por estar marcado con una L. Este ejemplo es
el ms simple de todos, ideal para asegurar que si se produce algn fallo sea de
hardware y no est siendo enmascarado por un fallo de software.
Pgina 174
Plataforma de experimentacin para prototipado de diseos mediante Arduino
Ilustracin 70 | Led L
Pgina 175
Plataforma de experimentacin para prototipado de diseos mediante Arduino
17.4. Conservacin
Si para el montaje y puesta en marcha de los equipos y materiales que
componen la placa de interfaz se siguen todas las indicaciones, recomendaciones y se
cumplen las especificaciones que se dan en el pliego de condiciones, anexos y
memoria, la vida til de los elementos estar supeditada a aquella que de el fabricante
siguiendo sus recomendaciones de mantenimiento.
Pgina 176
Plataforma de experimentacin para prototipado de diseos mediante Arduino
Estos materiales deben cumplir las especificaciones citadas para cada uno de
ellos. Si son reemplazados por unos nuevos, estos deben tener las mismas
caractersticas que los que reemplazan, inhibindose de cualquier responsabilidad por
fallo si estos requisitos no son cumplidos.
Pgina 177
Plataforma de experimentacin para prototipado de diseos mediante Arduino
Eric 4 IDE
Paint .NET
TinyGrab
IDE de Arduino
Intrprete de Python
VMware Workstation 8
Pgina 178
Plataforma de experimentacin para prototipado de diseos mediante Arduino
Pgina 179
Plataforma de experimentacin para prototipado de diseos mediante Arduino
19.3. Liquidacin
Terminada la elaboracin del proyecto se proceder a la liquidacin final en la
que se incluye el importe de las unidades de realizacin, as como las posibles
modificaciones del proyecto que hayan sido aprobadas por la direccin tcnica.
Pgina 180
Plataforma de experimentacin para prototipado de diseos mediante Arduino
Pgina 181
PLANOS
DOCUMENTO N 4
Plataforma de experimentacin para prototipado de diseos mediante Arduino
Pgina 183
PRESUPUESTO
DOCUMENTO N 5
Plataforma de experimentacin para prototipado de diseos mediante Arduino
Pgina 185
Plataforma de experimentacin para prototipado de diseos mediante Arduino
ndice de tablas
Tabla 21 | Presupuesto de hardware del sistema ............................................ 187
Pgina 186
Plataforma de experimentacin para prototipado de diseos mediante Arduino
Pgina 187
Plataforma de experimentacin para prototipado de diseos mediante Arduino
21.1.3. Alimentacin
Tabla 23 | Presupuesto de alimentacin
Pgina 188
Plataforma de experimentacin para prototipado de diseos mediante Arduino
Subtotal 1 524,56
Pgina 189
Plataforma de experimentacin para prototipado de diseos mediante Arduino
Windows 7 Home
1 87,95 87,95
Premium
Mac OS X Lion 1 59 59
Subtotal 2 1.023,63
Pgina 190
Plataforma de experimentacin para prototipado de diseos mediante Arduino
Montaje y puesta en
20 30 600
marcha
Documentacin 40 15 e 600
Subtotal 3 9.550
Pgina 191
Plataforma de experimentacin para prototipado de diseos mediante Arduino
Subtotal 1 524,56
Subtotal 2 1.023,63
Subtotal 3 9.550
Total 11.098,19
Pgina 192
Plataforma de experimentacin para prototipado de diseos mediante Arduino
Pgina 193
BIBLIOGRAFA
DOCUMENTO N 6
Plataforma de experimentacin para prototipado de diseos mediante Arduino
ndice de la bibliografa
ndice de la bibliografa..................................................................................... 195
Pgina 195
Plataforma de experimentacin para prototipado de diseos mediante Arduino
http://firmata.org/wiki/Protocol
Limitaciones de diseo:
http://firmata.org/wiki/Design_Issues
Protocolo Midi:
https://ccrma.stanford.edu/~craig/articles/linuxmidi/misc/essenmidi.html
http://es.wikipedia.org/wiki/MIDI
http://arduino.cc/en/Reference/HomePage
Guas de C++
http://www.cplusplus.com/
24.2. Python
Rapid GUI Programming with Python and Qt, Mark Summerfield,
Prentice Hall, 2007.
Documentacin de Python:
Pgina 196
Plataforma de experimentacin para prototipado de diseos mediante Arduino
http://docs.python.org/
Documentacin de Qt:
http://doc.qt.nokia.com/4.7/index.html
http://www.atmel.com/devices/atmega328p.aspx?tab=documents
Pgina de Arduino:
http://arduino.cc
26. Distribuidores
Tienda de componentes informticos:
http://www.pccomponentes.com
http://www.mouser.com
http://es.rs-online.com/web/
Pgina 197